diff --git a/en/ai-sre/im.mdx b/en/ai-sre/im.mdx index 60e2dc3c..ae308bb0 100644 --- a/en/ai-sre/im.mdx +++ b/en/ai-sre/im.mdx @@ -225,6 +225,17 @@ After the switch, AI SRE: Knowledge bundles already mounted into this session are not removed — mounts are conversation-scoped, so switching back to a previously-mounted team will not duplicate the mount reminder. +### When the group's team or environment is unusable + +A group conversation pins its team and runtime environment when it is created, and once those settings stop working an investigation cannot begin: the team was deleted or you are no longer in it, the pinned runner is offline or gone, the cloud sandbox template was deleted, the environment belongs to another team, or this deployment offers no cloud sandbox at all. + +AI SRE does not run a turn on the broken configuration. It turns that turn into **configuration repair only**: it says whether the team, the runtime environment, or both are the problem, states the evidence (for example "the cloud-template query succeeded and the pinned template is absent"), and offers only the changes you can actually make — pick another team, pick another runtime environment, or go back to **Auto**. That turn has no investigation tools and no runtime environment, so it does not start an analysis and does not pretend to. + +You can still fix it with `/env` or `/scope`, or just say in the conversation which team or environment to use. Once the new setting is saved: + +- if your original question has not been taken up yet, AI SRE **runs that question again automatically** and posts the conclusion to the group as usual, so you need not resend it; +- if the original question was already taken up (a turn had begun, for example), it is not replayed, and the next message runs on the repaired configuration. + ### /ambient — Control whether this group gets proactive replies diff --git a/en/changelog/changelog.mdx b/en/changelog/changelog.mdx index 8f279a4a..909b3dc4 100644 --- a/en/changelog/changelog.mdx +++ b/en/changelog/changelog.mdx @@ -4,6 +4,22 @@ description: "This page documents important updates and feature releases for Fla keywords: ["Changelog", "Product Release", "Feature Updates", "Flashduty", "Version History"] --- + + +### AI SRE: repair a group's broken team or environment, then resume the original question + +AI SRE conversations in a group chat pin their team and runtime environment when they are created. Once the pinned team is deleted, the runner goes offline or disappears, the cloud sandbox template is deleted, the environment belongs to another team, or the deployment has no cloud sandbox, the question that group asked can no longer run — and before this change you had to spot it and fix it yourself. Now AI SRE turns that turn into **configuration repair only**: it says whether the team, the runtime environment, or both are the problem, gives the evidence, and lists only the changes you can actually make — pick another team, pick another runtime environment, or go back to **Auto**. That turn has no investigation tools and no runtime environment, so it does not start an analysis. After the repair, if the original question has not been taken up yet, AI SRE **runs it again automatically** and posts the conclusion to the group; a question already taken up is not replayed, and the next message runs on the repaired configuration. `/env` and `/scope` work as before. See [IM platforms](/en/ai-sre/im). + +### RUM: natural-language queries understand native apps + +The basic natural-language query in the RUM Explorer — the one you get when AI SRE is not enabled or out of credits — now reads your sentence against the current application's platform. On an Android, iOS or HarmonyOS app, or a Flutter / React Native app, it uses the objects and fields those apps report: pages are screens named by `view_name`, with no browser, page URL or Web Vitals; crashes are `is_crash`, and sessions or pages that crashed are `session_crash_count` / `view_crash_count`; Android ANR and iOS App Hang are told apart by `error_category`; jank is `view_frozen_frame_count`. The example questions under the input box switch to crash, ANR and App Hang wording to match. See [Data query syntax guide](/en/rum/explorer/data-query). + +### Incident filters: several values for one label or custom field + +In **More Filters** on the incident list, one label or custom field can now hold several values: values chosen under the same item match **any of them**, while different labels and different fields still must all match. A checkbox field only has `true` / `false`, so choosing both says nothing extra and only the first applies. Labels and custom fields still match exactly — no wildcards, no regex. See [Search and view incidents](/en/on-call/incident/search-view-incident). + + + ### RUM Explorer: query and analyze with AI SRE diff --git a/en/on-call/incident/search-view-incident.mdx b/en/on-call/incident/search-view-incident.mdx index aab11872..d33db31f 100644 --- a/en/on-call/incident/search-view-incident.mdx +++ b/en/on-call/incident/search-view-incident.mdx @@ -67,6 +67,7 @@ To improve performance, in aggregate view, the system matches at most **100** re - A label value must equal the value stored on the incident, case included. A value containing `*` or wrapped in `/…/` is compared literally: the system doesn't expand it into a wildcard or a regex, tells you "Label values match exactly; * and /…/ are not supported. Use the search box for a partial match", and leaves that condition out of the query - **Custom fields** list single-select, multi-select, and checkbox fields only, and their values also match exactly. Text fields can't be filtered by field; use **Search** instead. Unsupported fields show "Only single-select, multi-select and checkbox fields can be filtered. Use the search box for text fields". Saved filters are cleaned by the same rules when restored +- One label or custom field can hold several values at once: the values chosen under the same item match **any of them** (a multi-select field matches by containment), while different labels and different fields still must all match. A checkbox field only has `true` / `false`, so choosing both says nothing extra and only the first applies - For a partial match, use **Search** at the end of the filter bar. Wildcard and regex syntax applies only inside [Filter Conditions](/en/on-call/configuration/filter-conditions), which configure rules such as escalation, silence, and inhibit rules diff --git a/en/rum/error-tracking/error-viewing.mdx b/en/rum/error-tracking/error-viewing.mdx index 1219de88..8fdce556 100644 --- a/en/rum/error-tracking/error-viewing.mdx +++ b/en/rum/error-tracking/error-viewing.mdx @@ -198,6 +198,10 @@ Click any Issue to open the details panel and view more information. - click **Upload** on an unparsed image to upload its symbols; - click **Re-symbolicate** after uploading to refresh the stack. + **Download crash log** + + The stack area can export this crash as a plain-text log file (**Download crash log**) containing the summary, the crashing stack, every thread's stack and the binary images. Stacks are symbolicated first with the symbol files you uploaded; every stack that was symbolicated is repeated in an **Original Stacks** section at the end of the file, in its pre-symbolication text with frame addresses and modules kept, so a frame can be checked against its address or re-symbolicated locally. + **Flutter Support** Flutter native crashes (with `source_type` of `ndk`, `android`, or `ios`) carry thread stacks and Binary Images, and are rendered with the same native view described above as Android/iOS native crashes. Dart exceptions are symbolicated by matching the build_id in the stack against uploaded Flutter symbol files. diff --git a/en/rum/explorer/data-query.mdx b/en/rum/explorer/data-query.mdx index 138d0236..9b95aeb8 100644 --- a/en/rum/explorer/data-query.mdx +++ b/en/rum/explorer/data-query.mdx @@ -19,12 +19,14 @@ Say in one sentence what you want to look at; AI SRE writes the result onto the - **Follow-up and examples**: the status line offers the most likely next request — press Tab to fill it in, Enter to send. When AI SRE asks something back, the status line shows **Needs your input** and the input prompts you to reply. Before there is any conversation, a few example questions sit under the input: pick with ↑ ↓, press Tab to fill in, or Enter to send. - **Draft while it runs**: pressing Enter before the turn ends only keeps a draft — "Still running; your draft is kept, send it when this finishes" — and you send it once the turn is over. - **Another application is another conversation**: switching the application at the top right, or leaving the Explorer, ends this conversation, and the next one starts fresh; pressing the button again (it then reads **End this AI SRE conversation**) ends it too. -- **Credits and enablement**: when credits are used up (this period's allowance spent, wallet empty, or no On-call subscription), AI SRE cannot start a turn: its status line shows **Out of credits** with **Top up** (**Go to On-Call subscription** when the subscription is what is missing). After that the button opens the basic natural-language query instead, and the top of that panel states the reason in one line with the same link beside it. Accounts without AI SRE always get the basic query. +- **Credits and enablement**: when credits are used up (this period's allowance spent or the wallet empty), AI SRE cannot start a turn: its status line shows **Out of credits** with **Top up**, which opens AI SRE billing. After that the button opens the basic natural-language query instead, and the top of that panel states the reason in one line with the same link beside it. AI SRE is enabled and billed separately from any On-call subscription. Accounts without AI SRE always get the basic query. ### Basic natural-language query The button opens this basic panel when AI SRE is not enabled or out of credits: describe the data you want in plain Chinese or English and AI converts it into a standard query (DQL) with the same fields and syntax as a manual query. The input border is highlighted while this panel is active. +The conversion reads the sentence against the current application's platform. When that application is a native one (Android, iOS, HarmonyOS, and Flutter / React Native apps), it uses the objects and fields those apps report: pages are screens named by `view_name`, and there is no browser, page URL or Web Vitals; crashes are `is_crash`, and sessions or pages that crashed are `session_crash_count` / `view_crash_count`; Android ANR and iOS App Hang are told apart by `error_category`, and a HarmonyOS app freeze is recorded as a crash; jank is `view_frozen_frame_count`, while OS version, device model and app version are `os_version`, `device_model` and `version`. The example questions under the input box switch to crash, ANR and App Hang wording to match. + Describe the data in plain language and press Enter to generate a preview. For example: @@ -72,7 +74,7 @@ Once the query is generated, the server runs it once against real data in the ti #### Analysis questions go to AI SRE -Requests that want a conclusion — "why is this page slow", "do we still get this error after the release", "how does this compare with last week", "which page is slowest" — cannot be answered by the query box. AI classifies them as a question rather than a filter condition and the panel says **This is a question for analysis; a query cannot answer it**, with the way to AI SRE beside it: **AI SRE can analyze this** plus **Enable AI SRE** when AI SRE is not enabled, or **Top up** / **Go to On-Call subscription** when credits are used up or the On-call subscription is missing. +Requests that want a conclusion — "why is this page slow", "do we still get this error after the release", "how does this compare with last week", "which page is slowest" — cannot be answered by the query box. AI classifies them as a question rather than a filter condition and the panel says **This is a question for analysis; a query cannot answer it**, with the way to AI SRE beside it: **AI SRE can analyze this** plus **Enable AI SRE** when AI SRE is not enabled, or **Top up** when credits are used up. - Time expressions such as "last hour," "yesterday," and "past 7 days" update the Explorer time picker; they are not written as DQL conditions such as `client_time`. Performance-duration conditions remain DQL, for example `view_loading_time:>2s`. diff --git a/zh/ai-sre/im.mdx b/zh/ai-sre/im.mdx index f8ce0f91..654f283c 100644 --- a/zh/ai-sre/im.mdx +++ b/zh/ai-sre/im.mdx @@ -225,6 +225,17 @@ IM 会话没有控制台那样的选择器 UI,但支持三条斜杠命令在** 已挂载到本次会话的知识不会被移除——挂载是对话级别的,切回之前挂载过的团队不会重复注入提醒。 +### 群绑定的团队或环境不可用时 + +群聊里的会话把团队和运行环境钉定在创建时,这些设置一旦失效,排查就无从开始:团队被删除或您已不在其中、钉定的 Runner 离线或已不存在、云端沙箱模板被删除、环境属于别的团队,或者当前部署根本没有云端沙箱。 + +这时 AI SRE 不会带着坏配置硬跑一轮,而是把这一轮降级成**只改配置**:它说明失效的是团队、运行环境还是两者,讲清判定依据(例如「云端模板查询成功但钉定的模板不存在」),并只给出您现在真能做的调整——改选团队、改选运行环境,或改回 **自动选择**。这一轮没有排查工具,也拿不到运行环境,所以它不会开始分析,也不会假装在分析。 + +您可以照常用 `/env`、`/scope` 改,也可以直接在对话里说要换成哪个团队或环境。保存成功后: + +- 您原来那个问题还没被接走时,AI SRE 会**自动把原问题再跑一次**,结论照常回帖到群里,不用重发一遍; +- 原问题已经被接走(例如上一轮已经开始执行)时不会再自动重放,下一条消息按修好的配置正常执行。 + ### /ambient — 控制本群是否主动接话 diff --git a/zh/changelog/changelog.mdx b/zh/changelog/changelog.mdx index 7ade98ff..7453b371 100644 --- a/zh/changelog/changelog.mdx +++ b/zh/changelog/changelog.mdx @@ -4,6 +4,22 @@ description: "本页面记录 Flashduty 产品的重要更新和功能发布" keywords: ["更新日志", "产品发布", "功能更新", "Flashduty", "版本记录"] --- + + +### AI SRE:群绑定的团队或环境失效时,先修配置再续跑原问题 + +群聊里的 AI SRE 会话把团队和运行环境钉定在创建时。一旦钉定的团队被删除、Runner 离线或不存在、云端沙箱模板被删除、环境属于别的团队,或者当前部署没有云端沙箱,这个群原本问的那句话就跑不起来了。以前这种情况只能自己发现、自己改;现在 AI SRE 会把这一轮降级成**只改配置**:说明失效的是团队、运行环境还是两者,给出判定依据,并只列出您现在真能做的调整——改选团队、改选运行环境,或改回 **自动选择**。这一轮没有排查工具、也拿不到运行环境,所以它不会开始分析。修好后,如果原来那个问题还没被接走,AI SRE 会**自动把原问题再跑一次**并把结论回帖到群里;已经被接走的那一轮不会重放,下一条消息按修好的配置执行。`/env`、`/scope` 照常可用。详见 [IM 平台](/zh/ai-sre/im#群绑定的团队或环境不可用时)。 + +### RUM:自然语言查询认识原生应用 + +RUM 查看器里的基础自然语言查询(账户未开通 AI SRE 或额度用尽时打开的那个入口)现在按当前应用的平台理解您那句话。应用是 Android、iOS、鸿蒙,或 Flutter / React Native 应用时,它认的是原生应用自己的对象和字段:页面是 `view_name` 的屏幕,没有浏览器、页面 URL 和 Web Vitals;崩溃看 `is_crash`,发生过崩溃的会话与页面按 `session_crash_count` / `view_crash_count` 判断;Android 的 ANR 与 iOS 的 App Hang 按 `error_category` 区分;卡顿看 `view_frozen_frame_count`。输入框下方的示例问题也换成崩溃、ANR、App Hang 这类原生说法。详见 [数据查询语法指南](/zh/rum/explorer/data-query#基础自然语言查询)。 + +### 故障筛选:标签与自定义字段可以一次选多个值 + +故障列表的 **更多筛选** 里,同一个标签或自定义字段现在能选多个值:同一项内选中的值之间是「任一匹配」,不同标签、不同字段之间仍是「同时满足」。勾选字段只有 `true` / `false` 两态,同时选中没有意义,只按第一个生效。标签与自定义字段仍然只做精确匹配,不支持通配与正则。详见 [检索与查看故障](/zh/on-call/incident/search-view-incident)。 + + + ### RUM 查看器:用 AI SRE 查询和分析 diff --git a/zh/on-call/incident/search-view-incident.mdx b/zh/on-call/incident/search-view-incident.mdx index fd490895..374d0d3e 100644 --- a/zh/on-call/incident/search-view-incident.mdx +++ b/zh/on-call/incident/search-view-incident.mdx @@ -68,6 +68,7 @@ keywords: ["故障检索", "故障列表", "聚合视图", "时间线", "故障 - 标签值必须与故障上存储的值完全一致(区分大小写)。值里带 `*` 或用 `/…/` 包裹时不会按通配或正则展开,只按这几个字符本身比较:系统提示「标签值只支持精确匹配,不支持 * 或 /…/ 写法;模糊查找请用搜索框」,并且不把这条条件用于查询 - **自定义字段** 只列出单选、多选、勾选三类字段,值同样精确匹配;文本字段无法按字段筛选,请改用 **键入检索**;不支持的字段会提示「只能按单选、多选、勾选字段筛选;文本字段请用搜索框」。保存过的筛选条件恢复时也按这些规则清理 +- 同一个标签或自定义字段可以一次选多个值:同一项内选中的值之间是「任一匹配」(多选字段按包含判断),不同标签、不同字段之间仍是「同时满足」。勾选字段只有 `true` / `false` 两态,同时选中没有意义,只按第一个生效 - 需要模糊查找时用行尾的 **键入检索**。通配与正则写法只在[过滤条件](/zh/on-call/configuration/filter-conditions)里生效:分派策略、静默策略、抑制策略等规则的条件用的就是那套语法 diff --git a/zh/rum/error-tracking/error-viewing.mdx b/zh/rum/error-tracking/error-viewing.mdx index 74f08838..bf0515d3 100644 --- a/zh/rum/error-tracking/error-viewing.mdx +++ b/zh/rum/error-tracking/error-viewing.mdx @@ -199,6 +199,10 @@ Issue 列表支持两种查看模式:侧栏模式和全屏模式。默认以 - 对未解析的镜像点击 **去上传** 上传符号文件; - 上传后点击 **重新解析** 刷新堆栈。 + **下载崩溃日志** + + 堆栈区可以把当前这条崩溃导出一个纯文本日志文件(**下载崩溃日志**),内容包含错误摘要、崩溃堆栈、各线程堆栈和 Binary Images。堆栈会先按已上传的符号文件还原;还原过的堆栈会在文件末尾的 **Original Stacks** 区块里再附一份符号化之前的原始文本(保留帧地址与模块名),便于按地址核对,或在本地用符号文件重新还原。 + **Flutter 支持** Flutter 原生崩溃(`source_type` 为 `ndk`、`android` 或 `ios`)携带线程堆栈和 Binary Images,与 Android/iOS 原生崩溃一样使用上述 Native 渲染展示;Dart 异常则按堆栈中的 build_id 匹配已上传的 Flutter 符号文件,进行符号化还原。 diff --git a/zh/rum/explorer/data-query.mdx b/zh/rum/explorer/data-query.mdx index f7714d6a..3ceaacaf 100644 --- a/zh/rum/explorer/data-query.mdx +++ b/zh/rum/explorer/data-query.mdx @@ -20,12 +20,14 @@ RUM 查看器的查询由**词项**(terms)和**操作符**(operators)组 - **追问与示例**:状态条会给出下一句最可能的追问,按 Tab 填入输入框,回车发送;AI SRE 反问时状态条显示 **需要补充**,输入框提示您回复它。还没有对话时,输入框下方给出几个示例问题,用 ↑ ↓ 选择、Tab 填入、回车直接发送。 - **运行中先写草稿**:本轮结束前按回车只会留下草稿,提示「当前仍在运行,草稿已保留,完成后再发送」,等本轮结束后再发。 - **换应用就是换对话**:切换右上角的应用或离开查看器都会结束本次对话,再次打开是一个新对话;再点一次这个按钮(此时提示 **结束本次 AI SRE 对话**)也会结束它。 -- **额度与未开通**:额度用尽(本周期额度用完、钱包余额不足,或 On-Call 订阅缺失)时 AI SRE 起不了新一轮:对话里状态条显示 **额度不足** 并给出 **去充值**(On-Call 订阅缺失时为 **前往 On-Call 订阅**);此后这个按钮改为打开基础的自然语言查询,面板顶部用一句话说明原因,右侧是同一个入口。未开启 AI SRE 的账户一直走基础查询。 +- **额度与未开通**:额度用尽(本周期额度用完或钱包余额不足)时 AI SRE 起不了新一轮:对话里状态条显示 **额度不足** 并给出 **去充值**,点它打开 AI SRE 计费页;此后这个按钮改为打开基础的自然语言查询,面板顶部用一句话说明原因,右侧是同一个入口。AI SRE 单独开通、单独计费,与 On-Call 订阅无关。未开启 AI SRE 的账户一直走基础查询。 ### 基础自然语言查询 账户未开启 AI SRE 或额度用尽时,这个按钮打开的是下面这一套基础面板:用自然语言(中英文均可)描述要找的数据,AI 把它转成标准查询语句(DQL),字段与语法与手动查询完全一致。进入后输入框边框会高亮。 +转换会按当前应用的平台来理解这句话。当前应用是原生平台(Android、iOS、鸿蒙,以及 Flutter / React Native 应用)时,它认的是原生应用自己的对象和字段:页面是 `view_name` 的屏幕,没有浏览器、页面 URL 和 Web Vitals;崩溃看 `is_crash`,「发生过崩溃的会话 / 页面」按 `session_crash_count` / `view_crash_count` 判断;Android 的 ANR 与 iOS 的 App Hang 按 `error_category` 区分,鸿蒙的应用卡死同样记为崩溃;卡顿看 `view_frozen_frame_count`,系统版本、机型和 App 版本分别是 `os_version`、`device_model`、`version`。输入框下方的示例问题也跟着换成崩溃、ANR、App Hang 这类原生说法。 + 用自然语言描述您想查找的数据,按 Enter 生成预览。例如: @@ -73,7 +75,7 @@ RUM 查看器的查询由**词项**(terms)和**操作符**(operators)组 #### 分析类问题交给 AI SRE -「为什么这个页面变慢了」「上线后还有这个错误吗」「和上周比如何」「哪个页面最慢」这类要结论的请求,基础查询给不出答案:AI 判定这是在要结论、不是要筛条件,面板提示 **这是个分析问题,查询框给不出结论**,并给出通往 AI SRE 的入口——未开启 AI SRE 时后面跟一句 **AI SRE 可以帮你分析** 和 **开通 AI SRE**;额度不足或 On-Call 订阅缺失时是 **去充值** 或 **前往 On-Call 订阅**。 +「为什么这个页面变慢了」「上线后还有这个错误吗」「和上周比如何」「哪个页面最慢」这类要结论的请求,基础查询给不出答案:AI 判定这是在要结论、不是要筛条件,面板提示 **这是个分析问题,查询框给不出结论**,并给出通往 AI SRE 的入口——未开启 AI SRE 时后面跟一句 **AI SRE 可以帮你分析** 和 **开通 AI SRE**;额度不足时是 **去充值**。 - “最近 1 小时”“昨天”“过去 7 天”等时间表达会更新查看器的时间选择器,不会被写成 `client_time` 等 DQL 条件;性能时长条件仍属于 DQL,例如 `view_loading_time:>2s`。