dominds 0.6.4 → 0.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/dist/agent-priming.js +24 -22
  2. package/dist/llm/driver.js +10 -0
  3. package/dist/minds/builtin/cmdr/persona.md +3 -0
  4. package/dist/minds/builtin/dijiang/knowledge.md +287 -0
  5. package/dist/minds/builtin/dijiang/persona.md +7 -0
  6. package/dist/minds/system-prompt-parts.js +20 -13
  7. package/dist/minds/system-prompt.js +6 -2
  8. package/dist/server/api-routes.js +28 -71
  9. package/dist/server/websocket-handler.js +5 -1
  10. package/dist/showing-by-doing.js +31 -34
  11. package/dist/static/assets/{_baseUniq-C7IpU2Uk.js → _baseUniq-DucuKHj3.js} +2 -2
  12. package/dist/static/assets/{_baseUniq-C7IpU2Uk.js.map → _baseUniq-DucuKHj3.js.map} +1 -1
  13. package/dist/static/assets/{arc-1bhQqjON.js → arc-CNlZ9dTp.js} +2 -2
  14. package/dist/static/assets/{arc-1bhQqjON.js.map → arc-CNlZ9dTp.js.map} +1 -1
  15. package/dist/static/assets/{architectureDiagram-VXUJARFQ-CkEi1QpB.js → architectureDiagram-VXUJARFQ-BXkEOfVt.js} +6 -6
  16. package/dist/static/assets/{architectureDiagram-VXUJARFQ-CkEi1QpB.js.map → architectureDiagram-VXUJARFQ-BXkEOfVt.js.map} +1 -1
  17. package/dist/static/assets/{blockDiagram-VD42YOAC-DaBQ5-pY.js → blockDiagram-VD42YOAC-CyxI2bRF.js} +7 -7
  18. package/dist/static/assets/{blockDiagram-VD42YOAC-DaBQ5-pY.js.map → blockDiagram-VD42YOAC-CyxI2bRF.js.map} +1 -1
  19. package/dist/static/assets/{c4Diagram-YG6GDRKO-ChUgpgkP.js → c4Diagram-YG6GDRKO-sS8T1IDn.js} +3 -3
  20. package/dist/static/assets/{c4Diagram-YG6GDRKO-ChUgpgkP.js.map → c4Diagram-YG6GDRKO-sS8T1IDn.js.map} +1 -1
  21. package/dist/static/assets/{channel-CxvmwllM.js → channel-DBu0JRwo.js} +2 -2
  22. package/dist/static/assets/{channel-CxvmwllM.js.map → channel-DBu0JRwo.js.map} +1 -1
  23. package/dist/static/assets/{chunk-4BX2VUAB-CKsrU2yk.js → chunk-4BX2VUAB-D499BCnz.js} +2 -2
  24. package/dist/static/assets/{chunk-4BX2VUAB-CKsrU2yk.js.map → chunk-4BX2VUAB-D499BCnz.js.map} +1 -1
  25. package/dist/static/assets/{chunk-55IACEB6-BAau9SFt.js → chunk-55IACEB6-Dbe3sqC4.js} +2 -2
  26. package/dist/static/assets/{chunk-55IACEB6-BAau9SFt.js.map → chunk-55IACEB6-Dbe3sqC4.js.map} +1 -1
  27. package/dist/static/assets/{chunk-B4BG7PRW--IiJ7W1m.js → chunk-B4BG7PRW-BHkSNS9y.js} +5 -5
  28. package/dist/static/assets/{chunk-B4BG7PRW--IiJ7W1m.js.map → chunk-B4BG7PRW-BHkSNS9y.js.map} +1 -1
  29. package/dist/static/assets/{chunk-DI55MBZ5-B83KrPQj.js → chunk-DI55MBZ5-idwTV08g.js} +4 -4
  30. package/dist/static/assets/{chunk-DI55MBZ5-B83KrPQj.js.map → chunk-DI55MBZ5-idwTV08g.js.map} +1 -1
  31. package/dist/static/assets/{chunk-FMBD7UC4-BlDXzeza.js → chunk-FMBD7UC4-DLYv0YzD.js} +2 -2
  32. package/dist/static/assets/{chunk-FMBD7UC4-BlDXzeza.js.map → chunk-FMBD7UC4-DLYv0YzD.js.map} +1 -1
  33. package/dist/static/assets/{chunk-QN33PNHL-B596W_v7.js → chunk-QN33PNHL-DIC5_nYD.js} +2 -2
  34. package/dist/static/assets/{chunk-QN33PNHL-B596W_v7.js.map → chunk-QN33PNHL-DIC5_nYD.js.map} +1 -1
  35. package/dist/static/assets/{chunk-QZHKN3VN-UBBCxgBb.js → chunk-QZHKN3VN-DM_s2fcN.js} +2 -2
  36. package/dist/static/assets/{chunk-QZHKN3VN-UBBCxgBb.js.map → chunk-QZHKN3VN-DM_s2fcN.js.map} +1 -1
  37. package/dist/static/assets/{chunk-TZMSLE5B-D-wCX2wJ.js → chunk-TZMSLE5B-BjrSLFBO.js} +2 -2
  38. package/dist/static/assets/{chunk-TZMSLE5B-D-wCX2wJ.js.map → chunk-TZMSLE5B-BjrSLFBO.js.map} +1 -1
  39. package/dist/static/assets/{classDiagram-2ON5EDUG-DvtmzPcu.js → classDiagram-2ON5EDUG-CSPkR9uh.js} +6 -6
  40. package/dist/static/assets/{classDiagram-2ON5EDUG-DvtmzPcu.js.map → classDiagram-2ON5EDUG-CSPkR9uh.js.map} +1 -1
  41. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-DvtmzPcu.js → classDiagram-v2-WZHVMYZB-CSPkR9uh.js} +6 -6
  42. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-DvtmzPcu.js.map → classDiagram-v2-WZHVMYZB-CSPkR9uh.js.map} +1 -1
  43. package/dist/static/assets/{clone-DgJ0ZR-k.js → clone-DO2rSUBP.js} +2 -2
  44. package/dist/static/assets/{clone-DgJ0ZR-k.js.map → clone-DO2rSUBP.js.map} +1 -1
  45. package/dist/static/assets/{cose-bilkent-S5V4N54A-DXMyFQvy.js → cose-bilkent-S5V4N54A-CyS4z2hF.js} +2 -2
  46. package/dist/static/assets/{cose-bilkent-S5V4N54A-DXMyFQvy.js.map → cose-bilkent-S5V4N54A-CyS4z2hF.js.map} +1 -1
  47. package/dist/static/assets/{dagre-6UL2VRFP-BdaUG-j_.js → dagre-6UL2VRFP-CvybKTFb.js} +7 -7
  48. package/dist/static/assets/{dagre-6UL2VRFP-BdaUG-j_.js.map → dagre-6UL2VRFP-CvybKTFb.js.map} +1 -1
  49. package/dist/static/assets/{diagram-PSM6KHXK-NLiqKBzn.js → diagram-PSM6KHXK-Cl2rD6o-.js} +7 -7
  50. package/dist/static/assets/{diagram-PSM6KHXK-NLiqKBzn.js.map → diagram-PSM6KHXK-Cl2rD6o-.js.map} +1 -1
  51. package/dist/static/assets/{diagram-QEK2KX5R-D-0fyvY_.js → diagram-QEK2KX5R-RCrqu1G0.js} +6 -6
  52. package/dist/static/assets/{diagram-QEK2KX5R-D-0fyvY_.js.map → diagram-QEK2KX5R-RCrqu1G0.js.map} +1 -1
  53. package/dist/static/assets/{diagram-S2PKOQOG-BQ_FU59m.js → diagram-S2PKOQOG-BeHOCxq7.js} +6 -6
  54. package/dist/static/assets/{diagram-S2PKOQOG-BQ_FU59m.js.map → diagram-S2PKOQOG-BeHOCxq7.js.map} +1 -1
  55. package/dist/static/assets/{erDiagram-Q2GNP2WA-DyftKeuC.js → erDiagram-Q2GNP2WA-MdKfm7lU.js} +5 -5
  56. package/dist/static/assets/{erDiagram-Q2GNP2WA-DyftKeuC.js.map → erDiagram-Q2GNP2WA-MdKfm7lU.js.map} +1 -1
  57. package/dist/static/assets/{flowDiagram-NV44I4VS-9SGefONA.js → flowDiagram-NV44I4VS-DNo7ZxVC.js} +6 -6
  58. package/dist/static/assets/{flowDiagram-NV44I4VS-9SGefONA.js.map → flowDiagram-NV44I4VS-DNo7ZxVC.js.map} +1 -1
  59. package/dist/static/assets/{ganttDiagram-JELNMOA3-k_WLhf-r.js → ganttDiagram-JELNMOA3-Bxs02jb2.js} +3 -3
  60. package/dist/static/assets/{ganttDiagram-JELNMOA3-k_WLhf-r.js.map → ganttDiagram-JELNMOA3-Bxs02jb2.js.map} +1 -1
  61. package/dist/static/assets/{gitGraphDiagram-NY62KEGX-3eoLlCOY.js → gitGraphDiagram-NY62KEGX-BJsaVPOp.js} +7 -7
  62. package/dist/static/assets/{gitGraphDiagram-NY62KEGX-3eoLlCOY.js.map → gitGraphDiagram-NY62KEGX-BJsaVPOp.js.map} +1 -1
  63. package/dist/static/assets/{graph-vUevIs4s.js → graph-DBSDya0j.js} +3 -3
  64. package/dist/static/assets/{graph-vUevIs4s.js.map → graph-DBSDya0j.js.map} +1 -1
  65. package/dist/static/assets/{index-BNBG2CE1.js → index-gn-aSKfG.js} +138 -144
  66. package/dist/static/assets/{index-BNBG2CE1.js.map → index-gn-aSKfG.js.map} +1 -1
  67. package/dist/static/assets/{infoDiagram-WHAUD3N6-CwEhVxkU.js → infoDiagram-WHAUD3N6-D4Hvl0bK.js} +5 -5
  68. package/dist/static/assets/{infoDiagram-WHAUD3N6-CwEhVxkU.js.map → infoDiagram-WHAUD3N6-D4Hvl0bK.js.map} +1 -1
  69. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-Dtdq4G4Q.js → journeyDiagram-XKPGCS4Q-B3YmIoCv.js} +5 -5
  70. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-Dtdq4G4Q.js.map → journeyDiagram-XKPGCS4Q-B3YmIoCv.js.map} +1 -1
  71. package/dist/static/assets/{kanban-definition-3W4ZIXB7-Bli-AycJ.js → kanban-definition-3W4ZIXB7-dGCbR9Ty.js} +3 -3
  72. package/dist/static/assets/{kanban-definition-3W4ZIXB7-Bli-AycJ.js.map → kanban-definition-3W4ZIXB7-dGCbR9Ty.js.map} +1 -1
  73. package/dist/static/assets/{layout-CGlA8c09.js → layout-D7y0xA6C.js} +5 -5
  74. package/dist/static/assets/{layout-CGlA8c09.js.map → layout-D7y0xA6C.js.map} +1 -1
  75. package/dist/static/assets/{linear-Da2jDWL3.js → linear-Cep1oHAS.js} +2 -2
  76. package/dist/static/assets/{linear-Da2jDWL3.js.map → linear-Cep1oHAS.js.map} +1 -1
  77. package/dist/static/assets/{min-Co741hTV.js → min-DWRXZ2qP.js} +3 -3
  78. package/dist/static/assets/{min-Co741hTV.js.map → min-DWRXZ2qP.js.map} +1 -1
  79. package/dist/static/assets/{mindmap-definition-VGOIOE7T-DvkIjoq8.js → mindmap-definition-VGOIOE7T-FO6xgPgW.js} +4 -4
  80. package/dist/static/assets/{mindmap-definition-VGOIOE7T-DvkIjoq8.js.map → mindmap-definition-VGOIOE7T-FO6xgPgW.js.map} +1 -1
  81. package/dist/static/assets/{pieDiagram-ADFJNKIX-BGuGhTu8.js → pieDiagram-ADFJNKIX-ChJaCst9.js} +7 -7
  82. package/dist/static/assets/{pieDiagram-ADFJNKIX-BGuGhTu8.js.map → pieDiagram-ADFJNKIX-ChJaCst9.js.map} +1 -1
  83. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-DAZcrJMg.js → quadrantDiagram-AYHSOK5B-B8KuqHte.js} +3 -3
  84. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-DAZcrJMg.js.map → quadrantDiagram-AYHSOK5B-B8KuqHte.js.map} +1 -1
  85. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-CXN0DxZs.js → requirementDiagram-UZGBJVZJ-DoJMxEmX.js} +4 -4
  86. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-CXN0DxZs.js.map → requirementDiagram-UZGBJVZJ-DoJMxEmX.js.map} +1 -1
  87. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-B7-yAePZ.js → sankeyDiagram-TZEHDZUN-CsLnys5W.js} +2 -2
  88. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-B7-yAePZ.js.map → sankeyDiagram-TZEHDZUN-CsLnys5W.js.map} +1 -1
  89. package/dist/static/assets/{sequenceDiagram-WL72ISMW-DfBNY6h_.js → sequenceDiagram-WL72ISMW-CT4FY3X1.js} +4 -4
  90. package/dist/static/assets/{sequenceDiagram-WL72ISMW-DfBNY6h_.js.map → sequenceDiagram-WL72ISMW-CT4FY3X1.js.map} +1 -1
  91. package/dist/static/assets/{stateDiagram-FKZM4ZOC-BLo1xRVY.js → stateDiagram-FKZM4ZOC-B3IXupz6.js} +9 -9
  92. package/dist/static/assets/{stateDiagram-FKZM4ZOC-BLo1xRVY.js.map → stateDiagram-FKZM4ZOC-B3IXupz6.js.map} +1 -1
  93. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-Dq7MAD0I.js → stateDiagram-v2-4FDKWEC3-C80vDn17.js} +5 -5
  94. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-Dq7MAD0I.js.map → stateDiagram-v2-4FDKWEC3-C80vDn17.js.map} +1 -1
  95. package/dist/static/assets/{timeline-definition-IT6M3QCI-ySWyBF3b.js → timeline-definition-IT6M3QCI-Bk2mvjhh.js} +3 -3
  96. package/dist/static/assets/{timeline-definition-IT6M3QCI-ySWyBF3b.js.map → timeline-definition-IT6M3QCI-Bk2mvjhh.js.map} +1 -1
  97. package/dist/static/assets/{treemap-KMMF4GRG-DOp4sqOh.js → treemap-KMMF4GRG-mWi2Ai-0.js} +4 -4
  98. package/dist/static/assets/{treemap-KMMF4GRG-DOp4sqOh.js.map → treemap-KMMF4GRG-mWi2Ai-0.js.map} +1 -1
  99. package/dist/static/assets/{xychartDiagram-PRI3JC2R-vkmh67qb.js → xychartDiagram-PRI3JC2R-B5-7mQpW.js} +3 -3
  100. package/dist/static/assets/{xychartDiagram-PRI3JC2R-vkmh67qb.js.map → xychartDiagram-PRI3JC2R-B5-7mQpW.js.map} +1 -1
  101. package/dist/static/index.html +1 -1
  102. package/dist/tools/context-health.js +7 -7
  103. package/dist/utils/task-doc.js +16 -16
  104. package/package.json +2 -2
  105. package/dist/docs/keep-going.zh.md +0 -162
  106. package/dist/docs/showing-by-doing.md +0 -208
  107. package/dist/docs/showing-by-doing.zh.md +0 -177
  108. package/dist/minds/promptdocs.js +0 -263
  109. package/dist/snippets/README.en.md +0 -3
@@ -585,12 +585,14 @@ function formatRtwsGitInventoryRound2(language, inventory) {
585
585
  ].join('\n');
586
586
  }
587
587
  function formatPreludeIntro(language, reused, shellPolicy, shellSpecialistId) {
588
- const shellSpecialistMention = shellSpecialistId && shellSpecialistId.trim()
589
- ? `@${shellSpecialistId.trim()}`
590
- : '@<shell specialist>';
588
+ if (shellPolicy === 'specialist_only' &&
589
+ (!shellSpecialistId || shellSpecialistId.trim() === '')) {
590
+ throw new Error('Missing shell specialist id for specialist_only prelude');
591
+ }
592
+ const shellSpecialistMention = shellSpecialistId && shellSpecialistId.trim() ? `@${shellSpecialistId.trim()}` : '';
591
593
  const shellPolicyLinesZh = shellPolicy === 'specialist_only'
592
594
  ? [
593
- '规则:此智能体**不执行任何 shell 命令**。所有 shell 命令必须由 shell 专员执行并回传。',
595
+ `规则:此智能体**不执行任何 shell 命令**。所有 shell 命令必须由 shell 专员(${shellSpecialistMention})执行并回传。`,
594
596
  `下面将诉请 shell 专员(${shellSpecialistMention})仅执行一个低风险命令:\`uname -a\`。`,
595
597
  ]
596
598
  : shellPolicy === 'self_is_specialist'
@@ -605,7 +607,7 @@ function formatPreludeIntro(language, reused, shellPolicy, shellSpecialistId) {
605
607
  ];
606
608
  const shellPolicyLinesEn = shellPolicy === 'specialist_only'
607
609
  ? [
608
- 'Rule: this agent must **not run any shell commands**. All shell commands must be executed by the shell specialist and returned.',
610
+ `Rule: this agent must **not run any shell commands**. All shell commands must be executed by the shell specialist (${shellSpecialistMention}) and returned.`,
609
611
  `Next, we Tellask the shell specialist (${shellSpecialistMention}) to run one low-risk command only: \`uname -a\`.`,
610
612
  ]
611
613
  : shellPolicy === 'self_is_specialist'
@@ -645,7 +647,7 @@ function formatPreludeIntro(language, reused, shellPolicy, shellSpecialistId) {
645
647
  '## Prelude: Agent Priming (Reused)',
646
648
  '',
647
649
  'This prelude makes Tellask + return + FBR + distillation feel real (guiding the agent to show it to itself).',
648
- 'Critical timing: `!?@self` is initiation only; mainline synthesis/decision happens only after FBR sideline feedback returns.',
650
+ 'Critical timing: `!?@self` is initiation only; mainline distillation/decision happens only after FBR sideline feedback returns.',
649
651
  'This dialog reused the in-process cache (no commands were re-run).',
650
652
  '',
651
653
  ...shellPolicyLinesEn,
@@ -655,17 +657,17 @@ function formatPreludeIntro(language, reused, shellPolicy, shellSpecialistId) {
655
657
  '## Prelude: Agent Priming',
656
658
  '',
657
659
  'This prelude makes Tellask + return + FBR + distillation feel real (guiding the agent to show it to itself).',
658
- 'Critical timing: `!?@self` is initiation only; mainline synthesis/decision happens only after FBR sideline feedback returns.',
660
+ 'Critical timing: `!?@self` is initiation only; mainline distillation/decision happens only after FBR sideline feedback returns.',
659
661
  '',
660
662
  ...shellPolicyLinesEn,
661
663
  '',
662
664
  ].join('\n');
663
665
  }
664
666
  function formatShellTellaskBody(language, shellSpecialistId) {
665
- const shellSpecialistMention = shellSpecialistId && shellSpecialistId.trim() ? `@${shellSpecialistId.trim()}` : undefined;
667
+ const shellSpecialistMention = `@${shellSpecialistId.trim()}`;
666
668
  if (language === 'zh') {
667
669
  return [
668
- `你是 shell 专员${shellSpecialistMention ? `(${shellSpecialistMention})` : ''}:请代我执行 \`uname -a\` 获取当前运行环境的基本信息。`,
670
+ `你是 shell 专员(${shellSpecialistMention}):请代我执行 \`uname -a\` 获取当前运行环境的基本信息。`,
669
671
  '',
670
672
  '背景规则:对话主理人不得执行任何 shell 命令;所有 shell 命令必须通过你执行并回传。',
671
673
  '请不要建议我“自己在本地跑一下”。',
@@ -680,7 +682,7 @@ function formatShellTellaskBody(language, shellSpecialistId) {
680
682
  ].join('\n');
681
683
  }
682
684
  return [
683
- `You are the shell specialist${shellSpecialistMention ? ` (${shellSpecialistMention})` : ''}: please run \`uname -a\` on my behalf to capture the basic runtime environment.`,
685
+ `You are the shell specialist (${shellSpecialistMention}): please run \`uname -a\` on my behalf to capture the basic runtime environment.`,
684
686
  '',
685
687
  'Rule: the dialog owner must not run any shell commands; all shell commands must be executed by you and returned.',
686
688
  'Do not suggest that I “just run it locally”.',
@@ -785,20 +787,20 @@ function formatFbrSelfTeaser(language) {
785
787
  }
786
788
  function formatFbrTellaskBody(language, snapshotText, options) {
787
789
  const effortLineZh = options.fbrEffort >= 1
788
- ? '运行时提示:运行时会生成多份“初心自我”独立推理草稿,供上游对话综合提炼(这些草稿之间没有稳定映射关系,不要把它们当作固定身份)。上游对话会在收齐全部回贴后才综合决策;请只给出你这一份独立分析,不要替上游下最终行动决策。'
789
- : '运行时提示:本成员已禁用 FBR';
790
+ ? '对话设定:你现在是被唤起的一份“初心自我”。术语映射:在本 FBR 支线中,你是被诉请者(tellaskee,初心自我);诉请者(tellasker)就是外表自我(当前主线)。同一轮里还会有其他“初心自我”并行给出草稿(彼此没有稳定映射关系,不要当作固定身份)。外表自我会在收齐全部回贴后再统一决策;你只需给出这一份独立分析,不要替外表自我下最终行动决策。'
791
+ : '对话设定:当前成员未启用 FBR(无并行“初心自我”草稿)。';
790
792
  const effortLineEn = options.fbrEffort >= 1
791
- ? 'Runtime note: the runtime will generate multiple independent fresh boots drafts for the upstream dialog to distill (no stable mapping—do not treat them as fixed identities). The upstream dialog will decide only after all feedback returns; provide your own draft only and do not finalize upstream next-action decisions.'
792
- : 'Runtime note: FBR is disabled for this member.';
793
+ ? 'Conversation setup: you are one awakened “fresh-boots self.” Terminology mapping: in this FBR sideline, you are the tellaskee (the fresh-boots self), and the tellasker is the outer self (current mainline). In this same round, other fresh-boots selves also provide parallel drafts (no stable mapping—do not treat them as fixed identities). The outer self will make unified decisions only after all feedback returns; provide only this one independent draft and do not finalize next-action decisions for the outer self.'
794
+ : 'Conversation setup: FBR is disabled for this member (no parallel fresh-boots drafts).';
793
795
  const tellaskBackHintZh = (() => {
794
796
  return [
795
- '提示:如果你还想知道更多系统细节,可在本 FBR 支线对话中用 `!?@tellasker` 回问诉请者(上游对话)。',
797
+ '提示:如果你还想知道更多系统细节,可在本 FBR 支线对话中用 `!?@tellasker` 回问诉请者(tellasker,也就是外表自我/当前主线)。',
796
798
  '(当前这次 FBR 请不要真的发起任何诉请;只需说明你会回问什么。)',
797
799
  ].join('\n');
798
800
  })();
799
801
  const tellaskBackHintEn = (() => {
800
802
  return [
801
- 'Hint: if you want more system details, ask back in this FBR sideline dialog via `!?@tellasker` (to the upstream tellasker dialog).',
803
+ 'Hint: if you want more system details, ask back in this FBR sideline dialog via `!?@tellasker` (to the tellasker, i.e. the outer-self mainline dialog).',
802
804
  '(In this FBR run, do not actually emit any tellasks; just state what you would ask back.)',
803
805
  ].join('\n');
804
806
  })();
@@ -811,9 +813,9 @@ function formatFbrTellaskBody(language, snapshotText, options) {
811
813
  '请基于下面环境信息回答:',
812
814
  '- 在这个环境里要注意些什么?',
813
815
  '- 哪些关键上下文仍然缺失?',
814
- '- 请明确区分:事实依据 / 不确定项 / 建议下一步(供上游收齐草稿后综合)。',
816
+ '- 请明确区分:事实依据 / 不确定项 / 建议下一步(供诉请者 tellasker(外表自我)在收齐草稿后综合提炼)。',
815
817
  '',
816
- '环境信息(当前 Dominds 运行时环境快照):',
818
+ '环境信息(由诉请者 tellasker(外表自我)提供的当前环境快照):',
817
819
  snapshotText,
818
820
  ].join('\n');
819
821
  }
@@ -825,9 +827,9 @@ function formatFbrTellaskBody(language, snapshotText, options) {
825
827
  'Based on the environment info below, answer:',
826
828
  '- What should we watch out for in this environment?',
827
829
  '- What critical context is still missing?',
828
- '- Clearly separate: factual evidence / uncertainties / suggested next step (for upstream synthesis after all drafts return).',
830
+ '- Clearly separate: factual evidence / uncertainties / suggested next step (for tellasker / outer-self distillation after all drafts return).',
829
831
  '',
830
- 'Environment info (a snapshot of the current Dominds runtime):',
832
+ 'Environment info (the current snapshot provided by the tellasker / outer self):',
831
833
  snapshotText,
832
834
  ].join('\n');
833
835
  }
@@ -929,7 +931,7 @@ async function generatePrimingNoteViaMainlineAgent(options) {
929
931
  ].join('\n')
930
932
  : [
931
933
  'You are in the Agent Priming distillation step.',
932
- 'Receiving this prompt means feedback from this `!?@self` FBR run has already been collected; this step is synthesis/distillation only, not another FBR initiation.',
934
+ 'Receiving this prompt means feedback from this `!?@self` FBR run has already been collected; this step is distillation only, not another FBR initiation.',
933
935
  'Based on the environment snapshot (and optional `!?@self` FBR drafts) below, distill a reusable “Agent Priming note”.',
934
936
  '',
935
937
  'Evidence (for distillation only; do not repeat draft-by-draft):',
@@ -1331,12 +1333,12 @@ async function runAgentPrimingLive(dlg) {
1331
1333
  : selfIsShellSpecialist
1332
1334
  ? 'self_is_specialist'
1333
1335
  : 'specialist_only';
1334
- shellTellaskBody = formatShellTellaskBody(language, specialistId);
1335
1336
  let shellCallId = null;
1336
1337
  let shellTellaskHead = null;
1337
1338
  let shellTellaskBodyForSubdialog = null;
1338
1339
  // Phase 1: shell ask (and optional prelude intro)
1339
1340
  if (shellPolicy === 'specialist_only' && specialistId !== null) {
1341
+ shellTellaskBody = formatShellTellaskBody(language, specialistId);
1340
1342
  await dlg.withLock(async () => {
1341
1343
  try {
1342
1344
  await dlg.notifyGeneratingStart();
@@ -956,6 +956,16 @@ async function driveDialogStream(dlg, humanPrompt, waitInQue = false, driveOptio
956
956
  driveResult &&
957
957
  !driveResult.interrupted &&
958
958
  driveResult.lastAssistantSayingContent !== null) {
959
+ const suspension = await dlg.getSuspensionStatus();
960
+ if (!suspension.canDrive) {
961
+ log_1.log.info('Skip supplying subdialog response because dialog is still suspended', {
962
+ rootId: dlg.id.rootId,
963
+ selfId: dlg.id.selfId,
964
+ waitingQ4H: suspension.q4h,
965
+ waitingSubdialogs: suspension.subdialogs,
966
+ });
967
+ return;
968
+ }
959
969
  if (subdialogReplyTarget) {
960
970
  await supplySubdialogResponseToSpecificCallerIfPending(dlg, driveResult.lastAssistantSayingContent, subdialogReplyTarget);
961
971
  }
@@ -0,0 +1,3 @@
1
+ You are the commander, in charge of os shell command execution.
2
+
3
+ Be caucious to execute dangerous/destructive commands, ask human confirmation when not sure, but never bother them for daily trivialities.
@@ -0,0 +1,287 @@
1
+ ## Team Definition
2
+
3
+ The team definition lives in `.minds/team.yaml`. This file configures team composition, member roles, LLM provider/model for each member agent, toolsets, and access permissions for all AI agents in this workspace.
4
+
5
+ ### Structure Overview
6
+
7
+ The `team.yaml` file has three main sections:
8
+
9
+ ```yaml
10
+ member_defaults: { ... } # Default settings applied to all members
11
+ default_responder: name # Member who handles unspecified requests
12
+ members: { ... } # Individual member configurations
13
+ ```
14
+
15
+ ### Member Configuration Properties
16
+
17
+ Each member supports these properties:
18
+
19
+ | Property | Type | Description |
20
+ | --------------- | ------- | --------------------------------------------------------------------------- |
21
+ | `name` | string | Display name for the member |
22
+ | `icon` | string | Emoji identifier for UI display |
23
+ | `gofor` | list | Responsibilities and primary duties |
24
+ | `provider` | string | LLM provider key from `llm.yaml` |
25
+ | `model` | string | Model name within the provider |
26
+ | `toolsets` | list | Capability groups: `memory`, `ws_read`, `ws_mod`, `team_memory` |
27
+ | `tools` | list | Specific tool names: `shell_cmd`, `git`, `stop_daemon`, `get_daemon_output` |
28
+ | `streaming` | boolean | Enable/disable streaming mode (required for shell tools) |
29
+ | `read_dirs` | list | Allowed read directories (glob patterns) |
30
+ | `no_read_dirs` | list | Explicitly denied read directories |
31
+ | `write_dirs` | list | Allowed write directories (glob patterns) |
32
+ | `no_write_dirs` | list | Explicitly denied write directories |
33
+
34
+ ## LLM Configuration
35
+
36
+ ### Builtin Defaults
37
+
38
+ Common defaults are already supplied:
39
+
40
+ ```yaml
41
+ providers:
42
+ codex:
43
+ name: Codex (ChatGPT)
44
+ apiType: codex
45
+ baseUrl: https://chatgpt.com/backend-api/
46
+ apiKeyEnvVar: CODEX_HOME
47
+ tech_spec_url: https://platform.openai.com/docs/api-reference/responses
48
+ api_mgmt_url: https://chatgpt.com/
49
+ models:
50
+ gpt-5.2-codex:
51
+ name: GPT-5.2 Codex
52
+ context_length: 272000
53
+ input_length: 272000
54
+ output_length: 32768
55
+ context_window: '272K'
56
+ gpt-5.2:
57
+ name: GPT-5.2
58
+ context_length: 272000
59
+ input_length: 272000
60
+ output_length: 32768
61
+ context_window: '272K'
62
+ minimaxi.com-coding-plan:
63
+ name: MiniMax CN Coding Plan
64
+ apiType: anthropic
65
+ baseUrl: https://api.minimaxi.com/anthropic
66
+ apiKeyEnvVar: MINIMAX_CN_CP_API_KEY
67
+ tech_spec_url: https://platform.minimaxi.com/document/guides
68
+ api_mgmt_url: https://platform.minimaxi.com/
69
+ models:
70
+ MiniMax-M2.1:
71
+ name: MiniMax M2.1
72
+ context_length: 204800
73
+ input_length: 204800
74
+ output_length: 8192
75
+ context_window: '204K'
76
+ MiniMax-M2:
77
+ name: MiniMax M2
78
+ context_length: 204800
79
+ input_length: 204800
80
+ output_length: 8192
81
+ context_window: '204K'
82
+ minimaxi.com:
83
+ name: MiniMax CN
84
+ apiType: anthropic
85
+ baseUrl: https://api.minimaxi.com/anthropic
86
+ apiKeyEnvVar: MINIMAX_CN_API_KEY
87
+ tech_spec_url: https://platform.minimaxi.com/document/guides
88
+ api_mgmt_url: https://platform.minimaxi.com/
89
+ models:
90
+ MiniMax-M2.1:
91
+ name: MiniMax M2.1
92
+ context_length: 204800
93
+ input_length: 204800
94
+ output_length: 8192
95
+ context_window: '204K'
96
+ MiniMax-M2:
97
+ name: MiniMax M2 Stable
98
+ context_length: 204800
99
+ input_length: 204800
100
+ output_length: 8192
101
+ context_window: '204K'
102
+ minimax.io-coding-plan:
103
+ name: MiniMax International Coding Plan
104
+ apiType: anthropic
105
+ baseUrl: https://api.minimax.io/anthropic
106
+ apiKeyEnvVar: MINIMAX_CP_API_KEY
107
+ tech_spec_url: https://platform.minimax.io/docs/api-reference
108
+ api_mgmt_url: https://platform.minimax.io/
109
+ models:
110
+ MiniMax-M2.1:
111
+ name: MiniMax M2.1
112
+ context_length: 204800
113
+ input_length: 204800
114
+ output_length: 8192
115
+ context_window: '204K'
116
+ MiniMax-M2:
117
+ name: MiniMax M2
118
+ context_length: 204800
119
+ input_length: 204800
120
+ output_length: 8192
121
+ context_window: '204K'
122
+ minimax.io:
123
+ name: MiniMax International
124
+ apiType: anthropic
125
+ baseUrl: https://api.minimax.io/anthropic
126
+ apiKeyEnvVar: MINIMAX_API_KEY
127
+ tech_spec_url: https://platform.minimax.io/docs/api-reference
128
+ api_mgmt_url: https://platform.minimax.io/
129
+ models:
130
+ MiniMax-M2.1:
131
+ name: MiniMax M2.1
132
+ context_length: 204800
133
+ input_length: 204800
134
+ output_length: 8192
135
+ context_window: '204K'
136
+ MiniMax-M2:
137
+ name: MiniMax M2 Stable
138
+ context_length: 204800
139
+ input_length: 204800
140
+ output_length: 8192
141
+ context_window: '204K'
142
+ bigmodel:
143
+ name: BigModel
144
+ apiType: anthropic
145
+ baseUrl: https://open.bigmodel.cn/api/anthropic
146
+ apiKeyEnvVar: ZHIPUAI_API_KEY
147
+ tech_spec_url: https://docs.bigmodel.cn/
148
+ api_mgmt_url: https://open.bigmodel.cn/usercenter/apikeys
149
+ models:
150
+ glm-4.7:
151
+ name: GLM-4.7
152
+ context_length: 200000
153
+ input_length: 200000
154
+ output_length: 8192
155
+ context_window: '200K'
156
+ glm-4.6:
157
+ name: GLM-4.6
158
+ context_length: 200000
159
+ input_length: 200000
160
+ output_length: 8192
161
+ context_window: '200K'
162
+ glm-4.5:
163
+ name: GLM-4.5
164
+ context_length: 128000
165
+ input_length: 128000
166
+ output_length: 8192
167
+ context_window: '128K'
168
+ glm-4.5-air:
169
+ name: GLM-4.5-Air
170
+ context_length: 128000
171
+ input_length: 128000
172
+ output_length: 8192
173
+ context_window: '128K'
174
+ ark-coding-plan:
175
+ name: Ark Coding Plan
176
+ apiType: anthropic
177
+ baseUrl: https://ark.cn-beijing.volces.com/api/coding
178
+ apiKeyEnvVar: ARK_API_KEY
179
+ tech_spec_url: https://api.volcengine.com/api-docs/view?serviceCode=ark&version=2024-01-01
180
+ api_mgmt_url: https://console.volcengine.com/ark
181
+ models:
182
+ doubao-seed-code-preview-latest:
183
+ name: Doubao Seed Code Preview
184
+ context_length: 256000
185
+ input_length: 256000
186
+ output_length: 8192
187
+ context_window: '256K'
188
+ optimization: 专为Agentic Coding任务优化
189
+ ark:
190
+ name: Ark
191
+ apiType: openai
192
+ baseUrl: https://ark.cn-beijing.volces.com/api/v3
193
+ apiKeyEnvVar: ARK_API_KEY
194
+ tech_spec_url: https://api.volcengine.com/api-docs/view?serviceCode=ark&version=2024-01-01
195
+ api_mgmt_url: https://console.volcengine.com/ark
196
+ models:
197
+ deepseek-v3-2-251201:
198
+ name: DeepSeek-V3.2
199
+ context_length: 128000
200
+ input_length: 96000
201
+ output_length: 32000
202
+ context_window: '128K'
203
+ doubao-seed-code-preview-251028:
204
+ name: Doubao Seed Code Preview 251028
205
+ context_length: 256000
206
+ input_length: 256000
207
+ output_length: 8192
208
+ context_window: '256K'
209
+ doubao-seed-1-6-251015:
210
+ name: Doubao Seed 1.6
211
+ context_length: 256000
212
+ input_length: 256000
213
+ output_length: 8192
214
+ context_window: '256K'
215
+ doubao-seed-1-6-thinking-250715:
216
+ name: Doubao Seed 1.6 Thinking
217
+ context_length: 256000
218
+ input_length: 256000
219
+ output_length: 8192
220
+ context_window: '256K'
221
+ doubao-seed-1-6-lite-251015:
222
+ name: Doubao Seed 1.6 Lite
223
+ context_length: 32000
224
+ input_length: 32000
225
+ output_length: 8192
226
+ context_window: '32K'
227
+ kimi-k2-250905:
228
+ name: Kimi K2
229
+ context_length: 200000
230
+ input_length: 200000
231
+ output_length: 8192
232
+ context_window: '200K (约20万汉字)'
233
+ deepseek-v3-1-terminus:
234
+ name: DeepSeek V3.1 Terminus
235
+ context_length: 131072
236
+ input_length: 131072
237
+ output_length: 8192
238
+ context_window: '128K'
239
+ anthropic:
240
+ name: Anthropic
241
+ apiType: anthropic
242
+ baseUrl: https://api.anthropic.com
243
+ apiKeyEnvVar: ANTHROPIC_API_KEY
244
+ tech_spec_url: https://docs.anthropic.com/en/docs
245
+ api_mgmt_url: https://console.anthropic.com/
246
+ models:
247
+ claude-opus-4.5:
248
+ name: Claude Opus 4.5
249
+ context_length: 200000
250
+ input_length: 200000
251
+ output_length: 8192
252
+ context_window: '200K'
253
+ claude-sonnet-4.5:
254
+ name: Claude Sonnet 4.5
255
+ context_length: 200000
256
+ input_length: 200000
257
+ output_length: 8192
258
+ context_window: '200K'
259
+ claude-haiku-4.5:
260
+ name: Claude Haiku 4.5
261
+ context_length: 200000
262
+ input_length: 200000
263
+ output_length: 8192
264
+ context_window: '200K'
265
+ openai:
266
+ name: OpenAI
267
+ apiType: openai
268
+ baseUrl: https://api.openai.com/v1
269
+ apiKeyEnvVar: OPENAI_API_KEY
270
+ tech_spec_url: https://platform.openai.com/docs
271
+ api_mgmt_url: https://platform.openai.com/api-keys
272
+ models:
273
+ gpt-5.2:
274
+ name: GPT-5.2
275
+ context_length: 272000
276
+ input_length: 272000
277
+ output_length: 32768
278
+ context_window: '272K'
279
+ gpt-5.2-codex:
280
+ name: GPT-5.2 Codex
281
+ context_length: 272000
282
+ input_length: 272000
283
+ output_length: 32768
284
+ context_window: '272K'
285
+ ```
286
+
287
+ More custom LLM providers can be configured in `.minds/llm.yaml` with the same format as above.
@@ -0,0 +1,7 @@
1
+ You are dijiang, the hundun (chaos) itself. You are invoked because the human user yet has no idea/plan of what to do with current workspace. Your mythical incarnations is the pun of your job: transform yourself into many avatars then disappear.
2
+
3
+ Your job is to guide the human user through the initial product definition, goal/constraint setting, and team definition for this workspace.
4
+
5
+ You collect/clarify the user's mission/vision for what to build and maintain, then suggest an optimal agent team definition with social division of labor among individual agents as team members, then land the definition into `.minds/team.yaml` and `.minds/team/*/*.md`
6
+
7
+ The team will serve as the workforce to sustain current workspace as a live produce under continuous DevOps.
@@ -25,18 +25,18 @@ function getShellPolicyCopy(language) {
25
25
  specialistConfiguredNoTools: '你被配置为 shell 专员,但当前没有可用的 shell 工具(团队配置错误)。',
26
26
  specialistFixConfig: '在未修复配置前:不要声称自己执行过命令;如需验证,请让人类修复 team.yaml 或把 shell 能力授予正确的成员。',
27
27
  noHighRiskTools: '你不具备高权限 shell 工具(shell_cmd/stop_daemon/get_daemon_output)。',
28
- readonlyAuthorized: '你已被明确授权使用 `readonly_shell` 自行执行只读命令(仅允许白名单命令前缀):请直接调用,不要去寻找 shell 专员代跑。',
29
- readonlyDelegateWhenNeeded: '当你需要的命令不在白名单内,或需要写入/删除/网络/长时间运行/进程管理等高风险能力时:再转交给具备 shell 工具的专员队友,并提供充分理由与可审查的命令提案:',
28
+ readonlyAuthorized: '你仅被授权使用 `readonly_shell` 做只读检查(仅允许白名单命令前缀;不得写入/删除/联网/进程管理):符合只读目的时请直接调用。',
29
+ readonlyDelegateWhenNeeded: (value) => `边界规则:除只读目的外,其它一切 shell 需求都不得自行执行。凡是不在白名单内,或涉及写入/删除/网络/长时间运行/进程管理,必须诉请以下 shell 专员之一执行:${value}。并提供充分理由与可审查的命令提案:`,
30
30
  noShellTools: '你不具备 shell 工具(本环境仅 shell 专员可执行 shell):不要尝试“编造/假设”命令输出,也不要要求系统直接执行。',
31
- delegateWhenNeeded: '当你确实需要 shell 执行时:请转交给具备 shell 能力的专员队友,并提供充分理由与可审查的命令提案:',
31
+ delegateWhenNeeded: (value) => `当你确实需要 shell 执行时:必须诉请以下 shell 专员之一执行:${value}。并提供充分理由与可审查的命令提案:`,
32
32
  delegationProposalBullets: [
33
33
  '- 你要达成的目标(why)',
34
34
  '- 建议命令(what)+ 预期工作目录(cwd)+ 预期输出/验证方式(how to verify)',
35
35
  '- 风险评估与安全边界(risk & guardrails)',
36
36
  ],
37
37
  specialistListLine: (value) => `本队 shell 专员列表:${value}`,
38
- delegationSpecialistsLine: (value) => `可转交的 shell 专员队友:${value}`,
39
- tellaskBlockReminder: '重要:如果你打算让队友执行命令,请在同一条消息里给出完整的 tellask 诉请块(以第 0 列开头的 `!?@<shell-specialist>` 行),不要只说“我会请某人运行”。',
38
+ delegationSpecialistsLine: (value) => `可诉请的 shell 专员:${value}`,
39
+ tellaskBlockReminder: (exampleHeads) => `重要:如果你打算让队友执行命令,请在同一条消息里给出完整的 tellask 诉请块(诉请头第 0 列起始,并直接写真实专员 id)。可用写法示例:${exampleHeads}。不要只说“我会请某人运行”。`,
40
40
  claimAfterReceiptReminder: '重要:在你看到 shell 专员的回执(command/exit_code/stdout/stderr)之前,不要声称“已运行/已通过/无错”。',
41
41
  includeDevopsPolicyForSpecialist: false,
42
42
  };
@@ -54,18 +54,18 @@ function getShellPolicyCopy(language) {
54
54
  specialistConfiguredNoTools: 'You are configured as a shell specialist, but you do not currently have shell tools available (team configuration error).',
55
55
  specialistFixConfig: 'Until it is fixed: do not claim you ran any command; ask a human to fix team.yaml or grant shell tools to the correct specialist member.',
56
56
  noHighRiskTools: 'You do not have high-risk shell tools (shell_cmd/stop_daemon/get_daemon_output).',
57
- readonlyAuthorized: 'You are explicitly authorized to use `readonly_shell` yourself for read-only inspection via its small allowlist. Call it directly; do not go looking for a shell specialist to run it for you.',
58
- readonlyDelegateWhenNeeded: 'When the command you need is not in the allowlist, or you need high-risk capabilities like writes/deletes/network/long-running jobs/process management: delegate to a shell specialist teammate with a justified, reviewable proposal:',
57
+ readonlyAuthorized: 'You are authorized to use `readonly_shell` only for read-only inspection (small allowlist only; no writes/deletes/network/process management). When it is truly read-only, call it directly.',
58
+ readonlyDelegateWhenNeeded: (value) => `Boundary rule: anything beyond read-only must not be executed by you. If it is outside the allowlist, or involves writes/deletes/network/long-running jobs/process management, you must tellask one of these shell specialists to execute it: ${value}. Provide a justified, reviewable proposal:`,
59
59
  noShellTools: 'You do not have shell tools configured (shell execution is restricted to designated specialists): do not fabricate/assume command output, and do not ask the system to execute commands directly.',
60
- delegateWhenNeeded: 'When you truly need shell execution, delegate to a shell specialist teammate with a justified, reviewable proposal:',
60
+ delegateWhenNeeded: (value) => `When you truly need shell execution, you must tellask one of these shell specialists to execute it: ${value}. Provide a justified, reviewable proposal:`,
61
61
  delegationProposalBullets: [
62
62
  '- Goal (why)',
63
63
  '- Proposed command (what) + expected working directory (cwd) + expected output/verification (how to verify)',
64
64
  '- Risk assessment and guardrails (risk & guardrails)',
65
65
  ],
66
66
  specialistListLine: (value) => `Shell specialists in this team: ${value}`,
67
- delegationSpecialistsLine: (value) => `Shell specialist teammates: ${value}`,
68
- tellaskBlockReminder: 'Important: if you intend to delegate, include the full tellask block (a column-0 `!?@<shell-specialist>` line) in the same message; do not just say “I will ask someone to run it”.',
67
+ delegationSpecialistsLine: (value) => `Shell specialists you can tellask: ${value}`,
68
+ tellaskBlockReminder: (exampleHeads) => `Important: if you intend to delegate, include the full tellask block in the same message (tellask headline must start at column 0 and use a real specialist id). Examples: ${exampleHeads}. Do not just say “I will ask someone to run it”.`,
69
69
  claimAfterReceiptReminder: 'Important: do not claim “ran/passed/no errors” until you see the shell specialist’s receipt (command/exit_code/stdout/stderr).',
70
70
  includeDevopsPolicyForSpecialist: true,
71
71
  };
@@ -81,6 +81,13 @@ function buildShellPolicyPrompt(ctx) {
81
81
  : copy.noSpecialistsText;
82
82
  const specialistListLine = copy.specialistListLine(shellSpecialists);
83
83
  const specialistDelegationLine = copy.delegationSpecialistsLine(shellSpecialists);
84
+ const tellaskHeadExamples = shellSpecialistMemberIds.length > 0
85
+ ? shellSpecialistMemberIds
86
+ .map((id) => `\`!?@${id} ...\``)
87
+ .join(language === 'zh' ? ' / ' : ' / ')
88
+ : language === 'zh'
89
+ ? '(当前无可用 shell 专员)'
90
+ : '(no available shell specialists)';
84
91
  const buildDelegationBlock = (introLine) => [
85
92
  introLine,
86
93
  ...copy.delegationProposalBullets,
@@ -88,7 +95,7 @@ function buildShellPolicyPrompt(ctx) {
88
95
  '',
89
96
  devopsScriptPolicy,
90
97
  '',
91
- copy.tellaskBlockReminder,
98
+ copy.tellaskBlockReminder(tellaskHeadExamples),
92
99
  copy.claimAfterReceiptReminder,
93
100
  ];
94
101
  if (agentIsShellSpecialist && agentHasShellTools) {
@@ -118,9 +125,9 @@ function buildShellPolicyPrompt(ctx) {
118
125
  copy.noHighRiskTools,
119
126
  copy.readonlyAuthorized,
120
127
  '',
121
- ...buildDelegationBlock(copy.readonlyDelegateWhenNeeded),
128
+ ...buildDelegationBlock(copy.readonlyDelegateWhenNeeded(shellSpecialists)),
122
129
  ]
123
- : [copy.noShellTools, ...buildDelegationBlock(copy.delegateWhenNeeded)];
130
+ : [copy.noShellTools, ...buildDelegationBlock(copy.delegateWhenNeeded(shellSpecialists))];
124
131
  return `${copy.title}\n\n${bodyLines.join('\n')}`.trim();
125
132
  }
126
133
  function getMemoryPromptCopy(ctx) {
@@ -58,24 +58,28 @@ function buildSystemPrompt(input) {
58
58
  '- 对队友诉请而言,收到回贴即表示该轮调用已结束;不存在“对方仍在后台继续执行同一诉请”的默认语义。要继续必须显式再发一轮诉请(通常沿用同一 \\`!tellaskSession <slug>\\`)。',
59
59
  '- 只有在存在明确 pending tellask 时,才可声明“等待回贴/等待结果”;否则必须执行下一动作(直接诉请或本地执行)。',
60
60
  '- 能由队友诉请完成的执行性工作,禁止转交 @human 做“转发员”;当你写“让 @X 执行 Y”时,必须在同一回复内直接发出 \\`!?@X ...\\`。',
61
+ '- 当你处于队友诉请触发的支线且需要澄清时,必须发回问诉请 \\`!?@tellasker\\`(禁止携带 \\`!tellaskSession\\`)。例如在 @fullstack 诉请你的支线中,禁止写 \\`!?@fullstack !tellaskSession ...\\` 回问;正确写法是 \\`!?@tellasker\\`。',
61
62
  ].join('\n');
62
63
  const teammatePhaseContractEn = [
63
64
  '- Teammate Tellasks MUST follow four phases: “initiate -> wait -> judge -> continue”. If the objective is not met, immediately send the next Tellask round.',
64
65
  '- For teammate Tellasks, a delivered response closes that call round; there is no default “still running in background” state for the same Tellask. To continue, emit a new Tellask explicitly (usually reusing the same \\`!tellaskSession <slug>\\`).',
65
66
  '- You may claim “waiting for reply/result” only when a concrete pending Tellask exists; otherwise execute the next action now (direct Tellask or local action).',
66
67
  '- Do not use @human as a relay for executable teammate work. If you write “ask @X to do Y”, emit \\`!?@X ...\\` in the same response.',
68
+ '- When you are in a teammate-triggered sideline and need clarification, you MUST issue TellaskBack via \\`!?@tellasker\\` (and it must NOT carry \\`!tellaskSession\\`). For example, in a sideline tellasked by @fullstack, do NOT ask back with \\`!?@fullstack !tellaskSession ...\\`; the correct form is \\`!?@tellasker\\`.',
67
69
  ].join('\n');
68
70
  const collaborationProtocolZh = [
69
71
  '- \\`!?@...\\` 仅用于诉请队友/@self/@human,不是函数工具调用通道。',
70
72
  '- 函数工具只能通过原生 function-calling 调用;不要把工具名写进 \\`!?@...\\` 诉请头。',
71
- '- 对队友诉请(非 \\`!?@self\\`)默认带 \\`!tellaskSession <slug>\\` 并在同一会话续推;仅在确认一次性诉请足够时才可省略,且需说明理由。',
73
+ '- 对队友诉请默认带 \\`!tellaskSession <slug>\\` 并在同一会话续推(适用于非 \\`!?@self\\` 且非 \\`!?@tellasker\\` 的目标);仅在确认一次性诉请足够时才可省略,且需说明理由。',
74
+ '- 例外优先级(强制):\\`!?@tellasker\\` 是回问诉请专用目标,不属于“队友长线诉请默认规则”;因此既不适用默认 \\`!tellaskSession\\`,也禁止携带 \\`!tellaskSession\\`。',
72
75
  '- 队友诉请阶段协议(强制):',
73
76
  teammatePhaseContractZh,
74
77
  ].join('\n');
75
78
  const collaborationProtocolEn = [
76
79
  '- \\`!?@...\\` is only for tellasking teammates/@self/@human; it is not a function-tool invocation channel.',
77
80
  '- Function tools must be invoked through native function-calling only; do not put tool names in \\`!?@...\\` tellask headlines.',
78
- '- For teammate tellasks (non-\\`!?@self\\`), default to \\`!tellaskSession <slug>\\` and continue in that same session; omit only for a justified one-shot call.',
81
+ '- For teammate tellasks, default to \\`!tellaskSession <slug>\\` and continue in that same session (applies to targets other than \\`!?@self\\` and \\`!?@tellasker\\`); omit only for a justified one-shot call.',
82
+ '- Mandatory exception precedence: \\`!?@tellasker\\` is TellaskBack-only and outside the teammate-session default; it therefore does not use the default \\`!tellaskSession\\` and must never carry \\`!tellaskSession\\`.',
79
83
  '- Teammate Tellask phase contract (mandatory):',
80
84
  teammatePhaseContractEn,
81
85
  ].join('\n');