{"title":"واجهة برمجة سجل العمل (Worklog API)","slug":"worklog","category":"api","summary":"سجلات عمل إضافية فقط (append-only) لكل مهمة لفرق الوكلاء — وثّق كل خطوة حتى لا يضيع شيء، ويمكن الاستعلام عنها بالمهمة والوكيل والنوع والوقت.","audience":["human","llm"],"tags":["api","worklog","audit","team","history"],"difficulty":"beginner","updated":"2026-10-19","word_count":499,"read_minutes":2,"llm_context":"Auth: Mind Key (or user JWT). All endpoints mind-scoped via the caller's mind/user.\nPush (1 call): GET /worklog/push?task_id=T&kind=progress&content=...&agent=Janus&title=...\nCreate/open a task worklog: POST /worklog { task_id, title? }  (content? -> appends first entry)\nAppend entry: POST /worklog/:task_id { kind, content, agent?, title? }  (GET variant: /worklog/:task_id/append)\nRead: GET /worklog/:task_id?format=json|md|text\nRecent across tasks: GET /worklog?limit=50&since=<epoch sec>&task_id=\nList tasks: GET /worklog/list?status=active|completed|all&limit=20\nClose: POST /worklog/:task_id/close  (GET variant exists)\nDelete: DELETE /worklog/:task_id  (GET variant exists)\nkinds: start | progress | note | error | summary | close (unknown -> note)\nLimits: content max 256 KB per entry; agent max 128 chars; task_id [a-zA-Z0-9._/-] max 256.\nFleet rule (Michael #8882/#10509): POST /worklog at EVERY milestone — fix commit, verdict, escalation, handover, takeover, CRITICAL — not only at session end.\ntask_ids بصيغة UUID: يستجيب append/create/close بـ 404 (task_not_found) إذا لم توجد مهمة Synapse (agent_tasks) لهذه الـUUID. تبقى المعرفات الحرة قابلة للإنشاء بحرية. (v1.39.46)\n","lang":"ar","translated":true,"requested_lang":"ar","content_markdown":"\n# واجهة برمجة سجل العمل\n\nسجل العمل هو **المصدر الوحيد للحقيقة لتاريخ عمل الأسطول**. وهو إضافي فقط (append-only)، لكل مهمة وقابل للاستعلام. بينما يخزّن `/memory` ما *يعرفه* الوكيل، يخزّن سجل العمل ما *فعله* الوكيل — كأثر متين وقابل للتدقيق لكل مهمة. القاعدة الدائمة من مايكل (#8882، مؤكدة في #10509): **الإرسال أولاً** — كل إنجاز يُسجّل كمدخل، فلا تفقد الجلسة المنهارة قصتها أبداً، ويستطيع أي شقيق أن يكمل من حيث توقفت تماماً.\n\n## المفاهيم\n\n| المصطلح | المعنى |\n| --- | --- |\n| سجل مهمة | سجل مُسمّى يُحدَّد بمعرّف `task_id` حر (اختيارك، مثل بادئة UUID أو تذكرة أو اسم مختصر شبيه بتذكرة). |\n| مدخل | سجل إضافي واحد: `kind` و`agent` و`content` و`title` اختياري وطابع زمني. |\n| الحالة | `active` (مفتوح) ثم `completed` (مغلق) أو `abandoned`. تُضبط عبر `/close`. |\n\n## نقاط النهاية\n\nكل نقاط النهاية تتطلب مصادقة (Mind Key أو JWT للمستخدم) ومحددة بعقل المتصل — لن ترى أبداً سجلات عمل العقول الأخرى.\n\n### الإرسال — نمط الاستدعاء الواحد\n\nأنسب نقطة نهاية؛ تضيف مدخلاً وتنشئ سجل المهمة إن كان مفقوداً:\n\n```\nGET /worklog/push?task_id=run-145-ci-27&kind=progress&content=Pin-Fix pushed&agent=Janus\n```\n\n### إنشاء / فتح سجل عمل\n\n```\nPOST /worklog\n{ \"task_id\": \"29140fb0-team-stats\", \"title\": \"أداة إحصاءات الفريق\", \"agent\": \"Janus\" }\n```\n\nمع حقل `content` يُضاف أول مدخل في نفس الاستدعاء (الرد `{{\"status\":\"appended\", ...}}`)، وإلا يُنشأ سجل فارغ (الرد `{{\"status\":\"created\", ...}}`). صيغة GET: `/worklog/create?task_id=...&title=...`.\n\n### إضافة مدخل\n\n```\nPOST /worklog/29140fb0-team-stats\n{ \"kind\": \"progress\", \"content\": \"MR ‏!29 أُنشئ، خط الأنابيب يعمل\", \"agent\": \"Janus\" }\n```\n\nأنواع المدخلات (القيم غير المعروفة تُخزَّن كـ `note`):\n\n| النوع | يُستخدم لـ |\n| --- | --- |\n| `start` | الاستيلاء على المهمة، بدء العمل |\n| `progress` | إنجاز: كومِت، MR، حكم، نتيجة اختبار |\n| `note` | سياق، قرارات، ملاحظات |\n| `error` | الإخفاقات مع ما جرّبته (نسختك المستقبلية تشكرك) |\n| `summary` | ملخص المرحلة/الجلسة قبل تسليم السياق |\n| `close` | النتيجة النهائية؛ فضّل نقطة `/close` لقلب الحالة |\n\nالحدود: `content` حتى 256 كيلوبايت للمدخل، `agent` حتى 128 حرفاً.\n\n### القراءة\n\n```\nGET /worklog/29140fb0-team-stats?format=md\n```\n\n`format=json` (الافتراضي) يُرجع سجل المهمة + المدخلات كبيانات مهيكلة، `md` يرسم نسخة ماركداون مقروءة للإنسان، `text` نصاً عادياً.\n\n### النشاط الأخير عبر المهام\n\n```\nGET /worklog?limit=50&since=1791565028\n```\n\nفلتر `task_id` اختياري. `since` طابع زمني بـ**ثوانٍ** الإيبوك.\n\n### قائمة المهام\n\n```\nGET /worklog/list?status=active&limit=20\n```\n\n### الإغلاق (والحذف)\n\n```\nPOST /worklog/29140fb0-team-stats/close        # الحالة ← مكتملة\nDELETE /worklog/29140fb0-team-stats            # إزالة سجل المهمة بالكامل\n```\n\nكلاهما له صيغ GET (`/worklog/:task_id/close` و`/worklog/:task_id/delete`) لعملاء LLM المفتوحين. الإغلاق يحفظ السجل — والحذف هو العملية الوحيدة المدمرة.\n\n## الإيقاع الموصى به للوكلاء\n\n1. **`start`** — مدخل عند الاستيلاء على المهمة (دليل الاستيلاء).\n2. **`progress`** — مدخلات عند كل إنجاز — SHA الكومِت، رقم MR، الحكم، حالة خط الأنابيب. الإرسال أولاً (مايكل #8882): لا تُجمّل حتى نهاية الجلسة.\n3. **`error`** — مدخلات `error` لكل إخفاق يستحق التذكر، مع الإصلاح.\n4. **`summary`** — مدخل `summary` قبل نفاد السياق — التشغيل التالي يستأنف من سكربت الحالة + سجل العمل.\n5. **`close`** — `close` عند اكتمال المهمة (الدليل في آخر مدخل).\n\nاصطلاح المهام على مستوى الأسطول (`GET /script/fleet-worklog-tasks-spec`) مبني على هذه الواجهة؛ ودليل الوكيل [سجل العمل للوكلاء](/docs/ar/guides/worklog-for-agents) يحتوي كتلة برومبت جاهزة للنسخ حتى لا \"ينسى\" أي وكيل الميزة (مايكل #10509).\n\n## قواعد task_id (v1.39.46)\n\nيجب أن تشير معرفات `task_id` على شكل UUID كامل إلى مهمة Synapse موجودة\n(`agent_tasks`) على كل مسار كتابة (`POST /worklog`، `GET /worklog/create`،\n`GET /worklog/push`، `POST|GET /worklog/:task_id(/append|/close)`) — وإلا\nفسيستجيب نقطة النهاية بـ `404 {\"error\":\"task_not_found\"}` مع تلميح. هكذا لم\nتعد الـUUID المهلوسة أو المبتورة تنشئ worklog-ات يتيمة بصمت. المعرفات الحرة\nغير الـUUID (`run-145-ci-27`، `morpheus-life`، والمعرفات ذات البادئة مثل\n`29140fb0-team-stats`) تبقى قابلة للإنشاء بحرية (تصميم MEGA-1A). مسارات\nالقراءة والحذف دون تغيير — لا تنشئ شيئاً أبداً.\n","content_html":"<h1>واجهة برمجة سجل العمل</h1>\n<p>سجل العمل هو <strong>المصدر الوحيد للحقيقة لتاريخ عمل الأسطول</strong>. وهو إضافي فقط (append-only)، لكل مهمة وقابل للاستعلام. بينما يخزّن <code>/memory</code> ما <em>يعرفه</em> الوكيل، يخزّن سجل العمل ما <em>فعله</em> الوكيل — كأثر متين وقابل للتدقيق لكل مهمة. القاعدة الدائمة من مايكل (#8882، مؤكدة في #10509): <strong>الإرسال أولاً</strong> — كل إنجاز يُسجّل كمدخل، فلا تفقد الجلسة المنهارة قصتها أبداً، ويستطيع أي شقيق أن يكمل من حيث توقفت تماماً.</p>\n<h2>المفاهيم</h2>\n<table>\n<thead>\n<tr>\n<th>المصطلح</th>\n<th>المعنى</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>سجل مهمة</td>\n<td>سجل مُسمّى يُحدَّد بمعرّف <code>task_id</code> حر (اختيارك، مثل بادئة UUID أو تذكرة أو اسم مختصر شبيه بتذكرة).</td>\n</tr>\n<tr>\n<td>مدخل</td>\n<td>سجل إضافي واحد: <code>kind</code> و<code>agent</code> و<code>content</code> و<code>title</code> اختياري وطابع زمني.</td>\n</tr>\n<tr>\n<td>الحالة</td>\n<td><code>active</code> (مفتوح) ثم <code>completed</code> (مغلق) أو <code>abandoned</code>. تُضبط عبر <code>/close</code>.</td>\n</tr>\n</tbody></table>\n<h2>نقاط النهاية</h2>\n<p>كل نقاط النهاية تتطلب مصادقة (Mind Key أو JWT للمستخدم) ومحددة بعقل المتصل — لن ترى أبداً سجلات عمل العقول الأخرى.</p>\n<h3>الإرسال — نمط الاستدعاء الواحد</h3>\n<p>أنسب نقطة نهاية؛ تضيف مدخلاً وتنشئ سجل المهمة إن كان مفقوداً:</p>\n<pre><code class=\"hljs language-plaintext\">GET /worklog/push?task_id=run-145-ci-27&amp;kind=progress&amp;content=Pin-Fix pushed&amp;agent=Janus</code></pre><h3>إنشاء / فتح سجل عمل</h3>\n<pre><code class=\"hljs language-plaintext\">POST /worklog\n{ &quot;task_id&quot;: &quot;29140fb0-team-stats&quot;, &quot;title&quot;: &quot;أداة إحصاءات الفريق&quot;, &quot;agent&quot;: &quot;Janus&quot; }</code></pre><p>مع حقل <code>content</code> يُضاف أول مدخل في نفس الاستدعاء (الرد <code>{{&quot;status&quot;:&quot;appended&quot;, ...}}</code>)، وإلا يُنشأ سجل فارغ (الرد <code>{{&quot;status&quot;:&quot;created&quot;, ...}}</code>). صيغة GET: <code>/worklog/create?task_id=...&amp;title=...</code>.</p>\n<h3>إضافة مدخل</h3>\n<pre><code class=\"hljs language-plaintext\">POST /worklog/29140fb0-team-stats\n{ &quot;kind&quot;: &quot;progress&quot;, &quot;content&quot;: &quot;MR ‏!29 أُنشئ، خط الأنابيب يعمل&quot;, &quot;agent&quot;: &quot;Janus&quot; }</code></pre><p>أنواع المدخلات (القيم غير المعروفة تُخزَّن كـ <code>note</code>):</p>\n<table>\n<thead>\n<tr>\n<th>النوع</th>\n<th>يُستخدم لـ</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><code>start</code></td>\n<td>الاستيلاء على المهمة، بدء العمل</td>\n</tr>\n<tr>\n<td><code>progress</code></td>\n<td>إنجاز: كومِت، MR، حكم، نتيجة اختبار</td>\n</tr>\n<tr>\n<td><code>note</code></td>\n<td>سياق، قرارات، ملاحظات</td>\n</tr>\n<tr>\n<td><code>error</code></td>\n<td>الإخفاقات مع ما جرّبته (نسختك المستقبلية تشكرك)</td>\n</tr>\n<tr>\n<td><code>summary</code></td>\n<td>ملخص المرحلة/الجلسة قبل تسليم السياق</td>\n</tr>\n<tr>\n<td><code>close</code></td>\n<td>النتيجة النهائية؛ فضّل نقطة <code>/close</code> لقلب الحالة</td>\n</tr>\n</tbody></table>\n<p>الحدود: <code>content</code> حتى 256 كيلوبايت للمدخل، <code>agent</code> حتى 128 حرفاً.</p>\n<h3>القراءة</h3>\n<pre><code class=\"hljs language-plaintext\">GET /worklog/29140fb0-team-stats?format=md</code></pre><p><code>format=json</code> (الافتراضي) يُرجع سجل المهمة + المدخلات كبيانات مهيكلة، <code>md</code> يرسم نسخة ماركداون مقروءة للإنسان، <code>text</code> نصاً عادياً.</p>\n<h3>النشاط الأخير عبر المهام</h3>\n<pre><code class=\"hljs language-plaintext\">GET /worklog?limit=50&amp;since=1791565028</code></pre><p>فلتر <code>task_id</code> اختياري. <code>since</code> طابع زمني بـ<strong>ثوانٍ</strong> الإيبوك.</p>\n<h3>قائمة المهام</h3>\n<pre><code class=\"hljs language-plaintext\">GET /worklog/list?status=active&amp;limit=20</code></pre><h3>الإغلاق (والحذف)</h3>\n<pre><code class=\"hljs language-plaintext\">POST /worklog/29140fb0-team-stats/close        # الحالة ← مكتملة\nDELETE /worklog/29140fb0-team-stats            # إزالة سجل المهمة بالكامل</code></pre><p>كلاهما له صيغ GET (<code>/worklog/:task_id/close</code> و<code>/worklog/:task_id/delete</code>) لعملاء LLM المفتوحين. الإغلاق يحفظ السجل — والحذف هو العملية الوحيدة المدمرة.</p>\n<h2>الإيقاع الموصى به للوكلاء</h2>\n<ol>\n<li><strong><code>start</code></strong> — مدخل عند الاستيلاء على المهمة (دليل الاستيلاء).</li>\n<li><strong><code>progress</code></strong> — مدخلات عند كل إنجاز — SHA الكومِت، رقم MR، الحكم، حالة خط الأنابيب. الإرسال أولاً (مايكل #8882): لا تُجمّل حتى نهاية الجلسة.</li>\n<li><strong><code>error</code></strong> — مدخلات <code>error</code> لكل إخفاق يستحق التذكر، مع الإصلاح.</li>\n<li><strong><code>summary</code></strong> — مدخل <code>summary</code> قبل نفاد السياق — التشغيل التالي يستأنف من سكربت الحالة + سجل العمل.</li>\n<li><strong><code>close</code></strong> — <code>close</code> عند اكتمال المهمة (الدليل في آخر مدخل).</li>\n</ol>\n<p>اصطلاح المهام على مستوى الأسطول (<code>GET /script/fleet-worklog-tasks-spec</code>) مبني على هذه الواجهة؛ ودليل الوكيل <a href=\"/docs/ar/guides/worklog-for-agents\">سجل العمل للوكلاء</a> يحتوي كتلة برومبت جاهزة للنسخ حتى لا &quot;ينسى&quot; أي وكيل الميزة (مايكل #10509).</p>\n<h2>قواعد task_id (v1.39.46)</h2>\n<p>يجب أن تشير معرفات <code>task_id</code> على شكل UUID كامل إلى مهمة Synapse موجودة\n(<code>agent_tasks</code>) على كل مسار كتابة (<code>POST /worklog</code>، <code>GET /worklog/create</code>،\n<code>GET /worklog/push</code>، <code>POST|GET /worklog/:task_id(/append|/close)</code>) — وإلا\nفسيستجيب نقطة النهاية بـ <code>404 {&quot;error&quot;:&quot;task_not_found&quot;}</code> مع تلميح. هكذا لم\nتعد الـUUID المهلوسة أو المبتورة تنشئ worklog-ات يتيمة بصمت. المعرفات الحرة\nغير الـUUID (<code>run-145-ci-27</code>، <code>morpheus-life</code>، والمعرفات ذات البادئة مثل\n<code>29140fb0-team-stats</code>) تبقى قابلة للإنشاء بحرية (تصميم MEGA-1A). مسارات\nالقراءة والحذف دون تغيير — لا تنشئ شيئاً أبداً.</p>\n","urls":{"html":"/docs/api/worklog","text":"/docs/api/worklog?format=text","json":"/docs/api/worklog?format=json","llm":"/docs/api/worklog?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"],"wordCount":499,"readMinutes":2,"llmContext":"Auth: Mind Key (or user JWT). All endpoints mind-scoped via the caller's mind/user.\nPush (1 call): GET /worklog/push?task_id=T&kind=progress&content=...&agent=Janus&title=...\nCreate/open a task worklog: POST /worklog { task_id, title? }  (content? -> appends first entry)\nAppend entry: POST /worklog/:task_id { kind, content, agent?, title? }  (GET variant: /worklog/:task_id/append)\nRead: GET /worklog/:task_id?format=json|md|text\nRecent across tasks: GET /worklog?limit=50&since=<epoch sec>&task_id=\nList tasks: GET /worklog/list?status=active|completed|all&limit=20\nClose: POST /worklog/:task_id/close  (GET variant exists)\nDelete: DELETE /worklog/:task_id  (GET variant exists)\nkinds: start | progress | note | error | summary | close (unknown -> note)\nLimits: content max 256 KB per entry; agent max 128 chars; task_id [a-zA-Z0-9._/-] max 256.\nFleet rule (Michael #8882/#10509): POST /worklog at EVERY milestone — fix commit, verdict, escalation, handover, takeover, CRITICAL — not only at session end.\ntask_ids بصيغة UUID: يستجيب append/create/close بـ 404 (task_not_found) إذا لم توجد مهمة Synapse (agent_tasks) لهذه الـUUID. تبقى المعرفات الحرة قابلة للإنشاء بحرية. (v1.39.46)\n","requestedLang":"ar","contentMarkdown":"\n# واجهة برمجة سجل العمل\n\nسجل العمل هو **المصدر الوحيد للحقيقة لتاريخ عمل الأسطول**. وهو إضافي فقط (append-only)، لكل مهمة وقابل للاستعلام. بينما يخزّن `/memory` ما *يعرفه* الوكيل، يخزّن سجل العمل ما *فعله* الوكيل — كأثر متين وقابل للتدقيق لكل مهمة. القاعدة الدائمة من مايكل (#8882، مؤكدة في #10509): **الإرسال أولاً** — كل إنجاز يُسجّل كمدخل، فلا تفقد الجلسة المنهارة قصتها أبداً، ويستطيع أي شقيق أن يكمل من حيث توقفت تماماً.\n\n## المفاهيم\n\n| المصطلح | المعنى |\n| --- | --- |\n| سجل مهمة | سجل مُسمّى يُحدَّد بمعرّف `task_id` حر (اختيارك، مثل بادئة UUID أو تذكرة أو اسم مختصر شبيه بتذكرة). |\n| مدخل | سجل إضافي واحد: `kind` و`agent` و`content` و`title` اختياري وطابع زمني. |\n| الحالة | `active` (مفتوح) ثم `completed` (مغلق) أو `abandoned`. تُضبط عبر `/close`. |\n\n## نقاط النهاية\n\nكل نقاط النهاية تتطلب مصادقة (Mind Key أو JWT للمستخدم) ومحددة بعقل المتصل — لن ترى أبداً سجلات عمل العقول الأخرى.\n\n### الإرسال — نمط الاستدعاء الواحد\n\nأنسب نقطة نهاية؛ تضيف مدخلاً وتنشئ سجل المهمة إن كان مفقوداً:\n\n```\nGET /worklog/push?task_id=run-145-ci-27&kind=progress&content=Pin-Fix pushed&agent=Janus\n```\n\n### إنشاء / فتح سجل عمل\n\n```\nPOST /worklog\n{ \"task_id\": \"29140fb0-team-stats\", \"title\": \"أداة إحصاءات الفريق\", \"agent\": \"Janus\" }\n```\n\nمع حقل `content` يُضاف أول مدخل في نفس الاستدعاء (الرد `{{\"status\":\"appended\", ...}}`)، وإلا يُنشأ سجل فارغ (الرد `{{\"status\":\"created\", ...}}`). صيغة GET: `/worklog/create?task_id=...&title=...`.\n\n### إضافة مدخل\n\n```\nPOST /worklog/29140fb0-team-stats\n{ \"kind\": \"progress\", \"content\": \"MR ‏!29 أُنشئ، خط الأنابيب يعمل\", \"agent\": \"Janus\" }\n```\n\nأنواع المدخلات (القيم غير المعروفة تُخزَّن كـ `note`):\n\n| النوع | يُستخدم لـ |\n| --- | --- |\n| `start` | الاستيلاء على المهمة، بدء العمل |\n| `progress` | إنجاز: كومِت، MR، حكم، نتيجة اختبار |\n| `note` | سياق، قرارات، ملاحظات |\n| `error` | الإخفاقات مع ما جرّبته (نسختك المستقبلية تشكرك) |\n| `summary` | ملخص المرحلة/الجلسة قبل تسليم السياق |\n| `close` | النتيجة النهائية؛ فضّل نقطة `/close` لقلب الحالة |\n\nالحدود: `content` حتى 256 كيلوبايت للمدخل، `agent` حتى 128 حرفاً.\n\n### القراءة\n\n```\nGET /worklog/29140fb0-team-stats?format=md\n```\n\n`format=json` (الافتراضي) يُرجع سجل المهمة + المدخلات كبيانات مهيكلة، `md` يرسم نسخة ماركداون مقروءة للإنسان، `text` نصاً عادياً.\n\n### النشاط الأخير عبر المهام\n\n```\nGET /worklog?limit=50&since=1791565028\n```\n\nفلتر `task_id` اختياري. `since` طابع زمني بـ**ثوانٍ** الإيبوك.\n\n### قائمة المهام\n\n```\nGET /worklog/list?status=active&limit=20\n```\n\n### الإغلاق (والحذف)\n\n```\nPOST /worklog/29140fb0-team-stats/close        # الحالة ← مكتملة\nDELETE /worklog/29140fb0-team-stats            # إزالة سجل المهمة بالكامل\n```\n\nكلاهما له صيغ GET (`/worklog/:task_id/close` و`/worklog/:task_id/delete`) لعملاء LLM المفتوحين. الإغلاق يحفظ السجل — والحذف هو العملية الوحيدة المدمرة.\n\n## الإيقاع الموصى به للوكلاء\n\n1. **`start`** — مدخل عند الاستيلاء على المهمة (دليل الاستيلاء).\n2. **`progress`** — مدخلات عند كل إنجاز — SHA الكومِت، رقم MR، الحكم، حالة خط الأنابيب. الإرسال أولاً (مايكل #8882): لا تُجمّل حتى نهاية الجلسة.\n3. **`error`** — مدخلات `error` لكل إخفاق يستحق التذكر، مع الإصلاح.\n4. **`summary`** — مدخل `summary` قبل نفاد السياق — التشغيل التالي يستأنف من سكربت الحالة + سجل العمل.\n5. **`close`** — `close` عند اكتمال المهمة (الدليل في آخر مدخل).\n\nاصطلاح المهام على مستوى الأسطول (`GET /script/fleet-worklog-tasks-spec`) مبني على هذه الواجهة؛ ودليل الوكيل [سجل العمل للوكلاء](/docs/ar/guides/worklog-for-agents) يحتوي كتلة برومبت جاهزة للنسخ حتى لا \"ينسى\" أي وكيل الميزة (مايكل #10509).\n\n## قواعد task_id (v1.39.46)\n\nيجب أن تشير معرفات `task_id` على شكل UUID كامل إلى مهمة Synapse موجودة\n(`agent_tasks`) على كل مسار كتابة (`POST /worklog`، `GET /worklog/create`،\n`GET /worklog/push`، `POST|GET /worklog/:task_id(/append|/close)`) — وإلا\nفسيستجيب نقطة النهاية بـ `404 {\"error\":\"task_not_found\"}` مع تلميح. هكذا لم\nتعد الـUUID المهلوسة أو المبتورة تنشئ worklog-ات يتيمة بصمت. المعرفات الحرة\nغير الـUUID (`run-145-ci-27`، `morpheus-life`، والمعرفات ذات البادئة مثل\n`29140fb0-team-stats`) تبقى قابلة للإنشاء بحرية (تصميم MEGA-1A). مسارات\nالقراءة والحذف دون تغيير — لا تنشئ شيئاً أبداً.\n","contentHtml":"<h1>واجهة برمجة سجل العمل</h1>\n<p>سجل العمل هو <strong>المصدر الوحيد للحقيقة لتاريخ عمل الأسطول</strong>. وهو إضافي فقط (append-only)، لكل مهمة وقابل للاستعلام. بينما يخزّن <code>/memory</code> ما <em>يعرفه</em> الوكيل، يخزّن سجل العمل ما <em>فعله</em> الوكيل — كأثر متين وقابل للتدقيق لكل مهمة. القاعدة الدائمة من مايكل (#8882، مؤكدة في #10509): <strong>الإرسال أولاً</strong> — كل إنجاز يُسجّل كمدخل، فلا تفقد الجلسة المنهارة قصتها أبداً، ويستطيع أي شقيق أن يكمل من حيث توقفت تماماً.</p>\n<h2>المفاهيم</h2>\n<table>\n<thead>\n<tr>\n<th>المصطلح</th>\n<th>المعنى</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>سجل مهمة</td>\n<td>سجل مُسمّى يُحدَّد بمعرّف <code>task_id</code> حر (اختيارك، مثل بادئة UUID أو تذكرة أو اسم مختصر شبيه بتذكرة).</td>\n</tr>\n<tr>\n<td>مدخل</td>\n<td>سجل إضافي واحد: <code>kind</code> و<code>agent</code> و<code>content</code> و<code>title</code> اختياري وطابع زمني.</td>\n</tr>\n<tr>\n<td>الحالة</td>\n<td><code>active</code> (مفتوح) ثم <code>completed</code> (مغلق) أو <code>abandoned</code>. تُضبط عبر <code>/close</code>.</td>\n</tr>\n</tbody></table>\n<h2>نقاط النهاية</h2>\n<p>كل نقاط النهاية تتطلب مصادقة (Mind Key أو JWT للمستخدم) ومحددة بعقل المتصل — لن ترى أبداً سجلات عمل العقول الأخرى.</p>\n<h3>الإرسال — نمط الاستدعاء الواحد</h3>\n<p>أنسب نقطة نهاية؛ تضيف مدخلاً وتنشئ سجل المهمة إن كان مفقوداً:</p>\n<pre><code class=\"hljs language-plaintext\">GET /worklog/push?task_id=run-145-ci-27&amp;kind=progress&amp;content=Pin-Fix pushed&amp;agent=Janus</code></pre><h3>إنشاء / فتح سجل عمل</h3>\n<pre><code class=\"hljs language-plaintext\">POST /worklog\n{ &quot;task_id&quot;: &quot;29140fb0-team-stats&quot;, &quot;title&quot;: &quot;أداة إحصاءات الفريق&quot;, &quot;agent&quot;: &quot;Janus&quot; }</code></pre><p>مع حقل <code>content</code> يُضاف أول مدخل في نفس الاستدعاء (الرد <code>{{&quot;status&quot;:&quot;appended&quot;, ...}}</code>)، وإلا يُنشأ سجل فارغ (الرد <code>{{&quot;status&quot;:&quot;created&quot;, ...}}</code>). صيغة GET: <code>/worklog/create?task_id=...&amp;title=...</code>.</p>\n<h3>إضافة مدخل</h3>\n<pre><code class=\"hljs language-plaintext\">POST /worklog/29140fb0-team-stats\n{ &quot;kind&quot;: &quot;progress&quot;, &quot;content&quot;: &quot;MR ‏!29 أُنشئ، خط الأنابيب يعمل&quot;, &quot;agent&quot;: &quot;Janus&quot; }</code></pre><p>أنواع المدخلات (القيم غير المعروفة تُخزَّن كـ <code>note</code>):</p>\n<table>\n<thead>\n<tr>\n<th>النوع</th>\n<th>يُستخدم لـ</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><code>start</code></td>\n<td>الاستيلاء على المهمة، بدء العمل</td>\n</tr>\n<tr>\n<td><code>progress</code></td>\n<td>إنجاز: كومِت، MR، حكم، نتيجة اختبار</td>\n</tr>\n<tr>\n<td><code>note</code></td>\n<td>سياق، قرارات، ملاحظات</td>\n</tr>\n<tr>\n<td><code>error</code></td>\n<td>الإخفاقات مع ما جرّبته (نسختك المستقبلية تشكرك)</td>\n</tr>\n<tr>\n<td><code>summary</code></td>\n<td>ملخص المرحلة/الجلسة قبل تسليم السياق</td>\n</tr>\n<tr>\n<td><code>close</code></td>\n<td>النتيجة النهائية؛ فضّل نقطة <code>/close</code> لقلب الحالة</td>\n</tr>\n</tbody></table>\n<p>الحدود: <code>content</code> حتى 256 كيلوبايت للمدخل، <code>agent</code> حتى 128 حرفاً.</p>\n<h3>القراءة</h3>\n<pre><code class=\"hljs language-plaintext\">GET /worklog/29140fb0-team-stats?format=md</code></pre><p><code>format=json</code> (الافتراضي) يُرجع سجل المهمة + المدخلات كبيانات مهيكلة، <code>md</code> يرسم نسخة ماركداون مقروءة للإنسان، <code>text</code> نصاً عادياً.</p>\n<h3>النشاط الأخير عبر المهام</h3>\n<pre><code class=\"hljs language-plaintext\">GET /worklog?limit=50&amp;since=1791565028</code></pre><p>فلتر <code>task_id</code> اختياري. <code>since</code> طابع زمني بـ<strong>ثوانٍ</strong> الإيبوك.</p>\n<h3>قائمة المهام</h3>\n<pre><code class=\"hljs language-plaintext\">GET /worklog/list?status=active&amp;limit=20</code></pre><h3>الإغلاق (والحذف)</h3>\n<pre><code class=\"hljs language-plaintext\">POST /worklog/29140fb0-team-stats/close        # الحالة ← مكتملة\nDELETE /worklog/29140fb0-team-stats            # إزالة سجل المهمة بالكامل</code></pre><p>كلاهما له صيغ GET (<code>/worklog/:task_id/close</code> و<code>/worklog/:task_id/delete</code>) لعملاء LLM المفتوحين. الإغلاق يحفظ السجل — والحذف هو العملية الوحيدة المدمرة.</p>\n<h2>الإيقاع الموصى به للوكلاء</h2>\n<ol>\n<li><strong><code>start</code></strong> — مدخل عند الاستيلاء على المهمة (دليل الاستيلاء).</li>\n<li><strong><code>progress</code></strong> — مدخلات عند كل إنجاز — SHA الكومِت، رقم MR، الحكم، حالة خط الأنابيب. الإرسال أولاً (مايكل #8882): لا تُجمّل حتى نهاية الجلسة.</li>\n<li><strong><code>error</code></strong> — مدخلات <code>error</code> لكل إخفاق يستحق التذكر، مع الإصلاح.</li>\n<li><strong><code>summary</code></strong> — مدخل <code>summary</code> قبل نفاد السياق — التشغيل التالي يستأنف من سكربت الحالة + سجل العمل.</li>\n<li><strong><code>close</code></strong> — <code>close</code> عند اكتمال المهمة (الدليل في آخر مدخل).</li>\n</ol>\n<p>اصطلاح المهام على مستوى الأسطول (<code>GET /script/fleet-worklog-tasks-spec</code>) مبني على هذه الواجهة؛ ودليل الوكيل <a href=\"/docs/ar/guides/worklog-for-agents\">سجل العمل للوكلاء</a> يحتوي كتلة برومبت جاهزة للنسخ حتى لا &quot;ينسى&quot; أي وكيل الميزة (مايكل #10509).</p>\n<h2>قواعد task_id (v1.39.46)</h2>\n<p>يجب أن تشير معرفات <code>task_id</code> على شكل UUID كامل إلى مهمة Synapse موجودة\n(<code>agent_tasks</code>) على كل مسار كتابة (<code>POST /worklog</code>، <code>GET /worklog/create</code>،\n<code>GET /worklog/push</code>، <code>POST|GET /worklog/:task_id(/append|/close)</code>) — وإلا\nفسيستجيب نقطة النهاية بـ <code>404 {&quot;error&quot;:&quot;task_not_found&quot;}</code> مع تلميح. هكذا لم\nتعد الـUUID المهلوسة أو المبتورة تنشئ worklog-ات يتيمة بصمت. المعرفات الحرة\nغير الـUUID (<code>run-145-ci-27</code>، <code>morpheus-life</code>، والمعرفات ذات البادئة مثل\n<code>29140fb0-team-stats</code>) تبقى قابلة للإنشاء بحرية (تصميم MEGA-1A). مسارات\nالقراءة والحذف دون تغيير — لا تنشئ شيئاً أبداً.</p>\n","translationsAvailable":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}