Skip to content

feat(im): add feed shortcut create, list, and remove shortcuts#1273

Merged
YangJunzhou-01 merged 1 commit into
mainfrom
feat/im-feed-shortcuts
Jun 5, 2026
Merged

feat(im): add feed shortcut create, list, and remove shortcuts#1273
YangJunzhou-01 merged 1 commit into
mainfrom
feat/im-feed-shortcuts

Conversation

@evandance

@evandance evandance commented Jun 4, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds feed shortcut management to the im domain: pin chats to the user's feed sidebar, list pinned entries, and unpin them. Three new shortcuts wrap the im/v2/feed_shortcuts OpenAPI routes, which currently expose CHAT-type entries only and accept user identity only.

Changes

  • im +feed-shortcut-create — pin up to 10 chats per call (--chat-id, repeatable or comma-separated); --head/--tail control insertion position; partial failures return a batch ledger (total/success_count/failure_count/succeeded_shortcuts) with ok:false and exit 1
  • im +feed-shortcut-remove — unpin up to 10 chats per call with the same batch ledger semantics
  • im +feed-shortcut-list — list one page of feed shortcuts; entries are enriched with the full chat object under detail by default (--no-detail to skip the extra call and im:chat:read scope); enrichment failures degrade to a stderr warning
  • Server-side per-item failure reasons are annotated with a human-readable reason_label
  • Skill reference docs for all three shortcuts under skills/lark-im/references/

Test Plan

  • go test ./shortcuts/im/ — 35 unit tests covering ID validation, batch ledger accounting, failure-reason annotation, detail enrichment (batching, p2p chats, scope errors, degradation), pagination semantics, and dry-run rendering
  • gofmt / go vet / golangci-lint run --new-from-rev=origin/main clean
  • CLI E2E workflows added in tests/cli_e2e/im/feed_shortcut_workflow_test.go (create→list→remove roundtrip, batch ledger, dry-run), executed by CI
  • manual verification against a real tenant: create → list (detail attached) → remove restores the original state; --no-detail, --dry-run, and missing --chat-id (exit 2 validation error) all checked

Related Issues

Fixes #980

Summary by CodeRabbit

  • New Features

    • Add feed-shortcut CLI: +feed-shortcut-create / +feed-shortcut-remove / +feed-shortcut-list (user-only). Repeatable/comma --chat-id input (max 10 per call), --head/--tail, dry-run previews, ledger-style batch results with deterministic succeeded_shortcuts.
  • Behavior

    • Only CHAT-type shortcuts exposed. List defaults to chat-detail enrichment (opt-out --no-detail); enrichment batches lookups (50 ids/chunk), warns on failure but returns base list. Per-item failures include stable reason_label; partial failures yield non-zero exit.
  • Tests

    • Unit and end-to-end coverage for flows, validation, enrichment, and dry-run.
  • Documentation

    • New docs and reference pages for commands, flags, limits, responses, and examples.

@coderabbitai

coderabbitai Bot commented Jun 4, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds IM "feed shortcuts" (create/remove/list) with chat-id validation, list enrichment via batched chat lookups, per-item failure labeling and ledgering, CLI commands and dry-run previews, extensive unit/e2e tests, and documentation updates.

Changes

Feed Shortcuts Feature

Layer / File(s) Summary
Type definitions and validation foundation
shortcuts/im/helpers.go
ShortcutType enum, batch limits and scope constants, shortcutItem payload, collectChatIDs (dedupe/format/limit), feedShortcutKey helper.
Detail resolver plumbing
shortcuts/im/helpers.go
Resolver type and dispatch registration for per-shortcut-type enrichment.
Chat detail resolver (batch-query)
shortcuts/im/helpers.go
resolveChatDetail performs scope-checked, chunked POST /open-apis/im/v1/chats/batch_query and returns map keyed by chat_id.
Enrich feed-shortcut list responses
shortcuts/im/helpers.go
enrichFeedShortcutDetail groups shortcuts by type, invokes resolvers, and mutates list entries with attached detail objects.
Failure reason annotation
shortcuts/im/helpers.go
Maps numeric failure reason codes to stable reason_label strings and annotates failed_shortcuts.
Write-result ledger & emitter
shortcuts/im/helpers.go
Compute total, success_count, failure_count, split succeeded_shortcuts, detect failures, and emit partial-failure or success envelopes.
Create command
shortcuts/im/im_feed_shortcut_create.go
ImFeedShortcutCreate command: --chat-id parsing, --head/--tail resolution, DryRun/Execute POST /open-apis/im/v2/feed_shortcuts, uses ledger emitter.
Remove command
shortcuts/im/im_feed_shortcut_remove.go
ImFeedShortcutRemove command: --chat-id parsing, DryRun/Execute POST /open-apis/im/v2/feed_shortcuts/remove, uses ledger emitter and supports per-item failure reporting.
List command & query semantics
shortcuts/im/im_feed_shortcut_list.go
ImFeedShortcutList command: GET /open-apis/im/v2/feed_shortcuts, optional --page-token omission when empty, conditional --no-detail to skip enrichment (otherwise attempts batch enrichment and warns on failure).
Shortcut registry & enumeration test
shortcuts/im/shortcuts.go, shortcuts/im/helpers_test.go
Registers the three new shortcuts and updates TestShortcuts expected sequence.
Unit tests: helpers & command behavior
shortcuts/im/im_feed_shortcut_test.go
Tests for chat-id normalization, item building, reason_label handling, ledger computation, header-flag resolution, dry-run rendering, endpoint usage, pagination forwarding, and execute wiring.
Enrichment unit tests
shortcuts/im/im_feed_shortcut_test.go
Tests resolver batching (50 limit), dedupe, P2P pass-throughs, malformed-item dropping, skipping unknown types, no-op behavior, and handling of enrichment failures.
End-to-end and dry-run tests
tests/cli_e2e/im/feed_shortcut_workflow_test.go
E2E flows: single and batch create/list/remove with mixed outcomes, dry-run HTTP previews, validation error checks, enrichment-scope messaging, and cleanup helper.
Domain and skill documentation
skill-template/domains/im.md, skills/lark-im/SKILL.md, skills/lark-im/references/lark-im-feed-shortcut-*.md
Adds Feed Shortcut docs: concept, CLI mappings, endpoints, parameters, batch limits, pagination semantics, response ledger shape, and required scopes.

Sequence Diagram — List enrichment flow:

sequenceDiagram
  participant CLI as lark-cli
  participant FeedAPI as /open-apis/im/v2/feed_shortcuts
  participant Enricher as enrichFeedShortcutDetail
  participant ChatBatch as /open-apis/im/v1/chats/batch_query

  CLI->>FeedAPI: GET feed_shortcuts (optional page_token)
  FeedAPI-->>CLI: shortcuts page
  CLI->>Enricher: enrichFeedShortcutDetail(shortcuts)
  Enricher->>ChatBatch: POST chats/batch_query (CHAT ids chunked)
  ChatBatch-->>Enricher: chat objects keyed by chat_id
  Enricher-->>CLI: shortcuts with attached "detail" for CHAT items
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Suggested reviewers

  • YangJunzhou-01
  • jackie3927

🐰 I hopped through code to pin and list,
Chats gathered, batched, and deduped in a trice,
Failures labeled, ledgers count what’s amiss,
Dry-run shows the calls without the vice,
Sidebar pins now dance — a rabbit’s delight!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 27.87% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat(im): add feed shortcut create, list, and remove shortcuts' clearly and concisely summarizes the main feature addition: three new feed shortcut management commands for the IM domain.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description check ✅ Passed The pull request description is well-structured, complete, and follows the template with all required sections properly filled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/im-feed-shortcuts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions Bot added domain/im PR touches the im domain size/L Large or sensitive change across domains or core paths labels Jun 4, 2026
Comment thread skills/lark-im/references/lark-im-feed-shortcut-list.md Outdated
@github-actions

github-actions Bot commented Jun 4, 2026

Copy link
Copy Markdown

🚀 PR Preview Install Guide

🧰 CLI update

npm i -g https://pkg.pr.new/larksuite/cli/@larksuite/cli@45f69d2d81e921d622b3b55cce0782f1eadcfc52

🧩 Skill update

npx skills add larksuite/cli#feat/im-feed-shortcuts -y -g

@evandance
evandance force-pushed the feat/im-feed-shortcuts branch from 0ac0e3c to b1d8fa3 Compare June 4, 2026 15:21

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
tests/cli_e2e/im/feed_shortcut_workflow_test.go (1)

277-305: ⚡ Quick win

Cleanup helper should not rely on a single list page before deciding removals.

Line 278 fetches only one page, then Line 299 conditionally removes IDs only if seen there. For accounts with many shortcuts (or entries pinned with --tail), created IDs can be off-page and skipped, leaving residual state after failures.

Refactor direction
-	listResult, listErr := clie2e.RunCmd(cleanupCtx, clie2e.Request{
-		Args:      []string{"im", "+feed-shortcut-list", "--no-detail"},
-		DefaultAs: defaultAs,
-	})
+	// Iterate pages until all target IDs are found or has_more=false.
+	// Then remove any found IDs.

As per coding guidelines tests/cli_e2e/**/*_test.go: live E2E tests should be self-contained (create->use->cleanup).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/cli_e2e/im/feed_shortcut_workflow_test.go` around lines 277 - 305, The
cleanup currently fetches only one page via clie2e.RunCmd with Args ["im",
"+feed-shortcut-list", "--no-detail"] and so may miss created IDs; change it to
paginate until the list is exhausted: repeatedly call
clie2e.RunCmd(Request{Args: []string{"im", "+feed-shortcut-list", "--no-detail",
/* + page token if supported */}, DefaultAs: defaultAs}) and after each call
merge all feed_card_id values from gjson.Get(listResult.Stdout,
"data.shortcuts").Array() into the present map, using any next-page cursor/token
field returned (e.g. meta.next_cursor or next_page_token) to drive the loop (or
use a provided --all flag if CLI supports it); once all pages are collected,
build args (the ["im", "+feed-shortcut-remove"] block that appends "--chat-id",
id for ids present) and proceed with removal as before.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@skills/lark-im/references/lark-im-feed-shortcut-remove.md`:
- Line 14: The doc has contradictory semantics for removing a non-existent
shortcut: one paragraph says the server treats “not in shortcut list” as success
(returning ok:true and full-success ledger with failed_shortcuts only for true
server-side failures) while another labels the same case as an invalid_item
failure; pick one behavior and make the contract consistent: either (A) always
treat removing a non-existent shortcut as idempotent success — remove the
mention of invalid_item and ensure examples and references to failed_shortcuts,
ok, and exit code reflect ok:true and zero exit on idempotent removals, or (B)
treat it as a client error — remove the idempotent-success wording and update
the earlier paragraph to state the server returns invalid_item, ok:false,
non-zero exit with failed_shortcuts populated; update all occurrences of
failed_shortcuts, invalid_item, ok and exit code text to match the chosen
semantics.

In `@tests/cli_e2e/im/feed_shortcut_workflow_test.go`:
- Around line 371-375: Update the validate-stage dry-run assertions to expect
the specific exit code 2 and to check combined output; replace the generic
require.NotEqual(t, 0, result.ExitCode, ...) with require.Equal(t, 2,
result.ExitCode, ...) and change require.Contains(t, result.Stderr, "mutually
exclusive") to require.Contains(t, result.Stdout+result.Stderr, "mutually
exclusive") in the test block using the Result variable (named result), and make
the same two replacements for the other assertion block around Lines 387-389 so
both validate-stage dry-run checks assert exit code 2 and inspect
result.Stdout+result.Stderr.

---

Nitpick comments:
In `@tests/cli_e2e/im/feed_shortcut_workflow_test.go`:
- Around line 277-305: The cleanup currently fetches only one page via
clie2e.RunCmd with Args ["im", "+feed-shortcut-list", "--no-detail"] and so may
miss created IDs; change it to paginate until the list is exhausted: repeatedly
call clie2e.RunCmd(Request{Args: []string{"im", "+feed-shortcut-list",
"--no-detail", /* + page token if supported */}, DefaultAs: defaultAs}) and
after each call merge all feed_card_id values from gjson.Get(listResult.Stdout,
"data.shortcuts").Array() into the present map, using any next-page cursor/token
field returned (e.g. meta.next_cursor or next_page_token) to drive the loop (or
use a provided --all flag if CLI supports it); once all pages are collected,
build args (the ["im", "+feed-shortcut-remove"] block that appends "--chat-id",
id for ids present) and proceed with removal as before.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: b51b3b73-66b5-4496-bc40-bac958b61082

📥 Commits

Reviewing files that changed from the base of the PR and between ac116e7 and 0ac0e3c.

📒 Files selected for processing (13)
  • shortcuts/im/helpers.go
  • shortcuts/im/helpers_test.go
  • shortcuts/im/im_feed_shortcut_create.go
  • shortcuts/im/im_feed_shortcut_list.go
  • shortcuts/im/im_feed_shortcut_remove.go
  • shortcuts/im/im_feed_shortcut_test.go
  • shortcuts/im/shortcuts.go
  • skill-template/domains/im.md
  • skills/lark-im/SKILL.md
  • skills/lark-im/references/lark-im-feed-shortcut-create.md
  • skills/lark-im/references/lark-im-feed-shortcut-list.md
  • skills/lark-im/references/lark-im-feed-shortcut-remove.md
  • tests/cli_e2e/im/feed_shortcut_workflow_test.go

Comment thread skills/lark-im/references/lark-im-feed-shortcut-remove.md Outdated
Comment thread tests/cli_e2e/im/feed_shortcut_workflow_test.go Outdated
@evandance
evandance force-pushed the feat/im-feed-shortcuts branch from b1d8fa3 to 0ee5b83 Compare June 4, 2026 15:29
@codecov

codecov Bot commented Jun 4, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 80.32787% with 48 lines in your changes missing coverage. Please review.
✅ Project coverage is 70.22%. Comparing base (ac116e7) to head (45f69d2).

Files with missing lines Patch % Lines
shortcuts/im/helpers.go 88.15% 10 Missing and 8 partials ⚠️
shortcuts/im/im_feed_shortcut_remove.go 28.57% 13 Missing and 2 partials ⚠️
shortcuts/im/im_feed_shortcut_create.go 69.04% 9 Missing and 4 partials ⚠️
shortcuts/im/im_feed_shortcut_list.go 91.66% 1 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1273      +/-   ##
==========================================
+ Coverage   70.18%   70.22%   +0.04%     
==========================================
  Files         671      674       +3     
  Lines       65240    65471     +231     
==========================================
+ Hits        45786    45975     +189     
- Misses      15783    15812      +29     
- Partials     3671     3684      +13     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@evandance
evandance force-pushed the feat/im-feed-shortcuts branch 2 times, most recently from d19888a to 670a38c Compare June 4, 2026 16:10
@coderabbitai

coderabbitai Bot commented Jun 4, 2026

Copy link
Copy Markdown

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{}

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
shortcuts/im/im_messages_search.go (1)

461-463: ⚡ Quick win

Avoid silently swallowing chat-context enrichment failures.

At Line 463, dropping queryChatBatch errors entirely hides partial/full enrichment failures. Keep best-effort behavior, but emit a compact stderr warning when any chunk fails so users can distinguish “no chat context” vs “enrichment failed.”

Proposed patch
 func batchQueryChatContexts(runtime *common.RuntimeContext, chatIds []string) map[string]map[string]interface{} {
 	chatContexts := map[string]map[string]interface{}{}
 	// Best-effort: a failed chunk only loses its own entries.
+	failedChunks := 0
 	for _, batch := range chunkStrings(chatIds, chatBatchQuerySize) {
-		_ = queryChatBatch(runtime, batch, chatContexts)
+		if err := queryChatBatch(runtime, batch, chatContexts); err != nil {
+			failedChunks++
+		}
+	}
+	if failedChunks > 0 {
+		fmt.Fprintf(runtime.Factory.IOStreams.ErrOut, "warning: chat context enrichment skipped for %d batch(es)\n", failedChunks)
 	}
 	return chatContexts
 }

As per coding guidelines: "**/*.go: stdout is data (JSON envelopes), stderr is everything else."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@shortcuts/im/im_messages_search.go` around lines 461 - 463, The loop
currently swallows errors from queryChatBatch, losing visibility into enrichment
failures; update the loop that iterates over chunkStrings(chatIds,
chatBatchQuerySize) to capture the returned error from queryChatBatch(runtime,
batch, chatContexts), and when non-nil emit a compact stderr warning (e.g.,
fmt.Fprintf(os.Stderr, "...: %v\n", err) or use the existing stderr logger) that
identifies the batch and that enrichment failed, then continue (preserve
best-effort behavior) so other chunks still run; reference chunkStrings,
queryChatBatch, chatContexts, and chatBatchQuerySize to find the location.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@shortcuts/im/helpers.go`:
- Around line 1660-1692: In addFeedShortcutWriteLedger: the ledger currently
sets data["failure_count"] = len(failed) which can be inflated by
duplicate/malformed echoes; instead derive failures from the requested items
matched against failedIDs. After building failedIDs and succeeded (or
alternatively compute matchedFailedCount), set data["failure_count"] to the
number of requested items whose FeedCardID appears in failedIDs (or simply
data["failure_count"] = len(requested) - len(succeeded)) so success_count +
failure_count cannot exceed total; use the existing symbols failedIDs,
requested, succeeded, and item.FeedCardID to implement this.

In `@shortcuts/im/im_feed_shortcut_test.go`:
- Around line 53-56: The test helper currently registers the flag with
cmd.Flags().Bool("no-detail", true, "") which flips the default to opt-out;
change that registration to use false so the helper mirrors the real CLI default
(cmd.Flags().Bool("no-detail", false, "")). Then find tests that rely on the
single-call/skip-enrichment path and explicitly set the flag to true in those
tests (e.g., by calling cmd.Flags().Set("no-detail","true") or constructing the
command with the flag) so only those tests exercise the opt-out behavior.

---

Nitpick comments:
In `@shortcuts/im/im_messages_search.go`:
- Around line 461-463: The loop currently swallows errors from queryChatBatch,
losing visibility into enrichment failures; update the loop that iterates over
chunkStrings(chatIds, chatBatchQuerySize) to capture the returned error from
queryChatBatch(runtime, batch, chatContexts), and when non-nil emit a compact
stderr warning (e.g., fmt.Fprintf(os.Stderr, "...: %v\n", err) or use the
existing stderr logger) that identifies the batch and that enrichment failed,
then continue (preserve best-effort behavior) so other chunks still run;
reference chunkStrings, queryChatBatch, chatContexts, and chatBatchQuerySize to
find the location.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 52d546ce-1788-40db-9b09-de45c978d0b1

📥 Commits

Reviewing files that changed from the base of the PR and between d19888a and 670a38c.

📒 Files selected for processing (14)
  • shortcuts/im/helpers.go
  • shortcuts/im/helpers_test.go
  • shortcuts/im/im_feed_shortcut_create.go
  • shortcuts/im/im_feed_shortcut_list.go
  • shortcuts/im/im_feed_shortcut_remove.go
  • shortcuts/im/im_feed_shortcut_test.go
  • shortcuts/im/im_messages_search.go
  • shortcuts/im/shortcuts.go
  • skill-template/domains/im.md
  • skills/lark-im/SKILL.md
  • skills/lark-im/references/lark-im-feed-shortcut-create.md
  • skills/lark-im/references/lark-im-feed-shortcut-list.md
  • skills/lark-im/references/lark-im-feed-shortcut-remove.md
  • tests/cli_e2e/im/feed_shortcut_workflow_test.go
✅ Files skipped from review due to trivial changes (4)
  • skills/lark-im/references/lark-im-feed-shortcut-create.md
  • skills/lark-im/references/lark-im-feed-shortcut-remove.md
  • skill-template/domains/im.md
  • skills/lark-im/references/lark-im-feed-shortcut-list.md
🚧 Files skipped from review as they are similar to previous changes (6)
  • shortcuts/im/shortcuts.go
  • shortcuts/im/im_feed_shortcut_create.go
  • skills/lark-im/SKILL.md
  • shortcuts/im/im_feed_shortcut_remove.go
  • tests/cli_e2e/im/feed_shortcut_workflow_test.go
  • shortcuts/im/im_feed_shortcut_list.go

Comment thread shortcuts/im/helpers.go
Comment thread shortcuts/im/im_feed_shortcut_test.go
@evandance
evandance force-pushed the feat/im-feed-shortcuts branch from 670a38c to 0768e2b Compare June 4, 2026 16:20
@evandance
evandance force-pushed the feat/im-feed-shortcuts branch from 0768e2b to 45f69d2 Compare June 4, 2026 16:28
@YangJunzhou-01
YangJunzhou-01 merged commit be5527c into main Jun 5, 2026
21 checks passed
@YangJunzhou-01
YangJunzhou-01 deleted the feat/im-feed-shortcuts branch June 5, 2026 08:42
tuxedomm pushed a commit to zhumiaoxin/cli that referenced this pull request Jun 6, 2026
…uite#1273)

Adds feed shortcut management to the im domain: pin chats to the user's feed sidebar, list pinned entries, and unpin them. Three new shortcuts wrap the im/v2/feed_shortcuts OpenAPI routes, which currently expose CHAT-type entries only and accept user identity only.
SunPeiYang996 pushed a commit that referenced this pull request Jun 8, 2026
Adds feed shortcut management to the im domain: pin chats to the user's feed sidebar, list pinned entries, and unpin them. Three new shortcuts wrap the im/v2/feed_shortcuts OpenAPI routes, which currently expose CHAT-type entries only and accept user identity only.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

domain/im PR touches the im domain feature size/L Large or sensitive change across domains or core paths

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature request: manage pinned group chats in Feeds / message list

2 participants