mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-09 01:50:44 +08:00
Store self-contained playbook recipes on scheduled jobs, add schedule_propose draft gate, and run playbook instructions at fire time instead of only short reminders. Co-authored-by: Cursor <cursoragent@cursor.com>
76 lines
2.9 KiB
Python
76 lines
2.9 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from runtime.scheduler.recipe import compile_playbook_instruction, recipe_has_playbook
|
|
|
|
|
|
def format_scheduled_user_reminder(prompt_text: str) -> str:
|
|
body = str(prompt_text or "").strip()
|
|
if not body:
|
|
return ""
|
|
if body.startswith("⏰"):
|
|
return body
|
|
return f"⏰ 提醒:{body}"
|
|
|
|
|
|
def build_scheduled_turn_instruction(
|
|
*,
|
|
prompt_text: str,
|
|
mode: str,
|
|
lang: str,
|
|
recipe: dict[str, Any] | None = None,
|
|
) -> str:
|
|
"""Internal LLM instruction for proactive scheduled reminders/playbooks (not user-facing)."""
|
|
_ = str(mode or "scheduled").strip()
|
|
if recipe_has_playbook(recipe):
|
|
return compile_playbook_instruction(recipe=recipe or {}, lang=lang)
|
|
|
|
intent = str(prompt_text or "").strip()
|
|
is_en = str(lang or "").lower().startswith("en")
|
|
if is_en:
|
|
return (
|
|
"[Scheduled proactive reminder — internal instruction, not a user message]\n"
|
|
f"Reminder intent: {intent}\n"
|
|
"Write a short, friendly proactive reminder TO the user (second person). "
|
|
"Do not say you received a reminder or that you will remind someone; speak directly to the user."
|
|
)
|
|
return (
|
|
"【定时主动提醒·内部指令,不是用户发言】\n"
|
|
f"提醒意图:{intent}\n"
|
|
"请生成一条简短、自然、第二人称的主动提醒消息直接对用户说。"
|
|
"不要写「收到提醒」「好的我来提醒用户」等元对话;不要假装用户刚说了话。"
|
|
)
|
|
|
|
|
|
def scheduled_turn_system_suffix(*, lang: str, playbook: bool = False) -> str:
|
|
is_en = str(lang or "").lower().startswith("en")
|
|
if playbook:
|
|
if is_en:
|
|
return (
|
|
"\n\n[Scheduled playbook mode] You are executing a recurring workflow for the user. "
|
|
"Follow the playbook steps, use tools as needed, and deliver a useful update "
|
|
"(including save_deliverable_attachment for generated files). "
|
|
"Do not pretend the user just messaged you."
|
|
)
|
|
return (
|
|
"\n\n【定时工作流模式】你正在执行周期性工作流。"
|
|
"按 playbook 步骤完成任务,按需调用工具;若生成文件须 save_deliverable_attachment。"
|
|
"不要假装用户刚刚发了消息,不要只回一句空提醒。"
|
|
)
|
|
if is_en:
|
|
return (
|
|
"\n\n[Scheduled job mode] You are sending a proactive reminder to the user. "
|
|
"Reply with the reminder text only; do not role-play as the user."
|
|
)
|
|
return (
|
|
"\n\n【定时任务模式】你正在主动向用户发送提醒。"
|
|
"只输出提醒正文,不要扮演用户,不要写「收到/好的」等对话式应答。"
|
|
)
|
|
|
|
|
|
__all__ = [
|
|
"build_scheduled_turn_instruction",
|
|
"format_scheduled_user_reminder",
|
|
"scheduled_turn_system_suffix",
|
|
]
|