Conversation
Add GitHub Actions workflow for automated PR assistance using Claude. This workflow provides intelligent PR reviews and suggestions. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add GitHub Actions workflow for automated code reviews using Claude. This workflow analyzes code changes and provides detailed feedback. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add concurrency configuration to the Claude code review workflow to manage simultaneous runs and cancel in-progress jobs for pull requests.
Changes GetIssueById and GetIssueByIdentifier to use CompleteIssueWithCommentsFields fragment instead of CompleteIssueFields, restoring comment data that was inadvertently removed during the GraphQL file migration. This fixes a data regression where reading issues by ID or identifier would no longer return comment data as expected. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Creates query loader modules in src/queries/ that read GraphQL operations from .graphql files and export them as string constants. This bridges the gap between the new .graphql file structure and existing service imports. The loaders: - Read .graphql files at runtime using Node.js fs module - Extract individual operations with fragment dependencies - Export query/mutation strings with the same names services expect - Enable existing code to work without modification Fixes TypeScript compilation errors where services imported from deleted src/queries/*.ts files. Services now successfully import from the new loader modules which dynamically load from graphql/queries/ and graphql/mutations/ directories. Files added: - src/queries/issues.ts - src/queries/documents.ts - src/queries/attachments.ts - src/queries/project-milestones.ts Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Updates AGENTS.md (CLAUDE.md) to reflect the new GraphQL architecture: - Documents the dual structure of graphql/ directory (source .graphql files) and src/queries/ (runtime query loaders) - Updates "Query Definitions" section to explain both components - Rewrites "Adding GraphQL Queries" workflow to document the new process: 1. Define operations in .graphql files 2. Run npm run generate for codegen 3. Query loaders automatically extract operations - Changes references from src/queries/common.ts to graphql/queries/issues.graphql - Explains the separation between human-written .graphql files and generated TypeScript types in src/gql/ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add type aliases for GraphQL query/mutation return types to improve readability in method signatures. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Return raw codegen types directly instead of transforming to manual types. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Return union type of raw codegen types instead of transforming. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Return raw codegen type directly. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Return raw codegen type directly. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Use QuerySearchIssuesArgs instead of full query type. Remove transformation. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Delete transformIssueData and doTransformIssueData - no longer needed since services return raw codegen types. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Line 166 referenced undefined variable 'id' instead of 'input.id'. This caused a ReferenceError when resolving non-UUID issue identifiers. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Line 572 referenced non-existent 'input.milestoneId' instead of 'input.projectMilestoneId'. This would show 'undefined' in error messages when milestone resolution fails. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Lines 670-677 spread entire searchArgs object into GraphQL variables, but SearchIssues query only accepts 'term' and 'first' parameters. This caused GraphQL validation errors when extra properties like 'limit' were passed through. Now destructures only 'term' from searchArgs and passes it explicitly along with 'first' parameter. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Pass QuerySearchIssuesArgs fields directly instead of wrong type. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Ensure parameters match IssueUpdateInput type from codegen. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add type aliases, remove transformations, return raw GraphQL types. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add type aliases, remove transformations, return raw GraphQL types. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Define CycleListOptions and CycleReadOptions locally. Replace LinearCycle with codegen type alias. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add missing option interfaces (MilestoneListOptions, MilestoneReadOptions, MilestoneCreateOptions, MilestoneUpdateOptions) and replace LinearProjectMilestone with ProjectMilestoneUpdateInput from codegen. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Delete linear-types.d.ts - all types now generated from GraphQL schema via codegen. - Add type aliases in linear-service.ts for LinearLabel, LinearComment, and CreateCommentArgs - Replace LinearProject with inline type definition - Fix bug in graphql-issues-service.ts: use input.projectMilestoneId instead of input.milestoneId - Remove dead code for milestone fallback lookup Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
feat(issues): add issue relations support (blocking/blocked by/related/duplicate)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Consolidates duplicate regex loops in embed-parser, simplifies URL parsing, and removes redundant documentation comments. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extracts shared SOURCE_LABELS constant in auth, inlines arrow functions, uses ternary for optional ID resolution, and removes unused ErrorResponse interface. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
refactor: remove verbose JSDoc and simplify codebase
feat!: complete architecture redesign with GraphQL codegen, auth system, and developer tooling
Resolves user identifiers (display name, email, or UUID) to UUIDs via the Linear SDK, following the same pattern as existing resolvers. Lookup order: UUID passthrough → display name (case-insensitive) → email (case-insensitive). Throws multipleMatchesError when name is ambiguous, notFoundError when no match exists. Closes #47 Co-Authored-By: claude-opus-4-6 <noreply@anthropic.com>
The --assignee option was passed directly to assigneeId without resolution, causing GraphQL validation errors when given a name or email instead of a UUID. Wire both create and update through the new resolveUserId resolver. Closes #47 Co-Authored-By: claude-opus-4-6 <noreply@anthropic.com>
Add command-level tests that drive the CLI through Commander and verify resolveUserId is called with the correct input and its result flows into the service layer. Covers create with name, create with email, update with name, and omitted-assignee cases. Co-Authored-By: claude-opus-4-6 <noreply@anthropic.com>
fix(commands): resolve --assignee to UUID in issues create/update
Add $after variable and pageInfo { hasNextPage endCursor } selection
to all 10 list queries for cursor-based pagination support.
Add PageInfo, PaginatedResult<T>, and PaginationOptions types to
src/common/types.ts.
Co-Authored-By: claude-opus-4-6 <noreply@anthropic.com>
Accept PaginationOptions with optional after cursor. Return
{ nodes, pageInfo } instead of flat arrays.
Co-Authored-By: claude-opus-4-6 <noreply@anthropic.com>
…nt services Co-Authored-By: claude-opus-4-6 <noreply@anthropic.com>
Wire all list commands to updated service signatures that accept PaginationOptions and return PaginatedResult. Co-Authored-By: claude-opus-4-6 <noreply@anthropic.com>
Local filtering makes server pageInfo misleading. Set hasNextPage to false since cursor pagination is incompatible with --window. Co-Authored-By: claude-opus-4-6 <noreply@anthropic.com>
…ases Fix existing tests for new PaginationOptions signatures and PaginatedResult return types. Add cursor passthrough and pageInfo assertions. Co-Authored-By: claude-opus-4-6 <noreply@anthropic.com>
…ct --window with --after
Ensure documents list --issue returns { nodes, pageInfo } like all
other list commands. Prevent --after with --window in cycles since
local filtering is incompatible with cursor pagination.
Co-Authored-By: claude-opus-4-6 <noreply@anthropic.com>
Ties PageInfo to the GraphQL schema instead of maintaining a separate interface that could drift from the generated types. Co-Authored-By: claude-opus-4-6 <noreply@anthropic.com>
…dation Replace 9 unvalidated parseInt calls across 7 command files with a shared parseLimit() that rejects NaN and non-positive values. Co-Authored-By: claude-opus-4-6 <noreply@anthropic.com>
…stone services Cover all public functions with happy path and error cases. Include pagination-specific assertions for all list functions. Co-Authored-By: claude-opus-4-6 <noreply@anthropic.com>
Cover createComment with success and failure cases. Cover FileService download and upload with happy paths and error conditions. Co-Authored-By: claude-opus-4-6 <noreply@anthropic.com>
feat(pagination): add cursor-based pagination to all list commands
Introduced a new skill for crafting effective README files, including various templates for open source, personal, internal projects, and configuration directories. Added a section checklist for project types and style guide to enhance documentation quality. New files include: - section-checklist.md - SKILL.md - style-guide.md - using-references.md - multiple reference documents - templates for different project types This skill aims to provide comprehensive guidance for creating informative and user-friendly README files.
Update all command examples to match renamed commands (files, --label-mode, --window, --issue, --query). Add missing features: issue relations, milestones, cursor pagination. Expand LLM agent section with discover-then-act workflow, MCP comparison table, and optimized example prompt. Add maintainer section for Fabian Jocks alongside original author Carlo Zottmann. Co-Authored-By: claude-opus-4-6 <noreply@anthropic.com>
docs: rewrite README for current CLI surface and agent optimization
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overview
214 files changed | +23,877 | -38,394 (net reduction of ~14.5k lines)
This release is a comprehensive overhaul: new architecture, new features, new tooling, and streamlined developer experience. Every layer of the codebase has been touched.
Changes by Category
Architecture — Five-Layer Redesign
The entire source tree was reorganized from a flat
utils/directory into a strict five-layer architecture with enforced separation of concerns:src/client/src/resolvers/LinearSdkClientsrc/services/GraphQLClientsrc/commands/createContext()src/common/Key rules enforced: ID resolution happens exactly once in resolvers; services accept only UUIDs; commands are thin orchestrators.
GraphQL Codegen Migration
Replaced all manually maintained TypeScript type definitions and runtime GraphQL string loading with
graphql-codegen. Everyclient.request<T>()call is now fully typed from codegen output..graphqlfilesFeatures
Authentication System
Full
linearis authcommand group with interactive login, encrypted AES-256-GCM token storage, token validation viaGetViewerquery, and structured auth error detection. Backwards-compatible with env var and legacy plaintext file.Issue Relations
New
issue-relation-servicewith create/find/delete operations. Relation flags (--blocks,--blocked-by,--related,--duplicate) on bothissues createandissues update.Cursor-Based Pagination
All list commands now support cursor-based pagination via
--after <cursor>and--limit <n>. Service layer returnsPaginatedResult<T>withpageInfocontainingendCursorandhasNextPage. Includes per-service tests for pagination behavior.Assignee ID Resolution
--assigneenow accepts human-readable names and emails in addition to UUIDs. NewresolveUserIdresolver handles the lookup.Two-Tier Usage System
Token-optimized usage output designed for LLM agents. Tier 1 overview (~200 tokens) and Tier 2 domain detail (~300-500 tokens).
USAGE.mdauto-generated on every build.src/queriesruntime loadersDeveloper Tooling
Documentation & Agent Instructions
Upstream Issues Addressed
--assigneefails with name instead of UUID → resolved by fix(commands): resolve --assignee to UUID in issues create/update #50Open Issues (tracked, not yet resolved)
These are known but not addressed in this release:
$projectIdof required typeString!was not provided #46 —milestones createfails with$projectIdnot provideddocs/plans/*.mdfiles before merge #51 — Add guard job to rejectdocs/plans/*.mdbefore mergeBreaking Changes
project-milestones→milestones,embeds→files--issues-first→--limit)searchsubcommands merged intolistwith filter flagssrc/(relevant for contributors)All Included PRs (chronological)
Merge Checklist