پائپ لائن قدم
ایک پائپ لائن قدم کے دو آزاد محور ہوتے ہیں:
- قسم (
StepKind) — انجن قدم کو اُس کے ٹریگرز کے مقابلے میں کیسے شیڈیول کرتا ہے۔ - باڈی کلید (
BuiltInBodyKeys) — کون سا رجسٹر شدہ باڈی کلوزر قدم کا کام انجام دیتا ہے۔
قدم کی اقسام
سیکشن کا عنوان “قدم کی اقسام”packages/cc_domain/lib/features/pipelines/domain/entities/step_kind.dart میں متعین۔
| قسم | شیڈولنگ کے معنی |
|---|---|
trigger |
لازمی داخلے کا مقام — فی ٹیمپلیٹ عین ایک، ہمیشہ پہلا نوڈ۔ خود کوئی کام نہیں کرتا؛ رن کیا شروع کرتا ہے (دستی / ایونٹ / شیڈول) الگ سے PipelineTrigger قطاروں کے طور پر ٹریک ہوتا ہے۔ اِس کی باڈی no-op pipeline.trigger ہے۔ |
listen |
جب تمام ماخذ قدم (StepTrigger.sourceStepIds میں) مکمل ہو جائیں تو چلتا ہے۔ |
join |
جب waitForStepIds کے تمام قدم حتمی حالت تک پہنچ جائیں تو چلتا ہے۔ |
router |
مشروط شاخ بندی — باڈی StepResult.route(key) واپس کرتی ہے، جو صرف اُسی نیچے والے کنارے کو چلاتی ہے جس کی routeKey مماثل ہو؛ جن شاخوں کا انتخاب نہیں ہوا وہ چھوڑی گئی قرار دے دی جاتی ہیں۔ |
forEach |
listen کی طرح شیڈیول ہوتا ہے (جب تمام sourceStepIds مکمل ہوں تو چلتا ہے)۔ تکراری کام رجسٹر شدہ flow.forEach باڈی کرتی ہے؛ انجن ہر آئٹم کے لیے ایک الگ چائلڈ قدم پیدا نہیں کرتا۔ |
terminal |
بغیر باڈی والا شیڈیولر سینٹینل۔ کوئی حتمی قدم مکمل ہو جائے تو پائپ لائن رن مکمل ہو جاتا ہے۔ |
قدم کی باڈیز
سیکشن کا عنوان “قدم کی باڈیز”رجسٹر شدہ باڈی کلوزرز، جن کی کلیدیں BuiltInBodyKeys کے مستقل حروف ہیں (packages/cc_domain/lib/features/pipelines/domain/templates/builtin_template_seeds.dart)۔ یہ 25 ہیں اور سب نیچے درج ہیں۔ جہاں کوئی اور بات نہ کہی گئی ہو، کنفیگریشن قدم کے PipelineNodeConfig (نیچے دیکھیں) سے پڑھی جاتی ہے؛ «اسٹیٹ کلیدیں» عمل درآمد کے وقت پائپ لائن اسٹیٹ / ٹریگر پے لوڈ سے پڑھی جاتی ہیں۔
جس قدم کی bodyKey رجسٹر نہ ہو، وہ ٹیمپلیٹ لوڈ کے وقت ایک وارننگ پیدا کرتا ہے اور پھر کبھی نہیں چلتا — اس سے رن ناکام نہیں ہوتا۔ trigger اور terminal قدم اُس وارننگ سے مستثنیٰ ہیں: ٹریگر پھر بھی no-op pipeline.trigger باڈی چلاتا ہے؛ terminal قدم کی کوئی باڈی نہیں ہوتی۔
pipeline.trigger
سیکشن کا عنوان “pipeline.trigger”لازمی trigger نوڈ کی no-op باڈی — فوراً مکمل ہو جاتی ہے تاکہ انجن نیچے کے سننے والوں تک فین آؤٹ کرے۔ کوئی کنفیگریشن نہیں۔
pipeline.bashScript
سیکشن کا عنوان “pipeline.bashScript”بغیر ایجنٹ والا شیل قدم (bash -c)۔ اسکرپٹ میں {{key}} پلیس ہولڈرز اسٹیٹ + ٹریگر پے لوڈ سے، شیل-اسکیپ شدہ قدروں کے ساتھ بدلے جاتے ہیں۔
| کنفیگ فیلڈ | تفصیل |
|---|---|
script |
چلانے کے لیے شیل کمانڈ (لازمی) |
outputKey |
وہ اسٹیٹ کلید جسے exit 0 پر ٹرِم شدہ stdout ملتا ہے |
یہ cwd <cc_root>/pipelines/<pipelineRunId>/ (ایک رن کے تمام bash قدموں کے لیے مشترک) اور ماحول میں GITHUB_TOKEN کے ساتھ چلتا ہے۔ اسٹیٹ میں <stepId>_runDir بھی لکھتا ہے۔ غیر صفر exit قدم کو stderr کے آخری حصے کے ساتھ ناکام کر دیتا ہے۔
conversation.promptAgent
سیکشن کا عنوان “conversation.promptAgent”عمومی پرامپٹ-اور-ڈسپیچ نوڈ: پرامپٹ رینڈر کرتا ہے، ایجنٹ کو ایک گفتگو میں ڈسپیچ کرتا ہے اور رن مکمل ہونے تک معطل رہتا ہے۔ ایجنٹ کا submit_output پے لوڈ outputKey کے تحت اسٹیٹ میں جمع کر لیا جاتا ہے۔
| کنفیگ فیلڈ | تفصیل |
|---|---|
agentId |
ڈسپیچ کرنے کے لیے ورک اسپیس کے دائرے کا ایجنٹ UUID (لازمی) |
prompt |
ہدایت کا متن؛ {{key}} تبدیلی کی حمایت کرتا ہے (لازمی) |
outputKey |
جمع شدہ آؤٹ پٹ کے لیے اسٹیٹ کلید |
outputSchema |
وہ JSON Schema جسے آؤٹ پٹ پورا کرے |
label |
کینوس پر دکھایا جانے والا انسانی لیبل |
extras.spaceId |
کام کرنے کے لیے موجودہ گفتگو (ڈیفالٹ: ایک پوشیدہ) |
extras.conversationTitle |
اُس اسپیس کے اندر نامزد اسٹریم (اختیاری) |
extras.mode |
اُس نوڈ پر پڑھا جاتا ہے جو کمرہ کھولتا ہے (messaging.createSpace)، یہاں نہیں۔ ڈیفالٹ review۔ |
pipeline.condition
سیکشن کا عنوان “pipeline.condition”روٹر باڈی — config.extras پڑھتی ہے، ایک شرط کا جائزہ لیتی ہے اور StepResult.route(key) واپس کرتی ہے۔ شرطیں JavaScript اظہار نہیں ہیں؛ ترجیحی ترتیب کے ساتھ تین تحریری شکلیں معاون ہیں:
- پریڈیکیٹ ٹری (
extras.predicate) — ایک بولین ٹری جو"true"/"false"روٹ کرتا ہے۔ ہر نوڈ ایک میپ ہے جس میں ایکtypeہوتا ہے:{"type": "fileExists", "paths": [...], "baseKey": "repo_local_path", "negate": false, "recursive": false}— جب فہرست میں شامل کوئی بھی پاتھ ڈسک پر موجود ہو تو true؛negateاسے پلٹ دیتا ہے؛recursiveذیلی ڈائریکٹریز میں بھی تلاش کرتا ہے (.git،node_modules،build،.dart_toolچھوڑ کر)۔ نسبتی پاتھstate[baseKey](ڈیفالٹrepo_local_path) کے مقابلے میں حل ہوتے ہیں، ورنہ فی رن ورک اسپیس ڈائریکٹری کے۔{"type": "comparison", "left": "{{score}}", "op": "gt", "right": 80}— آپریٹرزequals،notEquals،contains،exists،notExists،gt،lt؛ پائپ لائن اسٹیٹ پڑھتا ہے، فائل سسٹم نہیں۔{"type": "and" | "or", "of": [<predicate>, ...]}— بولین گروپس۔{"type": "not", "of": <predicate>}— نفی۔
- سوئچ (
extras.switchKey) —{"switchKey": "pr_class", "cases": [...], "default": "standard"}؛ پہلے ایسے کیس پر روٹ کرتا ہے جسے اسٹیٹ ویلیو بڑے/چھوٹے حروف کے فرق کے بغیر شامل ہو، ورنہdefaultپر۔ - موازنہ (پرانی اعلیٰ سطحی
extras.left/extras.op/extras.right) — ایکcomparisonپریڈیکیٹ کے برابر، اُن ٹیمپلیٹس کے لیے رکھا گیا جو ٹری سے پہلے لکھے گئے تھے۔
نوڈ سے نکلنے والے کناروں کے ساتھ ایک routeKey ہوتی ہے جو واپس کی گئی کلید سے مماثل ہونی چاہیے۔
prReview.comment
سیکشن کا عنوان “prReview.comment”یکجا شدہ نتائج کو GitHub PR کلائنٹ کے ذریعے PR ریویو تبصرے کے طور پر پوسٹ کرتا ہے۔
| اسٹیٹ کلید | تفصیل |
|---|---|
repo_full_name |
owner/repo (لازمی) |
pr_number |
PR نمبر — int یا عددی سٹرنگ (لازمی) |
consolidated_findings |
تبصرے کی باڈی (لازمی) |
StepResult.terminal واپس کرتا ہے، اور اسٹیٹ میں comment_review_id اور commented_at ہوتے ہیں۔
messaging.postSpace
سیکشن کا عنوان “messaging.postSpace”MessagingPort کے ذریعے کسی میسجنگ اسپیس پر پیغام پوسٹ کرتا ہے۔
| اسٹیٹ کلید | تفصیل |
|---|---|
space_id |
ہدف اسپیس (لازمی) |
content |
پیغام کی باڈی، اسٹیٹ سے بغیر تبدیلی پڑھی جاتی ہے (لازمی) |
اسٹیٹ میں posted_space_id اور posted_at لکھتا ہے۔
team.dispatch
سیکشن کا عنوان “team.dispatch”ایک واحد ایجنٹ کے بجائے پوری ٹیم ڈسپیچ کرتا ہے، پھر ارکان کے رنز مکمل ہونے تک معطل رہتا ہے۔
| کنفیگ فیلڈ | تفصیل |
|---|---|
teamId |
ڈسپیچ کرنے کے لیے ورک اسپیس کے دائرے کی ٹیم (لازمی؛ agentId کے ساتھ باہم ناسازگار) |
prompt |
مقصد کا متن؛ {{key}} تبدیلی کی حمایت کرتا ہے (لازمی) |
dispatchMode |
allParallel (ڈیفالٹ — فی رکن ایک ٹاسک) یا manager (ہم آہنگی کے لیے صرف لیڈر کو ڈسپیچ کریں) |
outputKey |
جمع شدہ ارکان کے آؤٹ پٹس کے لیے اسٹیٹ کلید |
outputSchema, label, extras.spaceId |
جیسا کہ conversation.promptAgent کے لیے |
human.gate
سیکشن کا عنوان “human.gate”منظوری گیٹ۔ منظور کرنے والے ایجنٹ کو ایک گفتگو (ریویو موڈ) میں گیٹ پرامپٹ اور {decision, reason} آؤٹ پٹ کنٹریکٹ کے ساتھ ڈسپیچ کرتا ہے، پھر منظور کنندہ کے submit_output کے ذریعے جمع کرانے تک معطل رہتا ہے۔
| کنفیگ فیلڈ | تفصیل |
|---|---|
agentId |
منظور کرنے والا ایجنٹ (لازمی) |
prompt |
گیٹ پرامپٹ (اختیاری؛ موجود نہ ہو تو ڈیفالٹ استعمال ہوتا ہے) |
outputKey |
جمع شدہ {decision, reason} پے لوڈ کے لیے اسٹیٹ کلید |
outputSchema |
ڈیفالٹ طور پر ایک منظوری اسکیما (decision: approved / rejected، reason) |
label, extras.spaceId |
جیسا کہ conversation.promptAgent کے لیے |
گیٹ صرف submit_output کے ذریعے حل ہوتا ہے۔ BuiltInBodyKeys.humanGate، نوڈ ٹائپ لائبریری اور ایک بلٹ اِن ٹیمپلیٹ کا پرامپٹ متن، سب approve_step اور reject_step MCP ٹولز کا نام لیتے ہیں؛ اِن میں سے کوئی ٹول بھی کسی پیکج یا رجسٹری میں موجود نہیں۔
repos.cleanup
سیکشن کا عنوان “repos.cleanup”پرانی الگ تھلگ worktrees ہٹاتا ہے؛ اپنا موڈ ٹریگر پے لوڈ سے چنتا ہے۔ رن کے dryRun فلیگ کا لحاظ کرتا ہے۔
| اسٹیٹ کلید | تفصیل |
|---|---|
ticket_id |
اُس ٹکٹ کے worktrees جاری کر دیں |
repo_full_name + pr_number |
عارضی PR-ایڈیٹر worktree جاری کریں |
space_id |
اُس گفتگو کے worktrees اور فولڈر کو ختم کریں |
| (مندرجہ بالا میں سے کوئی نہیں) | ورک اسپیس کی صفائی کریں: غائب ہو چکی ڈائریکٹریز، مردہ اسپیسز، یتیم گفتگو فولڈرز |
outputKey (اختیاری) میں ایک خلاصہ سٹرنگ ملتی ہے۔
flow.forEach
سیکشن کا عنوان “flow.forEach”کسی اسٹیٹ مجموعے پر میپ / فین آؤٹ: ہر آئٹم کے لیے پرامپٹ ایک بار رینڈر کرتا ہے، پھر اُن پرامپٹس کو جوڑ کر (--- جداکار) ایجنٹ کو ایک بار ڈسپیچ کرتا ہے اور وہ رن مکمل ہونے تک معطل رہتا ہے۔ خالی مجموعہ فوراً ایک خالی فہرست کے ساتھ مکمل ہو جاتا ہے۔ یہ فی آئٹم ایک متوازی ڈسپیچ نہیں ہے۔
| کنفیگ فیلڈ | تفصیل |
|---|---|
agentId |
فی آئٹم ڈسپیچ کرنے والا ایجنٹ (لازمی) |
prompt |
فی آئٹم پرامپٹ؛ {{key}} تبدیلی کی حمایت کرتا ہے (لازمی) |
extras.iterableKey |
وہ اسٹیٹ کلید جس میں مجموعہ رکھا ہے (لازمی) |
extras.itemKey |
وہ کلید جس سے موجودہ آئٹم پرامپٹ میں بندھتا ہے (ڈیفالٹ item) |
outputKey |
جمع شدہ آؤٹ پٹ کے لیے اسٹیٹ کلید (ایک ڈسپیچ، فہرست نہیں) |
flow.callPipeline
سیکشن کا عنوان “flow.callPipeline”ایک اور پائپ لائن ٹیمپلیٹ کو نیسٹڈ ذیلی قدم کے طور پر چلاتا ہے (ذیلی پائپ لائن ایک چائلڈ رن کے طور پر چلتی ہے جس میں parentPipelineRunId سیٹ ہوتا ہے)۔ قدم معطل رہتا ہے جب تک بچہ حتمی حالت تک نہ پہنچے، پھر بچے کی حتمی حالت outputKey کے تحت ضم کر دی جاتی ہے۔
| کنفیگ فیلڈ | تفصیل |
|---|---|
extras.templateId |
چلانے کے لیے چائلڈ ٹیمپلیٹ (لازمی؛ کوئی پائپ لائن خود کو کال نہیں کر سکتی) |
inputKeys |
وہ اسٹیٹ کلیدیں جو بچے کے ٹریگر پے لوڈ میں نقل کی جاتی ہیں |
outputKey |
بچے کی ضم شدہ حتمی حالت کے لیے اسٹیٹ کلید |
code.index
سیکشن کا عنوان “code.index”پس منظر میں tree-sitter انڈیکسنگ: ایک ریپو پر چلتا ہے، ورکر آئسولیٹس میں علامات/ایجیز نکالتا ہے اور اُنہیں ورک اسپیس کوڈ گراف میں شامل کرتا ہے۔ پیش رفت کو قدم-رن قطار میں اسٹریم کرتا ہے؛ dry-run کی حمایت کرتا ہے۔ Tree-sitter اور اُس کے گرامرز لازمی نیٹِوز ہیں — dylib کی کمی کا مطلب ہے کہ سرور کبھی بوٹ ہی نہیں ہوا، اور کوئی گرامر جو رن کے دوران حل نہ ہو سکے، قدم کو چھوڑنے کے بجائے ناکام کر دیتا ہے۔
| اسٹیٹ کلید | تفصیل |
|---|---|
repo_id |
انڈیکس کرنے والا ریپو (لازمی) |
repo_local_path |
چیک آؤٹ کا مقامی پاتھ (لازمی) |
meeting.diarize
سیکشن کا عنوان “meeting.diarize”آف لائن اسپیکر ڈائریائزیشن۔ میٹنگ کی محفوظ رکھی گئی آڈیو پڑھتا ہے، اُسے اسپیکرز (Person 1، Person 2، …) میں کلسٹر کرتا ہے، ٹرانسکرپٹ سیگمنٹس کو نئے لیبل دیتا ہے اور transcript اسٹیٹ دوبارہ لکھتا ہے؛ متوازی meeting.updateTranscript قدم کے لیے diarization_spans بھی خارج کرتا ہے۔ جب کوئی آڈیو محفوظ نہ رکھی گئی ہو یا ماڈلز انسٹال نہ ہوں تو ٹرانسکرپٹ کو بغیر تبدیلی گزرنے دیتا ہے۔
| اسٹیٹ کلید | تفصیل |
|---|---|
meeting_id |
ڈائریائز کرنے والی میٹنگ (لازمی) |
meeting.saveNotes, meeting.addActionItems, meeting.addDecisions
سیکشن کا عنوان “meeting.saveNotes, meeting.addActionItems, meeting.addDecisions”میٹنگ خلاصے کو محفوظ کرنے والی متعیّن باڈیز۔ ہر ایک اسٹیٹ سے meeting_id اور ایجنٹ قدم کا منظم meeting_outcome پے لوڈ ({summary, enhancedNotes, actionItems[], decisions[]}) پڑھتی ہے اور اپنا حصہ اپنی ٹیبل میں لکھتی ہے — نوٹس، ایکشن آئٹمز یا فیصلے۔ کسی تنزلی والے رن پر پہلے سے محفوظ قطاریں کبھی مٹائی نہیں جاتیں۔
دیگر بلٹ اِن باڈیز
سیکشن کا عنوان “دیگر بلٹ اِن باڈیز”| باڈی کلید | تفصیل |
|---|---|
meeting.identifySpeakers |
بین میٹنگ اسپیکر شناخت: ڈائریائز شدہ اسپیکرز کو محفوظ آواز پروفائلز سے ملاقاتا ہے اور پُراعتماد مماثلتیں خودکار طور پر لاگو کرتا ہے۔ پروفائلز/ایمبیڈنگز کے بغیر no-op۔ |
meeting.updateTranscript |
diarization_spans سے Person N لیبل لاگو کرتا ہے اور فی ونڈو ٹکڑوں کو فی اسپیکر باریوں میں ضم کرتا ہے، پھر صاف شدہ ٹرانسکرپٹ محفوظ کرتا ہے۔ جب ڈائریائزیشن نے کچھ پیدا نہ کیا ہو تو no-op۔ |
meeting.assemblePlayback |
میٹنگ کا مکس شدہ پلے بیک ٹریک محفوظ رکھی گئی فی چینل WAVs سے تیار کرتا ہے۔ کوئی آڈیو محفوظ نہ رکھی گئی ہو تو no-op۔ |
orchestration.markPhase |
کام کے DAG کے اختتام پر، بغیر آؤٹ پٹ والے ذیلی ٹکٹس کے لیے ناکامی کے سینٹینلز لکھتا ہے اور آرکیسٹریشن کو synthesizing پر بدل دیتا ہے۔ |
orchestration.persistDeliverable |
ترکیب کا آؤٹ پٹ پیرنٹ ٹکٹ میں لکھتا ہے، اُسے مکمل کرتا ہے، حتمی نتیجہ پوسٹ کرتا ہے اور آرکیسٹریشن کو completed نشان زد کرتا ہے۔ |
orchestration.awaitApproval |
جزوی منظوری گیٹ: جب قدم کی نوڈ کلید آرکیسٹریشن کے منظور شدہ سیٹ میں ہو تو فوراً مکمل ہو جاتا ہے، ورنہ بعد کی منظوری کے دوبارہ شروع کرنے تک معطل رہتا ہے۔ یہ واحد باڈی ہے جو extras.awaitApproval سیٹ کرتی ہے، جس کی وجہ سے یہ 24 گھنٹے کی معطل قدم ٹائم آؤٹ سے مستثنیٰ ہو جاتی ہے۔ |
messaging.createSpace |
وہ گفتگو کھولتا ہے جس میں باقی ٹیمپلیٹ کام کرتا ہے، جو قدم کی outputKey کے تحت شائع ہوتی ہے (بلٹ اِن pipeline_space_id استعمال کرتے ہیں)۔ خالی repoIds فہرست کچھ بھی چیک آؤٹ نہیں کرتی؛ extras['allRepos'] ورک اسپیس کے ہر ریپو کو چیک آؤٹ کرتا ہے۔ extras['createConversation'] (ڈیفالٹ طور پر بند) ایک نامزد اسٹریم بھی کھولتا ہے۔ کوئی ایجنٹ قدم کسی کمرے میں شامل ہوتا ہے اور کبھی خود کوئی کمرہ نہیں کھولتا، اس لیے اِس نوڈ کے بغیر کوئی فین آؤٹ ڈسپیچ پر ناکام ہو جاتا ہے — اور اِسے ایک بار جوڑنے کا مطلب یہ ہے کہ پورا فین آؤٹ ایک ہی چیک آؤٹ شیئر کرتا ہے بجائے اس کے کہ ہر ایک کے لیے الگ چیک آؤٹ تیار کیا جائے۔ |
prReview.finalize |
PR-ریویو ٹیمپلیٹ کا آخری قدم: جمع شدہ ریویو نوڈز کو اتفاقِ رائے کی بالٹیوں میں ترتیب دیتا ہے اور فی PR فیصلہ شمار کرتا ہے۔ |
skills.analyze |
ورک اسپیس کی انسٹال شدہ مہارتوں پر مہارتوں کا سپلائی چین اسکین چلاتا ہے اور ہر فیصلہ ریکارڈ کرتا ہے۔ |
قدم کے نتائج
سیکشن کا عنوان “قدم کے نتائج”ایک قدم کی باڈی StepResult واپس کرتی ہے (packages/cc_domain/lib/features/pipelines/domain/entities/step_result.dart)۔ failed کے سوا تمام فیکٹریاں ایک اختیاری mutatedState میپ قبول کرتی ہیں جو پائپ لائن اسٹیٹ میں ضم کر دیا جاتا ہے۔
| فیکٹری | دستخط | تفصیل |
|---|---|---|
ok |
StepResult.ok({mutatedState}) |
عام تکمیل؛ نیچے کے سننے والوں کا جائزہ لیا جاتا ہے |
route |
StepResult.route(nextRouterKey, {mutatedState}) |
روٹر کی تکمیل؛ وہ نیچے والی شاخ چنتا ہے جس کی routeKey مماثل ہو |
suspendUntilEvent |
StepResult.suspendUntilEvent(eventType, {mutatedState}) |
معطل رکھیں جب تک کوئی مخصوص ڈومین ایونٹ ٹائپ رونما نہ ہو |
suspendUntilTasksComplete |
StepResult.suspendUntilTasksComplete(taskIds, {mutatedState}) |
معطل رکھیں جب تک فہرست کے تمام ٹاسکس حتمی حالت تک نہ پہنچ جائیں |
terminal |
StepResult.terminal({mutatedState}) |
پائپ لائن رن مکمل ہو گیا — مزید کوئی قدم نہیں |
failed |
StepResult.failed(errorMessage) |
قدم ایک خرابی کے پیغام کے ساتھ ناکام ہو گیا |
StepRetryPolicy
سیکشن کا عنوان “StepRetryPolicy”ناکام ہونے والی نوڈ باڈی کے لیے دوبارہ کوشش کا رویہ (PipelineNodeConfig.retryPolicy؛ null دوبارہ کوششیں بند کر دیتا ہے)۔
| فیلڈ | ٹائپ | تفصیل |
|---|---|---|
maxAttempts |
int |
پہلی کوشش سمیت کل کوششیں (3 = 1 کوشش + 2 دوبارہ کوششیں)؛ ≥ 1 ہونا لازم ہے |
backoff |
String |
linear یا exponential (ڈیفالٹ) |
initialDelayMs |
int |
پہلی دوبارہ کوشش سے پہلے تاخیر، ملی سیکنڈ میں؛ بعد کی تاخیریں backoff کے مطابق بڑھتی ہیں |
PipelineNodeConfig
سیکشن کا عنوان “PipelineNodeConfig”فی نوڈ کنفیگریشن جو قدم کی تعریف کے اندر رکھی جاتی ہے (packages/cc_domain/lib/features/pipelines/domain/entities/pipeline_node_config.dart)۔ بلٹ اِن اور حسب ضرورت نوڈز، دونوں یہی شکل رکھتے ہیں؛ ہر باڈی صرف وہی فیلڈز پڑھتی ہے جن سے اُسے سروکار ہو۔
| فیلڈ | ٹائپ | تفصیل |
|---|---|---|
prompt |
String? |
{{key}} تبدیلی والا پرامپٹ ٹیمپلیٹ |
script |
String? |
{{key}} تبدیلی والی Bash اسکرپٹ باڈی |
agentId |
String? |
ڈسپیچ کرنے کے لیے ورک اسپیس کے دائرے کا ایجنٹ UUID |
inputKeys |
List<String> |
وہ اسٹیٹ کلیدیں جو یہ نوڈ بطور اِن پٹ لیتا ہے |
repoIds |
List<String> |
وہ ریپوز جو messaging.createSpace نوڈ چیک آؤٹ کرتا ہے (<repoId> یا <repoId>@<branch>)۔ خالی = کوئی نہیں؛ extras['allRepos'] = ورک اسپیس کا ہر ریپو۔ ایجنٹ قدموں پر نظر انداز کیا جاتا ہے۔ |
outputKey |
String? |
وہ اسٹیٹ کلید جس کے تحت اِس نوڈ کا آؤٹ پٹ لکھا جاتا ہے |
label |
String? |
کینوس پر دکھایا جانے والا انسانی لیبل (ڈیفالٹ طور پر قدم کی ID) |
outputSchema |
Map<String, dynamic>? |
JSON Schema (ذیلی مجموعہ) جسے آؤٹ پٹ ویلیو پورا کرے |
reducer |
String? |
جب متوازی شاخیں ایک ہی outputKey لکھیں تو ضم کرنے کی حکمت عملی: append، mergeLists، mergeMaps، sum یا override (ڈیفالٹ) |
retryPolicy |
StepRetryPolicy? |
باڈی ناکام ہونے پر دوبارہ کوشش کی پالیسی؛ null = ایک ہی کوشش |
continueOnFail |
bool |
جب true ہو تو کوئی حتمی ناکامی رن کو ناکام نہیں کرتی؛ خرابی state['_stepErrors'][stepId] کے تحت رکھ دی جاتی ہے |
timeoutMs |
int? |
نوڈ باڈی کے لیے وال-کلاک ٹائم آؤٹ، ملی سیکنڈ میں؛ null = کوئی ٹائم آؤٹ نہیں |
teamId |
String? |
ڈسپیچ کرنے والی ٹیم (team.dispatch نوڈز)؛ agentId کے ساتھ باہم ناسازگار |
dispatchMode |
String? |
ٹیم کے عمل درآمد کا موڈ: allParallel یا manager |
extras |
Map<String, dynamic> |
آزاد شکل والی، باڈی کے لیے مخصوص کنفیگ (مثلاً iterableKey، templateId، شرط کے ٹری) |
اخذ شدہ ایکسیسرز: spaceId (extras['spaceId'] — کام کرنے کے لیے موجودہ گفتگو)، createsConversation (extras['createConversation'])، conversationTitle (extras['conversationTitle'])، modeName (extras['mode'] — chat / review / plan، اسپیس کھولنے والے نوڈ پر پڑھا جاتا ہے) اور runWhen (extras['runWhen'] — شرط پوری نہ ہونے پر نوڈ چھوڑ دیں)۔