import { Option, type Command } from 'commander'; import type { FieldValuePair, RoleOwner, Schedule } from 'meeglesdk'; import type { GuardContext } from '../core/command-guard.js'; export declare const DEFAULT_BASE_URL = "https://project.feishu.cn"; export interface GlobalOptions { profile?: string; userKey?: string; compatAuth?: boolean; json?: boolean; yes?: boolean; forceBatch?: boolean; } export interface FieldTypeDescriptor { field_key?: string; field_alias?: string; field_type_key?: string; options?: FieldOptionDescriptor[]; } export interface FieldOptionDescriptor { label?: string; value?: string; children?: FieldOptionDescriptor[]; } interface WorkItemTypeKeyOptionArgs { required?: boolean; description?: string; } export declare function parseCsv(raw: string | undefined): string[]; export declare function parseNumber(raw: string, label: string): number; export declare function parseInteger(raw: string, label: string): number; export declare function parseTokenType(raw: string): 0 | 1; export declare function parseNumberList(raw: string, label: string): number[]; export declare function parseOptionalInteger(raw: string | undefined, label: string): number | undefined; export declare function parseOptionalNumber(raw: string | undefined, label: string): number | undefined; export declare function parseBoolean(raw: string, label: string): boolean; export declare function resolveEffectiveTimeZone(cliTimeZone?: string, profileTimeZone?: string): string | undefined; export declare function parseTimestamp(raw: string, label: string, timeZone?: string): number; export declare function parseAction(raw: string, label: string): 'confirm' | 'rollback'; /** * 角色负责人更新天然是稀疏补丁,按 role 去重可以避免重复参数把请求体变成未定义行为。 */ export declare function parseRoleAssignments(rawAssignments: string[] | undefined, label: string): RoleOwner[]; /** * commander 默认会覆盖重复参数,这里统一改成累加,避免字段赋值场景只能保留最后一个值。 */ export declare function collectOptionValue(value: string, previous?: string[]): string[]; /** * 直接暴露 type_key,避免把自定义工作项类型的唯一标识继续伪装成模糊的 type 名称。 */ export declare function buildWorkItemTypeKeyOption(args?: WorkItemTypeKeyOptionArgs): Option; export declare function readOptionalJsonFile(filePath?: string): Promise; /** * 统一处理内联 JSON、文件、标准输入三种输入方式。 * 当 `--body -` 时自动走 stdin(Unix 惯例),Agent 可以通过 * `echo '{"key":"val"}' | meegle ... --body -` 传复杂 JSON, * 彻底绕开 shell 引号转义问题。所有已有命令无需改动即可使用。 */ export declare function readJsonInput(args: { inlineJson?: string; filePath?: string; label: string; }): Promise; /** * 大段文本更适合放文件里,这里统一收口,避免每个命令重复处理互斥逻辑。 */ export declare function readTextInput(args: { inlineText?: string; filePath?: string; label: string; }): Promise; /** * 统一约束"快捷参数"和"原始请求体"只能二选一,避免隐式合并导致结果不可预测。 */ export declare function assertInputMode(args: { commandId: string; shortcutUsed: boolean; rawBodyUsed: boolean; }): void; /** * 统一处理空值兜底,避免初始化命令把环境变量、显式参数和默认值分散在多处。 */ export declare function pickFirstDefined(...values: Array): string | undefined; /** * 用户在命令行里更容易写"看起来像 JSON 的值",这里统一做宽松解析,减少不必要的引号负担。 */ export declare function parseCliValue(raw: string): unknown; /** * `--field key=value` 是写操作里最通用的表达方式,统一解析后其他命令都能复用。 */ export declare function parseFieldAssignments(rawFields: string[] | undefined): FieldValuePair[]; /** * 角色控件与工作流角色负责人共用同一份流程角色配置,因此角色解析与人员解析应复用同一套规则。 */ export declare function normalizeRoleOwners(ctx: GuardContext, projectKey: string, workItemTypeKey: string | undefined, roleOwners: RoleOwner[] | undefined): Promise; /** * workflow 的 role_assignee 与字段 role_owners 结构一致,只是语义挂载点不同,因此可以直接复用同一套规范化逻辑。 */ export declare function normalizeRoleAssignments(ctx: GuardContext, projectKey: string, workItemTypeKey: string | undefined, roleOwners: RoleOwner[] | undefined): Promise; /** * 补齐字段类型之后,再按真实字段类型做输入规范化,避免把日期、业务线、人员、级联字段继续原样透传给后端。 */ export declare function normalizeFieldValuePairs(ctx: GuardContext, projectKey: string, workItemTypeKey: string | undefined, fields: FieldValuePair[] | undefined, descriptors: FieldTypeDescriptor[] | undefined, timeZone?: string): Promise; export declare function hydrateFieldTypeKeys(fields: FieldValuePair[] | undefined, descriptors: FieldTypeDescriptor[] | undefined): FieldValuePair[] | undefined; /** * 无需每次都查 meta,只有字段类型缺失时才值得做一次补齐请求。 */ export declare function needsFieldTypeHydration(fields: FieldValuePair[] | undefined): boolean; /** * 简单场景下让用户直接写 `P2` 或 `高:high`,避免为了单选字段再手写完整对象。 */ export declare function parseSelectLikeValue(raw: string): { label: string; value: string; } | Record; export declare function getFieldIdentifier(field: FieldValuePair): string | undefined; /** * 快捷参数与自定义字段如果指向同一字段,最终结果会高度不可预测,这里直接拒绝。 */ export declare function assertNoFieldConflicts(commandId: string, shortcutFields: FieldValuePair[], customFields: FieldValuePair[]): void; export declare function buildCommonShortcutFields(args: { commandId: string; desc?: string; owner?: string; priority?: string; customFields?: string[]; }): FieldValuePair[]; /** * 排期字段在多个命令里都长得一样,集中解析后可以保证日期与估分语义一致。 */ export declare function buildSchedule(args: { start?: string; end?: string; points?: string; isAuto?: string; timeZone?: string; }): Schedule | undefined; export interface PaginatedPage { items: T[]; total: number; } /** * 自动遍历所有分页,把全量数据拼在一起返回。 * Agent 最常见的需求就是"给我全部数据",逐页手动翻页是典型的摩擦点。 * 内置硬上限 10000 条,避免意外拉取海量数据把内存撑爆。 */ export declare function fetchAllPages(fetchPage: (pageNum: number, pageSize: number) => Promise>, pageSize?: number, maxItems?: number): Promise<{ items: T[]; total: number; }>; export declare function resolveGlobal(program: Command): GlobalOptions; export declare function printOk(asJson: boolean): void; export { printData, isEnvJsonMode } from '../core/output.js'; export { CliError } from '../core/cli-error.js'; export { runGuarded, type GuardContext } from '../core/command-guard.js';