Files
jackwener__opencli/clis/doubao/meeting-summary.ts
jackwener 314bc6f231 refactor: simplify core modules — remove root shims, consolidate error classification, streamline cascade/interceptor, clean up synthesize
1. Remove root-level shim files (errors.ts, logger.ts, registry.ts, types.ts, utils.ts, launcher.ts) — update all ~840 adapter imports to reference src/ directly
2. Consolidate interceptor: reuse shared DISGUISE_FN in tap interceptor instead of reimplementing
3. Unify error classification: single ClassifiedError type with icon/exitCode/hint lookup table, eliminating duplicated pattern matching between resolveExitCode and renderError
4. Simplify cascade probe: replace repetitive switch cases with PROBE_OPTIONS lookup map
12. Clean up synthesize.ts: remove deprecated snake_case field aliases (recommended_args, recommended_columns, recommendedColumnsLegacy) and unnecessary constant aliases

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 03:06:47 +08:00

54 lines
1.7 KiB
TypeScript

import { cli, Strategy } from '../../src/registry.js';
import type { IPage } from '../../src/types.js';
import {
DOUBAO_DOMAIN,
openMeetingPanel,
getMeetingSummary,
getMeetingChapters,
parseDoubaoConversationId,
} from './utils.js';
export const meetingSummaryCommand = cli({
site: 'doubao',
name: 'meeting-summary',
description: 'Get meeting summary and chapters from a Doubao conversation',
domain: DOUBAO_DOMAIN,
strategy: Strategy.COOKIE,
browser: true,
navigateBefore: false,
args: [
{ name: 'id', required: true, positional: true, help: 'Conversation ID (numeric or full URL)' },
{ name: 'chapters', required: false, help: 'Also include AI chapters', default: 'false' },
],
columns: ['Section', 'Content'],
func: async (page: IPage, kwargs: Record<string, unknown>) => {
const conversationId = parseDoubaoConversationId(kwargs.id as string);
const includeChapters = kwargs.chapters === 'true' || kwargs.chapters === true;
const opened = await openMeetingPanel(page, conversationId);
if (!opened) {
return [{ Section: 'Error', Content: 'No meeting card found in this conversation.' }];
}
const summary = await getMeetingSummary(page);
const result: Array<{ Section: string; Content: string }> = [];
if (summary) {
result.push({ Section: 'Summary', Content: summary });
}
if (includeChapters) {
const chapters = await getMeetingChapters(page);
if (chapters) {
result.push({ Section: 'Chapters', Content: chapters });
}
}
if (result.length === 0) {
return [{ Section: 'Info', Content: 'Meeting panel opened but no content found yet. Try again.' }];
}
return result;
},
});