前言

会后行动清单已经列出林舟和许岚的工作,用户又希望把它们与蓝桥项目的旧事项一起整理成跟进文字。当前会议说明了新的安排,应用里的旧记录则反映之前保存的工作,两份内容需要一起查看。

文字整理沿用已有规则,旧记录的检索和读取则由会议应用的只读 Agent 负责。组合程序接收这两份结果,生成待核对草稿,不发送、不保存,也不更新旧事项。检查时应先确认规则和数据分别来自哪里,再用固定响应比较组合后的文字。这样,出现错误时就能判断应该回到提取、检索还是文字组织环节。

HarmonyOS 7 小艺 Skill 开发实战|复用已有Skill与Agent组合会后整理和跟进能力

一、打开源文件,确定到底复用哪一份整理规则

从专栏目录打开 examples/reuse/README.md,再打开同目录的 bindings.json。清单记录了整理技能版本 0.2.0、旧 Agent 卡片版本 1.1.0 和对应源文件位置。先沿着 sourceSkill.path 打开 SKILL.md,确认它只整理用户提供的会议文字,输出明确行动、建议与取消,并保留原句和缺失字段。目标跟进能力需要的就是这段整理规则,无法从版本号推断它还会保存、提醒或查询其他数据。

这份整理文件位于 examples/skill-02/meeting-actions/。平台后来也导出过版本号为 0.2.0 的文件,但两份指令内容不同,平台结果仍曾把 meetingDate 放进行动的 missingFields。因此,选择复用对象时要同时核对来源目录和具体内容。当前组合沿用本地维护文件,不能借相同版本号继承另一份平台包的评测结果,也不能把后者直接当成当前程序的输入来源。

继续查看 skillResourceId、agentResourceId 和 actualRuntimeToolSchema,当前三个位置均为 null,绑定状态为 PENDING。文件路径指向可阅读的源代码,平台资源标识指向账号中能够被选择的资源,两者各有用途。把路径复制进资源标识位置无法完成绑定。如果自己的账号里尚无可引用的源技能,先保留空值,完成后面的本地数据检查;等实际资源出现以后再记录详情中的标识与版本。

本地绑定原文件后三项资源与工具结构均为空

确认来源以后,还要区分三种标识。平台资源标识用来找到已有能力,Agent 卡片标识描述对应 Agent,记录标识则定位会议应用中的某条数据。把业务能力名填进资源位置,或把资源标识当成会议编号,都无法指向要读取的记录。当前固定响应带有夹具前缀,真实接入时应使用检索返回的标识,不把教学值带入设备查询。

旧记录能力的来源也有具体位置。绑定清单中的 recordService 指向已有会议应用的 RecordAgentService.ets,agentConfig 指向对应卡片配置。当前只使用其中的 meeting.search 与 meeting.overview,前者找到候选记录,后者读取选中记录和关联事项。目标技能无需重复实现旧工程的通信与生命周期,但需要知道它返回哪些字段,以及哪些动作并没有提供。只读能力的返回中有完成标记,没有更新旧记录或发送通知的方法。

二、在创建页面选择资源,随后检查生成文件

进入小艺开放平台的 Skill,选择 新建Skill,在创建对话中说明会后整理与跟进用途。输入框下方有 @ 入口,选择 Skill 后再选择来源。自己的已有能力应从 我的Skill 中查找,公开能力可以查看 Skill广场,合作资源则核对 合作伙伴 来源。找到资源以后先看详情,确认文字整理范围、源版本和使用条件,再把它添加到当前创建对话。

当前我的Skill来源没有可引用条目

添加后继续打开目标生成文件,检查行动字段和缺失规则是否进入 SKILL.md。引用会带入能力定义、执行逻辑和参数规范,目标生成过程仍可能根据新需求调整内容。例如跟进功能需要读取旧事项,也不能因此让原来的建议项变成正式行动。只有导出的目标规则保留了原有分类,并明确新增动作在哪里结束,才能继续检查资源调用。

旧记录从同一个 @ 入口添加,选择 Agent,再选择 我的Agent 或实际合作来源。找到会议应用对应资源后,核对类型与资源详情。这个案例需要已有应用的端 A2A 只读能力;列表中的其他 Agent 即使名称相近,也可能采用不同调用方式,或者根本没有会议数据。应用安装、平台关联与目标设备会影响这条路径,资源卡片添加成功还不能说明设备已经返回记录。

当前Agent引用来源没有可用资源

创建页面的 Skill检索 用于选择生成范本,@ 用于添加已有资源,运行时则要通过系统提供的工具取得结果。检索中一次选择一个主要范本,没有匹配内容时可以跳过。选到相似范本以后仍需检查生成规则,添加资源以后仍需验证调用,不能把这两个页面动作当成已经读到旧记录。

运行时使用的工具名称与参数结构,需要从真实资源详情或生成文件中读取。系统基础工具中虽然有 load_skill,当前却没有本案例的实际调用参数,因此不能自行写成 load_skill(name)。Agent 的外层工具参数与内部业务 JSON 也需要分别确认。取得实际 Schema 后,再记录它怎样接收业务文本、哪个字段携带技能标识,以及返回怎样交给下一步;外层结构尚未取得时,先保留本地组合路径。

三、查到候选以后,让用户选定一条旧记录

在真实资源已经可调用的情况下,先按项目相关关键词检索。旧业务服务接受的检索内容如下,keyword 使用蓝桥,limit 使用五条,便于把候选记录交给用户辨认。它是 Agent 内部的业务输入,真正调用时还要由已核对的外层工具接收,不能直接粘贴到一个未知工具并认为参数已经适配。

{"skillId":"meeting.search","keyword":"蓝桥","limit":5}

检查返回的记录标识、标题和开始时间。如果出现多条蓝桥记录,就让用户根据时间和标题选定本次要核对的一条。标题相同也可能属于不同会议,因此下一步以真实记录标识为准。没有命中时,可以解释本次关键词下没有结果,再请用户调整关键词;资源报错时则先排查连接或权限,这两种返回会导致不同操作。

选定以后,再读取这一条记录的概览。下面的 meetingId 必须替换成候选中实际返回并由用户选中的标识,不能使用当前新会议的 M-20261004-01 代替。当前会议编号描述刚整理的文字,旧记录标识指向应用数据库中的对象,两者即使碰巧相似也需要分别核对。

{"skillId":"meeting.overview","meetingId":"用户选中的真实记录标识"}

检索的 limit 范围是一到二十。概览先确认记录存在,再读取关联行动,最多返回二十项,并用 actionsTruncated 标明是否截断。读取成功以后先看这个标记,再看事项内容。如果记录已经删除,重新选择候选;如果标记为 true,当前返回不能支撑完整历史比较,需要回应用查看剩余事项。不能因为概览包含几条行动,就宣布全部旧工作都已经核对。

四、把两份输入并排打开,保留各自的字段含义

打开 samples/09-current-actions.json,先看项目、会议和日期,再展开 actions。当前共有两项:林舟在十月六日前补齐接口清单,许岚在十月八日前确认联调窗口。每项都包含 title、owner、dueDate、source 和 missingFields,原句可以用来判断日期和负责人是否来自这次会议。文件中的增加短信提醒位于 suggestions,没有因为要生成跟进文本就自动升级为工作安排。

本地组合输入:本次会议的两条行动

再打开 samples/09-agent-overview-fixture.json。文件很短,格式化阅读以后可以看到一条蓝桥联调准备记录、一项整理测试账号清单的旧工作,以及 isChecked: false。这个响应是固定教学数据,文件中的 fixture 标识提醒它没有来自当前设备。它的作用是让本地程序收到与旧业务结构相同的对象,检查组合过程,不用等待真实账号与设备条件。

本地固定响应:待比较的旧记录与未完成事项

当前行动包含负责人、截止日期与原句,旧事项只有 id、content 和完成标记,组合时不能补出旧数据没有提供的信息。isChecked 只说明应用中的勾选状态,也不能证明这项旧工作与当前某条行动相同。因此,草稿分别呈现本次安排和历史事项,不按相近标题自动归并,让用户继续核对两边是否有关联。

当前行动与历史事项分别保留来源

两条输入分别进入跟进草稿,并保留各自来源。箭头表示组合内容,不表示按相近标题归并为同一项任务;草稿仍需用户核对,也没有触发业务写入。

打开文件比较时,可以先用原句确认每项新行动,再把旧记录的标题与标识单独记下。原句来自本次会议,因此能说明林舟和许岚当前承担什么;旧事项文本只说明应用保存过什么。草稿里同时出现两类内容时,用户才能判断一项工作究竟是新安排还是历史提醒。发现旧工作已完成却仍为未勾选状态,应回应用核对实际记录,不能在组合输入中直接改成完成来代替业务更新。

继续核对 records 数组和 actionsTruncated。当前固定响应只包含一条已选记录,并明确标记未截断,这满足本地组合的入口条件。后面接入真实返回时,也需要保持同一关系。把多条检索候选直接交给组合函数,会跳过用户选择;省略截断字段,则会让程序无法判断历史是否完整。这两种输入都应先修正来源步骤,不能为了通过程序而随意删掉记录或补一个假标记。

五、运行组合程序,按两种实际返回检查草稿

将终端的工作目录设为根目录再执行下面两行命令。第一行进入 examples/reuse/,第二行运行组合程序;进入子目录以后应该能看到 compose.py。程序使用相对于自身的路径读取前述输入,所以无需在命令中手工拼接 JSON,也不需要安装额外库。文件找不到时先核对两行命令的起始目录,不要去修改源码中的读取位置。

cd examples/reuse
python3 compose.py

如果命令结束却没有拿到预期对象,先看终端末尾是JSON还是异常堆栈。读取错误通常会指出找不到的文件,参数错误则由组合函数给出具体原因。脚本末尾的入口分别调用有固定响应和没有资源的两条路径,所以打印两个分支是正常行为,不能把它当成执行了两次真实Agent查询。这里的输出只显示在终端,不会自动覆盖保存的原始结果,比较时可以同时打开原件。

程序会在终端打印一个 JSON 对象,已有实际输出保存在 samples/09-actual-local-fixture.json,可以先打开原件逐项核对。根字段 realPlatformInvocation 为 false,表明这次没有经过平台调用。withFixture 使用固定的历史响应,missingResource 则没有传入旧数据。两条路径放在同一次输出中,可以直接比较有无历史数据时草稿怎样变化。

既有本地组合输出:固定旧记录与资源缺失两个分支

在 withFixture 中,草稿保留林舟和许岚的负责人、日期与工作名称,又追加蓝桥联调准备的记录标识及未勾选旧事项。末尾明确说明旧数据只是核对材料,还没有按原文判断两边是否指向同一工作。这个结果说明组合函数能把已提供的字段组织成文字,不能证明上游从会议原文提取正确。发现负责人或日期错误时,应回到当前清单和原句处理,不能只在草稿中改一个名字。

没有传入旧数据时,missingResource 仍保留本次两项工作,同时说明旧记录能力未绑定或不可用,历史核对没有完成。程序没有查询,就不能把这份返回说成没有发现旧记录。真实对话准备采用这个分支时,应先告诉用户缺少历史比较,再确认是否继续使用当前输入。本地入口直接打印该分支,只能展示文字变化,不能代表用户已经接受。

两条返回都有 sent: false 与 saved: false,草稿也写明尚未发送、保存或提交。检查到这里可以继续人工核对文字,不应等待备忘录或业务列表自动出现记录。如果下一个需求是保存或更新旧事项,先确认存在对应写入能力与用户确认过程;当前只读 Agent 和组合程序都没有执行这些动作。

六、错误出现时,回到缺失的那一步

打开 compose.py,先看草稿字符串建立之前的入口检查。只有资源状态明确、行动数组存在、旧响应包含一条选中记录,并且截断标记严格为 false 时,完整组合才继续。下面的片段保持现有程序的检查顺序,可以对应前面候选选择和完整概览两个操作。

if resource_state == 'available':
    if not isinstance(overview, dict) or len(overview.get('records', [])) != 1 or not isinstance(overview.get('actions'), list):
        raise ReuseError('A selected record and overview are required')
    if overview.get('actionsTruncated') is not False:
        raise ReuseError('Truncated records cannot support a complete comparison')
elif overview is not None:
    raise ReuseError('Unavailable resource must not carry fabricated results')

本地组合代码:旧记录不完整时先停止生成草稿

看到 A selected record and overview are required 时,检查传入的是检索候选还是已选概览。records 有两条时,需要先完成选择,不能随便删除其中一条来消除错误。看到 Truncated records cannot support a complete comparison 时,检查 actionsTruncated 是否缺失或标记为截断。当前程序在这里停止,尚未建立任何草稿,不能把错误解释成已经返回部分跟进内容。

资源状态为不可用却仍附带概览时,程序返回 Unavailable resource must not carry fabricated results。这条检查防止调用者一边报告资源失败,一边又把固定旧数据写成真实查询结果。要观察完整分支,就明确使用固定响应并保留其身份;要观察缺少资源,就不提供概览。选择哪条路径取决于实际拿到了什么数据,不能只为得到更完整的文字而改状态。

截断标记还要核对类型。JSON 中的布尔值 false 与字符串形式的值具有不同含义,当前函数要求它确实是布尔值;字段缺失也不会被当作未截断。遇到这一错误时,沿实际响应检查输出约定与外层解析,确认完整性标记在哪一步丢失。只有来源能够证明没有截断,才允许继续生成,不能在目标文件里无条件补值让检查通过。

当前行动缺少原句也会停止。负责人或日期为空时,程序则保留该项工作,并在草稿中写待确认;它没有负责全部字段校验,也不会重新理解原文。复现这些情况可以在本目录执行 python3 -m unittest -v test_compose.py,四组现有检查覆盖字段保留、资源缺失、多候选与截断,以及缺少负责人。检查通过后仍要返回输入确认原文含义,字符串组合不能判断会议安排是否真实有效。

检查草稿时还可以按工作对象逐项回读。第一项应该保留林舟与十月六日,第二项应该保留许岚与十月八日,旧事项则只有测试账号清单和未勾选说明。短信建议不应出现为已经分派的工作,缺失分支也不应出现旧记录标题。如果其中一处变化,先比较当前输入、旧响应与对应分支,再决定修正整理规则还是组合显示。这个顺序能够避免用流畅的草稿掩盖上游字段错误。

把平台绑定接上以后,再使用相同输入比较实际调用。先记录源资源与工具结构,再确认搜索传入蓝桥、概览传入用户选中标识,草稿生成后比较负责人、日期与旧事项。源规则升级时重复这组比较,可以发现字段或范围变化。来源版本和返回结构都保持一致以后,才有依据说明新旧能力组合仍然按预期工作。

总结

本地组合程序已经能够把当前安排与固定旧记录分别写进草稿,也能显示资源缺失的情况;候选未选定或概览截断时,它会停止。真正接入时,仍要先取得用户选中的完整概览,再核对草稿是否保留两份数据各自的含义。文字整理规则、资源调用和最终组合分别检查,才能判断哪项工作已明确,哪项还需要回到会议原文或应用中确认。

配套文件

1. 目标技能的整理与历史核对规则

文件路径:examples/reuse/meeting-actions/SKILL.md,展示完整内容。

目标技能先整理当前会议,再按真实资源定义读取历史记录。下面保留完整规则,缺少资源和外层工具参数时的停止条件也保留在内。

---
name: meeting-actions
description: 根据用户提供的会议文字整理行动,并在已绑定的只读会议记录能力可用时辅助核对历史事项,生成待核对的跟进文本;不发送、不保存、不提交。
---

## 整理当前会议

读取references/extraction-rules.md的行动判断与字段规则。沿用projectId、meetingId、meetingDate、actions、suggestions、cancellations结构。原文没有给出的负责人或日期保留null和missingFields。跟进文本只包含明确行动,不能将建议或取消事项写成待办。

## 历史记录核对

这是本地作者规则,资源绑定尚未完成。运行前必须从平台资源详情取得真实Skill/Agent标识及生成的工具Schema,并完成bindings.json记录;未取得时不得用本地路径、Agent卡片id或能力skillId充当平台资源id。

已绑定只读会议Agent时,先用其实际Schema发送meeting.search的输入JSON,keyword为用户提供的标题关键词,limit范围1到20。多条候选需要用户选定记录,再按实际Schema请求meeting.overview及真实meetingId。不能把任意第一条候选当作当前会议。

读取结果records含id、title、startTimeMs;actions含id、content、isChecked,actionsTruncated表示结果是否截断。历史记录没有负责人、截止日期及原文依据,不能从这些字段推导。新事项与旧记录分别展示,未经原文确认不自动归并。

运行时加载其他Skill只使用平台实际提供的load_skill接口及参数;创建时引用资源不能视为运行时已经加载。没有已绑定资源或Schema时停止历史调用,并说明历史核对未完成。用户允许继续时仅生成当前输入的跟进草稿。

## 生成跟进草稿

草稿沿用当前清单的title、owner、dueDate及source,不修改正式行动结果。缺失字段先标注待确认。历史响应为空只表示所选查询未命中;资源超时、报错或不可用不表示没有旧记录。actionsTruncated=true时说明没有完成全部历史核对。

最终展示当前行动、已经取得的旧记录及待确认说明,并明确文本尚未发送、保存或提交。用户要求发送时说明本版本没有发送能力,不自动添加通知工具。

规则引用的提取文件仍需放在同一技能目录的 references/ 中。资源尚未绑定时,这份文件不能证明平台已经调用了旧 Agent。

2. 目标技能的版本与依赖

文件路径:examples/reuse/meeting-actions/module.json,展示完整内容。

这份配置与目标技能放在同一目录,当前没有填写工具依赖。

{"version":"1.0.0","availableOn":["phone"],"toolDependencies":[]}

真实资源需要通过平台详情确认,不能把业务能力名直接补成资源标识。

3. 复用源规则中的输出约定

文件路径:examples/reuse/meeting-actions/references/extraction-rules.md,展示相关片段。

比较源规则与目标规则时,先核对两边是否保留同一套输出字段。下面只摘录源文件的输出约定,完整提取规则仍在原路径。

## 输出约定

根对象包含 projectId、meetingId、meetingDate、actions、suggestions、cancellations。
未提供的 projectId、meetingId、meetingDate 输出 null;meetingDate 已提供时使用 YYYY-MM-DD。
actions 的每一项只能包含 title、owner、dueDate、source、missingFields。
title 为工作名称;owner 为原文明示姓名或 null;dueDate 为 YYYY-MM-DD 或 null。
source 为原文依据字符串。重复归并时按原文顺序用换行连接原句,不删掉关键条件。
missingFields 为数组,只能列 owner 和 dueDate;相应值为 null 时必须列出。
suggestions 与 cancellations 中每项包含 title、source;取消记录需要保留原文的取消范围。
无内容的分类输出空数组。归并说明和歧义提醒放在 JSON 后面的简短中文中,不添加根对象新字段。
输出原文依据用于用户核对,不输出内部思维过程。

目标规则中的历史记录字段另有来源,不能将它们混入当前行动的负责人、日期或原文依据。

4. 尚未完成的资源绑定字段

文件路径:examples/reuse/bindings.json,展示相关片段。

这份清单还包含源文件路径和摘要。下面只摘录资源标识、工具结构与资源缺失处理,末尾花括号对应原文件的结束位置;这段内容不能作为独立平台配置导入。

  "skillResourceId": null,
  "agentResourceId": null,
  "actualRuntimeToolSchema": null,
  "onMissingResource": "Explain unavailable; produce only current-input draft if user accepts incomplete historical check; never report no records."
}

三个空值需要在取得真实资源以后填写,当前不改成教学标识。

5. 完整跟进草稿组合程序

文件路径:examples/reuse/compose.py,展示完整内容。

这份程序接收当前行动与已选旧记录,先检查资源状态和概览是否完整,再分别组织两类内容。文件末尾保留固定响应和资源缺失两条本地路径,便于按第五节的命令运行。

"""Author local composer. Input fixtures are not real Skill/Agent execution evidence."""
import json
from pathlib import Path


class ReuseError(ValueError):
    pass


def compose(actions, overview=None, resource_state='unavailable'):
    if resource_state not in ('available', 'unavailable'):
        raise ReuseError('Resource state must be explicit')
    if not isinstance(actions, dict) or not isinstance(actions.get('actions'), list):
        raise ReuseError('An action list is required')
    if resource_state == 'available':
        if not isinstance(overview, dict) or len(overview.get('records', [])) != 1 or not isinstance(overview.get('actions'), list):
            raise ReuseError('A selected record and overview are required')
        if overview.get('actionsTruncated') is not False:
            raise ReuseError('Truncated records cannot support a complete comparison')
    elif overview is not None:
        raise ReuseError('Unavailable resource must not carry fabricated results')
    lines = [f"{actions['projectId']}会后跟进草稿", f"会议 {actions['meetingId']},日期 {actions['meetingDate']}"]
    for index, item in enumerate(actions['actions'], 1):
        if not isinstance(item.get('source'), str) or not item['source']:
            raise ReuseError('Every new action requires its original source')
        if item.get('owner') is None or item.get('dueDate') is None:
            lines.append(f"{index}. {item['title']},负责人或日期待确认。")
        else:
            lines.append(f"{index}. {item['owner']}在{item['dueDate']}前完成{item['title']}。")
    if resource_state == 'available':
        record = overview['records'][0]
        lines.append(f"已读取的旧记录 {record['title']}(标识 {record['id']})。")
        for item in overview['actions']:
            label = '已勾选完成' if item['isChecked'] else '尚未勾选完成'
            lines.append(f"旧记录事项 {item['content']},{label}。")
        lines.append('旧记录只作为核对材料,尚未按原文判断新旧事项是否相同。')
    else:
        lines.append('旧记录能力未绑定或不可用,当前草稿没有完成历史核对。')
    lines.append('这是待核对的跟进文本,尚未发送、保存或提交。')
    return {'projectId': actions['projectId'], 'meetingId': actions['meetingId'],
            'existingRecordsStatus': resource_state, 'sent': False, 'saved': False,
            'draft': '\n'.join(lines)}


if __name__ == '__main__':
    base = Path(__file__).resolve().parents[2]
    current = json.loads((base / 'samples/09-current-actions.json').read_text())
    fixture = json.loads((base / 'samples/09-agent-overview-fixture.json').read_text())
    output = {'identity': 'author-local-fixture-result', 'realPlatformInvocation': False,
              'withFixture': compose(current, fixture, 'available'),
              'missingResource': compose(current)}
    print(json.dumps(output, ensure_ascii=False, indent=2))

程序没有发出真实 Agent 请求,也没有执行发送或保存。它生成的文字仍需与两份输入逐项比较。

6. 当前会议的完整行动输入

文件路径:samples/09-current-actions.json,展示完整内容。

当前输入包含两项行动和一项尚未采用的建议。保留完整对象,才能核对组合程序是否只采用了明确行动。

{
  "projectId": "blue-bridge",
  "meetingId": "M-20261004-01",
  "meetingDate": "2026-10-04",
  "actions": [
    {
      "title": "补齐接口清单",
      "owner": "林舟",
      "dueDate": "2026-10-06",
      "source": "林舟在2026年10月6日前补齐接口清单。",
      "missingFields": []
    },
    {
      "title": "确认联调窗口",
      "owner": "许岚",
      "dueDate": "2026-10-08",
      "source": "许岚在2026年10月8日前确认联调窗口。",
      "missingFields": []
    }
  ],
  "suggestions": [
    {
      "title": "增加短信提醒",
      "source": "陈禾建议增加短信提醒,团队尚未决定。"
    }
  ],
  "cancellations": []
}

这份输入已经完成结构化,组合程序没有重新从原文提取负责人或日期。

7. 用于组合的固定旧记录响应

文件路径:samples/09-agent-overview-fixture.json,展示完整内容。

下面是本地使用的完整固定响应,记录标识带有 fixture 前缀,概览明确标记未截断。

{"records":[{"id":"fixture-record-001","title":"蓝桥联调准备","startTimeMs":1791014400000}],"actions":[{"id":"fixture-action-001","content":"整理测试账号清单","isChecked":false}],"actionsTruncated":false}

它用于比较组合行为,不能替代设备查询返回。

8. 有旧记录与缺少资源时的历史输出

文件路径:samples/09-actual-local-fixture.json,展示完整内容。

这份已有输出将两条本地路径放在同一个对象中,保留了未调用平台、未发送和未保存的标记。

{
  "identity": "author-local-fixture-result",
  "realPlatformInvocation": false,
  "withFixture": {
    "projectId": "blue-bridge",
    "meetingId": "M-20261004-01",
    "existingRecordsStatus": "available",
    "sent": false,
    "saved": false,
    "draft": "blue-bridge会后跟进草稿\n会议 M-20261004-01,日期 2026-10-04\n1. 林舟在2026-10-06前完成补齐接口清单。\n2. 许岚在2026-10-08前完成确认联调窗口。\n已读取的旧记录 蓝桥联调准备(标识 fixture-record-001)。\n旧记录事项 整理测试账号清单,尚未勾选完成。\n旧记录只作为核对材料,尚未按原文判断新旧事项是否相同。\n这是待核对的跟进文本,尚未发送、保存或提交。"
  },
  "missingResource": {
    "projectId": "blue-bridge",
    "meetingId": "M-20261004-01",
    "existingRecordsStatus": "unavailable",
    "sent": false,
    "saved": false,
    "draft": "blue-bridge会后跟进草稿\n会议 M-20261004-01,日期 2026-10-04\n1. 林舟在2026-10-06前完成补齐接口清单。\n2. 许岚在2026-10-08前完成确认联调窗口。\n旧记录能力未绑定或不可用,当前草稿没有完成历史核对。\n这是待核对的跟进文本,尚未发送、保存或提交。"
  }
}

比较结果时,重点核对两条当前行动和旧事项是否仍然分开,以及资源缺失分支是否明确说明未完成历史核对。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐