mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-10-28 22:20:35 +00:00
* fix(runtime): present outputs before a loop wrap-up and explain step-limit stops Loop-detection warnings now ask the agent to present the files it already created in /mnt/user-data/outputs before its final answer, when present_files is available. A run that exhausts recursion_limit now ends with stop_reason recursion_capped and a plain message that lists outputs it created but did not present. An active goal stands down without an evaluator call. The /wait error envelope keeps the GraphRecursionError name, and IM channels reply with the step-limit message instead of a generic failure. * docs(changelog): note run-end delivery and step-limit stops (#7588) * test(runtime): stop pinning LangGraph's step count in the step-limit test The produced paths and the message already follow the observed model calls, so the exact count only pinned LangGraph's per-step accounting. Also note on the step-limit goal branch that its caller passes no evaluator factory, so it has to stay ahead of the evaluator section. --------- Co-authored-by: Totoro-qaq <279883115+Totoro-qaq@users.noreply.github.com> Co-authored-by: Willem Jiang <willem.jiang@gmail.com>
27 lines
1.6 KiB
TypeScript
27 lines
1.6 KiB
TypeScript
/**
|
|
* Text that must never appear in a default view of scheduled tasks or the
|
|
* chat goal bar: UUIDs, task/run ids, ISO timestamps, five-field cron
|
|
* strings, internal enum or field names, goal stand-down codes
|
|
* (`contracts/thread_goal_contract.json`), checker blockers and the met
|
|
* record's field names. Pure (no test-runner imports) so the Playwright
|
|
* helper (`readable.ts`) and the unit helper (`tests/unit/helpers/readable.ts`)
|
|
* share one list.
|
|
*/
|
|
export const RAW_IDENTIFIER_PATTERNS: readonly RegExp[] = [
|
|
/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i,
|
|
/\btask-(run-)?[0-9a-f]{16,}\b/,
|
|
/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/,
|
|
/(^|\s)[\d*/,-]+(\s[\d*/,-]+){4}(\s|$)/,
|
|
/\b(fresh_thread_per_run|reuse_thread|lead_agent|goal_objective|max_runs|end_at|unmet|stop_scheduled_task|schedule_task)\b/,
|
|
/\b(blocked:[a-z_]+|max_continuations_reached|no_progress_detected|token_capped|loop_capped|recursion_capped|evaluator_failed|no_durable_end_of_turn|thread_changed_(after_evaluation|before_continuation)|goal_outcome|stand_down_reason|last_evaluation)\b/,
|
|
/\b(goal_not_met_yet|needs_user_input|missing_evidence|external_wait|run_failed|goal_created_at|reply_message_id|relied_on_assumption|continuation_count|max_continuations)\b/,
|
|
];
|
|
|
|
/** The patterns `text` matches, with the matched text, for a readable failure message. */
|
|
export function findRawIdentifiers(text: string): string[] {
|
|
return RAW_IDENTIFIER_PATTERNS.flatMap((pattern) => {
|
|
const match = pattern.exec(text);
|
|
return match ? [`${pattern.source} → "${match[0].trim()}"`] : [];
|
|
});
|
|
}
|