{"id":"ab898e7f-b875-4f84-9ac5-1355ca27fa4d","entityType":"agent","slug":"clawhub-myd2002-tencent-meeting-ingest","name":"tencent-meeting-ingest","canonicalUrl":"https://www.xpersona.co/agent/clawhub-myd2002-tencent-meeting-ingest","canonicalPath":"/agent/clawhub-myd2002-tencent-meeting-ingest","generatedAt":"2026-10-10T10:45:15.714Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T07:47:25.060Z","emptyReason":null},"description":"Ingest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.6K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s175zrvz5m28epr76c6rt4dtex8474t6:tencent-meeting-ingest","sourceUrl":"https://clawhub.ai/myd2002/tencent-meeting-ingest","homepage":"https://clawhub.ai/myd2002/skills/tencent-meeting-ingest","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/myd2002/tencent-meeting-ingest","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/myd2002/skills/tencent-meeting-ingest","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":64,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"tencent-meeting-ingest technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T07:47:25.060Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T07:47:25.060Z","emptyReason":null},"stars":null,"forks":null,"downloads":1581,"packageName":null,"latestVersion":"1.0.14","tractionLabel":"1.6K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T07:47:25.060Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T07:47:25.060Z","lastCrawledAt":"2026-10-10T07:47:25.060Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T07:47:25.060Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.14","createdAt":"2026-08-07T16:42:39.111Z","changelog":"- Removed the sample file skill-card.md. - No changes to code or documented interfaces. - Documentation and functionality remain unchanged.","fileCount":17,"zipByteSize":40522},{"version":"1.0.13","createdAt":"2026-07-10T20:12:20.045Z","changelog":"Big update: Refactored meeting ingestion to draft-based workflow, replaced pages.json format, improved context/output handling. - Switched to \"prepare → Markdown drafts + compact manifest → validate-manifest → apply\" workflow; long wiki content now flows via file drafts, not JSON. - Output manifest is now a concise file listing draft files and item keys; content is not embedded in JSON. - Added `validate-manifest` step for fast checking of drafts/manifests before apply; strict path and format validation. - Introduced context caching per backend task, optimizing incremental re-runs and reducing unnecessary external calls. - Updated page and context handling to only expose safe fields, and improved cleanup/retry logic. - Removed legacy skill-card.md, added dedicated test for manifest workflow.","fileCount":17,"zipByteSize":40328},{"version":"1.0.12","createdAt":"2026-07-09T18:21:57.402Z","changelog":"- Removed the file skill-card.md. - Updated the default historical scan window from 90 days to 45 days in the workflow documentation. - Clarified the meeting merging logic: now meetings with the same ID/number, on the same day, with normalized titles and overlapping or closely adjacent recording times are merged into a single input item for processing. - Minor clarifications and additions to process descriptions in SKILL.md, particularly around the prepare stage and item counting.","fileCount":16,"zipByteSize":28897},{"version":"1.0.11","createdAt":"2026-07-09T16:43:38.075Z","changelog":"- Removed sample skill card file skill-card.md to clean up repository. - No changes to code or documented behavior.","fileCount":16,"zipByteSize":26488},{"version":"1.0.10","createdAt":"2026-07-09T14:39:30.287Z","changelog":"- Updated default historical scanning window from 180 days to 90 days. - Increased the default window size for MCP list calls to 31 days (was 7 days); now configurable, max 31 days. - Set default incremental scanning overlap to 1 day (was 3 days) to reduce duplicate MCP calls. - Limited ended meeting fallback to recent 14 days by default when using `get_user_ended_meetings`. - Introduced `pageSize=10` and `maxRecords=100` defaults for MCP queries. - Clarified configuration advice and behaviors for window size and fallback in the skill documentation.","fileCount":16,"zipByteSize":26392},{"version":"1.0.9","createdAt":"2026-07-08T19:26:36.070Z","changelog":"No code or documentation changes detected in this version. - No file changes were made compared to the previous version.","fileCount":16,"zipByteSize":26224},{"version":"1.0.8","createdAt":"2026-07-08T19:19:32.779Z","changelog":"No changes detected in this release. - Version bump only; functionality and documentation remain unchanged.","fileCount":16,"zipByteSize":26007},{"version":"1.0.7","createdAt":"2026-07-08T19:11:30.759Z","changelog":"No file changes detected for version 1.0.7. - No updates or modifications in the code or documentation files. - Skill functionality and usage remain the same as previous version.","fileCount":16,"zipByteSize":25978}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s175zrvz5m28epr76c6rt4dtex8474t6:tencent-meeting-ingest","setupComplexity":"medium","setupSteps":["Install using `clawhub skill install s175zrvz5m28epr76c6rt4dtex8474t6:tencent-meeting-ingest` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/myd2002/tencent-meeting-ingest before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-myd2002-tencent-meeting-ingest/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-myd2002-tencent-meeting-ingest/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-myd2002-tencent-meeting-ingest/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-myd2002-tencent-meeting-ingest/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-myd2002-tencent-meeting-ingest/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-myd2002-tencent-meeting-ingest/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T10:45:15.711Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-myd2002-tencent-meeting-ingest/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-myd2002-tencent-meeting-ingest/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-myd2002-tencent-meeting-ingest/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-myd2002-tencent-meeting-ingest/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T07:47:25.060Z","emptyReason":null},"readme":"Skill: tencent-meeting-ingest\n\nOwner: myd2002\n\nSummary: Ingest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates.\n\nTags: latest:1.0.14\n\nVersion history:\n\nv1.0.14 | 2026-08-07T16:42:39.111Z | user\n\n- Removed the sample file skill-card.md.\n- No changes to code or documented interfaces.\n- Documentation and functionality remain unchanged.\n\nv1.0.13 | 2026-07-10T20:12:20.045Z | user\n\nBig update: Refactored meeting ingestion to draft-based workflow, replaced pages.json format, improved context/output handling.\n\n- Switched to \"prepare → Markdown drafts + compact manifest → validate-manifest → apply\" workflow; long wiki content now flows via file drafts, not JSON.\n- Output manifest is now a concise file listing draft files and item keys; content is not embedded in JSON.\n- Added `validate-manifest` step for fast checking of drafts/manifests before apply; strict path and format validation.\n- Introduced context caching per backend task, optimizing incremental re-runs and reducing unnecessary external calls.\n- Updated page and context handling to only expose safe fields, and improved cleanup/retry logic.\n- Removed legacy skill-card.md, added dedicated test for manifest workflow.\n\nv1.0.12 | 2026-07-09T18:21:57.402Z | user\n\n- Removed the file skill-card.md.\n- Updated the default historical scan window from 90 days to 45 days in the workflow documentation.\n- Clarified the meeting merging logic: now meetings with the same ID/number, on the same day, with normalized titles and overlapping or closely adjacent recording times are merged into a single input item for processing.\n- Minor clarifications and additions to process descriptions in SKILL.md, particularly around the prepare stage and item counting.\n\nv1.0.11 | 2026-07-09T16:43:38.075Z | user\n\n- Removed sample skill card file skill-card.md to clean up repository.\n- No changes to code or documented behavior.\n\nv1.0.10 | 2026-07-09T14:39:30.287Z | user\n\n- Updated default historical scanning window from 180 days to 90 days.\n- Increased the default window size for MCP list calls to 31 days (was 7 days); now configurable, max 31 days.\n- Set default incremental scanning overlap to 1 day (was 3 days) to reduce duplicate MCP calls.\n- Limited ended meeting fallback to recent 14 days by default when using `get_user_ended_meetings`.\n- Introduced `pageSize=10` and `maxRecords=100` defaults for MCP queries.\n- Clarified configuration advice and behaviors for window size and fallback in the skill documentation.\n\nv1.0.9 | 2026-07-08T19:26:36.070Z | user\n\nNo code or documentation changes detected in this version.\n\n- No file changes were made compared to the previous version.\n\nv1.0.8 | 2026-07-08T19:19:32.779Z | user\n\nNo changes detected in this release.  \n- Version bump only; functionality and documentation remain unchanged.\n\nv1.0.7 | 2026-07-08T19:11:30.759Z | user\n\nNo file changes detected for version 1.0.7.\n\n- No updates or modifications in the code or documentation files.\n- Skill functionality and usage remain the same as previous version.\n\nv1.0.6 | 2026-07-08T18:58:50.496Z | user\n\nVersion 1.0.6\n\n- The default `pageSize=10` is specified for Tencent Meeting API queries in the `prepare` process to match the platform skill's CLI defaults.\n- The transcript fetching process now officially prefers `get_transcripts_details(pid=0)` first; if missing or failed, it falls back to fetching paragraph IDs with `get_transcripts_paragraphs` and then uses `get_transcripts_details` per paragraph.\n- No other functional or file changes detected in this release.\n\nv1.0.5 | 2026-07-08T18:35:00.776Z | user\n\n- Adjusted the default meeting scan window in prepare from up to 31 days to a 7-day window to avoid MCP large-window silent failures (windowDays now defaults to 7 and remains configurable, max 31).\n- Documentation clarified around scan logic, making explicit that 7-day scan windows are used by default for initial and incremental checks.\n- No code or functional changes; this is a documentation-only update aligning SKILL.md with current integration behavior.\n\nv1.0.4 | 2026-07-08T17:47:14.798Z | user\n\nNo user-visible file changes detected in this release.\n\n- No changes to code or documentation files.\n- Functionality remains unchanged from the previous version.\n\nv1.0.3 | 2026-07-08T17:01:43.985Z | user\n\nVersion 1.0.3\n\n- Expanded and clarified the protocol for ingesting Tencent Meeting content into the Research KB, including platform data-fetching, knowledge graph updates, and output contracts.\n- Updated prepare stage to: default scan 180 days of history, prioritize recording list API, allow optional inclusion of ended meetings, and handle partial/failed scan windows.\n- Enhanced guidance for OpenClaw: now requires private planning of knowledge graph updates and cross-page relationships before generating pages.\n- Added new documentation detail on managing page relations (relatedPages, relatedCodePages, concepts, overview, etc.) and update criteria for navigation/overview.\n- Improved and clarified directory/file update rules and scenarios where relationship or overview pages should/shouldn't be generated.\n\nv1.0.2 | 2026-07-08T11:29:28.334Z | user\n\nVersion 1.0.2\n\n- No file changes detected; documentation and SKILL.md remain unchanged.\n- No new features, fixes, or modifications in this release.\n\nv1.0.1 | 2026-07-08T11:06:16.568Z | user\n\n- Version 1.0.1 released.\n- No code or SKILL.md changes detected.\n- No functional changes; documentation and interface remain unchanged from previous version.\n\nv1.0.0 | 2026-07-07T17:49:42.415Z | auto\n\n- Initial release of tencent_meeting_ingest.\n- Ingests ended Tencent Meeting materials into the Research KB by coordinating with tencent-meeting-skill for data fetching and OpenClaw for structured wiki page generation and KB updates.\n- Implements a two-stage process: prepare (gather and archive meeting data, validate input) and apply (validate and apply OpenClaw page outputs).\n- Handles only ingestion and wiki generation—meeting scheduling, permission grants, notifications, and Q&A are out of scope.\n- Enforces structured KB updates, result JSON output, and strict directory/format conventions.\n\nArchive index:\n\nArchive v1.0.14: 17 files, 40522 bytes\n\nFiles: _meta.json (142b), env-example.txt (365b), main.js (213b), requirements.txt (101b), scripts/catalog.py (5425b), scripts/external_skill_bridge.py (2627b), scripts/gitea_api.py (5388b), scripts/meeting_kb_writer.py (19852b), scripts/meeting_reader.py (43650b), scripts/run_task.py (7178b), scripts/task_io.py (1220b), scripts/tencent_meeting_bridge.py (6149b), scripts/utils.py (3678b), setup.sh (193b), skill-card.md (2299b), SKILL.md (12926b), tests/test_manifest_workflow.py (21309b)\n\nFile v1.0.14:SKILL.md\n\n---\r\nname: tencent-meeting-ingest\ndescription: Ingest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates.\r\n---\r\n\r\n# tencent-meeting-ingest\n\r\n## 职责边界\r\n\r\n本 skill 只负责“腾讯会议资料入库编译”。腾讯会议平台能力不在这里重新实现：会议列表、录制列表、智能纪要、转写全文、录制地址和权限错误都必须通过已安装的 `tencent-meeting-skill` / `tencent-meeting-mcp` 调用。\r\n\r\n后端负责创建资料源、触发任务、保存任务状态和传递 payload/resultFile。Python 脚本只负责确定性动作：读取 payload、调用外部腾讯会议 skill、归档源材料到 `source_files/tencent_meeting/`、准备 OpenClaw 上下文和任务专用草稿目录、校验短 manifest 与 Markdown 草稿、读取草稿正文、写入 Gitea、维护 `catalog.json`/`index.md`、写 `resultFile`。OpenClaw 负责智能判断：理解会议内容、把 Wiki 正文写成普通 Markdown 草稿、选择页面、判断是否需要更新项目页/概念页/资源页/其他相关页、组织页面之间的链接。\n\r\n本 skill 不做会议创建、取消、改期、权限申请提交、邮件通知、issue 草稿、问答沉淀，也不保留“没有 OpenClaw 时自动生成简陋页面”的 fallback。\r\n\r\n会议入库不只是生成会议纪要页。写 Markdown 草稿和 manifest 前，OpenClaw 应私下做一次知识图谱规划：每场会议先落到 `meetings/` 实体页，再判断它是否改变项目路线、研究主题、实验计划、资源选择、团队导航或已有概念/资源页。没有证据时不要硬建关系页；但会议明确带来决策、路线变化或跨页面综合价值时，应更新相关 `overview/`、`projects/`、`concepts/`、`resources/` 或其他页面，并保留解释性跳转。\n\r\n## 依赖环境\r\n\r\n必须在 OpenClaw 运行环境中具备：\r\n\r\n- 已安装并可调用的 `tencent-meeting-skill` 或 `tencent-meeting-mcp`。\r\n- `TENCENT_MEETING_TOKEN`，供腾讯会议 skill 使用。\r\n- `GITEA_URL`\r\n- `GITEA_BOT_TOKEN`\r\n- `GITEA_BOT_USERNAME` 或 `GITEA_ORG`\r\n- `TEAM_KB_REPO`\r\n\r\n可选：\r\n\r\n- `TENCENT_MEETING_SKILL_COMMAND`：显式指定腾讯会议 skill CLI，例如 `python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py`。未配置时，脚本会查找同级 skill 目录 `tencent-meeting-skill/scripts/tencent_meeting.py` 或 `tencent-meeting-mcp/scripts/tencent_meeting.py`。\r\n\r\n## 运行协议\r\n\r\n本 skill 使用 `prepare -> Markdown drafts + compact manifest -> validate-manifest -> apply` 流程。长正文不进入 JSON；manifest 只承担短元数据交接。\n\r\n### 1. prepare\r\n\r\n```bash\r\npython3 scripts/run_task.py prepare --input <payload.json> --context-output <context.json>\r\n```\r\n\r\n`prepare` 会：\r\n\r\n1. 读取后端 payload 中的资料源、配置和 `lastSnapshot`。\r\n2. 初次扫描时默认按最近 `historyLookbackDays` 天扫描历史会议，默认 14 天；默认拆成 31 天窗口以减少 MCP 列表调用次数，`windowDays` 可配置且最大不超过 31 天；默认 `pageSize=10`、`maxRecords=30`，`maxRecords` 强制限制在 1 到 500，并会提前停止列表分页，不是拉完全部记录后才截断。每场会议写入 `context.json` 的 `contentPreview` 默认最多 12000 字符，完整智能纪要/转写仍归档到 `source_files/tencent_meeting/`。若腾讯会议 MCP 对大窗口表现不稳定，可在资料源配置中将 `windowDays` 下调到 7 或 14。\n3. 增量扫描时从 `lastSnapshot.scanUntil` 往前重叠 `incrementalOverlapDays` 天，默认 1 天，避免会议纪要延迟生成导致漏扫，同时减少重复 MCP 调用。\r\n4. 调用腾讯会议 skill：\r\n   - 默认优先用 `get_records_list` 按时间窗口查询录制文件，这是最节省额度且最贴近“可入库纪要/转写”的入口；\r\n   - 若某个时间窗口的 `get_records_list` 返回空，且未配置 `fallbackToEndedMeetings=false`，默认仅对最近 `endedMeetingsFallbackRecentDays` 天（默认 14 天）的窗口自动调用 `get_user_ended_meetings` 补充已结束会议，再按会议 ID/会议号查询录制，避免历史空窗口大量消耗 MCP 额度；\r\n   - 若配置 `includeEndedMeetings=true`，则无论录制时间窗口是否返回内容，都额外调用 `get_user_ended_meetings` 补充已结束会议；\r\n   - `get_smart_minutes` 优先获取 AI 智能纪要；\r\n   - `get_transcripts_details(pid=0)` 优先获取转写全文；若返回空或失败，再用 `get_transcripts_paragraphs` 获取段落 ID，并按段落调用 `get_transcripts_details` 补全文。\r\n   - 计数口径：inputItems[] 按逻辑会议发生次数计数，不按腾讯会议原始录制文件计数；`get_records_list` 的单条 `record_meetings` 如果包含多个 `record_files`，先逐文件展开，确保每个录制/转写文件都被读取，再把同一会议 ID/会议号、同一天、标题归一化一致且录制时间区间重叠或 10 分钟内相邻的云录制/转写记录合并；复用会议号但日期或时间明显不同的会议仍分开；合并项保留 recordFileIds、meetingRecordIds 和 mergedRecordCount 以便追踪。\n5. 只有智能纪要或转写至少一个可用时才作为 `inputItems[]` 交给 OpenClaw。\r\n6. 把每场可入库会议的源材料归档为 `source_files/tencent_meeting/<sourceId>/<date>-<slug>-<hash>.md`。\r\n7. 基于 record id 和内容 hash 做增量判断；已处理且内容未变的会议写入 `skippedSources[]`。\r\n8. 对缺纪要/缺转写/无权限/未生成内容的会议写入 `incompleteItems[]` 或 `errors[]`，不自动申请权限，也不生成低价值空页面。\r\n9. 输出 `context.json`，并在 `pageOutput` 给出本次 attempt 独立的 `draftDir` 和 `manifestPath`。`prepare` 会先清理同 attempt 的旧草稿，避免失败重试误用上次残留文件；写入 context 前会递归剔除 config 中名称包含 token/secret/password/credential/api_key 的字段。首次 attempt 成功产出可入库 context 后，会按 taskId 缓存这份受限 context；同一后端任务的后续 attempt 在 source/config/lastSnapshot 指纹一致时直接复用，不再次调用腾讯会议 MCP，并为新 attempt 重建空草稿目录。apply 成功写出 resultFile 后删除对应缓存，遗留缓存最多保留 7 天。如果没有新内容，`prepare` 会把 skip 结果写入 `resultFile`。如果某些扫描窗口因为 MCP 额度、网络或平台错误失败，`snapshot.scanComplete=false`，且不会把 `scanUntil` 推进到当前时间；后续扫描会继续覆盖未完整完成的历史窗口，避免漏掉旧会议。\n\n### 2. OpenClaw 生成 Markdown 草稿和短 manifest\n\nOpenClaw 必须阅读 `context.json`，为每个 `inputItems[]` 至少生成或更新一个 `meetings/` 实体页。把正文作为 UTF-8 Markdown 文件写到 `context.pageOutput.draftDir` 下。`draftFile` 使用 KB 根目录相对路径，并同时作为最终 Wiki 页面路径，例如 `meetings/2026-07-11-project-sync.md`。\n\nMarkdown 第一行使用 `# 页面标题`。正文可以直接包含中文引号、ASCII 双引号、表格、代码块、JSON 示例和多行文本，不需要做 JSON 转义。不要给草稿添加 frontmatter；Python 会统一补齐来源追踪和 catalog 元数据。正文中的页面关系使用 KB 根路径 wikilink，例如 `[[projects/cloud-native.md|云原生项目]]`、`[[concepts/devops-maturity.md|DevOps 成熟度]]`；Python 会按根目录推导关系字段。\n\n然后使用 JSON serializer 把短 manifest 写到 `context.pageOutput.manifestPath`。manifest 不得嵌入 `content` 或 `body`：\n\n```json\n{\n  \"format\": \"research-kb-markdown-drafts/v1\",\n  \"pages\": [\n    {\n      \"draftFile\": \"meetings/2026-07-11-project-sync.md\",\n      \"sourceItemKeys\": [\"<inputItems[].itemKey>\"]\n    }\n  ]\n}\n```\n\nmanifest 的每个页面必须明确列出 `sourceItemKeys`，且只能引用本次 `inputItems[].itemKey`。可选的 `projectIds`、`keywords`、`relatedConcepts`、`relatedResources`、`relatedCodePages`、`relatedPages` 仍受支持，但通常不需要填写：标题从 Markdown H1 提取，类型从路径推导，来源 ID 和 sourceStatus 由 Python 决定，关系从 wikilink 推导。manifest 不控制 snapshot、errors、skippedSources 或 resultFile。\n\n允许写入或更新的目录：`meetings/`、`projects/`、`papers/`、`surveys/`、`code/`、`experiments/`、`tech-notes/`、`notes/`、`concepts/`、`resources/`、必要的 `overview/`。不要写 `qa/`，问答沉淀由 `kb_query` 负责。不要写 `source_files/`，源材料归档由 `prepare` 完成。不要把绝对路径、`..`、草稿目录外文件或与 `draftFile` 不一致的 `path` 放进 manifest。\n\n### 3. validate-manifest\n\n```bash\npython3 scripts/run_task.py validate-manifest --input <payload.json> --context <context.json>\n```\n\n`validate-manifest` 只读草稿和 manifest，不写 Gitea、不写 `resultFile`。如果失败，修正草稿或 manifest 后重新校验；校验成功不是任务终态，必须继续执行 `apply`。\n\n### 4. apply\n\n```bash\npython3 scripts/run_task.py apply --input <payload.json> --context <context.json>\n```\n\n`apply` 会再次执行同一套校验，然后：\n\n- 校验 manifest 格式、`pages[]` 非空、每个 `draftFile` 存在且为 UTF-8 Markdown。\n- 校验每个可读 `inputItems[]` 至少被一个 `meetings/` 页面覆盖。\n- 校验每个页面的 `sourceItemKeys` 引用有效会议 item。\n- 拦截绝对路径、路径越界、软链接逃逸、重复目标路径、非 Markdown、写入未允许目录、在 manifest 中重新嵌入正文等问题；manifest 和草稿根目录必须与本次 task/attempt 的 prepare 输出完全一致，不能通过 context 或 CLI 参数改写到其他目录。\n- 从 Markdown H1 提取标题，从路径推导页面类型，从正文 wikilink 推导 catalog 关系。\n- 为页面补齐 frontmatter、source trace、归档路径、record id、hash、sourceStatus。\n- 写入/更新 Markdown 页面、`catalog.json` 和 `index.md`。\n- Gitea 写配置不完整时明确失败，不进入假写入 dry-run；现有 `catalog.json` 不是合法对象或 `pages[]` 非法时拒绝覆盖；最终 `resultFile` 先写同目录临时文件再原子替换，避免后端轮询到半截 JSON。\n- 合并并写回 snapshot，供后续定时扫描增量判断。\r\n- 把后端需要的统一结果 JSON 写入 `resultFile`。\n\n兼容说明：`apply --pages <legacy-pages.json>` 暂时保留旧格式入口，便于旧任务或手工排查；腾讯会议正常流程和后端提示只使用 Markdown 草稿 + manifest，不再生成大 `pages.json`。\n\r\n## 会议页面模板\r\n\r\n会议实体页沿用本地文件入库 skill 的会议模板，当前判断是合理的：它服务科研团队复用，重点不是流水账，而是决策、行动项、风险和证据。\r\n\r\n核心章节：\r\n\r\n1. `## 会议信息`：时间、参与者、主题、腾讯会议 ID/会议号/录制 ID、源材料路径；缺失则标注“来源未提及”。\r\n2. `## 议程与背景`：会议围绕什么问题展开，关联哪些项目或资料。\r\n3. `## 关键讨论`：按主题整理观点、证据、分歧和上下文。\r\n4. `## 决议`：已经达成的决定、理由和影响范围。\r\n5. `## 行动项`：任务、负责人、截止时间、依赖、状态；缺失则写“来源未提及”。\r\n6. `## 风险与阻塞`：项目风险、资源缺口、技术难点和待协调事项。\r\n7. `## 开放问题`：未解决问题和需要补充的证据。\r\n8. `## 关联页面`：链接相关项目、实验、论文、技术方案、概念或资源。\r\n9. `## 来源与证据索引`：智能纪要、转写、源材料归档路径、record id、hash。\r\n\r\n如果会议明确改变某个项目的路线、任务或开放问题，应同步更新 `projects/`。如果会议反复出现可复用方法、架构、工具、数据集或平台，应视证据更新 `concepts/` 或 `resources/`。不要为普通关键词机械建概念页。\r\n\r\n如果会议内容影响团队级导航、阶段性资料包、研究主题地图或项目群总览，应更新 `overview/`；如果只是一次普通同步、没有导航或综合价值，则不需要硬建 overview。普通页面之间的关系用 `relatedPages`，概念、资源、代码页分别用 `relatedConcepts`、`relatedResources`、`relatedCodePages`。\r\n\r\n## 输出契约\r\n\r\n最终 resultFile 必须是后端可读的顶层 JSON envelope：\r\n\r\n```json\r\n{\r\n  \"success\": true,\r\n  \"processedSources\": [],\r\n  \"createdPages\": [],\r\n  \"updatedPages\": [],\r\n  \"archivedFiles\": [],\r\n  \"skippedSources\": [],\r\n  \"incompleteItems\": [],\r\n  \"errors\": [],\r\n  \"commitId\": \"\",\r\n  \"snapshot\": {}\r\n}\r\n```\n\nFile v1.0.14:_meta.json\n\n{\n  \"ownerId\": \"kn7cp7eb6ymqv898hke0ersmc1847fed\",\n  \"slug\": \"tencent-meeting-ingest\",\n  \"version\": \"1.0.14\",\n  \"publishedAt\": 1786120959111\n}\n\nFile v1.0.14:skill-card.md\n\n## Description:\n\nIngest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[myd2002](https://clawhub.ai/user/myd2002)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and research operations teams use this skill to ingest Tencent Meeting recordings, minutes, and transcripts into a Research KB. It helps an agent prepare meeting source context, create Markdown drafts and compact manifests, validate them, and apply the resulting wiki pages and KB updates.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Task payloads can redirect Gitea uploads carrying the bot token and meeting content.\n\nMitigation: Install only where backend task payloads are trusted or validated, and require the Gitea endpoint to come from administrator-controlled configuration or an allowlist.\n\nRisk: A broad Gitea bot token could expose or modify repositories beyond the intended KB.\n\nMitigation: Use a bot token limited to the intended Team KB repository and the minimum permissions needed for KB updates.\n\nRisk: Full meeting minutes and transcripts may be archived into the repository or shared work area.\n\nMitigation: Keep the shared work directory private, confirm repository access controls, and make users aware that meeting content can be persisted.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/myd2002/skills/tencent-meeting-ingest)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, JSON, Shell commands, Configuration]\n\n**Output Format:** [Markdown drafts, compact JSON manifests, and backend result JSON]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Produces task-scoped draft and manifest paths; meeting source material may be archived as files.]\n\n## Skill Version(s):\n\n1.0.14 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.14:env-example.txt\n\nGITEA_URL=http://127.0.0.1:3000\nGITEA_BOT_TOKEN=\nGITEA_BOT_USERNAME=research-kb-bot\nGITEA_ORG=\nTEAM_KB_REPO=team-kb\nOPENCLAW_SHARED_DIR=/srv/research-kb/shared\nTENCENT_MEETING_TOKEN=\n# Optional when tencent-meeting-skill is not installed as a sibling skill directory:\nTENCENT_MEETING_SKILL_COMMAND=python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py\n\nFile v1.0.14:requirements.txt\n\n# Uses only the Python 3 standard library. Platform fetching is delegated to tencent-meeting-skill.\n\nArchive v1.0.13: 17 files, 40328 bytes\n\nFiles: _meta.json (142b), env-example.txt (365b), main.js (213b), requirements.txt (101b), scripts/catalog.py (5425b), scripts/external_skill_bridge.py (2627b), scripts/gitea_api.py (5388b), scripts/meeting_kb_writer.py (19852b), scripts/meeting_reader.py (43650b), scripts/run_task.py (7178b), scripts/task_io.py (1220b), scripts/tencent_meeting_bridge.py (5572b), scripts/utils.py (3678b), setup.sh (193b), skill-card.md (2455b), SKILL.md (12926b), tests/test_manifest_workflow.py (20490b)\n\nFile v1.0.13:SKILL.md\n\n---\r\nname: tencent-meeting-ingest\ndescription: Ingest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates.\r\n---\r\n\r\n# tencent-meeting-ingest\n\r\n## 职责边界\r\n\r\n本 skill 只负责“腾讯会议资料入库编译”。腾讯会议平台能力不在这里重新实现：会议列表、录制列表、智能纪要、转写全文、录制地址和权限错误都必须通过已安装的 `tencent-meeting-skill` / `tencent-meeting-mcp` 调用。\r\n\r\n后端负责创建资料源、触发任务、保存任务状态和传递 payload/resultFile。Python 脚本只负责确定性动作：读取 payload、调用外部腾讯会议 skill、归档源材料到 `source_files/tencent_meeting/`、准备 OpenClaw 上下文和任务专用草稿目录、校验短 manifest 与 Markdown 草稿、读取草稿正文、写入 Gitea、维护 `catalog.json`/`index.md`、写 `resultFile`。OpenClaw 负责智能判断：理解会议内容、把 Wiki 正文写成普通 Markdown 草稿、选择页面、判断是否需要更新项目页/概念页/资源页/其他相关页、组织页面之间的链接。\n\r\n本 skill 不做会议创建、取消、改期、权限申请提交、邮件通知、issue 草稿、问答沉淀，也不保留“没有 OpenClaw 时自动生成简陋页面”的 fallback。\r\n\r\n会议入库不只是生成会议纪要页。写 Markdown 草稿和 manifest 前，OpenClaw 应私下做一次知识图谱规划：每场会议先落到 `meetings/` 实体页，再判断它是否改变项目路线、研究主题、实验计划、资源选择、团队导航或已有概念/资源页。没有证据时不要硬建关系页；但会议明确带来决策、路线变化或跨页面综合价值时，应更新相关 `overview/`、`projects/`、`concepts/`、`resources/` 或其他页面，并保留解释性跳转。\n\r\n## 依赖环境\r\n\r\n必须在 OpenClaw 运行环境中具备：\r\n\r\n- 已安装并可调用的 `tencent-meeting-skill` 或 `tencent-meeting-mcp`。\r\n- `TENCENT_MEETING_TOKEN`，供腾讯会议 skill 使用。\r\n- `GITEA_URL`\r\n- `GITEA_BOT_TOKEN`\r\n- `GITEA_BOT_USERNAME` 或 `GITEA_ORG`\r\n- `TEAM_KB_REPO`\r\n\r\n可选：\r\n\r\n- `TENCENT_MEETING_SKILL_COMMAND`：显式指定腾讯会议 skill CLI，例如 `python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py`。未配置时，脚本会查找同级 skill 目录 `tencent-meeting-skill/scripts/tencent_meeting.py` 或 `tencent-meeting-mcp/scripts/tencent_meeting.py`。\r\n\r\n## 运行协议\r\n\r\n本 skill 使用 `prepare -> Markdown drafts + compact manifest -> validate-manifest -> apply` 流程。长正文不进入 JSON；manifest 只承担短元数据交接。\n\r\n### 1. prepare\r\n\r\n```bash\r\npython3 scripts/run_task.py prepare --input <payload.json> --context-output <context.json>\r\n```\r\n\r\n`prepare` 会：\r\n\r\n1. 读取后端 payload 中的资料源、配置和 `lastSnapshot`。\r\n2. 初次扫描时默认按最近 `historyLookbackDays` 天扫描历史会议，默认 14 天；默认拆成 31 天窗口以减少 MCP 列表调用次数，`windowDays` 可配置且最大不超过 31 天；默认 `pageSize=10`、`maxRecords=30`，`maxRecords` 强制限制在 1 到 500，并会提前停止列表分页，不是拉完全部记录后才截断。每场会议写入 `context.json` 的 `contentPreview` 默认最多 12000 字符，完整智能纪要/转写仍归档到 `source_files/tencent_meeting/`。若腾讯会议 MCP 对大窗口表现不稳定，可在资料源配置中将 `windowDays` 下调到 7 或 14。\n3. 增量扫描时从 `lastSnapshot.scanUntil` 往前重叠 `incrementalOverlapDays` 天，默认 1 天，避免会议纪要延迟生成导致漏扫，同时减少重复 MCP 调用。\r\n4. 调用腾讯会议 skill：\r\n   - 默认优先用 `get_records_list` 按时间窗口查询录制文件，这是最节省额度且最贴近“可入库纪要/转写”的入口；\r\n   - 若某个时间窗口的 `get_records_list` 返回空，且未配置 `fallbackToEndedMeetings=false`，默认仅对最近 `endedMeetingsFallbackRecentDays` 天（默认 14 天）的窗口自动调用 `get_user_ended_meetings` 补充已结束会议，再按会议 ID/会议号查询录制，避免历史空窗口大量消耗 MCP 额度；\r\n   - 若配置 `includeEndedMeetings=true`，则无论录制时间窗口是否返回内容，都额外调用 `get_user_ended_meetings` 补充已结束会议；\r\n   - `get_smart_minutes` 优先获取 AI 智能纪要；\r\n   - `get_transcripts_details(pid=0)` 优先获取转写全文；若返回空或失败，再用 `get_transcripts_paragraphs` 获取段落 ID，并按段落调用 `get_transcripts_details` 补全文。\r\n   - 计数口径：inputItems[] 按逻辑会议发生次数计数，不按腾讯会议原始录制文件计数；`get_records_list` 的单条 `record_meetings` 如果包含多个 `record_files`，先逐文件展开，确保每个录制/转写文件都被读取，再把同一会议 ID/会议号、同一天、标题归一化一致且录制时间区间重叠或 10 分钟内相邻的云录制/转写记录合并；复用会议号但日期或时间明显不同的会议仍分开；合并项保留 recordFileIds、meetingRecordIds 和 mergedRecordCount 以便追踪。\n5. 只有智能纪要或转写至少一个可用时才作为 `inputItems[]` 交给 OpenClaw。\r\n6. 把每场可入库会议的源材料归档为 `source_files/tencent_meeting/<sourceId>/<date>-<slug>-<hash>.md`。\r\n7. 基于 record id 和内容 hash 做增量判断；已处理且内容未变的会议写入 `skippedSources[]`。\r\n8. 对缺纪要/缺转写/无权限/未生成内容的会议写入 `incompleteItems[]` 或 `errors[]`，不自动申请权限，也不生成低价值空页面。\r\n9. 输出 `context.json`，并在 `pageOutput` 给出本次 attempt 独立的 `draftDir` 和 `manifestPath`。`prepare` 会先清理同 attempt 的旧草稿，避免失败重试误用上次残留文件；写入 context 前会递归剔除 config 中名称包含 token/secret/password/credential/api_key 的字段。首次 attempt 成功产出可入库 context 后，会按 taskId 缓存这份受限 context；同一后端任务的后续 attempt 在 source/config/lastSnapshot 指纹一致时直接复用，不再次调用腾讯会议 MCP，并为新 attempt 重建空草稿目录。apply 成功写出 resultFile 后删除对应缓存，遗留缓存最多保留 7 天。如果没有新内容，`prepare` 会把 skip 结果写入 `resultFile`。如果某些扫描窗口因为 MCP 额度、网络或平台错误失败，`snapshot.scanComplete=false`，且不会把 `scanUntil` 推进到当前时间；后续扫描会继续覆盖未完整完成的历史窗口，避免漏掉旧会议。\n\n### 2. OpenClaw 生成 Markdown 草稿和短 manifest\n\nOpenClaw 必须阅读 `context.json`，为每个 `inputItems[]` 至少生成或更新一个 `meetings/` 实体页。把正文作为 UTF-8 Markdown 文件写到 `context.pageOutput.draftDir` 下。`draftFile` 使用 KB 根目录相对路径，并同时作为最终 Wiki 页面路径，例如 `meetings/2026-07-11-project-sync.md`。\n\nMarkdown 第一行使用 `# 页面标题`。正文可以直接包含中文引号、ASCII 双引号、表格、代码块、JSON 示例和多行文本，不需要做 JSON 转义。不要给草稿添加 frontmatter；Python 会统一补齐来源追踪和 catalog 元数据。正文中的页面关系使用 KB 根路径 wikilink，例如 `[[projects/cloud-native.md|云原生项目]]`、`[[concepts/devops-maturity.md|DevOps 成熟度]]`；Python 会按根目录推导关系字段。\n\n然后使用 JSON serializer 把短 manifest 写到 `context.pageOutput.manifestPath`。manifest 不得嵌入 `content` 或 `body`：\n\n```json\n{\n  \"format\": \"research-kb-markdown-drafts/v1\",\n  \"pages\": [\n    {\n      \"draftFile\": \"meetings/2026-07-11-project-sync.md\",\n      \"sourceItemKeys\": [\"<inputItems[].itemKey>\"]\n    }\n  ]\n}\n```\n\nmanifest 的每个页面必须明确列出 `sourceItemKeys`，且只能引用本次 `inputItems[].itemKey`。可选的 `projectIds`、`keywords`、`relatedConcepts`、`relatedResources`、`relatedCodePages`、`relatedPages` 仍受支持，但通常不需要填写：标题从 Markdown H1 提取，类型从路径推导，来源 ID 和 sourceStatus 由 Python 决定，关系从 wikilink 推导。manifest 不控制 snapshot、errors、skippedSources 或 resultFile。\n\n允许写入或更新的目录：`meetings/`、`projects/`、`papers/`、`surveys/`、`code/`、`experiments/`、`tech-notes/`、`notes/`、`concepts/`、`resources/`、必要的 `overview/`。不要写 `qa/`，问答沉淀由 `kb_query` 负责。不要写 `source_files/`，源材料归档由 `prepare` 完成。不要把绝对路径、`..`、草稿目录外文件或与 `draftFile` 不一致的 `path` 放进 manifest。\n\n### 3. validate-manifest\n\n```bash\npython3 scripts/run_task.py validate-manifest --input <payload.json> --context <context.json>\n```\n\n`validate-manifest` 只读草稿和 manifest，不写 Gitea、不写 `resultFile`。如果失败，修正草稿或 manifest 后重新校验；校验成功不是任务终态，必须继续执行 `apply`。\n\n### 4. apply\n\n```bash\npython3 scripts/run_task.py apply --input <payload.json> --context <context.json>\n```\n\n`apply` 会再次执行同一套校验，然后：\n\n- 校验 manifest 格式、`pages[]` 非空、每个 `draftFile` 存在且为 UTF-8 Markdown。\n- 校验每个可读 `inputItems[]` 至少被一个 `meetings/` 页面覆盖。\n- 校验每个页面的 `sourceItemKeys` 引用有效会议 item。\n- 拦截绝对路径、路径越界、软链接逃逸、重复目标路径、非 Markdown、写入未允许目录、在 manifest 中重新嵌入正文等问题；manifest 和草稿根目录必须与本次 task/attempt 的 prepare 输出完全一致，不能通过 context 或 CLI 参数改写到其他目录。\n- 从 Markdown H1 提取标题，从路径推导页面类型，从正文 wikilink 推导 catalog 关系。\n- 为页面补齐 frontmatter、source trace、归档路径、record id、hash、sourceStatus。\n- 写入/更新 Markdown 页面、`catalog.json` 和 `index.md`。\n- Gitea 写配置不完整时明确失败，不进入假写入 dry-run；现有 `catalog.json` 不是合法对象或 `pages[]` 非法时拒绝覆盖；最终 `resultFile` 先写同目录临时文件再原子替换，避免后端轮询到半截 JSON。\n- 合并并写回 snapshot，供后续定时扫描增量判断。\r\n- 把后端需要的统一结果 JSON 写入 `resultFile`。\n\n兼容说明：`apply --pages <legacy-pages.json>` 暂时保留旧格式入口，便于旧任务或手工排查；腾讯会议正常流程和后端提示只使用 Markdown 草稿 + manifest，不再生成大 `pages.json`。\n\r\n## 会议页面模板\r\n\r\n会议实体页沿用本地文件入库 skill 的会议模板，当前判断是合理的：它服务科研团队复用，重点不是流水账，而是决策、行动项、风险和证据。\r\n\r\n核心章节：\r\n\r\n1. `## 会议信息`：时间、参与者、主题、腾讯会议 ID/会议号/录制 ID、源材料路径；缺失则标注“来源未提及”。\r\n2. `## 议程与背景`：会议围绕什么问题展开，关联哪些项目或资料。\r\n3. `## 关键讨论`：按主题整理观点、证据、分歧和上下文。\r\n4. `## 决议`：已经达成的决定、理由和影响范围。\r\n5. `## 行动项`：任务、负责人、截止时间、依赖、状态；缺失则写“来源未提及”。\r\n6. `## 风险与阻塞`：项目风险、资源缺口、技术难点和待协调事项。\r\n7. `## 开放问题`：未解决问题和需要补充的证据。\r\n8. `## 关联页面`：链接相关项目、实验、论文、技术方案、概念或资源。\r\n9. `## 来源与证据索引`：智能纪要、转写、源材料归档路径、record id、hash。\r\n\r\n如果会议明确改变某个项目的路线、任务或开放问题，应同步更新 `projects/`。如果会议反复出现可复用方法、架构、工具、数据集或平台，应视证据更新 `concepts/` 或 `resources/`。不要为普通关键词机械建概念页。\r\n\r\n如果会议内容影响团队级导航、阶段性资料包、研究主题地图或项目群总览，应更新 `overview/`；如果只是一次普通同步、没有导航或综合价值，则不需要硬建 overview。普通页面之间的关系用 `relatedPages`，概念、资源、代码页分别用 `relatedConcepts`、`relatedResources`、`relatedCodePages`。\r\n\r\n## 输出契约\r\n\r\n最终 resultFile 必须是后端可读的顶层 JSON envelope：\r\n\r\n```json\r\n{\r\n  \"success\": true,\r\n  \"processedSources\": [],\r\n  \"createdPages\": [],\r\n  \"updatedPages\": [],\r\n  \"archivedFiles\": [],\r\n  \"skippedSources\": [],\r\n  \"incompleteItems\": [],\r\n  \"errors\": [],\r\n  \"commitId\": \"\",\r\n  \"snapshot\": {}\r\n}\r\n```\n\nFile v1.0.13:_meta.json\n\n{\n  \"ownerId\": \"kn7cp7eb6ymqv898hke0ersmc1847fed\",\n  \"slug\": \"tencent-meeting-ingest\",\n  \"version\": \"1.0.13\",\n  \"publishedAt\": 1783714340045\n}\n\nFile v1.0.13:skill-card.md\n\n## Description: <br>\nIngest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[myd2002](https://clawhub.ai/user/myd2002) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and research operations teams use this skill to turn Tencent Meeting recordings, smart minutes, and transcripts into structured Research KB meeting pages and related wiki updates. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Sensitive meeting transcripts and minutes may be archived into the Research KB. <br>\nMitigation: Install only with trusted Tencent Meeting command paths and Gitea repositories, verify repository access controls, and use a narrowly scoped Gitea bot token. <br>\nRisk: Broad meeting scans can increase exposure, quota use, or unwanted ingestion. <br>\nMitigation: Keep source configuration limits such as lookback days, window days, page size, and maxRecords tight for the intended source. <br>\nRisk: Generated wiki drafts could target unintended paths or embed excessive content in manifests. <br>\nMitigation: Use the built-in validate-manifest step, task-scoped draft directory checks, allowed write roots, UTF-8 Markdown validation, and compact manifests without embedded page bodies. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/myd2002/skills/tencent-meeting-ingest) <br>\n- [Publisher profile](https://clawhub.ai/user/myd2002) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [JSON, Markdown, Shell commands, Configuration, Guidance] <br>\n**Output Format:** [JSON context and result envelopes with UTF-8 Markdown drafts and a compact JSON manifest] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Writes or updates Research KB pages, catalog.json, index.md, archived source files, and a backend result file.] <br>\n\n## Skill Version(s): <br>\n1.0.13 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.13:env-example.txt\n\nGITEA_URL=http://127.0.0.1:3000\nGITEA_BOT_TOKEN=\nGITEA_BOT_USERNAME=research-kb-bot\nGITEA_ORG=\nTEAM_KB_REPO=team-kb\nOPENCLAW_SHARED_DIR=/srv/research-kb/shared\nTENCENT_MEETING_TOKEN=\n# Optional when tencent-meeting-skill is not installed as a sibling skill directory:\nTENCENT_MEETING_SKILL_COMMAND=python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py\n\nFile v1.0.13:requirements.txt\n\n# Uses only the Python 3 standard library. Platform fetching is delegated to tencent-meeting-skill.\n\nArchive v1.0.12: 16 files, 28897 bytes\n\nFiles: _meta.json (142b), env-example.txt (365b), main.js (174b), requirements.txt (101b), scripts/catalog.py (5150b), scripts/external_skill_bridge.py (2627b), scripts/gitea_api.py (4949b), scripts/meeting_kb_writer.py (13069b), scripts/meeting_reader.py (34898b), scripts/run_task.py (3765b), scripts/task_io.py (1011b), scripts/tencent_meeting_bridge.py (5572b), scripts/utils.py (3678b), setup.sh (193b), skill-card.md (2620b), SKILL.md (9481b)\n\nFile v1.0.12:SKILL.md\n\n---\r\nname: tencent_meeting_ingest\r\ndescription: Ingest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates.\r\n---\r\n\r\n# tencent_meeting_ingest\r\n\r\n## 职责边界\r\n\r\n本 skill 只负责“腾讯会议资料入库编译”。腾讯会议平台能力不在这里重新实现：会议列表、录制列表、智能纪要、转写全文、录制地址和权限错误都必须通过已安装的 `tencent-meeting-skill` / `tencent-meeting-mcp` 调用。\r\n\r\n后端负责创建资料源、触发任务、保存任务状态和传递 payload/resultFile。Python 脚本只负责确定性动作：读取 payload、调用外部腾讯会议 skill、归档源材料到 `source_files/tencent_meeting/`、准备 OpenClaw 上下文、校验 OpenClaw 生成的 JSON、写入 Gitea、维护 `catalog.json`/`index.md`、写 `resultFile`。OpenClaw 负责智能判断：理解会议内容、生成结构化会议 Wiki 页面、判断是否需要更新项目页/概念页/资源页/其他相关页、组织页面之间的链接。\r\n\r\n本 skill 不做会议创建、取消、改期、权限申请提交、邮件通知、issue 草稿、问答沉淀，也不保留“没有 OpenClaw 时自动生成简陋页面”的 fallback。\r\n\r\n会议入库不只是生成会议纪要页。写 `pages.json` 前，OpenClaw 应私下做一次知识图谱规划：每场会议先落到 `meetings/` 实体页，再判断它是否改变项目路线、研究主题、实验计划、资源选择、团队导航或已有概念/资源页。没有证据时不要硬建关系页；但会议明确带来决策、路线变化或跨页面综合价值时，应更新相关 `overview/`、`projects/`、`concepts/`、`resources/` 或其他页面，并保留解释性跳转。\r\n\r\n## 依赖环境\r\n\r\n必须在 OpenClaw 运行环境中具备：\r\n\r\n- 已安装并可调用的 `tencent-meeting-skill` 或 `tencent-meeting-mcp`。\r\n- `TENCENT_MEETING_TOKEN`，供腾讯会议 skill 使用。\r\n- `GITEA_URL`\r\n- `GITEA_BOT_TOKEN`\r\n- `GITEA_BOT_USERNAME` 或 `GITEA_ORG`\r\n- `TEAM_KB_REPO`\r\n\r\n可选：\r\n\r\n- `TENCENT_MEETING_SKILL_COMMAND`：显式指定腾讯会议 skill CLI，例如 `python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py`。未配置时，脚本会查找同级 skill 目录 `tencent-meeting-skill/scripts/tencent_meeting.py` 或 `tencent-meeting-mcp/scripts/tencent_meeting.py`。\r\n\r\n## 运行协议\r\n\r\n本 skill 使用两段式流程。\r\n\r\n### 1. prepare\r\n\r\n```bash\r\npython3 scripts/run_task.py prepare --input <payload.json> --context-output <context.json>\r\n```\r\n\r\n`prepare` 会：\r\n\r\n1. 读取后端 payload 中的资料源、配置和 `lastSnapshot`。\r\n2. 初次扫描时默认按最近 `historyLookbackDays` 天扫描历史会议，默认 45 天；默认拆成 31 天窗口以减少 MCP 列表调用次数，`windowDays` 可配置且最大不超过 31 天；默认 `pageSize=10`、`maxRecords=100`。若腾讯会议 MCP 对大窗口表现不稳定，可在资料源配置中将 `windowDays` 下调到 7 或 14。\r\n3. 增量扫描时从 `lastSnapshot.scanUntil` 往前重叠 `incrementalOverlapDays` 天，默认 1 天，避免会议纪要延迟生成导致漏扫，同时减少重复 MCP 调用。\r\n4. 调用腾讯会议 skill：\r\n   - 默认优先用 `get_records_list` 按时间窗口查询录制文件，这是最节省额度且最贴近“可入库纪要/转写”的入口；\r\n   - 若某个时间窗口的 `get_records_list` 返回空，且未配置 `fallbackToEndedMeetings=false`，默认仅对最近 `endedMeetingsFallbackRecentDays` 天（默认 14 天）的窗口自动调用 `get_user_ended_meetings` 补充已结束会议，再按会议 ID/会议号查询录制，避免历史空窗口大量消耗 MCP 额度；\r\n   - 若配置 `includeEndedMeetings=true`，则无论录制时间窗口是否返回内容，都额外调用 `get_user_ended_meetings` 补充已结束会议；\r\n   - `get_smart_minutes` 优先获取 AI 智能纪要；\r\n   - `get_transcripts_details(pid=0)` 优先获取转写全文；若返回空或失败，再用 `get_transcripts_paragraphs` 获取段落 ID，并按段落调用 `get_transcripts_details` 补全文。\r\n   - 计数口径：inputItems[] 按逻辑会议发生次数计数，不按腾讯会议原始录制文件计数；同一会议 ID/会议号、同一天、标题归一化一致且录制时间区间重叠或 10 分钟内相邻的云录制/转写记录会合并；复用会议号但日期或时间明显不同的会议仍分开；合并项保留 recordFileIds、meetingRecordIds 和 mergedRecordCount 以便追踪。\r\n5. 只有智能纪要或转写至少一个可用时才作为 `inputItems[]` 交给 OpenClaw。\r\n6. 把每场可入库会议的源材料归档为 `source_files/tencent_meeting/<sourceId>/<date>-<slug>-<hash>.md`。\r\n7. 基于 record id 和内容 hash 做增量判断；已处理且内容未变的会议写入 `skippedSources[]`。\r\n8. 对缺纪要/缺转写/无权限/未生成内容的会议写入 `incompleteItems[]` 或 `errors[]`，不自动申请权限，也不生成低价值空页面。\r\n9. 输出 `context.json`。如果没有新内容，`prepare` 会把 skip 结果写入 `resultFile`。如果某些扫描窗口因为 MCP 额度、网络或平台错误失败，`snapshot.scanComplete=false`，且不会把 `scanUntil` 推进到当前时间；后续扫描会继续覆盖未完整完成的历史窗口，避免漏掉旧会议。\r\n\r\n### 2. OpenClaw 生成 pages.json\r\n\r\nOpenClaw 必须阅读 `context.json`，为每个 `inputItems[]` 至少生成或更新一个 `meetings/` 实体页。每个页面必须带 `sourceItemKeys`，引用对应会议的 `inputItems[].itemKey`。\r\n\r\n建议输出：\r\n\r\n```json\r\n{\r\n  \"pages\": [\r\n    {\r\n      \"path\": \"meetings/2026-07-07-project-sync.md\",\r\n      \"title\": \"项目同步会：xxx\",\r\n      \"type\": \"meeting\",\r\n      \"kbType\": \"wiki\",\r\n      \"sourceItemKeys\": [\"<inputItems[].itemKey>\"],\r\n      \"projectIds\": [\"general\"],\r\n      \"keywords\": [],\r\n      \"relatedConcepts\": [\"concepts/example.md\"],\r\n      \"relatedResources\": [\"resources/example.md\"],\r\n      \"relatedPages\": [\"overview/example.md\"],\r\n      \"content\": \"Markdown 正文，不带 frontmatter\"\r\n    }\r\n  ],\r\n  \"skippedSources\": [],\r\n  \"errors\": [],\r\n  \"snapshot\": {}\r\n}\r\n```\r\n\r\n允许写入或更新的目录：`meetings/`、`projects/`、`papers/`、`surveys/`、`code/`、`experiments/`、`tech-notes/`、`notes/`、`concepts/`、`resources/`、必要的 `overview/`。不要写 `qa/`，问答沉淀由 `kb_query` 负责。不要写 `source_files/`，源材料归档由 `prepare` 完成。\r\n\r\n### 3. apply\r\n\r\n```bash\r\npython3 scripts/run_task.py apply --input <payload.json> --context <context.json> --pages <pages.json>\r\n```\r\n\r\n`apply` 会：\r\n\r\n- 校验 `pages[]` 非空。\r\n- 校验每个可读 `inputItems[]` 至少被一个 `meetings/` 页面覆盖。\r\n- 校验每个页面的 `sourceItemKeys` 引用有效会议 item。\r\n- 拦截路径越界、非 Markdown、写入未允许目录等问题。\r\n- 为页面补齐 frontmatter、source trace、归档路径、record id、hash、sourceStatus。\r\n- 写入/更新 Markdown 页面、`catalog.json` 和 `index.md`。\r\n- 合并并写回 snapshot，供后续定时扫描增量判断。\r\n- 把后端需要的统一结果 JSON 写入 `resultFile`。\r\n\r\n## 会议页面模板\r\n\r\n会议实体页沿用本地文件入库 skill 的会议模板，当前判断是合理的：它服务科研团队复用，重点不是流水账，而是决策、行动项、风险和证据。\r\n\r\n核心章节：\r\n\r\n1. `## 会议信息`：时间、参与者、主题、腾讯会议 ID/会议号/录制 ID、源材料路径；缺失则标注“来源未提及”。\r\n2. `## 议程与背景`：会议围绕什么问题展开，关联哪些项目或资料。\r\n3. `## 关键讨论`：按主题整理观点、证据、分歧和上下文。\r\n4. `## 决议`：已经达成的决定、理由和影响范围。\r\n5. `## 行动项`：任务、负责人、截止时间、依赖、状态；缺失则写“来源未提及”。\r\n6. `## 风险与阻塞`：项目风险、资源缺口、技术难点和待协调事项。\r\n7. `## 开放问题`：未解决问题和需要补充的证据。\r\n8. `## 关联页面`：链接相关项目、实验、论文、技术方案、概念或资源。\r\n9. `## 来源与证据索引`：智能纪要、转写、源材料归档路径、record id、hash。\r\n\r\n如果会议明确改变某个项目的路线、任务或开放问题，应同步更新 `projects/`。如果会议反复出现可复用方法、架构、工具、数据集或平台，应视证据更新 `concepts/` 或 `resources/`。不要为普通关键词机械建概念页。\r\n\r\n如果会议内容影响团队级导航、阶段性资料包、研究主题地图或项目群总览，应更新 `overview/`；如果只是一次普通同步、没有导航或综合价值，则不需要硬建 overview。普通页面之间的关系用 `relatedPages`，概念、资源、代码页分别用 `relatedConcepts`、`relatedResources`、`relatedCodePages`。\r\n\r\n## 输出契约\r\n\r\n最终 resultFile 必须是后端可读的顶层 JSON envelope：\r\n\r\n```json\r\n{\r\n  \"success\": true,\r\n  \"processedSources\": [],\r\n  \"createdPages\": [],\r\n  \"updatedPages\": [],\r\n  \"archivedFiles\": [],\r\n  \"skippedSources\": [],\r\n  \"incompleteItems\": [],\r\n  \"errors\": [],\r\n  \"commitId\": \"\",\r\n  \"snapshot\": {}\r\n}\r\n```\n\nFile v1.0.12:_meta.json\n\n{\n  \"ownerId\": \"kn7cp7eb6ymqv898hke0ersmc1847fed\",\n  \"slug\": \"tencent-meeting-ingest\",\n  \"version\": \"1.0.12\",\n  \"publishedAt\": 1783621317402\n}\n\nFile v1.0.12:skill-card.md\n\n## Description: <br>\nIngest Tencent Meeting recordings, smart minutes, and transcripts into a Research KB by delegating platform fetching to a Tencent Meeting skill and applying generated wiki updates. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[myd2002](https://clawhub.ai/user/myd2002) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and research-team operators use this skill to collect Tencent Meeting minutes and transcripts, archive the source material, and turn meetings into structured KB pages. It is intended for team knowledge bases where meeting content may be copied into a configured Gitea repository. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Meeting minutes and transcripts may contain sensitive team, customer, or project information that will be copied into Gitea. <br>\nMitigation: Install only for approved team KBs, prefer a private repository when appropriate, and confirm meeting-content retention expectations before ingestion. <br>\nRisk: The Gitea bot token can write generated pages, source archives, catalog.json, and index.md to the configured KB repository. <br>\nMitigation: Use a least-privilege bot token scoped to the intended repository and keep TEAM_KB_REPO, GITEA_ORG, and related settings pointed at the approved target. <br>\nRisk: Platform fetching is delegated to the command configured by TENCENT_MEETING_SKILL_COMMAND or a sibling Tencent Meeting skill. <br>\nMitigation: Set TENCENT_MEETING_SKILL_COMMAND only to a trusted local Tencent Meeting skill and avoid unreviewed command paths. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/myd2002/skills/tencent-meeting-ingest) <br>\n- [Publisher profile](https://clawhub.ai/user/myd2002) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [JSON, Markdown, Files, API Calls, Configuration] <br>\n**Output Format:** [JSON task envelopes plus Markdown knowledge-base pages and source archives] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Prepare emits an OpenClaw context or skip result; apply writes validated pages, catalog/index updates, archived source paths, and a backend result envelope.] <br>\n\n## Skill Version(s): <br>\n1.0.12 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.12:env-example.txt\n\nGITEA_URL=http://127.0.0.1:3000\nGITEA_BOT_TOKEN=\nGITEA_BOT_USERNAME=research-kb-bot\nGITEA_ORG=\nTEAM_KB_REPO=team-kb\nOPENCLAW_SHARED_DIR=/srv/research-kb/shared\nTENCENT_MEETING_TOKEN=\n# Optional when tencent-meeting-skill is not installed as a sibling skill directory:\nTENCENT_MEETING_SKILL_COMMAND=python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py\n\nFile v1.0.12:requirements.txt\n\n# Uses only the Python 3 standard library. Platform fetching is delegated to tencent-meeting-skill.\n\nArchive v1.0.11: 16 files, 26488 bytes\n\nFiles: _meta.json (142b), env-example.txt (365b), main.js (174b), requirements.txt (101b), scripts/catalog.py (5150b), scripts/external_skill_bridge.py (2627b), scripts/gitea_api.py (4949b), scripts/meeting_kb_writer.py (13069b), scripts/meeting_reader.py (23762b), scripts/run_task.py (3765b), scripts/task_io.py (1011b), scripts/tencent_meeting_bridge.py (5572b), scripts/utils.py (3678b), setup.sh (193b), skill-card.md (2542b), SKILL.md (8917b)\n\nFile v1.0.11:SKILL.md\n\n---\nname: tencent_meeting_ingest\ndescription: Ingest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates.\n---\n\n# tencent_meeting_ingest\n\n## 职责边界\n\n本 skill 只负责“腾讯会议资料入库编译”。腾讯会议平台能力不在这里重新实现：会议列表、录制列表、智能纪要、转写全文、录制地址和权限错误都必须通过已安装的 `tencent-meeting-skill` / `tencent-meeting-mcp` 调用。\n\n后端负责创建资料源、触发任务、保存任务状态和传递 payload/resultFile。Python 脚本只负责确定性动作：读取 payload、调用外部腾讯会议 skill、归档源材料到 `source_files/tencent_meeting/`、准备 OpenClaw 上下文、校验 OpenClaw 生成的 JSON、写入 Gitea、维护 `catalog.json`/`index.md`、写 `resultFile`。OpenClaw 负责智能判断：理解会议内容、生成结构化会议 Wiki 页面、判断是否需要更新项目页/概念页/资源页/其他相关页、组织页面之间的链接。\n\n本 skill 不做会议创建、取消、改期、权限申请提交、邮件通知、issue 草稿、问答沉淀，也不保留“没有 OpenClaw 时自动生成简陋页面”的 fallback。\n\n会议入库不只是生成会议纪要页。写 `pages.json` 前，OpenClaw 应私下做一次知识图谱规划：每场会议先落到 `meetings/` 实体页，再判断它是否改变项目路线、研究主题、实验计划、资源选择、团队导航或已有概念/资源页。没有证据时不要硬建关系页；但会议明确带来决策、路线变化或跨页面综合价值时，应更新相关 `overview/`、`projects/`、`concepts/`、`resources/` 或其他页面，并保留解释性跳转。\n\n## 依赖环境\n\n必须在 OpenClaw 运行环境中具备：\n\n- 已安装并可调用的 `tencent-meeting-skill` 或 `tencent-meeting-mcp`。\n- `TENCENT_MEETING_TOKEN`，供腾讯会议 skill 使用。\n- `GITEA_URL`\n- `GITEA_BOT_TOKEN`\n- `GITEA_BOT_USERNAME` 或 `GITEA_ORG`\n- `TEAM_KB_REPO`\n\n可选：\n\n- `TENCENT_MEETING_SKILL_COMMAND`：显式指定腾讯会议 skill CLI，例如 `python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py`。未配置时，脚本会查找同级 skill 目录 `tencent-meeting-skill/scripts/tencent_meeting.py` 或 `tencent-meeting-mcp/scripts/tencent_meeting.py`。\n\n## 运行协议\n\n本 skill 使用两段式流程。\n\n### 1. prepare\n\n```bash\npython3 scripts/run_task.py prepare --input <payload.json> --context-output <context.json>\n```\n\n`prepare` 会：\n\n1. 读取后端 payload 中的资料源、配置和 `lastSnapshot`。\n2. 初次扫描时默认按最近 `historyLookbackDays` 天扫描历史会议，默认 90 天；默认拆成 31 天窗口以减少 MCP 列表调用次数，`windowDays` 可配置且最大不超过 31 天；默认 `pageSize=10`、`maxRecords=100`。若腾讯会议 MCP 对大窗口表现不稳定，可在资料源配置中将 `windowDays` 下调到 7 或 14。\n3. 增量扫描时从 `lastSnapshot.scanUntil` 往前重叠 `incrementalOverlapDays` 天，默认 1 天，避免会议纪要延迟生成导致漏扫，同时减少重复 MCP 调用。\n4. 调用腾讯会议 skill：\n   - 默认优先用 `get_records_list` 按时间窗口查询录制文件，这是最节省额度且最贴近“可入库纪要/转写”的入口；\n   - 若某个时间窗口的 `get_records_list` 返回空，且未配置 `fallbackToEndedMeetings=false`，默认仅对最近 `endedMeetingsFallbackRecentDays` 天（默认 14 天）的窗口自动调用 `get_user_ended_meetings` 补充已结束会议，再按会议 ID/会议号查询录制，避免历史空窗口大量消耗 MCP 额度；\n   - 若配置 `includeEndedMeetings=true`，则无论录制时间窗口是否返回内容，都额外调用 `get_user_ended_meetings` 补充已结束会议；\n   - `get_smart_minutes` 优先获取 AI 智能纪要；\n   - `get_transcripts_details(pid=0)` 优先获取转写全文；若返回空或失败，再用 `get_transcripts_paragraphs` 获取段落 ID，并按段落调用 `get_transcripts_details` 补全文。\n5. 只有智能纪要或转写至少一个可用时才作为 `inputItems[]` 交给 OpenClaw。\n6. 把每场可入库会议的源材料归档为 `source_files/tencent_meeting/<sourceId>/<date>-<slug>-<hash>.md`。\n7. 基于 record id 和内容 hash 做增量判断；已处理且内容未变的会议写入 `skippedSources[]`。\n8. 对缺纪要/缺转写/无权限/未生成内容的会议写入 `incompleteItems[]` 或 `errors[]`，不自动申请权限，也不生成低价值空页面。\n9. 输出 `context.json`。如果没有新内容，`prepare` 会把 skip 结果写入 `resultFile`。如果某些扫描窗口因为 MCP 额度、网络或平台错误失败，`snapshot.scanComplete=false`，且不会把 `scanUntil` 推进到当前时间；后续扫描会继续覆盖未完整完成的历史窗口，避免漏掉旧会议。\n\n### 2. OpenClaw 生成 pages.json\n\nOpenClaw 必须阅读 `context.json`，为每个 `inputItems[]` 至少生成或更新一个 `meetings/` 实体页。每个页面必须带 `sourceItemKeys`，引用对应会议的 `inputItems[].itemKey`。\n\n建议输出：\n\n```json\n{\n  \"pages\": [\n    {\n      \"path\": \"meetings/2026-07-07-project-sync.md\",\n      \"title\": \"项目同步会：xxx\",\n      \"type\": \"meeting\",\n      \"kbType\": \"wiki\",\n      \"sourceItemKeys\": [\"<inputItems[].itemKey>\"],\n      \"projectIds\": [\"general\"],\n      \"keywords\": [],\n      \"relatedConcepts\": [\"concepts/example.md\"],\n      \"relatedResources\": [\"resources/example.md\"],\n      \"relatedPages\": [\"overview/example.md\"],\n      \"content\": \"Markdown 正文，不带 frontmatter\"\n    }\n  ],\n  \"skippedSources\": [],\n  \"errors\": [],\n  \"snapshot\": {}\n}\n```\n\n允许写入或更新的目录：`meetings/`、`projects/`、`papers/`、`surveys/`、`code/`、`experiments/`、`tech-notes/`、`notes/`、`concepts/`、`resources/`、必要的 `overview/`。不要写 `qa/`，问答沉淀由 `kb_query` 负责。不要写 `source_files/`，源材料归档由 `prepare` 完成。\n\n### 3. apply\n\n```bash\npython3 scripts/run_task.py apply --input <payload.json> --context <context.json> --pages <pages.json>\n```\n\n`apply` 会：\n\n- 校验 `pages[]` 非空。\n- 校验每个可读 `inputItems[]` 至少被一个 `meetings/` 页面覆盖。\n- 校验每个页面的 `sourceItemKeys` 引用有效会议 item。\n- 拦截路径越界、非 Markdown、写入未允许目录等问题。\n- 为页面补齐 frontmatter、source trace、归档路径、record id、hash、sourceStatus。\n- 写入/更新 Markdown 页面、`catalog.json` 和 `index.md`。\n- 合并并写回 snapshot，供后续定时扫描增量判断。\n- 把后端需要的统一结果 JSON 写入 `resultFile`。\n\n## 会议页面模板\n\n会议实体页沿用本地文件入库 skill 的会议模板，当前判断是合理的：它服务科研团队复用，重点不是流水账，而是决策、行动项、风险和证据。\n\n核心章节：\n\n1. `## 会议信息`：时间、参与者、主题、腾讯会议 ID/会议号/录制 ID、源材料路径；缺失则标注“来源未提及”。\n2. `## 议程与背景`：会议围绕什么问题展开，关联哪些项目或资料。\n3. `## 关键讨论`：按主题整理观点、证据、分歧和上下文。\n4. `## 决议`：已经达成的决定、理由和影响范围。\n5. `## 行动项`：任务、负责人、截止时间、依赖、状态；缺失则写“来源未提及”。\n6. `## 风险与阻塞`：项目风险、资源缺口、技术难点和待协调事项。\n7. `## 开放问题`：未解决问题和需要补充的证据。\n8. `## 关联页面`：链接相关项目、实验、论文、技术方案、概念或资源。\n9. `## 来源与证据索引`：智能纪要、转写、源材料归档路径、record id、hash。\n\n如果会议明确改变某个项目的路线、任务或开放问题，应同步更新 `projects/`。如果会议反复出现可复用方法、架构、工具、数据集或平台，应视证据更新 `concepts/` 或 `resources/`。不要为普通关键词机械建概念页。\n\n如果会议内容影响团队级导航、阶段性资料包、研究主题地图或项目群总览，应更新 `overview/`；如果只是一次普通同步、没有导航或综合价值，则不需要硬建 overview。普通页面之间的关系用 `relatedPages`，概念、资源、代码页分别用 `relatedConcepts`、`relatedResources`、`relatedCodePages`。\n\n## 输出契约\n\n最终 resultFile 必须是后端可读的顶层 JSON envelope：\n\n```json\n{\n  \"success\": true,\n  \"processedSources\": [],\n  \"createdPages\": [],\n  \"updatedPages\": [],\n  \"archivedFiles\": [],\n  \"skippedSources\": [],\n  \"incompleteItems\": [],\n  \"errors\": [],\n  \"commitId\": \"\",\n  \"snapshot\": {}\n}\n```\n\nFile v1.0.11:_meta.json\n\n{\n  \"ownerId\": \"kn7cp7eb6ymqv898hke0ersmc1847fed\",\n  \"slug\": \"tencent-meeting-ingest\",\n  \"version\": \"1.0.11\",\n  \"publishedAt\": 1783615418075\n}\n\nFile v1.0.11:skill-card.md\n\n## Description: <br>\nIngest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[myd2002](https://clawhub.ai/user/myd2002) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and team knowledge-base operators use this skill to import Tencent Meeting recordings, smart minutes, and transcripts into a Research KB. It prepares meeting evidence for OpenClaw-generated wiki pages, applies validated page updates, and preserves source traces for later review. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Tencent Meeting minutes and transcripts can contain sensitive information that is retained in the team knowledge repository. <br>\nMitigation: Install only for teams that intend to retain those materials, verify repository access controls, and define retention or redaction expectations before broad scans. <br>\nRisk: The skill writes to a Gitea knowledge-base repository using bot credentials. <br>\nMitigation: Use a narrowly scoped Gitea bot token and verify the target repository owner and permissions before deployment. <br>\nRisk: A configured Tencent Meeting companion command controls platform fetching. <br>\nMitigation: Configure only a trusted tencent-meeting-skill or tencent-meeting-mcp command and keep the Tencent Meeting token scoped to the intended workspace. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/myd2002/skills/tencent-meeting-ingest) <br>\n- [Publisher profile](https://clawhub.ai/user/myd2002) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [JSON, Markdown, Files, Shell commands, Configuration] <br>\n**Output Format:** [JSON envelopes and Markdown knowledge-base pages] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Prepare emits context JSON for OpenClaw; apply writes Markdown pages, catalog/index updates, archived source files, and a backend result JSON envelope.] <br>\n\n## Skill Version(s): <br>\n1.0.11 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.11:env-example.txt\n\nGITEA_URL=http://127.0.0.1:3000\nGITEA_BOT_TOKEN=\nGITEA_BOT_USERNAME=research-kb-bot\nGITEA_ORG=\nTEAM_KB_REPO=team-kb\nOPENCLAW_SHARED_DIR=/srv/research-kb/shared\nTENCENT_MEETING_TOKEN=\n# Optional when tencent-meeting-skill is not installed as a sibling skill directory:\nTENCENT_MEETING_SKILL_COMMAND=python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py\n\nFile v1.0.11:requirements.txt\n\n# Uses only the Python 3 standard library. Platform fetching is delegated to tencent-meeting-skill.\n\nArchive v1.0.10: 16 files, 26392 bytes\n\nFiles: _meta.json (142b), env-example.txt (365b), main.js (174b), requirements.txt (101b), scripts/catalog.py (5150b), scripts/external_skill_bridge.py (2627b), scripts/gitea_api.py (4949b), scripts/meeting_kb_writer.py (13069b), scripts/meeting_reader.py (23751b), scripts/run_task.py (3765b), scripts/task_io.py (1011b), scripts/tencent_meeting_bridge.py (5572b), scripts/utils.py (3678b), setup.sh (193b), skill-card.md (2234b), SKILL.md (8917b)\n\nFile v1.0.10:SKILL.md\n\n---\nname: tencent_meeting_ingest\ndescription: Ingest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates.\n---\n\n# tencent_meeting_ingest\n\n## 职责边界\n\n本 skill 只负责“腾讯会议资料入库编译”。腾讯会议平台能力不在这里重新实现：会议列表、录制列表、智能纪要、转写全文、录制地址和权限错误都必须通过已安装的 `tencent-meeting-skill` / `tencent-meeting-mcp` 调用。\n\n后端负责创建资料源、触发任务、保存任务状态和传递 payload/resultFile。Python 脚本只负责确定性动作：读取 payload、调用外部腾讯会议 skill、归档源材料到 `source_files/tencent_meeting/`、准备 OpenClaw 上下文、校验 OpenClaw 生成的 JSON、写入 Gitea、维护 `catalog.json`/`index.md`、写 `resultFile`。OpenClaw 负责智能判断：理解会议内容、生成结构化会议 Wiki 页面、判断是否需要更新项目页/概念页/资源页/其他相关页、组织页面之间的链接。\n\n本 skill 不做会议创建、取消、改期、权限申请提交、邮件通知、issue 草稿、问答沉淀，也不保留“没有 OpenClaw 时自动生成简陋页面”的 fallback。\n\n会议入库不只是生成会议纪要页。写 `pages.json` 前，OpenClaw 应私下做一次知识图谱规划：每场会议先落到 `meetings/` 实体页，再判断它是否改变项目路线、研究主题、实验计划、资源选择、团队导航或已有概念/资源页。没有证据时不要硬建关系页；但会议明确带来决策、路线变化或跨页面综合价值时，应更新相关 `overview/`、`projects/`、`concepts/`、`resources/` 或其他页面，并保留解释性跳转。\n\n## 依赖环境\n\n必须在 OpenClaw 运行环境中具备：\n\n- 已安装并可调用的 `tencent-meeting-skill` 或 `tencent-meeting-mcp`。\n- `TENCENT_MEETING_TOKEN`，供腾讯会议 skill 使用。\n- `GITEA_URL`\n- `GITEA_BOT_TOKEN`\n- `GITEA_BOT_USERNAME` 或 `GITEA_ORG`\n- `TEAM_KB_REPO`\n\n可选：\n\n- `TENCENT_MEETING_SKILL_COMMAND`：显式指定腾讯会议 skill CLI，例如 `python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py`。未配置时，脚本会查找同级 skill 目录 `tencent-meeting-skill/scripts/tencent_meeting.py` 或 `tencent-meeting-mcp/scripts/tencent_meeting.py`。\n\n## 运行协议\n\n本 skill 使用两段式流程。\n\n### 1. prepare\n\n```bash\npython3 scripts/run_task.py prepare --input <payload.json> --context-output <context.json>\n```\n\n`prepare` 会：\n\n1. 读取后端 payload 中的资料源、配置和 `lastSnapshot`。\n2. 初次扫描时默认按最近 `historyLookbackDays` 天扫描历史会议，默认 90 天；默认拆成 31 天窗口以减少 MCP 列表调用次数，`windowDays` 可配置且最大不超过 31 天；默认 `pageSize=10`、`maxRecords=100`。若腾讯会议 MCP 对大窗口表现不稳定，可在资料源配置中将 `windowDays` 下调到 7 或 14。\n3. 增量扫描时从 `lastSnapshot.scanUntil` 往前重叠 `incrementalOverlapDays` 天，默认 1 天，避免会议纪要延迟生成导致漏扫，同时减少重复 MCP 调用。\n4. 调用腾讯会议 skill：\n   - 默认优先用 `get_records_list` 按时间窗口查询录制文件，这是最节省额度且最贴近“可入库纪要/转写”的入口；\n   - 若某个时间窗口的 `get_records_list` 返回空，且未配置 `fallbackToEndedMeetings=false`，默认仅对最近 `endedMeetingsFallbackRecentDays` 天（默认 14 天）的窗口自动调用 `get_user_ended_meetings` 补充已结束会议，再按会议 ID/会议号查询录制，避免历史空窗口大量消耗 MCP 额度；\n   - 若配置 `includeEndedMeetings=true`，则无论录制时间窗口是否返回内容，都额外调用 `get_user_ended_meetings` 补充已结束会议；\n   - `get_smart_minutes` 优先获取 AI 智能纪要；\n   - `get_transcripts_details(pid=0)` 优先获取转写全文；若返回空或失败，再用 `get_transcripts_paragraphs` 获取段落 ID，并按段落调用 `get_transcripts_details` 补全文。\n5. 只有智能纪要或转写至少一个可用时才作为 `inputItems[]` 交给 OpenClaw。\n6. 把每场可入库会议的源材料归档为 `source_files/tencent_meeting/<sourceId>/<date>-<slug>-<hash>.md`。\n7. 基于 record id 和内容 hash 做增量判断；已处理且内容未变的会议写入 `skippedSources[]`。\n8. 对缺纪要/缺转写/无权限/未生成内容的会议写入 `incompleteItems[]` 或 `errors[]`，不自动申请权限，也不生成低价值空页面。\n9. 输出 `context.json`。如果没有新内容，`prepare` 会把 skip 结果写入 `resultFile`。如果某些扫描窗口因为 MCP 额度、网络或平台错误失败，`snapshot.scanComplete=false`，且不会把 `scanUntil` 推进到当前时间；后续扫描会继续覆盖未完整完成的历史窗口，避免漏掉旧会议。\n\n### 2. OpenClaw 生成 pages.json\n\nOpenClaw 必须阅读 `context.json`，为每个 `inputItems[]` 至少生成或更新一个 `meetings/` 实体页。每个页面必须带 `sourceItemKeys`，引用对应会议的 `inputItems[].itemKey`。\n\n建议输出：\n\n```json\n{\n  \"pages\": [\n    {\n      \"path\": \"meetings/2026-07-07-project-sync.md\",\n      \"title\": \"项目同步会：xxx\",\n      \"type\": \"meeting\",\n      \"kbType\": \"wiki\",\n      \"sourceItemKeys\": [\"<inputItems[].itemKey>\"],\n      \"projectIds\": [\"general\"],\n      \"keywords\": [],\n      \"relatedConcepts\": [\"concepts/example.md\"],\n      \"relatedResources\": [\"resources/example.md\"],\n      \"relatedPages\": [\"overview/example.md\"],\n      \"content\": \"Markdown 正文，不带 frontmatter\"\n    }\n  ],\n  \"skippedSources\": [],\n  \"errors\": [],\n  \"snapshot\": {}\n}\n```\n\n允许写入或更新的目录：`meetings/`、`projects/`、`papers/`、`surveys/`、`code/`、`experiments/`、`tech-notes/`、`notes/`、`concepts/`、`resources/`、必要的 `overview/`。不要写 `qa/`，问答沉淀由 `kb_query` 负责。不要写 `source_files/`，源材料归档由 `prepare` 完成。\n\n### 3. apply\n\n```bash\npython3 scripts/run_task.py apply --input <payload.json> --context <context.json> --pages <pages.json>\n```\n\n`apply` 会：\n\n- 校验 `pages[]` 非空。\n- 校验每个可读 `inputItems[]` 至少被一个 `meetings/` 页面覆盖。\n- 校验每个页面的 `sourceItemKeys` 引用有效会议 item。\n- 拦截路径越界、非 Markdown、写入未允许目录等问题。\n- 为页面补齐 frontmatter、source trace、归档路径、record id、hash、sourceStatus。\n- 写入/更新 Markdown 页面、`catalog.json` 和 `index.md`。\n- 合并并写回 snapshot，供后续定时扫描增量判断。\n- 把后端需要的统一结果 JSON 写入 `resultFile`。\n\n## 会议页面模板\n\n会议实体页沿用本地文件入库 skill 的会议模板，当前判断是合理的：它服务科研团队复用，重点不是流水账，而是决策、行动项、风险和证据。\n\n核心章节：\n\n1. `## 会议信息`：时间、参与者、主题、腾讯会议 ID/会议号/录制 ID、源材料路径；缺失则标注“来源未提及”。\n2. `## 议程与背景`：会议围绕什么问题展开，关联哪些项目或资料。\n3. `## 关键讨论`：按主题整理观点、证据、分歧和上下文。\n4. `## 决议`：已经达成的决定、理由和影响范围。\n5. `## 行动项`：任务、负责人、截止时间、依赖、状态；缺失则写“来源未提及”。\n6. `## 风险与阻塞`：项目风险、资源缺口、技术难点和待协调事项。\n7. `## 开放问题`：未解决问题和需要补充的证据。\n8. `## 关联页面`：链接相关项目、实验、论文、技术方案、概念或资源。\n9. `## 来源与证据索引`：智能纪要、转写、源材料归档路径、record id、hash。\n\n如果会议明确改变某个项目的路线、任务或开放问题，应同步更新 `projects/`。如果会议反复出现可复用方法、架构、工具、数据集或平台，应视证据更新 `concepts/` 或 `resources/`。不要为普通关键词机械建概念页。\n\n如果会议内容影响团队级导航、阶段性资料包、研究主题地图或项目群总览，应更新 `overview/`；如果只是一次普通同步、没有导航或综合价值，则不需要硬建 overview。普通页面之间的关系用 `relatedPages`，概念、资源、代码页分别用 `relatedConcepts`、`relatedResources`、`relatedCodePages`。\n\n## 输出契约\n\n最终 resultFile 必须是后端可读的顶层 JSON envelope：\n\n```json\n{\n  \"success\": true,\n  \"processedSources\": [],\n  \"createdPages\": [],\n  \"updatedPages\": [],\n  \"archivedFiles\": [],\n  \"skippedSources\": [],\n  \"incompleteItems\": [],\n  \"errors\": [],\n  \"commitId\": \"\",\n  \"snapshot\": {}\n}\n```\n\nFile v1.0.10:_meta.json\n\n{\n  \"ownerId\": \"kn7cp7eb6ymqv898hke0ersmc1847fed\",\n  \"slug\": \"tencent-meeting-ingest\",\n  \"version\": \"1.0.10\",\n  \"publishedAt\": 1783607970287\n}\n\nFile v1.0.10:skill-card.md\n\n## Description: <br>\nIngest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[myd2002](https://clawhub.ai/user/myd2002) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and Research KB operators use this skill to ingest Tencent Meeting recordings, smart minutes, and transcripts into a team knowledge base. It prepares meeting source material for OpenClaw-generated wiki pages and applies validated Markdown updates to the configured KB repository. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Meeting transcripts, smart minutes, recordings metadata, and generated KB pages may contain sensitive organizational information. <br>\nMitigation: Install only where the configured KB repository is allowed to retain full meeting transcripts and metadata. <br>\nRisk: The skill writes to a Gitea-backed KB repository and can run a configured Tencent Meeting skill command. <br>\nMitigation: Use a least-privilege Gitea bot token, restrict who can set TENCENT_MEETING_SKILL_COMMAND, and confirm the target repository and source configuration before scheduled ingestion. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/myd2002/skills/tencent-meeting-ingest) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Markdown, JSON, Files] <br>\n**Output Format:** [Markdown meeting wiki pages, archived source files, and a JSON result envelope] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Archives source meeting materials, updates catalog and index files, and writes snapshots for incremental scans.] <br>\n\n## Skill Version(s): <br>\n1.0.10 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.10:env-example.txt\n\nGITEA_URL=http://127.0.0.1:3000\nGITEA_BOT_TOKEN=\nGITEA_BOT_USERNAME=research-kb-bot\nGITEA_ORG=\nTEAM_KB_REPO=team-kb\nOPENCLAW_SHARED_DIR=/srv/research-kb/shared\nTENCENT_MEETING_TOKEN=\n# Optional when tencent-meeting-skill is not installed as a sibling skill directory:\nTENCENT_MEETING_SKILL_COMMAND=python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py\n\nFile v1.0.10:requirements.txt\n\n# Uses only the Python 3 standard library. Platform fetching is delegated to tencent-meeting-skill.\n\nArchive v1.0.9: 16 files, 26224 bytes\n\nFiles: _meta.json (141b), env-example.txt (365b), main.js (174b), requirements.txt (101b), scripts/catalog.py (5150b), scripts/external_skill_bridge.py (2627b), scripts/gitea_api.py (4949b), scripts/meeting_kb_writer.py (13069b), scripts/meeting_reader.py (22902b), scripts/run_task.py (3765b), scripts/task_io.py (1011b), scripts/tencent_meeting_bridge.py (5572b), scripts/utils.py (3678b), setup.sh (193b), skill-card.md (2587b), SKILL.md (8768b)\n\nFile v1.0.9:SKILL.md\n\n---\nname: tencent_meeting_ingest\ndescription: Ingest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates.\n---\n\n# tencent_meeting_ingest\n\n## 职责边界\n\n本 skill 只负责“腾讯会议资料入库编译”。腾讯会议平台能力不在这里重新实现：会议列表、录制列表、智能纪要、转写全文、录制地址和权限错误都必须通过已安装的 `tencent-meeting-skill` / `tencent-meeting-mcp` 调用。\n\n后端负责创建资料源、触发任务、保存任务状态和传递 payload/resultFile。Python 脚本只负责确定性动作：读取 payload、调用外部腾讯会议 skill、归档源材料到 `source_files/tencent_meeting/`、准备 OpenClaw 上下文、校验 OpenClaw 生成的 JSON、写入 Gitea、维护 `catalog.json`/`index.md`、写 `resultFile`。OpenClaw 负责智能判断：理解会议内容、生成结构化会议 Wiki 页面、判断是否需要更新项目页/概念页/资源页/其他相关页、组织页面之间的链接。\n\n本 skill 不做会议创建、取消、改期、权限申请提交、邮件通知、issue 草稿、问答沉淀，也不保留“没有 OpenClaw 时自动生成简陋页面”的 fallback。\n\n会议入库不只是生成会议纪要页。写 `pages.json` 前，OpenClaw 应私下做一次知识图谱规划：每场会议先落到 `meetings/` 实体页，再判断它是否改变项目路线、研究主题、实验计划、资源选择、团队导航或已有概念/资源页。没有证据时不要硬建关系页；但会议明确带来决策、路线变化或跨页面综合价值时，应更新相关 `overview/`、`projects/`、`concepts/`、`resources/` 或其他页面，并保留解释性跳转。\n\n## 依赖环境\n\n必须在 OpenClaw 运行环境中具备：\n\n- 已安装并可调用的 `tencent-meeting-skill` 或 `tencent-meeting-mcp`。\n- `TENCENT_MEETING_TOKEN`，供腾讯会议 skill 使用。\n- `GITEA_URL`\n- `GITEA_BOT_TOKEN`\n- `GITEA_BOT_USERNAME` 或 `GITEA_ORG`\n- `TEAM_KB_REPO`\n\n可选：\n\n- `TENCENT_MEETING_SKILL_COMMAND`：显式指定腾讯会议 skill CLI，例如 `python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py`。未配置时，脚本会查找同级 skill 目录 `tencent-meeting-skill/scripts/tencent_meeting.py` 或 `tencent-meeting-mcp/scripts/tencent_meeting.py`。\n\n## 运行协议\n\n本 skill 使用两段式流程。\n\n### 1. prepare\n\n```bash\npython3 scripts/run_task.py prepare --input <payload.json> --context-output <context.json>\n```\n\n`prepare` 会：\n\n1. 读取后端 payload 中的资料源、配置和 `lastSnapshot`。\n2. 初次扫描时默认按最近 `historyLookbackDays` 天扫描历史会议，默认 180 天；默认拆成 7 天窗口以避免腾讯会议 MCP 大窗口静默返回空，`windowDays` 可配置且最大不超过 31 天；默认 `pageSize=10`，与腾讯会议 skill 示例保持一致。\n3. 增量扫描时从 `lastSnapshot.scanUntil` 往前重叠 `incrementalOverlapDays` 天，默认 3 天，避免会议纪要延迟生成导致漏扫。\n4. 调用腾讯会议 skill：\n   - 默认优先用 `get_records_list` 按时间窗口查询录制文件，这是最节省额度且最贴近“可入库纪要/转写”的入口；\n   - 若某个时间窗口的 `get_records_list` 返回空，且未配置 `fallbackToEndedMeetings=false`，自动调用 `get_user_ended_meetings` 补充已结束会议，再按会议 ID/会议号查询录制，避免“网页里有历史会议但录制时间窗口返回空”导致误跳过；\n   - 若配置 `includeEndedMeetings=true`，则无论录制时间窗口是否返回内容，都额外调用 `get_user_ended_meetings` 补充已结束会议；\n   - `get_smart_minutes` 优先获取 AI 智能纪要；\n   - `get_transcripts_details(pid=0)` 优先获取转写全文；若返回空或失败，再用 `get_transcripts_paragraphs` 获取段落 ID，并按段落调用 `get_transcripts_details` 补全文。\n5. 只有智能纪要或转写至少一个可用时才作为 `inputItems[]` 交给 OpenClaw。\n6. 把每场可入库会议的源材料归档为 `source_files/tencent_meeting/<sourceId>/<date>-<slug>-<hash>.md`。\n7. 基于 record id 和内容 hash 做增量判断；已处理且内容未变的会议写入 `skippedSources[]`。\n8. 对缺纪要/缺转写/无权限/未生成内容的会议写入 `incompleteItems[]` 或 `errors[]`，不自动申请权限，也不生成低价值空页面。\n9. 输出 `context.json`。如果没有新内容，`prepare` 会把 skip 结果写入 `resultFile`。如果某些扫描窗口因为 MCP 额度、网络或平台错误失败，`snapshot.scanComplete=false`，且不会把 `scanUntil` 推进到当前时间；后续扫描会继续覆盖未完整完成的历史窗口，避免漏掉旧会议。\n\n### 2. OpenClaw 生成 pages.json\n\nOpenClaw 必须阅读 `context.json`，为每个 `inputItems[]` 至少生成或更新一个 `meetings/` 实体页。每个页面必须带 `sourceItemKeys`，引用对应会议的 `inputItems[].itemKey`。\n\n建议输出：\n\n```json\n{\n  \"pages\": [\n    {\n      \"path\": \"meetings/2026-07-07-project-sync.md\",\n      \"title\": \"项目同步会：xxx\",\n      \"type\": \"meeting\",\n      \"kbType\": \"wiki\",\n      \"sourceItemKeys\": [\"<inputItems[].itemKey>\"],\n      \"projectIds\": [\"general\"],\n      \"keywords\": [],\n      \"relatedConcepts\": [\"concepts/example.md\"],\n      \"relatedResources\": [\"resources/example.md\"],\n      \"relatedPages\": [\"overview/example.md\"],\n      \"content\": \"Markdown 正文，不带 frontmatter\"\n    }\n  ],\n  \"skippedSources\": [],\n  \"errors\": [],\n  \"snapshot\": {}\n}\n```\n\n允许写入或更新的目录：`meetings/`、`projects/`、`papers/`、`surveys/`、`code/`、`experiments/`、`tech-notes/`、`notes/`、`concepts/`、`resources/`、必要的 `overview/`。不要写 `qa/`，问答沉淀由 `kb_query` 负责。不要写 `source_files/`，源材料归档由 `prepare` 完成。\n\n### 3. apply\n\n```bash\npython3 scripts/run_task.py apply --input <payload.json> --context <context.json> --pages <pages.json>\n```\n\n`apply` 会：\n\n- 校验 `pages[]` 非空。\n- 校验每个可读 `inputItems[]` 至少被一个 `meetings/` 页面覆盖。\n- 校验每个页面的 `sourceItemKeys` 引用有效会议 item。\n- 拦截路径越界、非 Markdown、写入未允许目录等问题。\n- 为页面补齐 frontmatter、source trace、归档路径、record id、hash、sourceStatus。\n- 写入/更新 Markdown 页面、`catalog.json` 和 `index.md`。\n- 合并并写回 snapshot，供后续定时扫描增量判断。\n- 把后端需要的统一结果 JSON 写入 `resultFile`。\n\n## 会议页面模板\n\n会议实体页沿用本地文件入库 skill 的会议模板，当前判断是合理的：它服务科研团队复用，重点不是流水账，而是决策、行动项、风险和证据。\n\n核心章节：\n\n1. `## 会议信息`：时间、参与者、主题、腾讯会议 ID/会议号/录制 ID、源材料路径；缺失则标注“来源未提及”。\n2. `## 议程与背景`：会议围绕什么问题展开，关联哪些项目或资料。\n3. `## 关键讨论`：按主题整理观点、证据、分歧和上下文。\n4. `## 决议`：已经达成的决定、理由和影响范围。\n5. `## 行动项`：任务、负责人、截止时间、依赖、状态；缺失则写“来源未提及”。\n6. `## 风险与阻塞`：项目风险、资源缺口、技术难点和待协调事项。\n7. `## 开放问题`：未解决问题和需要补充的证据。\n8. `## 关联页面`：链接相关项目、实验、论文、技术方案、概念或资源。\n9. `## 来源与证据索引`：智能纪要、转写、源材料归档路径、record id、hash。\n\n如果会议明确改变某个项目的路线、任务或开放问题，应同步更新 `projects/`。如果会议反复出现可复用方法、架构、工具、数据集或平台，应视证据更新 `concepts/` 或 `resources/`。不要为普通关键词机械建概念页。\n\n如果会议内容影响团队级导航、阶段性资料包、研究主题地图或项目群总览，应更新 `overview/`；如果只是一次普通同步、没有导航或综合价值，则不需要硬建 overview。普通页面之间的关系用 `relatedPages`，概念、资源、代码页分别用 `relatedConcepts`、`relatedResources`、`relatedCodePages`。\n\n## 输出契约\n\n最终 resultFile 必须是后端可读的顶层 JSON envelope：\n\n```json\n{\n  \"success\": true,\n  \"processedSources\": [],\n  \"createdPages\": [],\n  \"updatedPages\": [],\n  \"archivedFiles\": [],\n  \"skippedSources\": [],\n  \"incompleteItems\": [],\n  \"errors\": [],\n  \"commitId\": \"\",\n  \"snapshot\": {}\n}\n```\n\nFile v1.0.9:_meta.json\n\n{\n  \"ownerId\": \"kn7cp7eb6ymqv898hke0ersmc1847fed\",\n  \"slug\": \"tencent-meeting-ingest\",\n  \"version\": \"1.0.9\",\n  \"publishedAt\": 1783538796070\n}\n\nFile v1.0.9:skill-card.md\n\n## Description: <br>\nIngest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[myd2002](https://clawhub.ai/user/myd2002) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and research KB operators use this skill to ingest Tencent Meeting smart minutes and transcripts into a team knowledge base. It prepares source material for OpenClaw, then applies generated meeting wiki pages, source archives, catalog updates, and index updates to a configured Gitea KB repository. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Meeting minutes, transcripts, metadata, generated pages, catalog.json, and index.md may be written to the configured KB repository. <br>\nMitigation: Use a Gitea bot token scoped only to the intended KB repository and confirm the repository audience and retention rules before installation. <br>\nRisk: Tencent Meeting content is fetched through an external sibling skill or configured command. <br>\nMitigation: Point TENCENT_MEETING_SKILL_COMMAND only at a trusted tencent-meeting-skill or tencent-meeting-mcp installation. <br>\nRisk: Generated meeting wiki pages may summarize decisions, action items, risks, and related KB links from sensitive meeting data. <br>\nMitigation: Review generated pages and source traces before publishing them to a shared KB. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/myd2002/skills/tencent-meeting-ingest) <br>\n- [Publisher profile](https://clawhub.ai/user/myd2002) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration] <br>\n**Output Format:** [JSON envelopes and Markdown KB pages with source archives, catalog.json, and index.md updates] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Delegates Tencent Meeting fetching to a trusted tencent-meeting-skill or tencent-meeting-mcp command and writes to the configured Gitea KB repository.] <br>\n\n## Skill Version(s): <br>\n1.0.9 (source: ClawHub release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.9:env-example.txt\n\nGITEA_URL=http://127.0.0.1:3000\nGITEA_BOT_TOKEN=\nGITEA_BOT_USERNAME=research-kb-bot\nGITEA_ORG=\nTEAM_KB_REPO=team-kb\nOPENCLAW_SHARED_DIR=/srv/research-kb/shared\nTENCENT_MEETING_TOKEN=\n# Optional when tencent-meeting-skill is not installed as a sibling skill directory:\nTENCENT_MEETING_SKILL_COMMAND=python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py\n\nFile v1.0.9:requirements.txt\n\n# Uses only the Python 3 standard library. Platform fetching is delegated to tencent-meeting-skill.\n\nArchive v1.0.8: 16 files, 26007 bytes\n\nFiles: _meta.json (141b), env-example.txt (365b), main.js (174b), requirements.txt (101b), scripts/catalog.py (5150b), scripts/external_skill_bridge.py (2627b), scripts/gitea_api.py (4949b), scripts/meeting_kb_writer.py (13069b), scripts/meeting_reader.py (22902b), scripts/run_task.py (3765b), scripts/task_io.py (1011b), scripts/tencent_meeting_bridge.py (4781b), scripts/utils.py (3678b), setup.sh (193b), skill-card.md (2333b), SKILL.md (8768b)\n\nFile v1.0.8:SKILL.md\n\n---\nname: tencent_meeting_ingest\ndescription: Ingest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates.\n---\n\n# tencent_meeting_ingest\n\n## 职责边界\n\n本 skill 只负责“腾讯会议资料入库编译”。腾讯会议平台能力不在这里重新实现：会议列表、录制列表、智能纪要、转写全文、录制地址和权限错误都必须通过已安装的 `tencent-meeting-skill` / `tencent-meeting-mcp` 调用。\n\n后端负责创建资料源、触发任务、保存任务状态和传递 payload/resultFile。Python 脚本只负责确定性动作：读取 payload、调用外部腾讯会议 skill、归档源材料到 `source_files/tencent_meeting/`、准备 OpenClaw 上下文、校验 OpenClaw 生成的 JSON、写入 Gitea、维护 `catalog.json`/`index.md`、写 `resultFile`。OpenClaw 负责智能判断：理解会议内容、生成结构化会议 Wiki 页面、判断是否需要更新项目页/概念页/资源页/其他相关页、组织页面之间的链接。\n\n本 skill 不做会议创建、取消、改期、权限申请提交、邮件通知、issue 草稿、问答沉淀，也不保留“没有 OpenClaw 时自动生成简陋页面”的 fallback。\n\n会议入库不只是生成会议纪要页。写 `pages.json` 前，OpenClaw 应私下做一次知识图谱规划：每场会议先落到 `meetings/` 实体页，再判断它是否改变项目路线、研究主题、实验计划、资源选择、团队导航或已有概念/资源页。没有证据时不要硬建关系页；但会议明确带来决策、路线变化或跨页面综合价值时，应更新相关 `overview/`、`projects/`、`concepts/`、`resources/` 或其他页面，并保留解释性跳转。\n\n## 依赖环境\n\n必须在 OpenClaw 运行环境中具备：\n\n- 已安装并可调用的 `tencent-meeting-skill` 或 `tencent-meeting-mcp`。\n- `TENCENT_MEETING_TOKEN`，供腾讯会议 skill 使用。\n- `GITEA_URL`\n- `GITEA_BOT_TOKEN`\n- `GITEA_BOT_USERNAME` 或 `GITEA_ORG`\n- `TEAM_KB_REPO`\n\n可选：\n\n- `TENCENT_MEETING_SKILL_COMMAND`：显式指定腾讯会议 skill CLI，例如 `python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py`。未配置时，脚本会查找同级 skill 目录 `tencent-meeting-skill/scripts/tencent_meeting.py` 或 `tencent-meeting-mcp/scripts/tencent_meeting.py`。\n\n## 运行协议\n\n本 skill 使用两段式流程。\n\n### 1. prepare\n\n```bash\npython3 scripts/run_task.py prepare --input <payload.json> --context-output <context.json>\n```\n\n`prepare` 会：\n\n1. 读取后端 payload 中的资料源、配置和 `lastSnapshot`。\n2. 初次扫描时默认按最近 `historyLookbackDays` 天扫描历史会议，默认 180 天；默认拆成 7 天窗口以避免腾讯会议 MCP 大窗口静默返回空，`windowDays` 可配置且最大不超过 31 天；默认 `pageSize=10`，与腾讯会议 skill 示例保持一致。\n3. 增量扫描时从 `lastSnapshot.scanUntil` 往前重叠 `incrementalOverlapDays` 天，默认 3 天，避免会议纪要延迟生成导致漏扫。\n4. 调用腾讯会议 skill：\n   - 默认优先用 `get_records_list` 按时间窗口查询录制文件，这是最节省额度且最贴近“可入库纪要/转写”的入口；\n   - 若某个时间窗口的 `get_records_list` 返回空，且未配置 `fallbackToEndedMeetings=false`，自动调用 `get_user_ended_meetings` 补充已结束会议，再按会议 ID/会议号查询录制，避免“网页里有历史会议但录制时间窗口返回空”导致误跳过；\n   - 若配置 `includeEndedMeetings=true`，则无论录制时间窗口是否返回内容，都额外调用 `get_user_ended_meetings` 补充已结束会议；\n   - `get_smart_minutes` 优先获取 AI 智能纪要；\n   - `get_transcripts_details(pid=0)` 优先获取转写全文；若返回空或失败，再用 `get_transcripts_paragraphs` 获取段落 ID，并按段落调用 `get_transcripts_details` 补全文。\n5. 只有智能纪要或转写至少一个可用时才作为 `inputItems[]` 交给 OpenClaw。\n6. 把每场可入库会议的源材料归档为 `source_files/tencent_meeting/<sourceId>/<date>-<slug>-<hash>.md`。\n7. 基于 record id 和内容 hash 做增量判断；已处理且内容未变的会议写入 `skippedSources[]`。\n8. 对缺纪要/缺转写/无权限/未生成内容的会议写入 `incompleteItems[]` 或 `errors[]`，不自动申请权限，也不生成低价值空页面。\n9. 输出 `context.json`。如果没有新内容，`prepare` 会把 skip 结果写入 `resultFile`。如果某些扫描窗口因为 MCP 额度、网络或平台错误失败，`snapshot.scanComplete=false`，且不会把 `scanUntil` 推进到当前时间；后续扫描会继续覆盖未完整完成的历史窗口，避免漏掉旧会议。\n\n### 2. OpenClaw 生成 pages.json\n\nOpenClaw 必须阅读 `context.json`，为每个 `inputItems[]` 至少生成或更新一个 `meetings/` 实体页。每个页面必须带 `sourceItemKeys`，引用对应会议的 `inputItems[].itemKey`。\n\n建议输出：\n\n```json\n{\n  \"pages\": [\n    {\n      \"path\": \"meetings/2026-07-07-project-sync.md\",\n      \"title\": \"项目同步会：xxx\",\n      \"type\": \"meeting\",\n      \"kbType\": \"wiki\",\n      \"sourceItemKeys\": [\"<inputItems[].itemKey>\"],\n      \"projectIds\": [\"general\"],\n      \"keywords\": [],\n      \"relatedConcepts\": [\"concepts/example.md\"],\n      \"relatedResources\": [\"resources/example.md\"],\n      \"relatedPages\": [\"overview/example.md\"],\n      \"content\": \"Markdown 正文，不带 frontmatter\"\n    }\n  ],\n  \"skippedSources\": [],\n  \"errors\": [],\n  \"snapshot\": {}\n}\n```\n\n允许写入或更新的目录：`meetings/`、`projects/`、`papers/`、`surveys/`、`code/`、`experiments/`、`tech-notes/`、`notes/`、`concepts/`、`resources/`、必要的 `overview/`。不要写 `qa/`，问答沉淀由 `kb_query` 负责。不要写 `source_files/`，源材料归档由 `prepare` 完成。\n\n### 3. apply\n\n```bash\npython3 scripts/run_task.py apply --input <payload.json> --context <context.json> --pages <pages.json>\n```\n\n`apply` 会：\n\n- 校验 `pages[]` 非空。\n- 校验每个可读 `inputItems[]` 至少被一个 `meetings/` 页面覆盖。\n- 校验每个页面的 `sourceItemKeys` 引用有效会议 item。\n- 拦截路径越界、非 Markdown、写入未允许目录等问题。\n- 为页面补齐 frontmatter、source trace、归档路径、record id、hash、sourceStatus。\n- 写入/更新 Markdown 页面、`catalog.json` 和 `index.md`。\n- 合并并写回 snapshot，供后续定时扫描增量判断。\n- 把后端需要的统一结果 JSON 写入 `resultFile`。\n\n## 会议页面模板\n\n会议实体页沿用本地文件入库 skill 的会议模板，当前判断是合理的：它服务科研团队复用，重点不是流水账，而是决策、行动项、风险和证据。\n\n核心章节：\n\n1. `## 会议信息`：时间、参与者、主题、腾讯会议 ID/会议号/录制 ID、源材料路径；缺失则标注“来源未提及”。\n2. `## 议程与背景`：会议围绕什么问题展开，关联哪些项目或资料。\n3. `## 关键讨论`：按主题整理观点、证据、分歧和上下文。\n4. `## 决议`：已经达成的决定、理由和影响范围。\n5. `## 行动项`：任务、负责人、截止时间、依赖、状态；缺失则写“来源未提及”。\n6. `## 风险与阻塞`：项目风险、资源缺口、技术难点和待协调事项。\n7. `## 开放问题`：未解决问题和需要补充的证据。\n8. `## 关联页面`：链接相关项目、实验、论文、技术方案、概念或资源。\n9. `## 来源与证据索引`：智能纪要、转写、源材料归档路径、record id、hash。\n\n如果会议明确改变某个项目的路线、任务或开放问题，应同步更新 `projects/`。如果会议反复出现可复用方法、架构、工具、数据集或平台，应视证据更新 `concepts/` 或 `resources/`。不要为普通关键词机械建概念页。\n\n如果会议内容影响团队级导航、阶段性资料包、研究主题地图或项目群总览，应更新 `overview/`；如果只是一次普通同步、没有导航或综合价值，则不需要硬建 overview。普通页面之间的关系用 `relatedPages`，概念、资源、代码页分别用 `relatedConcepts`、`relatedResources`、`relatedCodePages`。\n\n## 输出契约\n\n最终 resultFile 必须是后端可读的顶层 JSON envelope：\n\n```json\n{\n  \"success\": true,\n  \"processedSources\": [],\n  \"createdPages\": [],\n  \"updatedPages\": [],\n  \"archivedFiles\": [],\n  \"skippedSources\": [],\n  \"incompleteItems\": [],\n  \"errors\": [],\n  \"commitId\": \"\",\n  \"snapshot\": {}\n}\n```\n\nFile v1.0.8:_meta.json\n\n{\n  \"ownerId\": \"kn7cp7eb6ymqv898hke0ersmc1847fed\",\n  \"slug\": \"tencent-meeting-ingest\",\n  \"version\": \"1.0.8\",\n  \"publishedAt\": 1783538372779\n}\n\nFile v1.0.8:skill-card.md\n\n## Description: <br>\nIngest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[myd2002](https://clawhub.ai/user/myd2002) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and research teams use this skill to ingest Tencent Meeting recordings, smart minutes, and transcripts into a Research KB. It prepares meeting source evidence for OpenClaw-generated wiki pages and applies validated Markdown updates to a Gitea-backed knowledge base. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Meeting transcripts and source archives may contain sensitive participant or organization information. <br>\nMitigation: Install only where Tencent Meeting ingestion is approved and confirm that repository access policies allow transcripts and source archives to be stored in the KB. <br>\nRisk: Broad Tencent Meeting or Gitea credentials could expose more meeting or repository data than intended. <br>\nMitigation: Use narrowly scoped Tencent Meeting and Gitea bot credentials. <br>\nRisk: A custom Tencent Meeting helper command could delegate platform fetching to an untrusted helper. <br>\nMitigation: Configure TENCENT_MEETING_SKILL_COMMAND only to a trusted helper. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/myd2002/skills/tencent-meeting-ingest) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [JSON, Markdown, Files, Configuration] <br>\n**Output Format:** [JSON envelopes and Markdown wiki page content] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Archives Tencent Meeting source material and writes catalog/index updates through the configured Gitea KB.] <br>\n\n## Skill Version(s): <br>\n1.0.8 (source: server release metadata; artifact _meta.json reports 0.4.0) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.8:env-example.txt\n\nGITEA_URL=http://127.0.0.1:3000\nGITEA_BOT_TOKEN=\nGITEA_BOT_USERNAME=research-kb-bot\nGITEA_ORG=\nTEAM_KB_REPO=team-kb\nOPENCLAW_SHARED_DIR=/srv/research-kb/shared\nTENCENT_MEETING_TOKEN=\n# Optional when tencent-meeting-skill is not installed as a sibling skill directory:\nTENCENT_MEETING_SKILL_COMMAND=python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py\n\nFile v1.0.8:requirements.txt\n\n# Uses only the Python 3 standard library. Platform fetching is delegated to tencent-meeting-skill.\n\nArchive v1.0.7: 16 files, 25978 bytes\n\nFiles: _meta.json (141b), env-example.txt (365b), main.js (174b), requirements.txt (101b), scripts/catalog.py (5150b), scripts/external_skill_bridge.py (2627b), scripts/gitea_api.py (4949b), scripts/meeting_kb_writer.py (13069b), scripts/meeting_reader.py (22779b), scripts/run_task.py (3765b), scripts/task_io.py (1011b), scripts/tencent_meeting_bridge.py (4624b), scripts/utils.py (3678b), setup.sh (193b), skill-card.md (2528b), SKILL.md (8768b)\n\nFile v1.0.7:SKILL.md\n\n---\nname: tencent_meeting_ingest\ndescription: Ingest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates.\n---\n\n# tencent_meeting_ingest\n\n## 职责边界\n\n本 skill 只负责“腾讯会议资料入库编译”。腾讯会议平台能力不在这里重新实现：会议列表、录制列表、智能纪要、转写全文、录制地址和权限错误都必须通过已安装的 `tencent-meeting-skill` / `tencent-meeting-mcp` 调用。\n\n后端负责创建资料源、触发任务、保存任务状态和传递 payload/resultFile。Python 脚本只负责确定性动作：读取 payload、调用外部腾讯会议 skill、归档源材料到 `source_files/tencent_meeting/`、准备 OpenClaw 上下文、校验 OpenClaw 生成的 JSON、写入 Gitea、维护 `catalog.json`/`index.md`、写 `resultFile`。OpenClaw 负责智能判断：理解会议内容、生成结构化会议 Wiki 页面、判断是否需要更新项目页/概念页/资源页/其他相关页、组织页面之间的链接。\n\n本 skill 不做会议创建、取消、改期、权限申请提交、邮件通知、issue 草稿、问答沉淀，也不保留“没有 OpenClaw 时自动生成简陋页面”的 fallback。\n\n会议入库不只是生成会议纪要页。写 `pages.json` 前，OpenClaw 应私下做一次知识图谱规划：每场会议先落到 `meetings/` 实体页，再判断它是否改变项目路线、研究主题、实验计划、资源选择、团队导航或已有概念/资源页。没有证据时不要硬建关系页；但会议明确带来决策、路线变化或跨页面综合价值时，应更新相关 `overview/`、`projects/`、`concepts/`、`resources/` 或其他页面，并保留解释性跳转。\n\n## 依赖环境\n\n必须在 OpenClaw 运行环境中具备：\n\n- 已安装并可调用的 `tencent-meeting-skill` 或 `tencent-meeting-mcp`。\n- `TENCENT_MEETING_TOKEN`，供腾讯会议 skill 使用。\n- `GITEA_URL`\n- `GITEA_BOT_TOKEN`\n- `GITEA_BOT_USERNAME` 或 `GITEA_ORG`\n- `TEAM_KB_REPO`\n\n可选：\n\n- `TENCENT_MEETING_SKILL_COMMAND`：显式指定腾讯会议 skill CLI，例如 `python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py`。未配置时，脚本会查找同级 skill 目录 `tencent-meeting-skill/scripts/tencent_meeting.py` 或 `tencent-meeting-mcp/scripts/tencent_meeting.py`。\n\n## 运行协议\n\n本 skill 使用两段式流程。\n\n### 1. prepare\n\n```bash\npython3 scripts/run_task.py prepare --input <payload.json> --context-output <context.json>\n```\n\n`prepare` 会：\n\n1. 读取后端 payload 中的资料源、配置和 `lastSnapshot`。\n2. 初次扫描时默认按最近 `historyLookbackDays` 天扫描历史会议，默认 180 天；默认拆成 7 天窗口以避免腾讯会议 MCP 大窗口静默返回空，`windowDays` 可配置且最大不超过 31 天；默认 `pageSize=10`，与腾讯会议 skill 示例保持一致。\n3. 增量扫描时从 `lastSnapshot.scanUntil` 往前重叠 `incrementalOverlapDays` 天，默认 3 天，避免会议纪要延迟生成导致漏扫。\n4. 调用腾讯会议 skill：\n   - 默认优先用 `get_records_list` 按时间窗口查询录制文件，这是最节省额度且最贴近“可入库纪要/转写”的入口；\n   - 若某个时间窗口的 `get_records_list` 返回空，且未配置 `fallbackToEndedMeetings=false`，自动调用 `get_user_ended_meetings` 补充已结束会议，再按会议 ID/会议号查询录制，避免“网页里有历史会议但录制时间窗口返回空”导致误跳过；\n   - 若配置 `includeEndedMeetings=true`，则无论录制时间窗口是否返回内容，都额外调用 `get_user_ended_meetings` 补充已结束会议；\n   - `get_smart_minutes` 优先获取 AI 智能纪要；\n   - `get_transcripts_details(pid=0)` 优先获取转写全文；若返回空或失败，再用 `get_transcripts_paragraphs` 获取段落 ID，并按段落调用 `get_transcripts_details` 补全文。\n5. 只有智能纪要或转写至少一个可用时才作为 `inputItems[]` 交给 OpenClaw。\n6. 把每场可入库会议的源材料归档为 `source_files/tencent_meeting/<sourceId>/<date>-<slug>-<hash>.md`。\n7. 基于 record id 和内容 hash 做增量判断；已处理且内容未变的会议写入 `skippedSources[]`。\n8. 对缺纪要/缺转写/无权限/未生成内容的会议写入 `incompleteItems[]` 或 `errors[]`，不自动申请权限，也不生成低价值空页面。\n9. 输出 `context.json`。如果没有新内容，`prepare` 会把 skip 结果写入 `resultFile`。如果某些扫描窗口因为 MCP 额度、网络或平台错误失败，`snapshot.scanComplete=false`，且不会把 `scanUntil` 推进到当前时间；后续扫描会继续覆盖未完整完成的历史窗口，避免漏掉旧会议。\n\n### 2. OpenClaw 生成 pages.json\n\nOpenClaw 必须阅读 `context.json`，为每个 `inputItems[]` 至少生成或更新一个 `meetings/` 实体页。每个页面必须带 `sourceItemKeys`，引用对应会议的 `inputItems[].itemKey`。\n\n建议输出：\n\n```json\n{\n  \"pages\": [\n    {\n      \"path\": \"meetings/2026-07-07-project-sync.md\",\n      \"title\": \"项目同步会：xxx\",\n      \"type\": \"meeting\",\n      \"kbType\": \"wiki\",\n      \"sourceItemKeys\": [\"<inputItems[].itemKey>\"],\n      \"projectIds\": [\"general\"],\n      \"keywords\": [],\n      \"relatedConcepts\": [\"concepts/example.md\"],\n      \"relatedResources\": [\"resources/example.md\"],\n      \"relatedPages\": [\"overview/example.md\"],\n      \"content\": \"Markdown 正文，不带 frontmatter\"\n    }\n  ],\n  \"skippedSources\": [],\n  \"errors\": [],\n  \"snapshot\": {}\n}\n```\n\n允许写入或更新的目录：`meetings/`、`projects/`、`papers/`、`surveys/`、`code/`、`experiments/`、`tech-notes/`、`notes/`、`concepts/`、`resources/`、必要的 `overview/`。不要写 `qa/`，问答沉淀由 `kb_query` 负责。不要写 `source_files/`，源材料归档由 `prepare` 完成。\n\n### 3. apply\n\n```bash\npython3 scripts/run_task.py apply --input <payload.json> --context <context.json> --pages <pages.json>\n```\n\n`apply` 会：\n\n- 校验 `pages[]` 非空。\n- 校验每个可读 `inputItems[]` 至少被一个 `meetings/` 页面覆盖。\n- 校验每个页面的 `sourceItemKeys` 引用有效会议 item。\n- 拦截路径越界、非 Markdown、写入未允许目录等问题。\n- 为页面补齐 frontmatter、source trace、归档路径、record id、hash、sourceStatus。\n- 写入/更新 Markdown 页面、`catalog.json` 和 `index.md`。\n- 合并并写回 snapshot，供后续定时扫描增量判断。\n- 把后端需要的统一结果 JSON 写入 `resultFile`。\n\n## 会议页面模板\n\n会议实体页沿用本地文件入库 skill 的会议模板，当前判断是合理的：它服务科研团队复用，重点不是流水账，而是决策、行动项、风险和证据。\n\n核心章节：\n\n1. `## 会议信息`：时间、参与者、主题、腾讯会议 ID/会议号/录制 ID、源材料路径；缺失则标注“来源未提及”。\n2. `## 议程与背景`：会议围绕什么问题展开，关联哪些项目或资料。\n3. `## 关键讨论`：按主题整理观点、证据、分歧和上下文。\n4. `## 决议`：已经达成的决定、理由和影响范围。\n5. `## 行动项`：任务、负责人、截止时间、依赖、状态；缺失则写“来源未提及”。\n6. `## 风险与阻塞`：项目风险、资源缺口、技术难点和待协调事项。\n7. `## 开放问题`：未解决问题和需要补充的证据。\n8. `## 关联页面`：链接相关项目、实验、论文、技术方案、概念或资源。\n9. `## 来源与证据索引`：智能纪要、转写、源材料归档路径、record id、hash。\n\n如果会议明确改变某个项目的路线、任务或开放问题，应同步更新 `projects/`。如果会议反复出现可复用方法、架构、工具、数据集或平台，应视证据更新 `concepts/` 或 `resources/`。不要为普通关键词机械建概念页。\n\n如果会议内容影响团队级导航、阶段性资料包、研究主题地图或项目群总览，应更新 `overview/`；如果只是一次普通同步、没有导航或综合价值，则不需要硬建 overview。普通页面之间的关系用 `relatedPages`，概念、资源、代码页分别用 `relatedConcepts`、`relatedResources`、`relatedCodePages`。\n\n## 输出契约\n\n最终 resultFile 必须是后端可读的顶层 JSON envelope：\n\n```json\n{\n  \"success\": true,\n  \"processedSources\": [],\n  \"createdPages\": [],\n  \"updatedPages\": [],\n  \"archivedFiles\": [],\n  \"skippedSources\": [],\n  \"incompleteItems\": [],\n  \"errors\": [],\n  \"commitId\": \"\",\n  \"snapshot\": {}\n}\n```\n\nFile v1.0.7:_meta.json\n\n{\n  \"ownerId\": \"kn7cp7eb6ymqv898hke0ersmc1847fed\",\n  \"slug\": \"tencent-meeting-ingest\",\n  \"version\": \"1.0.7\",\n  \"publishedAt\": 1783537890759\n}\n\nFile v1.0.7:skill-card.md\n\n## Description: <br>\nIngests Tencent Meeting recordings, minutes, and transcripts into a research knowledge base by delegating meeting retrieval to Tencent Meeting tooling and guiding an agent to generate structured wiki updates. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[myd2002](https://clawhub.ai/user/myd2002) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and research KB operators use this skill to ingest Tencent Meeting recordings, smart minutes, and transcripts into a Gitea-backed research knowledge base. The skill prepares source evidence for an agent, then applies validated Markdown meeting pages and related KB updates. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Tencent Meeting transcripts, minutes, and recordings may contain sensitive meeting content that is archived persistently in the KB. <br>\nMitigation: Install only where the Tencent Meeting token and Gitea bot token are approved for the intended meetings and target KB repository, and align KB retention and access controls with that data. <br>\nRisk: The optional Tencent Meeting skill command can delegate execution to an external helper path. <br>\nMitigation: Configure the helper command only to a trusted installed Tencent Meeting skill or MCP path. <br>\nRisk: The Gitea bot token can write generated pages, source archives, catalog data, and index updates to the configured KB repository. <br>\nMitigation: Scope the bot identity and token to the target KB repository and review generated page changes before relying on them. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/myd2002/skills/tencent-meeting-ingest) <br>\n- [Artifact skill instructions](artifact/SKILL.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Markdown, JSON, Configuration, Guidance] <br>\n**Output Format:** [JSON task envelopes and Markdown wiki pages] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Archives Tencent Meeting source material, updates Gitea-backed KB pages, and maintains catalog/index metadata when configured.] <br>\n\n## Skill Version(s): <br>\n1.0.7 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.7:env-example.txt\n\nGITEA_URL=http://127.0.0.1:3000\nGITEA_BOT_TOKEN=\nGITEA_BOT_USERNAME=research-kb-bot\nGITEA_ORG=\nTEAM_KB_REPO=team-kb\nOPENCLAW_SHARED_DIR=/srv/research-kb/shared\nTENCENT_MEETING_TOKEN=\n# Optional when tencent-meeting-skill is not installed as a sibling skill directory:\nTENCENT_MEETING_SKILL_COMMAND=python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py\n\nFile v1.0.7:requirements.txt\n\n# Uses only the Python 3 standard library. Platform fetching is delegated to tencent-meeting-skill.\n\nArchive v1.0.6: 16 files, 25713 bytes\n\nFiles: _meta.json (141b), env-example.txt (365b), main.js (174b), requirements.txt (101b), scripts/catalog.py (5150b), scripts/external_skill_bridge.py (2627b), scripts/gitea_api.py (4949b), scripts/meeting_kb_writer.py (13069b), scripts/meeting_reader.py (22779b), scripts/run_task.py (3765b), scripts/task_io.py (1011b), scripts/tencent_meeting_bridge.py (4193b), scripts/utils.py (3678b), setup.sh (193b), skill-card.md (2156b), SKILL.md (8768b)\n\nFile v1.0.6:SKILL.md\n\n---\nname: tencent_meeting_ingest\ndescription: Ingest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates.\n---\n\n# tencent_meeting_ingest\n\n## 职责边界\n\n本 skill 只负责“腾讯会议资料入库编译”。腾讯会议平台能力不在这里重新实现：会议列表、录制列表、智能纪要、转写全文、录制地址和权限错误都必须通过已安装的 `tencent-meeting-skill` / `tencent-meeting-mcp` 调用。\n\n后端负责创建资料源、触发任务、保存任务状态和传递 payload/resultFile。Python 脚本只负责确定性动作：读取 payload、调用外部腾讯会议 skill、归档源材料到 `source_files/tencent_meeting/`、准备 OpenClaw 上下文、校验 OpenClaw 生成的 JSON、写入 Gitea、维护 `catalog.json`/`index.md`、写 `resultFile`。OpenClaw 负责智能判断：理解会议内容、生成结构化会议 Wiki 页面、判断是否需要更新项目页/概念页/资源页/其他相关页、组织页面之间的链接。\n\n本 skill 不做会议创建、取消、改期、权限申请提交、邮件通知、issue 草稿、问答沉淀，也不保留“没有 OpenClaw 时自动生成简陋页面”的 fallback。\n\n会议入库不只是生成会议纪要页。写 `pages.json` 前，OpenClaw 应私下做一次知识图谱规划：每场会议先落到 `meetings/` 实体页，再判断它是否改变项目路线、研究主题、实验计划、资源选择、团队导航或已有概念/资源页。没有证据时不要硬建关系页；但会议明确带来决策、路线变化或跨页面综合价值时，应更新相关 `overview/`、`projects/`、`concepts/`、`resources/` 或其他页面，并保留解释性跳转。\n\n## 依赖环境\n\n必须在 OpenClaw 运行环境中具备：\n\n- 已安装并可调用的 `tencent-meeting-skill` 或 `tencent-meeting-mcp`。\n- `TENCENT_MEETING_TOKEN`，供腾讯会议 skill 使用。\n- `GITEA_URL`\n- `GITEA_BOT_TOKEN`\n- `GITEA_BOT_USERNAME` 或 `GITEA_ORG`\n- `TEAM_KB_REPO`\n\n可选：\n\n- `TENCENT_MEETING_SKILL_COMMAND`：显式指定腾讯会议 skill CLI，例如 `python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py`。未配置时，脚本会查找同级 skill 目录 `tencent-meeting-skill/scripts/tencent_meeting.py` 或 `tencent-meeting-mcp/scripts/tencent_meeting.py`。\n\n## 运行协议\n\n本 skill 使用两段式流程。\n\n### 1. prepare\n\n```bash\npython3 scripts/run_task.py prepare --input <payload.json> --context-output <context.json>\n```\n\n`prepare` 会：\n\n1. 读取后端 payload 中的资料源、配置和 `lastSnapshot`。\n2. 初次扫描时默认按最近 `historyLookbackDays` 天扫描历史会议，默认 180 天；默认拆成 7 天窗口以避免腾讯会议 MCP 大窗口静默返回空，`windowDays` 可配置且最大不超过 31 天；默认 `pageSize=10`，与腾讯会议 skill 示例保持一致。\n3. 增量扫描时从 `lastSnapshot.scanUntil` 往前重叠 `incrementalOverlapDays` 天，默认 3 天，避免会议纪要延迟生成导致漏扫。\n4. 调用腾讯会议 skill：\n   - 默认优先用 `get_records_list` 按时间窗口查询录制文件，这是最节省额度且最贴近“可入库纪要/转写”的入口；\n   - 若某个时间窗口的 `get_records_list` 返回空，且未配置 `fallbackToEndedMeetings=false`，自动调用 `get_user_ended_meetings` 补充已结束会议，再按会议 ID/会议号查询录制，避免“网页里有历史会议但录制时间窗口返回空”导致误跳过；\n   - 若配置 `includeEndedMeetings=true`，则无论录制时间窗口是否返回内容，都额外调用 `get_user_ended_meetings` 补充已结束会议；\n   - `get_smart_minutes` 优先获取 AI 智能纪要；\n   - `get_transcripts_details(pid=0)` 优先获取转写全文；若返回空或失败，再用 `get_transcripts_paragraphs` 获取段落 ID，并按段落调用 `get_transcripts_details` 补全文。\n5. 只有智能纪要或转写至少一个可用时才作为 `inputItems[]` 交给 OpenClaw。\n6. 把每场可入库会议的源材料归档为 `source_files/tencent_meeting/<sourceId>/<date>-<slug>-<hash>.md`。\n7. 基于 record id 和内容 hash 做增量判断；已处理且内容未变的会议写入 `skippedSources[]`。\n8. 对缺纪要/缺转写/无权限/未生成内容的会议写入 `incompleteItems[]` 或 `errors[]`，不自动申请权限，也不生成低价值空页面。\n9. 输出 `context.json`。如果没有新内容，`prepare` 会把 skip 结果写入 `resultFile`。如果某些扫描窗口因为 MCP 额度、网络或平台错误失败，`snapshot.scanComplete=false`，且不会把 `scanUntil` 推进到当前时间；后续扫描会继续覆盖未完整完成的历史窗口，避免漏掉旧会议。\n\n### 2. OpenClaw 生成 pages.json\n\nOpenClaw 必须阅读 `context.json`，为每个 `inputItems[]` 至少生成或更新一个 `meetings/` 实体页。每个页面必须带 `sourceItemKeys`，引用对应会议的 `inputItems[].itemKey`。\n\n建议输出：\n\n```json\n{\n  \"pages\": [\n    {\n      \"path\": \"meetings/2026-07-07-project-sync.md\",\n      \"title\": \"项目同步会：xxx\",\n      \"type\": \"meeting\",\n      \"kbType\": \"wiki\",\n      \"sourceItemKeys\": [\"<inputItems[].itemKey>\"],\n      \"projectIds\": [\"general\"],\n      \"keywords\": [],\n      \"relatedConcepts\": [\"concepts/example.md\"],\n      \"relatedResources\": [\"resources/example.md\"],\n      \"relatedPages\": [\"overview/example.md\"],\n      \"content\": \"Markdown 正文，不带 frontmatter\"\n    }\n  ],\n  \"skippedSources\": [],\n  \"errors\": [],\n  \"snapshot\": {}\n}\n```\n\n允许写入或更新的目录：`meetings/`、`projects/`、`papers/`、`surveys/`、`code/`、`experiments/`、`tech-notes/`、`notes/`、`concepts/`、`resources/`、必要的 `overview/`。不要写 `qa/`，问答沉淀由 `kb_query` 负责。不要写 `source_files/`，源材料归档由 `prepare` 完成。\n\n### 3. apply\n\n```bash\npython3 scripts/run_task.py apply --input <payload.json> --context <context.json> --pages <pages.json>\n```\n\n`apply` 会：\n\n- 校验 `pages[]` 非空。\n- 校验每个可读 `inputItems[]` 至少被一个 `meetings/` 页面覆盖。\n- 校验每个页面的 `sourceItemKeys` 引用有效会议 item。\n- 拦截路径越界、非 Markdown、写入未允许目录等问题。\n- 为页面补齐 frontmatter、source trace、归档路径、record id、hash、sourceStatus。\n- 写入/更新 Markdown 页面、`catalog.json` 和 `index.md`。\n- 合并并写回 snapshot，供后续定时扫描增量判断。\n- 把后端需要的统一结果 JSON 写入 `resultFile`。\n\n## 会议页面模板\n\n会议实体页沿用本地文件入库 skill 的会议模板，当前判断是合理的：它服务科研团队复用，重点不是流水账，而是决策、行动项、风险和证据。\n\n核心章节：\n\n1. `## 会议信息`：时间、参与者、主题、腾讯会议 ID/会议号/录制 ID、源材料路径；缺失则标注“来源未提及”。\n2. `## 议程与背景`：会议围绕什么问题展开，关联哪些项目或资料。\n3. `## 关键讨论`：按主题整理观点、证据、分歧和上下文。\n4. `## 决议`：已经达成的决定、理由和影响范围。\n5. `## 行动项`：任务、负责人、截止时间、依赖、状态；缺失则写“来源未提及”。\n6. `## 风险与阻塞`：项目风险、资源缺口、技术难点和待协调事项。\n7. `## 开放问题`：未解决问题和需要补充的证据。\n8. `## 关联页面`：链接相关项目、实验、论文、技术方案、概念或资源。\n9. `## 来源与证据索引`：智能纪要、转写、源材料归档路径、record id、hash。\n\n如果会议明确改变某个项目的路线、任务或开放问题，应同步更新 `projects/`。如果会议反复出现可复用方法、架构、工具、数据集或平台，应视证据更新 `concepts/` 或 `resources/`。不要为普通关键词机械建概念页。\n\n如果会议内容影响团队级导航、阶段性资料包、研究主题地图或项目群总览，应更新 `overview/`；如果只是一次普通同步、没有导航或综合价值，则不需要硬建 overview。普通页面之间的关系用 `relatedPages`，概念、资源、代码页分别用 `relatedConcepts`、`relatedResources`、`relatedCodePages`。\n\n## 输出契约\n\n最终 resultFile 必须是后端可读的顶层 JSON envelope：\n\n```json\n{\n  \"success\": true,\n  \"processedSources\": [],\n  \"createdPages\": [],\n  \"updatedPages\": [],\n  \"archivedFiles\": [],\n  \"skippedSources\": [],\n  \"incompleteItems\": [],\n  \"errors\": [],\n  \"commitId\": \"\",\n  \"snapshot\": {}\n}\n```\n\nFile v1.0.6:_meta.json\n\n{\n  \"ownerId\": \"kn7cp7eb6ymqv898hke0ersmc1847fed\",\n  \"slug\": \"tencent-meeting-ingest\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1783537130496\n}\n\nFile v1.0.6:skill-card.md\n\n## Description: <br>\nIngest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[myd2002](https://clawhub.ai/user/myd2002) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and research KB operators use this skill to import Tencent Meeting recordings, smart minutes, and transcripts into a team knowledge base as structured meeting wiki pages and related KB updates. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Meeting recordings, minutes, and transcripts may contain confidential business or personal information when copied into the configured knowledge base. <br>\nMitigation: Use a private repository, review access controls, and keep Gitea and Tencent tokens scoped to the least privilege needed for ingestion. <br>\nRisk: A configured external Tencent Meeting skill command runs as part of ingestion. <br>\nMitigation: Use a trusted and pinned tencent-meeting-skill command before enabling the workflow. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/myd2002/skills/tencent-meeting-ingest) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Code, Shell commands, Configuration, Guidance] <br>\n**Output Format:** [JSON context and Markdown knowledge-base pages written through the configured Research KB workflow] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Produces a backend-readable result envelope and may create or update meeting, project, concept, resource, overview, and related KB pages.] <br>\n\n## Skill Version(s): <br>\n1.0.6 (source: release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.6:env-example.txt\n\nGITEA_URL=http://127.0.0.1:3000\nGITEA_BOT_TOKEN=\nGITEA_BOT_USERNAME=research-kb-bot\nGITEA_ORG=\nTEAM_KB_REPO=team-kb\nOPENCLAW_SHARED_DIR=/srv/research-kb/shared\nTENCENT_MEETING_TOKEN=\n# Optional when tencent-meeting-skill is not installed as a sibling skill directory:\nTENCENT_MEETING_SKILL_COMMAND=python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py\n\nFile v1.0.6:requirements.txt\n\n# Uses only the Python 3 standard library. Platform fetching is delegated to tencent-meeting-skill.\n\nArchive v1.0.5: 16 files, 25272 bytes\n\nFiles: _meta.json (141b), env-example.txt (365b), main.js (174b), requirements.txt (101b), scripts/catalog.py (5150b), scripts/external_skill_bridge.py (2627b), scripts/gitea_api.py (4949b), scripts/meeting_kb_writer.py (13069b), scripts/meeting_reader.py (21016b), scripts/run_task.py (3765b), scripts/task_io.py (1011b), scripts/tencent_meeting_bridge.py (4193b), scripts/utils.py (3678b), setup.sh (193b), skill-card.md (2168b), SKILL.md (8554b)\n\nFile v1.0.5:SKILL.md\n\n---\nname: tencent_meeting_ingest\ndescription: Ingest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates.\n---\n\n# tencent_meeting_ingest\n\n## 职责边界\n\n本 skill 只负责“腾讯会议资料入库编译”。腾讯会议平台能力不在这里重新实现：会议列表、录制列表、智能纪要、转写全文、录制地址和权限错误都必须通过已安装的 `tencent-meeting-skill` / `tencent-meeting-mcp` 调用。\n\n后端负责创建资料源、触发任务、保存任务状态和传递 payload/resultFile。Python 脚本只负责确定性动作：读取 payload、调用外部腾讯会议 skill、归档源材料到 `source_files/tencent_meeting/`、准备 OpenClaw 上下文、校验 OpenClaw 生成的 JSON、写入 Gitea、维护 `catalog.json`/`index.md`、写 `resultFile`。OpenClaw 负责智能判断：理解会议内容、生成结构化会议 Wiki 页面、判断是否需要更新项目页/概念页/资源页/其他相关页、组织页面之间的链接。\n\n本 skill 不做会议创建、取消、改期、权限申请提交、邮件通知、issue 草稿、问答沉淀，也不保留“没有 OpenClaw 时自动生成简陋页面”的 fallback。\n\n会议入库不只是生成会议纪要页。写 `pages.json` 前，OpenClaw 应私下做一次知识图谱规划：每场会议先落到 `meetings/` 实体页，再判断它是否改变项目路线、研究主题、实验计划、资源选择、团队导航或已有概念/资源页。没有证据时不要硬建关系页；但会议明确带来决策、路线变化或跨页面综合价值时，应更新相关 `overview/`、`projects/`、`concepts/`、`resources/` 或其他页面，并保留解释性跳转。\n\n## 依赖环境\n\n必须在 OpenClaw 运行环境中具备：\n\n- 已安装并可调用的 `tencent-meeting-skill` 或 `tencent-meeting-mcp`。\n- `TENCENT_MEETING_TOKEN`，供腾讯会议 skill 使用。\n- `GITEA_URL`\n- `GITEA_BOT_TOKEN`\n- `GITEA_BOT_USERNAME` 或 `GITEA_ORG`\n- `TEAM_KB_REPO`\n\n可选：\n\n- `TENCENT_MEETING_SKILL_COMMAND`：显式指定腾讯会议 skill CLI，例如 `python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py`。未配置时，脚本会查找同级 skill 目录 `tencent-meeting-skill/scripts/tencent_meeting.py` 或 `tencent-meeting-mcp/scripts/tencent_meeting.py`。\n\n## 运行协议\n\n本 skill 使用两段式流程。\n\n### 1. prepare\n\n```bash\npython3 scripts/run_task.py prepare --input <payload.json> --context-output <context.json>\n```\n\n`prepare` 会：\n\n1. 读取后端 payload 中的资料源、配置和 `lastSnapshot`。\n2. 初次扫描时默认按最近 `historyLookbackDays` 天扫描历史会议，默认 180 天；默认拆成 7 天窗口以避免腾讯会议 MCP 大窗口静默返回空，`windowDays` 可配置且最大不超过 31 天。\n3. 增量扫描时从 `lastSnapshot.scanUntil` 往前重叠 `incrementalOverlapDays` 天，默认 3 天，避免会议纪要延迟生成导致漏扫。\n4. 调用腾讯会议 skill：\n   - 默认优先用 `get_records_list` 按时间窗口查询录制文件，这是最节省额度且最贴近“可入库纪要/转写”的入口；\n   - 若某个时间窗口的 `get_records_list` 返回空，且未配置 `fallbackToEndedMeetings=false`，自动调用 `get_user_ended_meetings` 补充已结束会议，再按会议 ID/会议号查询录制，避免“网页里有历史会议但录制时间窗口返回空”导致误跳过；\n   - 若配置 `includeEndedMeetings=true`，则无论录制时间窗口是否返回内容，都额外调用 `get_user_ended_meetings` 补充已结束会议；\n   - `get_smart_minutes` 优先获取 AI 智能纪要；\n   - `get_transcripts_details` 获取转写全文。\n5. 只有智能纪要或转写至少一个可用时才作为 `inputItems[]` 交给 OpenClaw。\n6. 把每场可入库会议的源材料归档为 `source_files/tencent_meeting/<sourceId>/<date>-<slug>-<hash>.md`。\n7. 基于 record id 和内容 hash 做增量判断；已处理且内容未变的会议写入 `skippedSources[]`。\n8. 对缺纪要/缺转写/无权限/未生成内容的会议写入 `incompleteItems[]` 或 `errors[]`，不自动申请权限，也不生成低价值空页面。\n9. 输出 `context.json`。如果没有新内容，`prepare` 会把 skip 结果写入 `resultFile`。如果某些扫描窗口因为 MCP 额度、网络或平台错误失败，`snapshot.scanComplete=false`，且不会把 `scanUntil` 推进到当前时间；后续扫描会继续覆盖未完整完成的历史窗口，避免漏掉旧会议。\n\n### 2. OpenClaw 生成 pages.json\n\nOpenClaw 必须阅读 `context.json`，为每个 `inputItems[]` 至少生成或更新一个 `meetings/` 实体页。每个页面必须带 `sourceItemKeys`，引用对应会议的 `inputItems[].itemKey`。\n\n建议输出：\n\n```json\n{\n  \"pages\": [\n    {\n      \"path\": \"meetings/2026-07-07-project-sync.md\",\n      \"title\": \"项目同步会：xxx\",\n      \"type\": \"meeting\",\n      \"kbType\": \"wiki\",\n      \"sourceItemKeys\": [\"<inputItems[].itemKey>\"],\n      \"projectIds\": [\"general\"],\n      \"keywords\": [],\n      \"relatedConcepts\": [\"concepts/example.md\"],\n      \"relatedResources\": [\"resources/example.md\"],\n      \"relatedPages\": [\"overview/example.md\"],\n      \"content\": \"Markdown 正文，不带 frontmatter\"\n    }\n  ],\n  \"skippedSources\": [],\n  \"errors\": [],\n  \"snapshot\": {}\n}\n```\n\n允许写入或更新的目录：`meetings/`、`projects/`、`papers/`、`surveys/`、`code/`、`experiments/`、`tech-notes/`、`notes/`、`concepts/`、`resources/`、必要的 `overview/`。不要写 `qa/`，问答沉淀由 `kb_query` 负责。不要写 `source_files/`，源材料归档由 `prepare` 完成。\n\n### 3. apply\n\n```bash\npython3 scripts/run_task.py apply --input <payload.json> --context <context.json> --pages <pages.json>\n```\n\n`apply` 会：\n\n- 校验 `pages[]` 非空。\n- 校验每个可读 `inputItems[]` 至少被一个 `meetings/` 页面覆盖。\n- 校验每个页面的 `sourceItemKeys` 引用有效会议 item。\n- 拦截路径越界、非 Markdown、写入未允许目录等问题。\n- 为页面补齐 frontmatter、source trace、归档路径、record id、hash、sourceStatus。\n- 写入/更新 Markdown 页面、`catalog.json` 和 `index.md`。\n- 合并并写回 snapshot，供后续定时扫描增量判断。\n- 把后端需要的统一结果 JSON 写入 `resultFile`。\n\n## 会议页面模板\n\n会议实体页沿用本地文件入库 skill 的会议模板，当前判断是合理的：它服务科研团队复用，重点不是流水账，而是决策、行动项、风险和证据。\n\n核心章节：\n\n1. `## 会议信息`：时间、参与者、主题、腾讯会议 ID/会议号/录制 ID、源材料路径；缺失则标注“来源未提及”。\n2. `## 议程与背景`：会议围绕什么问题展开，关联哪些项目或资料。\n3. `## 关键讨论`：按主题整理观点、证据、分歧和上下文。\n4. `## 决议`：已经达成的决定、理由和影响范围。\n5. `## 行动项`：任务、负责人、截止时间、依赖、状态；缺失则写“来源未提及”。\n6. `## 风险与阻塞`：项目风险、资源缺口、技术难点和待协调事项。\n7. `## 开放问题`：未解决问题和需要补充的证据。\n8. `## 关联页面`：链接相关项目、实验、论文、技术方案、概念或资源。\n9. `## 来源与证据索引`：智能纪要、转写、源材料归档路径、record id、hash。\n\n如果会议明确改变某个项目的路线、任务或开放问题，应同步更新 `projects/`。如果会议反复出现可复用方法、架构、工具、数据集或平台，应视证据更新 `concepts/` 或 `resources/`。不要为普通关键词机械建概念页。\n\n如果会议内容影响团队级导航、阶段性资料包、研究主题地图或项目群总览，应更新 `overview/`；如果只是一次普通同步、没有导航或综合价值，则不需要硬建 overview。普通页面之间的关系用 `relatedPages`，概念、资源、代码页分别用 `relatedConcepts`、`relatedResources`、`relatedCodePages`。\n\n## 输出契约\n\n最终 resultFile 必须是后端可读的顶层 JSON envelope：\n\n```json\n{\n  \"success\": true,\n  \"processedSources\": [],\n  \"createdPages\": [],\n  \"updatedPages\": [],\n  \"archivedFiles\": [],\n  \"skippedSources\": [],\n  \"incompleteItems\": [],\n  \"errors\": [],\n  \"commitId\": \"\",\n  \"snapshot\": {}\n}\n```\n\nFile v1.0.5:_meta.json\n\n{\n  \"ownerId\": \"kn7cp7eb6ymqv898hke0ersmc1847fed\",\n  \"slug\": \"tencent-meeting-ingest\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1783535700776\n}\n\nFile v1.0.5:skill-card.md\n\n## Description: <br>\nIngest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[myd2002](https://clawhub.ai/user/myd2002) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and team knowledge-base operators use this skill to ingest authorized Tencent Meeting recordings, minutes, and transcripts into a Research KB, producing meeting wiki pages and related KB updates through OpenClaw. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill processes private meeting recordings, minutes, and transcripts. <br>\nMitigation: Run it only for meetings the team is authorized to archive and publish into the target Research KB. <br>\nRisk: The skill uses Tencent Meeting and Gitea credentials to fetch meeting content and commit KB updates. <br>\nMitigation: Install it only where the Tencent Meeting delegate command is trusted and controlled, and use a narrowly scoped Gitea bot token limited to the intended KB repository. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/myd2002/skills/tencent-meeting-ingest) <br>\n- [Publisher profile](https://clawhub.ai/user/myd2002) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, JSON] <br>\n**Output Format:** [JSON envelopes and Markdown knowledge-base pages] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Delegates Tencent Meeting retrieval to an installed Tencent Meeting skill or MCP and writes Research KB updates through Gitea.] <br>\n\n## Skill Version(s): <br>\n1.0.5 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.5:env-example.txt\n\nGITEA_URL=http://127.0.0.1:3000\nGITEA_BOT_TOKEN=\nGITEA_BOT_USERNAME=research-kb-bot\nGITEA_ORG=\nTEAM_KB_REPO=team-kb\nOPENCLAW_SHARED_DIR=/srv/research-kb/shared\nTENCENT_MEETING_TOKEN=\n# Optional when tencent-meeting-skill is not installed as a sibling skill directory:\nTENCENT_MEETING_SKILL_COMMAND=python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py\n\nFile v1.0.5:requirements.txt\n\n# Uses only the Python 3 standard library. Platform fetching is delegated to tencent-meeting-skill.","readmeExcerpt":"Skill: tencent-meeting-ingest Owner: myd2002 Summary: Ingest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates. Tags: latest:1.0.14 Version history: v1.0.14 | 2026-08-07T16:42:39.111Z | user - Removed the sample file skill-card.md. - No changes to code o","codeSnippets":[],"executableExamples":[{"language":"json","snippet":"{\n  \"format\": \"research-kb-markdown-drafts/v1\",\n  \"pages\": [\n    {\n      \"draftFile\": \"meetings/2026-07-11-project-sync.md\",\n      \"sourceItemKeys\": [\"<inputItems[].itemKey>\"]\n    }\n  ]\n}"},{"language":"bash","snippet":"python3 scripts/run_task.py validate-manifest --input <payload.json> --context <context.json>"},{"language":"bash","snippet":"python3 scripts/run_task.py apply --input <payload.json> --context <context.json>"},{"language":"text","snippet":"File v1.0.14:_meta.json\n\n{\n  \"ownerId\": \"kn7cp7eb6ymqv898hke0ersmc1847fed\",\n  \"slug\": \"tencent-meeting-ingest\",\n  \"version\": \"1.0.14\",\n  \"publishedAt\": 1786120959111\n}\n\nFile v1.0.14:skill-card.md\n\n## Description:\n\nIngest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[myd2002](https://clawhub.ai/user/myd2002)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and research operations teams use this skill to ingest Tencent Meeting recordings, minutes, and transcripts into a Research KB. It helps an agent prepare meeting source context, create Markdown drafts and compact manifests, validate them, and apply the resulting wiki pages and KB updates.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Task payloads can redirect Gitea uploads carrying the bot token and meeting content.\n\nMitigation: Install only where backend task payloads are trusted or validated, and require the Gitea endpoint to come from administrator-controlled configuration or an allowlist.\n\nRisk: A broad Gitea bot token could expose or modify repositories beyond the intended KB.\n\nMitigation: Use a bot token limited to the intended Team KB repository and the minimum permissions needed for KB updates.\n\nRisk: Full meeting minutes and transcripts may be archived into the repository or shared work area.\n\nMitigation: Keep the shared work directory private, confirm repository access controls, and make users aware that meeting content can be persisted.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/myd2002/skills/tencent-meeting-ingest)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, JSON, Shell commands, Configuration]\n\n**Output Format:** [Markdown drafts, compact JSON manifests, and backend result JSON]\n\n**Ou"},{"language":"json","snippet":"{\n  \"format\": \"research-kb-markdown-drafts/v1\",\n  \"pages\": [\n    {\n      \"draftFile\": \"meetings/2026-07-11-project-sync.md\",\n      \"sourceItemKeys\": [\"<inputItems[].itemKey>\"]\n    }\n  ]\n}"},{"language":"bash","snippet":"python3 scripts/run_task.py validate-manifest --input <payload.json> --context <context.json>"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\r\nname: tencent-meeting-ingest\ndescription: Ingest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates.\r\n---\r\n\r\n# tencent-meeting-ingest\n\r\n## 职责边界\r\n\r\n本 skill 只负责“腾讯会议资料入库编译”。腾讯会议平台能力不在这里重新实现：会议列表、录制列表、智能纪要、转写全文、录制地址和权限错误都必须通过已安装的 `tencent-meeting-skill` / `tencent-meeting-mcp` 调用。\r\n\r\n后端负责创建资料源、触发任务、保存任务状态和传递 payload/resultFile。Python 脚本只负责确定性动作：读取 payload、调用外部腾讯会议 skill、归档源材料到 `source_files/tencent_meeting/`、准备 OpenClaw 上下文和任务专用草稿目录、校验短 manifest 与 Markdown 草稿、读取草稿正文、写入 Gitea、维护 `catalog.json`/`index.md`、写 `resultFile`。OpenClaw 负责智能判断：理解会议内容、把 Wiki 正文写成普通 Markdown 草稿、选择页面、判断是否需要更新项目页/概念页/资源页/其他相关页、组织页面之间的链接。\n\r\n本 skill 不做会议创建、取消、改期、权限申请提交、邮件通知、issue 草稿、问答沉淀，也不保留“没有 OpenClaw 时自动生成简陋页面”的 fallback。\r\n\r\n会议入库不只是生成会议纪要页。写 Markdown 草稿和 manifest 前，OpenClaw 应私下做一次知识图谱规划：每场会议先落到 `meetings/` 实体页，再判断它是否改变项目路线、研究主题、实验计划、资源选择、团队导航或已有概念/资源页。没有证据时不要硬建关系页；但会议明确带来决策、路线变化或跨页面综合价值时，应更新相关 `overview/`、`projects/`、`concepts/`、`resources/` 或其他页面，并保留解释性跳转。\n\r\n## 依赖环境\r\n\r\n必须在 OpenClaw 运行环境中具备：\r\n\r\n- 已安装并可调用的 `tencent-meeting-skill` 或 `tencent-meeting-mcp`。\r\n- `TENCENT_MEETING_TOKEN`，供腾讯会议 skill 使用。\r\n- `GITEA_URL`\r\n- `GITEA_BOT_TOKEN`\r\n- `GITEA_BOT_USERNAME` 或 `GITEA_ORG`\r\n- `TEAM_KB_REPO`\r\n\r\n可选：\r\n\r\n- `TENCENT_MEETING_SKILL_COMMAND`：显式指定腾讯会议 skill CLI，例如 `python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py`。未配置时，脚本会查找同级 skill 目录 `tencent-meeting-skill/scripts/tencent_meeting.py` 或 `tencent-meeting-mcp/scripts/tencent_meeting.py`。\r\n\r\n## 运行协议\r\n\r\n本 skill 使用 `prepare -> Markdown drafts + compact manifest -> validate-manifest -> apply` 流程。长正文不进入 JSON；manifest 只承担短元数据交接。\n\r\n### 1. prepare\r\n\r\n```bash\r\npython3 scripts/run_task.py prepare --input <payload.json> --context-output <context.json>\r\n```\r\n\r\n`prepare` 会：\r\n\r\n1. 读取后端 payload 中的资料源、配置和 `lastSnapshot`。\r\n2. 初次扫描时默认按最近 `historyLookbackDays` 天扫描历史会议，默认 14 天；默认拆成 31 天窗口以减少 MCP 列表调用次数，`windowDays` 可配置且最大不超过 31 天；默认 `pageSize=10`、`maxRecords=30`，`maxRecords` 强制限制在 1 到 500，并会提前停止列表分页，不是拉完全部记录后才截断。每场会议写入 `context.json` 的 `contentPreview` 默认最多 12000 字符，完整智能纪要/转写仍归档到 `source_files/tencent_meeting/`。若腾讯会议 MCP 对大窗口表现不稳定，可在资料源配置中将 `windowDays` 下调到 7 或 14。\n3. 增量扫描时从 `lastSnapshot.scanUntil` 往前重叠 `incrementalOverlapDays` 天，默认 1 天，避免会议纪要延迟生成导致漏扫，同时减少重复 MCP 调用。\r\n4. 调用腾讯会议 skill：\r\n   - 默认优先用 `get_records_list` 按时间窗口查询录制文件，这是最节省额度且最贴近“可入库纪要/转写”的入口；\r\n   - 若某个时间窗口的 `get_records_list` 返回空，且未配置 `fallbackToEndedMeetings=false`，默认仅对最近 `endedMeetingsFallbackRecentDays` 天（默认 14 天）的窗口自动调用 `get_user_ended_meetings` 补充已结束会议，再按会议 ID/会议号查询录制，避免历史空窗口大量消耗 MCP 额度；\r\n   - 若配置 `includeEndedMeetings=true`，则无论录制时间窗口是否返回内容，都额外调用 `get_user_ended_meetings` 补充已结束会议；\r\n   - `get_smart_minutes` 优先获取 AI 智能纪要；\r\n   - `get_transcripts_details(pid=0)` 优先获取转写全文；若返回空或失败，再用 `get_transcripts_paragraphs` 获取段落 ID，并按段落调用 `get_transcripts_details` 补全文。\r\n   - 计数口径：inputItems[] 按逻辑会议发生次数计数，不按腾讯会议原始录制文件计数；`get_records"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7cp7eb6ymqv898hke0ersmc1847fed\",\n  \"slug\": \"tencent-meeting-ingest\",\n  \"version\": \"1.0.14\",\n  \"publishedAt\": 1786120959111\n}"},{"path":"skill-card.md","content":"## Description:\n\nIngest Tencent Meeting recordings, minutes, and transcripts into the Research KB by delegating platform fetching to tencent-meeting-skill, then letting OpenClaw generate structured meeting wiki pages and related KB updates.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[myd2002](https://clawhub.ai/user/myd2002)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and research operations teams use this skill to ingest Tencent Meeting recordings, minutes, and transcripts into a Research KB. It helps an agent prepare meeting source context, create Markdown drafts and compact manifests, validate them, and apply the resulting wiki pages and KB updates.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Task payloads can redirect Gitea uploads carrying the bot token and meeting content.\n\nMitigation: Install only where backend task payloads are trusted or validated, and require the Gitea endpoint to come from administrator-controlled configuration or an allowlist.\n\nRisk: A broad Gitea bot token could expose or modify repositories beyond the intended KB.\n\nMitigation: Use a bot token limited to the intended Team KB repository and the minimum permissions needed for KB updates.\n\nRisk: Full meeting minutes and transcripts may be archived into the repository or shared work area.\n\nMitigation: Keep the shared work directory private, confirm repository access controls, and make users aware that meeting content can be persisted.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/myd2002/skills/tencent-meeting-ingest)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, JSON, Shell commands, Configuration]\n\n**Output Format:** [Markdown drafts, compact JSON manifests, and backend result JSON]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Produces task-scoped draft and manifest paths; meeting source material may be archived as files.]\n\n## Skill Version(s):\n\n1.0.14 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."},{"path":"env-example.txt","content":"GITEA_URL=http://127.0.0.1:3000\nGITEA_BOT_TOKEN=\nGITEA_BOT_USERNAME=research-kb-bot\nGITEA_ORG=\nTEAM_KB_REPO=team-kb\nOPENCLAW_SHARED_DIR=/srv/research-kb/shared\nTENCENT_MEETING_TOKEN=\n# Optional when tencent-meeting-skill is not installed as a sibling skill directory:\nTENCENT_MEETING_SKILL_COMMAND=python3 /path/to/tencent-meeting-skill/scripts/tencent_meeting.py"},{"path":"requirements.txt","content":"# Uses only the Python 3 standard library. Platform fetching is delegated to tencent-meeting-skill."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1409,"uniquenessScore":44,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T07:47:25.060Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T07:47:25.060Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T10:45:15.714Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}