Repository navigation
Commit 2d5ad6e
refactor(actions): type consolidated MCP tools (#3398)
* feat(inventory): add typed MCP tool registration foundation
Use the MCP SDK's generic registration for concrete input/output types, with protocol-gated output schemas and structured results. Keep raw handlers compatible and apply shared middleware on both paths.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* chore: regenerate license files
Auto-generated by license-check workflow
* test: cover legacy typed CSV results
Exercise the typed array and object paths through an initialized 2025-11-25 MCP session. Verify CSV text is returned once without structured output or the SDK JSON fallback.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* feat(inventory): normalize legacy typed arguments
Add a raw JSON input normalizer that runs before SDK schema validation so migrated tools can retain legacy input coercions without widening their published schemas. Test case-folded issue states, numeric string IDs, validation failures and replacement registrations.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* chore: regenerate license files
Auto-generated by license-check workflow
* test(inventory): preserve typed input optionality
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(inventory): stabilize typed schema compatibility
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* test(inventory): cover protocol isolation across clients
Exercise simultaneous legacy and modern sessions against one typed tool, plus stateless HTTP requests with modern, legacy, and absent protocol headers.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(inventory): harden typed schema registration contracts
Cache immutable schema variants and enum overrides, preserve runtime input compatibility and request-era output behavior, and normalize dynamic scope challenges before dispatch.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(inventory): cache warm schemas and guard typed preflight
Avoid repeated canonical schema serialization and header annotation for cache-owned immutable pointers while retaining content-based lookup for caller-owned schemas. Run typed authorization and availability middleware before preflight and preserve tool-result error semantics.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(inventory): preserve schema metadata isolation
Advertise the SDK-compatible object schema for typed any input and deep-clone mutable JSON Schema metadata before caching or deriving runtime variants. Add legacy/modern registration and mutation isolation coverage.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(inventory): detach numeric schema bounds and dedupe default traversal
Two Copilot findings on 431b7a2:
- CloneSchemas only deep-copies subschema nodes, so pointer-valued
numeric validation keywords (Minimum, Maximum, MinLength, MinItems,
etc.) remained aliased with the caller-owned schema after
CloneSchema/CachedSchema. A caller mutating one of those pointers
after caching could race with concurrent cached-schema
serialization or silently change the cached validation bounds.
Clone every *int/*float64 keyword explicitly alongside the existing
collection/metadata cloning.
- CloneSchemaWithoutDefaults's removeSchemaDefaults visited every
map/pointer child twice: once via two literal child-collection
loops, and again via schemaChildren, which already covers the same
fields. This doubled traversal at every nested level, making
default removal exponential for deeply nested object/array schemas.
Traverse only the single comprehensive schemaChildren list.
Add regression coverage across CloneSchema, CachedSchema, schema
inference option cloning, and CloneSchemaWithoutDefaults: every
*int/*float64 keyword is isolated from caller mutation (including
under concurrent marshaling), and a 48-level deep chain is used for
every schema-child field kind to confirm linear, non-exponential
default removal.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(inventory): gate typed output on supported protocol range
Select modern typed output for SDK-supported ISO-date protocol versions from 2026-07-28 onward. Missing, malformed, and unsupported future versions retain legacy behavior. Cover a later supported version through the selector list seam and verify the public path against the SDK supported set.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(inventory): unwrap pointer inputs before schema inference
Match SDK input inference by unwrapping one pointer level before the cached input key and inference. Preserve nullable output pointer schemas. Cover both public constructors with actual modern and legacy discovery and calls, including structured null output.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(inventory): reuse encoded schema cache for typed tools
Key output encodings by their source definitions while preserving the SDK-registered schema guard. Keep header routing metadata available for legacy and unknown protocol clients.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* feat(context): add typed tool schemas and outputs
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(context): preserve legacy input acceptance
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* test(context): preserve input schema roots and optionality
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(context): validate direct team member calls
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* test(context): pin structured output and legacy text fixtures
Describe profile timestamps and validate null and empty team outputs against modern schemas while retaining exact legacy text.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(context): emit structured empty team collections
Keep legacy null text while returning nonnil typed slices so modern clients receive structured content for empty successful results.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(context): preserve legacy team input schemas
Keep empty identifier rejection in the handler without tightening the published input schema. Pin modern text to structured output and preserve the legacy formatter fixtures.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(context): preserve advertised input schema compatibility
Keep legacy-visible schemas byte-compatible while applying unknown-field acceptance only to the cached runtime validation schema. Verify modern DTO text parity and preserve legacy formatted text.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(context): reject explicit null team user arguments
Preserve the legacy optional user type error before typed decoding, without changing omitted or empty user fallback.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(context): preserve exact routing argument keys
Ignore case-variant routing aliases before typed decoding while retaining canonical fields and unrelated unknown arguments. Cover direct handlers and legacy/modern registered calls, authenticated fallback, canonical null rejection, and missing identifiers.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* feat(comments): add typed visibility tool inputs and outputs
Preserve legacy argument normalization and text responses while exposing protocol-gated structured results for six hide/unhide tools.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* chore: regenerate license files
Auto-generated by license-check workflow
* chore: regenerate license files
Auto-generated by license-check workflow
* test(comments): pin protocol output parity and reason metadata
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(comments): reuse cached visibility output schema
Clarify supported negotiated protocol versions without expanding runtime support.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* feat(search): add typed projected result outputs
* fix(search): preserve field_values presence and add nested schema fixtures
Address review findings on the typed search/list projected-output
tools (search_code, search_issues, search_pull_requests, list_issues,
list_pull_requests, list_branches, list_tags):
- issues.go/pullrequests.go: change FieldValues to a pointer-to-slice
(*[]MinimalFieldValue) so a successful-but-empty [] is preserved in
structuredContent, matching legacy text output instead of being
dropped by omitempty.
- search.go: related adjustments to keep typed search outputs aligned
with the field_values presence fix.
- typed_search_outputs_test.go: add representative nested/non-empty
projected item fixtures so schema-conformance tests actually
exercise item shapes instead of only validating empty collections.
- Add/update toolsnaps for list_branches, list_issues,
list_pull_requests, list_tags, search_code, search_issues, and
search_pull_requests to reflect the schema.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* test: bound encoded schema parity registration work
Reuse each immutable HTTP server across pagination requests and share the SDK schema cache across parity variants without changing wire comparisons.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* feat(security): add typed alert outputs
Add typed protocol-gated outputs for code quality, code and secret scanning, Dependabot, and security advisories while preserving existing text responses.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(security): preserve compatibility with compact typed outputs
Keep advertised input defaults while disabling runtime default injection for security filters. Normalize null CWE filters, compact findings, and verify modern wire outputs alongside exact legacy formatting.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* feat: type discussion and notification tool outputs
Migrate all eleven tools to typed registration and compact output DTOs. Preserve legacy text, parameter compatibility, pagination, and mutation validation while publishing honest modern output unions.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix: tighten discussion and notification output contracts
Trim notification hypermedia, preserve useful HTML links, and record all modern schemas in canonical snapshots. Preserve source presence during discussion read normalization and cover the Copilot review regression alongside empty/null outputs, IFC labels, sanitization, and output enums.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* test: cover empty-object discussion read requests and modern-text==DTO expectations
Add an explicit {} (fully-empty args) case to
TestDiscussionReadRequiredArguments proving the normalizer never
synthesizes placeholder owner/repo/discussionNumber values that would
let an empty request satisfy SDK required-schema validation and reach
GraphQL; verified both protocols reject it pre-handler with zero
GraphQL calls (addresses readiness-audit re-flag of already-fixed
Copilot review comment 4171698931 in 578e9929).
Also record the pending modern-text==structuredContent DTO contract
(2026-07-28 protocol) in test expectations; these assertions are
intentionally red pending the coordinator's central once-marshal
wrapper in pkg/inventory/typed_output.go, which this branch does not
yet have.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(notifications): preserve plain status output content
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* feat(repos): add typed commit tool outputs
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(repos): restore commit pagination defaults
Normalize omitted and explicit zero pagination to page 1 and perPage 30 for get_commit and list_commits. Cover legacy and modern wire calls and direct handlers.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(repos): return typed projected commit lists
Use an optional-field commit DTO for full and projected modern outputs while retaining exact legacy text. Cover SHA and nested commit projections, empty lists, and output schema conformance.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* chore: regenerate license files
Auto-generated by license-check workflow
* test(repos): snapshot modern commit tools and strengthen wire coverage
Capture canonical modern schemas, exercise null lists and error suppression with IFC labels, and drop unrelated generated Linux license drift noted by Copilot review.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* test(repos): distinguish legacy and modern commit text
Keep exact-main byte assertions for the legacy protocol and verify modern text represents the same typed DTO as structured content.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* test(repos): sync commit snapshots with parent DTO metadata
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* feat(issues): add typed metadata comment and dependency outputs
Preserve legacy text and argument coercions while exposing protocol-gated structured issue outputs. Add modern, legacy, unknown-version, union-schema and API-error contracts.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* chore: regenerate license files
Auto-generated by license-check workflow
* chore: regenerate license files
Auto-generated by license-check workflow
* fix(issues): preserve zero pagination for duplicate search
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* refactor(issues): preserve compact typed output contracts
Cache DTO schema inference, retain byte-exact handler text, and cover protocol, pagination and schema contracts.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* test(issues): bound encoded schema parity registration work
Reuse immutable HTTP comparison servers and the SDK schema cache across the full parity matrix. Refresh inherited user timestamp descriptions in issue snapshots.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* feat(repos): complete typed repository tool outputs
Migrate the remaining 17 repository tools to concrete inputs and outputs. Preserve existing content, mutations, scopes, filtering, and protocol gating; add wire and schema conformance coverage.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* chore(repos): exclude unrelated snapshot formatting drift
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* refactor(repos): compact typed repository outputs
Replace raw REST output schemas with compact repository DTOs, retain one canonical snapshot per tool, and align modern JSON text with structured output while pinning legacy content.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* feat(issues): add typed consolidated issue tool contracts
Preserve raw helper APIs and exact legacy text while exposing concrete output unions for modern protocols. Retain explicit awaiting statuses and real null responses without exposing SDK-generated error fallbacks.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* chore: regenerate license files
Auto-generated by license-check workflow
* refactor(issues): minimize consolidated typed outputs
Project compact method-discriminated DTOs from API responses while preserving the separate legacy text formatter and explicit app-awaiting status. Cache strict schemas and keep only canonical snapshots. Strengthen null-member presence, schema size, and lockdown projection regressions.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(issues): keep union property schemas portable
Preserve forbidden variant properties as annotated schema objects rather than boolean schemas emitted by jsonschema-go. Cover Inspector's input paths and IFC labels on every issue-read method across protocols.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* test(issues): cover strict sub-issue output variants
Reject unknown methods, states, field types, opaque values and API URL properties while covering nullable and empty method data.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* test(issues): pin compact comment user redaction
Pin unchanged legacy profile/avatar fields separately from compact modern user projections and assert identical lockdown filtering and sanitization across protocols.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(issues): restore main-identical advertised input schema
Remove added custom-field union constraints and sentinel enums from the advertised issue-write input. Preserve runtime exactly-one validation and private strict-schema tests. All three scoped input schemas compare exactly equal to main.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(issues): restore protocol output parity
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* chore: regenerate license files
Auto-generated by license-check workflow
* refactor(issues): minimize granular structured outputs
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
# Conflicts:
# pkg/github/__toolsnaps__/add_sub_issue.snap
# pkg/github/__toolsnaps__/remove_sub_issue.snap
# pkg/github/__toolsnaps__/reprioritize_sub_issue.snap
# pkg/github/granular_issue_types.go
# pkg/github/issues_granular.go
# pkg/github/typed_granular_issue_outputs_test.go
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# interactive rebase in progress; onto 1973eee
# Last command done (1 command done):
# pick 5b8f9d19 # refactor(issues): minimize granular structured outputs
# No commands remaining.
# You are currently rebasing.
#
# Changes to be committed:
# modified: pkg/github/__toolsnaps__/add_issue_comment_reaction.snap
# modified: pkg/github/__toolsnaps__/add_issue_reaction.snap
# modified: pkg/github/__toolsnaps__/add_sub_issue.snap
# modified: pkg/github/__toolsnaps__/create_issue.snap
# modified: pkg/github/__toolsnaps__/hide_issue_comment.snap
# modified: pkg/github/__toolsnaps__/remove_issue_comment_reaction.snap
# modified: pkg/github/__toolsnaps__/remove_issue_reaction.snap
# modified: pkg/github/__toolsnaps__/remove_sub_issue.snap
# modified: pkg/github/__toolsnaps__/reprioritize_sub_issue.snap
# modified: pkg/github/__toolsnaps__/set_issue_fields.snap
# modified: pkg/github/__toolsnaps__/unhide_issue_comment.snap
# modified: pkg/github/__toolsnaps__/update_issue_assignees.snap
# modified: pkg/github/__toolsnaps__/update_issue_body.snap
# modified: pkg/github/__toolsnaps__/update_issue_labels.snap
# modified: pkg/github/__toolsnaps__/update_issue_milestone.snap
# modified: pkg/github/__toolsnaps__/update_issue_state.snap
# modified: pkg/github/__toolsnaps__/update_issue_title.snap
# modified: pkg/github/__toolsnaps__/update_issue_type.snap
# modified: pkg/github/comment_minimize_test.go
# new file: pkg/github/granular_issue_types.go
# modified: pkg/github/granular_tools_test.go
# modified: pkg/github/issues_granular.go
# new file: pkg/github/typed_granular_issue_outputs_test.go
#
* refactor(search): use typed account repository and commit tools
Preserve legacy text and search semantics while publishing protocol-gated concrete structured outputs. Cover modern, legacy, and unknown clients, full repository JSON unions, defaults, IFC labels, and errors.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* refactor(search): compact typed repository search output
Replace the full REST repository mirror with MinimalRepository-based
structured items plus purpose-built full-mode details. Legacy text remains
unchanged, and canonical snapshots now hold the modern output schema.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* refactor(search): expose repository visibility enum
Remove the derivable node_id from compact full repository search output and
publish the visibility enum in the static output schema.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* test(search): align snapshots with protocol wrapper
Keep the modern text assertion aligned with structured content after the shared output wrapper change.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* refactor(pull-requests): migrate consolidated PR tools to typed inputs and outputs
Convert pull_request_read, create_pull_request, update_pull_request,
merge_pull_request, update_pull_request_branch, pull_request_review_write
(both feature variants), add_comment_to_pending_review and
add_reply_to_pull_request_comment to NewTool with concrete inputs and
output DTOs. Input normalizers replay legacy handler checks so legacy
coercions and error text are preserved.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(pull-requests): align modern text with typed outputs
Use curated output DTOs for modern JSON text while preserving legacy serialization. Cover successful null responses, empty check runs, and Link-header page traversal.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(pull-requests): preserve legacy validation order
Replay parameter checks in handler order and scope cursor validation to review-thread reads. Keep commit message schema descriptions distinct from operation messages.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* refactor(pull-requests): simplify compatibility validation
Remove normalization and test assertions that only pinned which invalid argument wins. Keep per-field validation, accepted coercions, and response-shape behavior.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* refactor(pull-requests): type granular MCP tools
Preserve exact legacy validation and response text while advertising concrete protocol-gated outputs for all granular PR mutations and both thread-resolution variants.
Make the inherited overflow assertion architecture-independent.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* chore: regenerate license files
Auto-generated by license-check workflow
* fix(pull-requests): preserve granular tool compatibility
Keep advertised schemas exact while applying legacy-compatible runtime validation, and verify protocol-era output parity.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* chore: regenerate license files
Auto-generated by license-check workflow
* test(pull-requests): compare schema sets semantically
Treat required properties and enum values as unordered sets in the schema audit.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(pull-requests): retain granular schema descriptions
Keep the original enum guidance in input descriptions while preserving actual JSON Schema enum constraints.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* refactor(actions): type consolidated MCP tools
Preserve legacy Actions payloads, validation ordering, coercions, IFC labels, and scope annotations while exposing concrete method-specific output unions to supported clients.
Reject unrecognized versions in the shared structured-output capability gate without changing tool availability rules.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* feat(actions): add typed Actions tool outputs
Expose compact method-discriminated outputs for Actions tools while preserving legacy behavior, input coercions, and pagination forwarding.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* feat(repos): complete typed repository tool outputs
Migrate the remaining 17 repository tools to concrete inputs and outputs. Preserve existing content, mutations, scopes, filtering, and protocol gating; add wire and schema conformance coverage.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* chore(repos): exclude unrelated snapshot formatting drift
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* refactor(repos): compact typed repository outputs
Replace raw REST output schemas with compact repository DTOs, retain one canonical snapshot per tool, and align modern JSON text with structured output while pinning legacy content.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* feat(issues): add typed consolidated issue tool contracts
Preserve raw helper APIs and exact legacy text while exposing concrete output unions for modern protocols. Retain explicit awaiting statuses and real null responses without exposing SDK-generated error fallbacks.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* chore: regenerate license files
Auto-generated by license-check workflow
* refactor(issues): minimize consolidated typed outputs
Project compact method-discriminated DTOs from API responses while preserving the separate legacy text formatter and explicit app-awaiting status. Cache strict schemas and keep only canonical snapshots. Strengthen null-member presence, schema size, and lockdown projection regressions.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(issues): keep union property schemas portable
Preserve forbidden variant properties as annotated schema objects rather than boolean schemas emitted by jsonschema-go. Cover Inspector's input paths and IFC labels on every issue-read method across protocols.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* test(issues): cover strict sub-issue output variants
Reject unknown methods, states, field types, opaque values and API URL properties while covering nullable and empty method data.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* test(issues): pin compact comment user redaction
Pin unchanged legacy profile/avatar fields separately from compact modern user projections and assert identical lockdown filtering and sanitization across protocols.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(issues): restore main-identical advertised input schema
Remove added custom-field union constraints and sentinel enums from the advertised issue-write input. Preserve runtime exactly-one validation and private strict-schema tests. All three scoped input schemas compare exactly equal to main.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(issues): restore protocol output parity
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* chore: regenerate license files
Auto-generated by license-check workflow
* refactor(issues): minimize granular structured outputs
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
# Conflicts:
# pkg/github/__toolsnaps__/add_sub_issue.snap
# pkg/github/__toolsnaps__/remove_sub_issue.snap
# pkg/github/__toolsnaps__/reprioritize_sub_issue.snap
# pkg/github/granular_issue_types.go
# pkg/github/issues_granular.go
# pkg/github/typed_granular_issue_outputs_test.go
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# interactive rebase in progress; onto 1973eee
# Last command done (1 command done):
# pick 5b8f9d19 # refactor(issues): minimize granular structured outputs
# No commands remaining.
# You are currently rebasing.
#
# Changes to be committed:
# modified: pkg/github/__toolsnaps__/add_issue_comment_reaction.snap
# modified: pkg/github/__toolsnaps__/add_issue_reaction.snap
# modified: pkg/github/__toolsnaps__/add_sub_issue.snap
# modified: pkg/github/__toolsnaps__/create_issue.snap
# modified: pkg/github/__toolsnaps__/hide_issue_comment.snap
# modified: pkg/github/__toolsnaps__/remove_issue_comment_reaction.snap
# modified: pkg/github/__toolsnaps__/remove_issue_reaction.snap
# modified: pkg/github/__toolsnaps__/remove_sub_issue.snap
# modified: pkg/github/__toolsnaps__/reprioritize_sub_issue.snap
# modified: pkg/github/__toolsnaps__/set_issue_fields.snap
# modified: pkg/github/__toolsnaps__/unhide_issue_comment.snap
# modified: pkg/github/__toolsnaps__/update_issue_assignees.snap
# modified: pkg/github/__toolsnaps__/update_issue_body.snap
# modified: pkg/github/__toolsnaps__/update_issue_labels.snap
# modified: pkg/github/__toolsnaps__/update_issue_milestone.snap
# modified: pkg/github/__toolsnaps__/update_issue_state.snap
# modified: pkg/github/__toolsnaps__/update_issue_title.snap
# modified: pkg/github/__toolsnaps__/update_issue_type.snap
# modified: pkg/github/comment_minimize_test.go
# new file: pkg/github/granular_issue_types.go
# modified: pkg/github/granular_tools_test.go
# modified: pkg/github/issues_granular.go
# new file: pkg/github/typed_granular_issue_outputs_test.go
#
* refactor(search): use typed account repository and commit tools
Preserve legacy text and search semantics while publishing protocol-gated concrete structured outputs. Cover modern, legacy, and unknown clients, full repository JSON unions, defaults, IFC labels, and errors.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* refactor(search): compact typed repository search output
Replace the full REST repository mirror with MinimalRepository-based
structured items plus purpose-built full-mode details. Legacy text remains
unchanged, and canonical snapshots now hold the modern output schema.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* refactor(search): expose repository visibility enum
Remove the derivable node_id from compact full repository search output and
publish the visibility enum in the static output schema.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* test(search): align snapshots with protocol wrapper
Keep the modern text assertion aligned with structured content after the shared output wrapper change.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* refactor(pull-requests): migrate consolidated PR tools to typed inputs and outputs
Convert pull_request_read, create_pull_request, update_pull_request,
merge_pull_request, update_pull_request_branch, pull_request_review_write
(both feature variants), add_comment_to_pending_review and
add_reply_to_pull_request_comment to NewTool with concrete inputs and
output DTOs. Input normalizers replay legacy handler checks so legacy
coercions and error text are preserved.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(pull-requests): align modern text with typed outputs
Use curated output DTOs for modern JSON text while preserving legacy serialization. Cover successful null responses, empty check runs, and Link-header page traversal.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(pull-requests): preserve legacy validation order
Replay parameter checks in handler order and scope cursor validation to review-thread reads. Keep commit message schema descriptions distinct from operation messages.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* refactor(pull-requests): simplify compatibility validation
Remove normalization and test assertions that only pinned which invalid argument wins. Keep per-field validation, accepted coercions, and response-shape behavior.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* refactor(pull-requests): type granular MCP tools
Preserve exact legacy validation and response text while advertising concrete protocol-gated outputs for all granular PR mutations and both thread-resolution variants.
Make the inherited overflow assertion architecture-independent.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* chore: regenerate license files
Auto-generated by license-check workflow
* fix(pull-requests): preserve granular tool compatibility
Keep advertised schemas exact while applying legacy-compatible runtime validation, and verify protocol-era output parity.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* chore: regenerate license files
Auto-generated by license-check workflow
* test(pull-requests): compare schema sets semantically
Treat required properties and enum values as unordered sets in the schema audit.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(pull-requests): retain granular schema descriptions
Keep the original enum guidance in input descriptions while preserving actual JSON Schema enum constraints.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* refactor(actions): type consolidated MCP tools
Preserve legacy Actions payloads, validation ordering, coercions, IFC labels, and scope annotations while exposing concrete method-specific output unions to supported clients.
Reject unrecognized versions in the shared structured-output capability gate without changing tool availability rules.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* feat(actions): add typed Actions tool outputs
Expose compact method-discriminated outputs for Actions tools while preserving legacy behavior, input coercions, and pagination forwarding.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>1 parent da2cbc8 commit 2d5ad6e
73 files changed
Lines changed: 12403 additions & 528 deletions
File tree
- docs
- internal/ghmcp
- pkg
- github
- __toolsnaps__
- inventory
- ui
- src
- apps
- issue-write
- pr-edit
- pr-write
- lib
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
616 | 616 | | |
617 | 617 | | |
618 | 618 | | |
619 | | - | |
| 619 | + | |
620 | 620 | | |
621 | 621 | | |
622 | 622 | | |
623 | 623 | | |
624 | 624 | | |
625 | | - | |
| 625 | + | |
| 626 | + | |
| 627 | + | |
| 628 | + | |
| 629 | + | |
626 | 630 | | |
627 | 631 | | |
628 | 632 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
60 | 60 | | |
61 | 61 | | |
62 | 62 | | |
63 | | - | |
64 | | - | |
65 | | - | |
66 | | - | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
67 | 69 | | |
68 | 70 | | |
69 | 71 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
237 | 237 | | |
238 | 238 | | |
239 | 239 | | |
240 | | - | |
| 240 | + | |
241 | 241 | | |
242 | | - | |
243 | | - | |
| 242 | + | |
| 243 | + | |
244 | 244 | | |
245 | 245 | | |
246 | 246 | | |
247 | 247 | | |
248 | | - | |
| 248 | + | |
249 | 249 | | |
250 | 250 | | |
251 | 251 | | |
252 | 252 | | |
253 | 253 | | |
254 | 254 | | |
255 | 255 | | |
256 | | - | |
| 256 | + | |
257 | 257 | | |
258 | 258 | | |
259 | 259 | | |
| |||
300 | 300 | | |
301 | 301 | | |
302 | 302 | | |
303 | | - | |
| 303 | + | |
304 | 304 | | |
305 | 305 | | |
306 | 306 | | |
| |||
341 | 341 | | |
342 | 342 | | |
343 | 343 | | |
344 | | - | |
| 344 | + | |
345 | 345 | | |
346 | 346 | | |
347 | 347 | | |
| |||
402 | 402 | | |
403 | 403 | | |
404 | 404 | | |
405 | | - | |
406 | | - | |
| 405 | + | |
| 406 | + | |
407 | 407 | | |
408 | 408 | | |
409 | 409 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
5 | | - | |
6 | | - | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
34 | | - | |
| 34 | + | |
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
39 | 39 | | |
40 | | - | |
| 40 | + | |
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
| |||
46 | 46 | | |
47 | 47 | | |
48 | 48 | | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
49 | 57 | | |
50 | 58 | | |
51 | 59 | | |
| |||
58 | 66 | | |
59 | 67 | | |
60 | 68 | | |
61 | | - | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
15 | 16 | | |
16 | 17 | | |
17 | 18 | | |
| |||
32 | 33 | | |
33 | 34 | | |
34 | 35 | | |
35 | | - | |
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
| |||
0 commit comments