GitLink uses POST /users/{owner}/messages/read with ids array,
not PATCH on individual message. Fixed code and test accordingly.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Empty string doesn't work as CLI flag value. Use 'clear' keyword instead:
- --label 327264,327265 set labels
- --label clear remove all labels
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Support setting or clearing labels on existing issues:
- --label 327264,327265 set labels
- --label "" clear all labels
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The GitLink v1 API expects issue_tag_ids (array of integers), not label_id.
This fixes the bug where --label was silently ignored when creating issues.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The update API requires PUT, not POST. Previous commit 7a85c6d incorrectly
changed it to POST which caused HTTP 500 errors. Also added shared test
helpers to common package and rewrote wiki tests to match reference files.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The gateway API requires the message field to be present (even as empty
string). Previously update omitted it when --message was not provided,
causing HTTP 500 errors. Also removed dead code in callWikiAPI and added
a test for update without message.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Tests set Owner on RuntimeContext, not on the global cmdutil variable.
This fixes all 4 notification test failures.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
PR #49 (dtwdtw): enrich PR view with closed_at from issue journals
- Fetches close timestamp for closed/rejected PRs
- Skips extra API call for open PRs
- 2 new tests
PR #52 (dtwdtw): add repo +readme shortcut
- Fetches README content with optional --ref and --path params
- normalizeAPIPath prevents duplicate /api prefix in client
- 4 new tests (3 client + 1 repo)
Co-authored-by: dtwdtw <dtwdtw>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- hasLocalTriageInput now also detects triage-specific flags (--body,
--number, --author, --url, --labels) to enter local input mode.
- hasLocalHealthInput now checks all health-related flags to prevent
invalid values like --open-issues=abc from silently falling through
to remote fetch instead of being validated.
- Remote fetch failure in +triage now includes a hint suggesting
--title or --from for local analysis.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The API returns both "id" (global database PK) and "project_issues_index"
(per-project sequential number). The +list JSON output was a raw API
pass-through, making the database ID the most prominent identifier.
This change normalizes each issue in the list:
- Add "number" field from project_issues_index (matches the web URL)
- Rename "id" to "database_id" to prevent confusion
The "number" field now matches the --number flag used by +view, +close,
+update, and +comment commands.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Use v1 API paths for all webhook endpoints (fixes view/test returning HTML/404)
- Add +tasks command for listing webhook delivery tasks
- Add webhook event validation (10-event whitelist)
- Add webhook type validation (10-type whitelist)
- Add content-type and http-method validation
- Fix update to preserve unspecified fields via fetch-and-merge
- Add event deduplication in parseWebhookEvents
- Add 9 comprehensive unit tests (up from 3)
- Use --http-method flag (maintains backward compatibility with PR #20)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Resolved conflicts between PR #24 (+versions, +version-diff) and PR #26
(+reviews, +review). Unified prReviewsPath() to use existing prV1Path() helper.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add a convenience command to comment on pull requests directly,
without needing to look up the underlying issue ID first.
Internally resolves the PR's issue ID via pr +view, then posts
to the issues journals API.