Documentation
¶
Overview ¶
Package targetresolver provides deterministic natural-target resolution for shortcuts. It owns extraction, stable-ID de-duplication, exact-match preference, ambiguity handling, and the machine-readable resolution error envelope shared by send/read/search/create/event facades.
Index ¶
- func ChatLabels(chats []Chat) []string
- func LooksLikeOpenConversationID(value string) bool
- func UserLabels(users []User) []string
- type Chat
- type ChatResolution
- type IdentityRequirement
- type Reader
- type Status
- type User
- type UserResolution
- func ResolveEnterpriseUser(rt Reader, query string, requirement IdentityRequirement) (UserResolution, error)
- func ResolveUser(rt Reader, query string, requirement IdentityRequirement) (UserResolution, error)
- func ResolveUsers(rt Reader, queries []string, requirement IdentityRequirement) ([]UserResolution, error)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ChatLabels ¶
ChatLabels renders group disambiguation labels.
func LooksLikeOpenConversationID ¶
LooksLikeOpenConversationID identifies the opaque group-conversation IDs returned by DingTalk. It is deliberately conservative: only the stable "cid..." form is recognized, so ordinary short names are still resolved by search and ambiguity checks.
func UserLabels ¶
UserLabels renders credential-free disambiguation labels.
Types ¶
type Chat ¶
type Chat struct {
OpenConversationID string `json:"openConversationId"`
Name string `json:"name,omitempty"`
}
Chat is the public identity returned by group resolution.
func ExtractChats ¶
ExtractChats accepts both bare and wrapped group search result lists.
func PreferExactChats ¶
PreferExactChats exposes the deterministic selection helper to legacy smart shortcuts while they migrate to ResolveChat.
type ChatResolution ¶
type ChatResolution struct {
Status Status `json:"status"`
EntityType string `json:"entityType"`
Query string `json:"query"`
MatchType string `json:"matchType"`
Selected Chat `json:"selected"`
Profile string `json:"profile,omitempty"`
}
ChatResolution is the typed successful group-resolution result.
func ResolveChat ¶
func ResolveChat(rt Reader, query string) (ChatResolution, error)
ResolveChat searches groups and resolves query to exactly one stable openConversationId. Exact names win over substring matches, but multiple exact names remain ambiguous.
func ResolveChatTarget ¶
func ResolveChatTarget(rt Reader, directValue, queryValue string) (ChatResolution, error)
ResolveChatTarget accepts either a stable openConversationId or a natural group name and returns one normalized ChatResolution. Stable IDs never reach search_groups; natural names retain ResolveChat's complete-pagination and fail-closed ambiguity semantics.
func ResolveChats ¶
func ResolveChats(rt Reader, queries []string) ([]ChatResolution, error)
ResolveChats is the batch equivalent of ResolveChat and returns only after every query has been preflighted.
type IdentityRequirement ¶
type IdentityRequirement string
IdentityRequirement filters contacts to identities accepted by the downstream interface.
const ( IdentityAny IdentityRequirement = "any" IdentityUserID IdentityRequirement = "user_id" IdentityOpenDingTalkID IdentityRequirement = "open_dingtalk_id" )
type Reader ¶
type Reader interface {
CallMCPData(product, tool string, params map[string]any) (map[string]any, error)
}
Reader is the minimal read-only transport needed by natural target resolution. Shortcut RuntimeContext implements it, and native facades (for example event +listen-im) can provide an adapter without duplicating extraction or ambiguity rules.
type Status ¶
type Status string
Status is the stable resolution outcome used in successful plans and errors.
type User ¶
type User struct {
UserID string `json:"userId,omitempty"`
OpenDingTalkID string `json:"openDingTalkId,omitempty"`
Name string `json:"name,omitempty"`
}
User is the public, credential-free identity returned by contact resolution.
func ExtractUsers ¶
ExtractUsers accepts the contact search response shapes used by the current directory MCP and keeps external contacts that only expose openDingTalkId.
func UsersWithUserID ¶
UsersWithUserID preserves the legacy smart-shortcut helper contract.
type UserResolution ¶
type UserResolution struct {
Status Status `json:"status"`
EntityType string `json:"entityType"`
Query string `json:"query"`
MatchType string `json:"matchType"`
Selected User `json:"selected"`
Profile string `json:"profile,omitempty"`
}
UserResolution is the typed successful user-resolution result.
func ResolveEnterpriseUser ¶
func ResolveEnterpriseUser(rt Reader, query string, requirement IdentityRequirement) (UserResolution, error)
ResolveEnterpriseUser resolves an organization member through the same name-calibrated enterprise search used by `dws aisearch person`. Unlike the contact search, this source understands organization nicknames and aliases.
func ResolveUser ¶
func ResolveUser(rt Reader, query string, requirement IdentityRequirement) (UserResolution, error)
ResolveUser searches the current profile's directory and resolves query to exactly one identity accepted by the downstream interface.
func ResolveUsers ¶
func ResolveUsers( rt Reader, queries []string, requirement IdentityRequirement, ) ([]UserResolution, error)
ResolveUsers resolves every query before returning. Resolution failures are collected into one typed envelope; upstream/auth failures still stop immediately. Successful identities are de-duplicated by stable ID.