docs(scheduled): describe editable channel-aware delivery

Signed-off-by: zeus229 <69399886+zeus229@users.noreply.github.com>
This commit is contained in:
zeus229 committed 2026-09-30 17:02:10 -03:00
1 parent 48eed14e38
commit db9d631197
7 files changed
+14

No files matched your search

+2
View File
@@ -1500,6 +1500,8 @@ when an adapter succeeded without a provider receipt, and `sent` only when the
adapter returned a provider message id (currently implemented end to end for
Feishu). Failures remain retryable in the persisted outbox.
On the Web UI, scheduled jobs can be edited in place: prompt, cadence/timezone, and delivery settings are updated with `PATCH /scheduled-runs/{job_id}` without deleting the job, so its id and run history stay intact. A job that is currently running refuses edits until that dispatch finishes. Delivery remains operator-controlled: each channel adapter describes the destination label, placeholder, and input type, while the manual target field remains available. Adapters may also expose optional known-destination suggestions; selecting one only fills that same manual field. Telegram, for example, can suggest numeric private-chat ids already present in its local `allow_from` list, while usernames and wildcards are ignored.
**Five ready-to-schedule templates** ship with the scheduler — `premarket-brief`, `earnings-season-tracker`, `portfolio-checkup`, `a-share-money-flow`, `institutional-holdings-diff`. Each states the data a run needs in plain language instead of naming tools, so a template keeps working as the tool surface grows, and each is required to name a missing input rather than fill it from memory. Reach them from the CLI, over REST, or with `/playbook` in the TUI:
```bash
+2
View File
@@ -1238,6 +1238,8 @@ curl -X DELETE http://localhost:8899/scheduled-runs/<job_id>
يرى الوكيل أداة جدولة واحدة فقط هي `scheduled_research`: إجراءات القراءة تستعرض الحالة/المهام/القوالب، بينما `propose_create` و `propose_cancel` لا تحفظان سوى اقتراح تأكيد قصير الأجل ولا تعدّلان مخزن المهام أبدًا. يعرض الويب بطاقة تأكيد حتمية، ويسأل سطر الأوامر `y/N`، وتتطلب محادثات المراسلة ردًا حرفيًا `confirm` (`确认`) أو `cancel` (`取消`) — وهذه الإجراءات وحدها تستدعي نقطة الالتزام. بعد تجاوز `end_at` تصبح المهمة `expired` ولا تُنفَّذ مجددًا. التسليم محايد للقنوات: هيّئ مراجع أهداف معتمة قابلة لإعادة الاستخدام تحت `channels.deliveryTargets`، فلا يرى الوكيل وواجهات التأكيد سوى ref/label/channel دون معرّف الدردشة/المستخدم الخام لدى المزوّد. حالة التسليم `accepted` عندما ينجح المحوّل دون إيصال من المزوّد، و`sent` فقط عند إرجاع معرّف رسالة من المزوّد (مطبَّق حاليًا من طرف إلى طرف لـ Feishu).
في Web UI يمكن تعديل مهام البحث المجدولة في مكانها: يتم تحديث الـ prompt والوتيرة/المنطقة الزمنية وإعدادات التسليم عبر `PATCH /scheduled-runs/{job_id}` من دون حذف المهمة وإعادة إنشائها، لذلك يبقى المعرّف وسجل التشغيل محفوظين. ترفض المهمة الجاري تنفيذها التعديل حتى ينتهي ذلك التشغيل. يظل التسليم تحت تحكم المشغّل: يصف كل channel adapter تسمية حقل الوجهة والـ placeholder ونوع الإدخال، مع بقاء الإدخال اليدوي متاحًا. ويمكن للمحوّل أيضًا عرض اقتراحات اختيارية لوجهات معروفة؛ اختيار أحدها لا يفعل أكثر من ملء الحقل اليدوي نفسه. في Telegram مثلًا يمكن اقتراح معرّفات المحادثات الخاصة الرقمية الموجودة أصلًا في `allow_from` المحلي، مع تجاهل usernames والـ wildcards.
يأتي المجدول ومعه **خمسة قوالب بحث جاهزة للجدولة** — `premarket-brief` و`earnings-season-tracker` و`portfolio-checkup` و`a-share-money-flow` و`institutional-holdings-diff`. يصرّح كل قالب بالبيانات التي يحتاجها بلغة طبيعية بدل تسمية أداة بعينها، فيظل صالحاً مع توسّع مجموعة الأدوات، ويُطلب منه **ذكر أي مُدخل مفقود** بدل ملئه من الذاكرة. يمكن الوصول إليها من CLI أو REST أو عبر `/playbook` داخل واجهة TUI:
```bash
+2
View File
@@ -1298,6 +1298,8 @@ Cada disparo ejecuta el `prompt` a través de una sesión de agente nueva (los p
El agente ve exactamente una herramienta de programación, `scheduled_research`: las acciones de lectura inspeccionan estado/jobs/plantillas, y `propose_create` y `propose_cancel` solo persisten una propuesta de confirmación de corta duración; nunca mutan el almacén de jobs. La web muestra una tarjeta de confirmación determinista, la CLI pregunta `y/N`, y las conversaciones de IM requieren responder exactamente `confirm` (`确认`) o `cancel` (`取消`) — solo esa acción de superficie llama al endpoint de commit. Cuando pasa `end_at`, el job queda `expired` y no vuelve a ejecutarse. La entrega es agnóstica del canal: configura referencias opacas reutilizables bajo `channels.deliveryTargets`; el agente y las superficies de confirmación ven ref/label/channel pero nunca el chat/user id crudo del proveedor. El estado de entrega es `accepted` cuando un adaptador tuvo éxito sin recibo del proveedor, y `sent` solo cuando devolvió un id de mensaje del proveedor (actualmente implementado de extremo a extremo para Feishu).
En la Web UI, los jobs programados se pueden editar en el lugar: prompt, cadencia/zona horaria y entrega se actualizan con `PATCH /scheduled-runs/{job_id}` sin borrar el job, por lo que conserva su id y su historial de ejecuciones. Un job que está corriendo rechaza cambios hasta que termina ese disparo. La entrega sigue bajo control del operador: cada adaptador describe la etiqueta, el placeholder y el tipo de entrada del destino, y el campo manual continúa disponible. Los adaptadores también pueden ofrecer destinos conocidos opcionales; elegir uno solo completa ese mismo campo manual. Telegram, por ejemplo, puede sugerir ids numéricos de chats privados que ya figuren en su `allow_from` local, ignorando usernames y comodines.
**Cinco plantillas listas para programar** vienen incluidas con el scheduler — `premarket-brief`, `earnings-season-tracker`, `portfolio-checkup`, `a-share-money-flow`, `institutional-holdings-diff`. Cada una expresa en lenguaje natural los datos que necesita un run en lugar de nombrar herramientas, de modo que una plantilla sigue funcionando a medida que crece la superficie de herramientas, y cada una está obligada a señalar un input faltante en lugar de completarlo de memoria. Accede a ellas desde la CLI, mediante REST, o con `/playbook` en la TUI:
```bash
+2
View File
@@ -1543,6 +1543,8 @@ when an adapter succeeded without a provider receipt, and `sent` only when the
adapter returned a provider message id (currently implemented end to end for
Feishu). Failures remain retryable in the persisted outbox.
Di Web UI, job terjadwal dapat diedit langsung: prompt, cadence/timezone, dan delivery diperbarui melalui `PATCH /scheduled-runs/{job_id}` tanpa menghapus lalu membuat ulang job, sehingga id dan riwayat run tetap dipertahankan. Job yang sedang berjalan menolak edit sampai dispatch tersebut selesai. Delivery tetap dikendalikan operator: setiap channel adapter mendeskripsikan label, placeholder, dan tipe input destination, sementara field manual tetap tersedia. Adapter juga dapat menawarkan saran destination yang sudah dikenal secara opsional; memilih salah satunya hanya mengisi field manual yang sama. Telegram, misalnya, dapat menyarankan private-chat id numerik yang sudah ada di `allow_from` lokal, sedangkan username dan wildcard diabaikan.
**Lima template siap jadwal** tersedia bersama scheduler — `premarket-brief`, `earnings-season-tracker`, `portfolio-checkup`, `a-share-money-flow`, `institutional-holdings-diff`. Setiap template menyatakan data yang dibutuhkan run dalam bahasa biasa alih-alih menyebut tool, sehingga template tetap berfungsi saat surface tool berkembang, dan masing-masing wajib menyebut input yang hilang alih-alih mengisinya dari memory. Akses melalui CLI, REST, atau `/playbook` di TUI:
```bash
+2
View File
@@ -1240,6 +1240,8 @@ curl -X DELETE http://localhost:8899/scheduled-runs/<job_id>
エージェントに見えるスケジューリングツールは `scheduled_research` の 1 つだけです。読み取り系アクションは状態/ジョブ/テンプレートを照会し、`propose_create` と `propose_cancel` は短時間で失効する確認プロポーザルを保存するだけで、ジョブストアを直接変更することはありません。Web は決定的な確認カードを表示し、CLI は `y/N` を尋ね、IM 会話では正確に `confirm`(`确认`)または `cancel`(`取消`)と返信する必要があります——commit エンドポイントを呼ぶのはこれらの操作だけです。`end_at` を過ぎたジョブは `expired` になり、再実行されません。配信はチャネル非依存です。`channels.deliveryTargets` に再利用可能な不透明ターゲット参照を設定すると、エージェントと確認 UI には ref/label/channel のみが見え、プロバイダの生の chat/user id は渡りません。アダプタが受領証なしで成功した場合の配信状態は `accepted`、プロバイダのメッセージ id が返ったときだけ `sent` になります(現在は Feishu がエンドツーエンド対応)。
Web UI では既存の定期ジョブをその場で編集できます。prompt、cadence/timezone、配信設定は `PATCH /scheduled-runs/{job_id}` で更新され、ジョブを削除して作り直さないため id と実行履歴が維持されます。実行中のジョブはその実行が終わるまで編集を拒否します。配信先は引き続き operator が管理し、各 channel adapter が宛先フィールドのラベル、placeholder、input type を宣言しつつ、手入力もそのまま使えます。adapter は既知の宛先候補を任意で提示でき、選択すると同じ手入力フィールドを埋めるだけです。たとえば Telegram はローカルの `allow_from` にある数値の private-chat id を候補にでき、username と wildcard は候補にしません。
スケジューラには**すぐ使えるリサーチテンプレートが 5 本**同梱されています —— `premarket-brief`、`earnings-season-tracker`、`portfolio-checkup`、`a-share-money-flow`、`institutional-holdings-diff`。各テンプレートはツール名を挙げず、必要なデータを自然言語で宣言するため、ツール面が広がってもそのまま機能します。また、欠けている入力は記憶で埋めず**明示する**ことが求められます。CLI、REST、TUI の `/playbook` から利用できます:
```bash
+2
View File
@@ -1241,6 +1241,8 @@ curl -X DELETE http://localhost:8899/scheduled-runs/<job_id>
에이전트에게 보이는 스케줄링 도구는 `scheduled_research` 하나뿐입니다. 읽기 액션은 상태/작업/템플릿을 조회하고, `propose_create` 와 `propose_cancel` 은 짧게 유지되는 확인 제안만 저장할 뿐 작업 저장소를 직접 변경하지 않습니다. Web 은 결정적 확인 카드를 렌더링하고 CLI 는 `y/N` 을 물으며, IM 대화에서는 정확히 `confirm`(`确认`) 또는 `cancel`(`取消`) 로 답해야 합니다 — commit 엔드포인트를 호출하는 것은 이 표면 동작뿐입니다. `end_at` 이 지난 작업은 `expired` 가 되어 다시 실행되지 않습니다. 전달은 채널 중립적입니다. `channels.deliveryTargets` 아래에 재사용 가능한 불투명 대상 참조를 구성하면 에이전트와 확인 UI 에는 ref/label/channel 만 보이고 프로바이더의 원시 chat/user id 는 노출되지 않습니다. 어댑터가 영수증 없이 성공하면 전달 상태는 `accepted`, 프로바이더 메시지 id 가 반환될 때만 `sent` 입니다(현재 Feishu 가 엔드투엔드 지원).
Web UI에서는 기존 예약 작업을 제자리에서 편집할 수 있습니다. prompt, cadence/timezone, delivery 설정은 작업을 삭제하고 다시 만들지 않고 `PATCH /scheduled-runs/{job_id}`로 갱신되므로 id와 실행 이력이 유지됩니다. 실행 중인 작업은 현재 실행이 끝날 때까지 편집을 거부합니다. 전달 대상은 계속 operator가 제어하며 각 channel adapter가 대상 필드의 label, placeholder, input type을 설명하고 수동 입력도 그대로 사용할 수 있습니다. adapter는 선택적으로 알려진 대상 후보를 제공할 수 있고, 선택하면 같은 수동 입력 필드만 채웁니다. 예를 들어 Telegram은 로컬 `allow_from`에 이미 있는 숫자형 private-chat id를 제안할 수 있으며 username과 wildcard는 제외합니다.
스케줄러에는 **바로 예약할 수 있는 리서치 템플릿 5개**가 들어 있습니다 — `premarket-brief`, `earnings-season-tracker`, `portfolio-checkup`, `a-share-money-flow`, `institutional-holdings-diff`. 각 템플릿은 도구 이름을 지목하지 않고 필요한 데이터를 자연어로 선언하므로 도구 표면이 늘어나도 그대로 동작하며, 빠진 입력은 기억으로 채우지 말고 **밝히도록** 요구합니다. CLI, REST, TUI의 `/playbook` 어디서든 쓸 수 있습니다:
```bash
+2
View File
@@ -1245,6 +1245,8 @@ curl -X DELETE http://localhost:8899/scheduled-runs/<job_id>
agent 只有一个调度工具 `scheduled_research`:读操作查看状态/任务/模板;`propose_create` 与 `propose_cancel` 只落一份短时效的确认提案,绝不直接改动任务存储。Web 渲染确定性的确认卡片,CLI 询问 `y/N`,IM 会话需准确回复 `confirm`(`确认`)或 `cancel`(`取消`)——只有这些界面动作会调用 commit 端点。任务过了 `end_at` 即标记为 `expired`,不再触发。投递与通道解耦:在 `channels.deliveryTargets` 下配置可复用的不透明目标引用,agent 与确认界面只见 ref/label/channel,永远看不到平台原始 chat/user id;适配器无平台回执时投递状态为 `accepted`,仅当返回平台消息 id 时才是 `sent`(目前飞书已端到端支持)。
在 Web UI 中,已创建的定时任务可以原地编辑:prompt、频率/时区和投递设置通过 `PATCH /scheduled-runs/{job_id}` 更新,无需删除并重建,因此任务 id 和运行历史会保留。正在执行的任务会在本次执行结束前拒绝编辑。投递仍由 operator 控制:每个 channel adapter 可以声明目标字段的标签、placeholder 和输入类型,同时保留手工填写目标的方式。adapter 还可以提供可选的已知目标建议;选择建议只会填入同一个手工字段。例如 Telegram 可以建议本地 `allow_from` 中已有的数字私聊 id,而 username 和通配符不会被当作目标。
调度器自带**五个开箱即用的研究模板** —— `premarket-brief`、`earnings-season-tracker`、`portfolio-checkup`、`a-share-money-flow`、`institutional-holdings-diff`。每个模板用自然语言声明它需要什么数据,而不是点名某个工具,因此工具面扩展时模板依然有效;模板也被要求**指出缺失的输入**,而不是凭记忆补上。CLI、REST、TUI 里的 `/playbook` 三个入口都能用:
```bash