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.
- package/dist/agent-priming.js +24 -22
- package/dist/llm/driver.js +10 -0
- package/dist/minds/builtin/cmdr/persona.md +3 -0
- package/dist/minds/builtin/dijiang/knowledge.md +287 -0
- package/dist/minds/builtin/dijiang/persona.md +7 -0
- package/dist/minds/system-prompt-parts.js +20 -13
- package/dist/minds/system-prompt.js +6 -2
- package/dist/server/api-routes.js +28 -71
- package/dist/server/websocket-handler.js +5 -1
- package/dist/showing-by-doing.js +31 -34
- package/dist/static/assets/{_baseUniq-C7IpU2Uk.js → _baseUniq-DucuKHj3.js} +2 -2
- package/dist/static/assets/{_baseUniq-C7IpU2Uk.js.map → _baseUniq-DucuKHj3.js.map} +1 -1
- package/dist/static/assets/{arc-1bhQqjON.js → arc-CNlZ9dTp.js} +2 -2
- package/dist/static/assets/{arc-1bhQqjON.js.map → arc-CNlZ9dTp.js.map} +1 -1
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-CkEi1QpB.js → architectureDiagram-VXUJARFQ-BXkEOfVt.js} +6 -6
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-CkEi1QpB.js.map → architectureDiagram-VXUJARFQ-BXkEOfVt.js.map} +1 -1
- package/dist/static/assets/{blockDiagram-VD42YOAC-DaBQ5-pY.js → blockDiagram-VD42YOAC-CyxI2bRF.js} +7 -7
- package/dist/static/assets/{blockDiagram-VD42YOAC-DaBQ5-pY.js.map → blockDiagram-VD42YOAC-CyxI2bRF.js.map} +1 -1
- package/dist/static/assets/{c4Diagram-YG6GDRKO-ChUgpgkP.js → c4Diagram-YG6GDRKO-sS8T1IDn.js} +3 -3
- package/dist/static/assets/{c4Diagram-YG6GDRKO-ChUgpgkP.js.map → c4Diagram-YG6GDRKO-sS8T1IDn.js.map} +1 -1
- package/dist/static/assets/{channel-CxvmwllM.js → channel-DBu0JRwo.js} +2 -2
- package/dist/static/assets/{channel-CxvmwllM.js.map → channel-DBu0JRwo.js.map} +1 -1
- package/dist/static/assets/{chunk-4BX2VUAB-CKsrU2yk.js → chunk-4BX2VUAB-D499BCnz.js} +2 -2
- package/dist/static/assets/{chunk-4BX2VUAB-CKsrU2yk.js.map → chunk-4BX2VUAB-D499BCnz.js.map} +1 -1
- package/dist/static/assets/{chunk-55IACEB6-BAau9SFt.js → chunk-55IACEB6-Dbe3sqC4.js} +2 -2
- package/dist/static/assets/{chunk-55IACEB6-BAau9SFt.js.map → chunk-55IACEB6-Dbe3sqC4.js.map} +1 -1
- package/dist/static/assets/{chunk-B4BG7PRW--IiJ7W1m.js → chunk-B4BG7PRW-BHkSNS9y.js} +5 -5
- package/dist/static/assets/{chunk-B4BG7PRW--IiJ7W1m.js.map → chunk-B4BG7PRW-BHkSNS9y.js.map} +1 -1
- package/dist/static/assets/{chunk-DI55MBZ5-B83KrPQj.js → chunk-DI55MBZ5-idwTV08g.js} +4 -4
- package/dist/static/assets/{chunk-DI55MBZ5-B83KrPQj.js.map → chunk-DI55MBZ5-idwTV08g.js.map} +1 -1
- package/dist/static/assets/{chunk-FMBD7UC4-BlDXzeza.js → chunk-FMBD7UC4-DLYv0YzD.js} +2 -2
- package/dist/static/assets/{chunk-FMBD7UC4-BlDXzeza.js.map → chunk-FMBD7UC4-DLYv0YzD.js.map} +1 -1
- package/dist/static/assets/{chunk-QN33PNHL-B596W_v7.js → chunk-QN33PNHL-DIC5_nYD.js} +2 -2
- package/dist/static/assets/{chunk-QN33PNHL-B596W_v7.js.map → chunk-QN33PNHL-DIC5_nYD.js.map} +1 -1
- package/dist/static/assets/{chunk-QZHKN3VN-UBBCxgBb.js → chunk-QZHKN3VN-DM_s2fcN.js} +2 -2
- package/dist/static/assets/{chunk-QZHKN3VN-UBBCxgBb.js.map → chunk-QZHKN3VN-DM_s2fcN.js.map} +1 -1
- package/dist/static/assets/{chunk-TZMSLE5B-D-wCX2wJ.js → chunk-TZMSLE5B-BjrSLFBO.js} +2 -2
- package/dist/static/assets/{chunk-TZMSLE5B-D-wCX2wJ.js.map → chunk-TZMSLE5B-BjrSLFBO.js.map} +1 -1
- package/dist/static/assets/{classDiagram-2ON5EDUG-DvtmzPcu.js → classDiagram-2ON5EDUG-CSPkR9uh.js} +6 -6
- package/dist/static/assets/{classDiagram-2ON5EDUG-DvtmzPcu.js.map → classDiagram-2ON5EDUG-CSPkR9uh.js.map} +1 -1
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-DvtmzPcu.js → classDiagram-v2-WZHVMYZB-CSPkR9uh.js} +6 -6
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-DvtmzPcu.js.map → classDiagram-v2-WZHVMYZB-CSPkR9uh.js.map} +1 -1
- package/dist/static/assets/{clone-DgJ0ZR-k.js → clone-DO2rSUBP.js} +2 -2
- package/dist/static/assets/{clone-DgJ0ZR-k.js.map → clone-DO2rSUBP.js.map} +1 -1
- package/dist/static/assets/{cose-bilkent-S5V4N54A-DXMyFQvy.js → cose-bilkent-S5V4N54A-CyS4z2hF.js} +2 -2
- package/dist/static/assets/{cose-bilkent-S5V4N54A-DXMyFQvy.js.map → cose-bilkent-S5V4N54A-CyS4z2hF.js.map} +1 -1
- package/dist/static/assets/{dagre-6UL2VRFP-BdaUG-j_.js → dagre-6UL2VRFP-CvybKTFb.js} +7 -7
- package/dist/static/assets/{dagre-6UL2VRFP-BdaUG-j_.js.map → dagre-6UL2VRFP-CvybKTFb.js.map} +1 -1
- package/dist/static/assets/{diagram-PSM6KHXK-NLiqKBzn.js → diagram-PSM6KHXK-Cl2rD6o-.js} +7 -7
- package/dist/static/assets/{diagram-PSM6KHXK-NLiqKBzn.js.map → diagram-PSM6KHXK-Cl2rD6o-.js.map} +1 -1
- package/dist/static/assets/{diagram-QEK2KX5R-D-0fyvY_.js → diagram-QEK2KX5R-RCrqu1G0.js} +6 -6
- package/dist/static/assets/{diagram-QEK2KX5R-D-0fyvY_.js.map → diagram-QEK2KX5R-RCrqu1G0.js.map} +1 -1
- package/dist/static/assets/{diagram-S2PKOQOG-BQ_FU59m.js → diagram-S2PKOQOG-BeHOCxq7.js} +6 -6
- package/dist/static/assets/{diagram-S2PKOQOG-BQ_FU59m.js.map → diagram-S2PKOQOG-BeHOCxq7.js.map} +1 -1
- package/dist/static/assets/{erDiagram-Q2GNP2WA-DyftKeuC.js → erDiagram-Q2GNP2WA-MdKfm7lU.js} +5 -5
- package/dist/static/assets/{erDiagram-Q2GNP2WA-DyftKeuC.js.map → erDiagram-Q2GNP2WA-MdKfm7lU.js.map} +1 -1
- package/dist/static/assets/{flowDiagram-NV44I4VS-9SGefONA.js → flowDiagram-NV44I4VS-DNo7ZxVC.js} +6 -6
- package/dist/static/assets/{flowDiagram-NV44I4VS-9SGefONA.js.map → flowDiagram-NV44I4VS-DNo7ZxVC.js.map} +1 -1
- package/dist/static/assets/{ganttDiagram-JELNMOA3-k_WLhf-r.js → ganttDiagram-JELNMOA3-Bxs02jb2.js} +3 -3
- package/dist/static/assets/{ganttDiagram-JELNMOA3-k_WLhf-r.js.map → ganttDiagram-JELNMOA3-Bxs02jb2.js.map} +1 -1
- package/dist/static/assets/{gitGraphDiagram-NY62KEGX-3eoLlCOY.js → gitGraphDiagram-NY62KEGX-BJsaVPOp.js} +7 -7
- package/dist/static/assets/{gitGraphDiagram-NY62KEGX-3eoLlCOY.js.map → gitGraphDiagram-NY62KEGX-BJsaVPOp.js.map} +1 -1
- package/dist/static/assets/{graph-vUevIs4s.js → graph-DBSDya0j.js} +3 -3
- package/dist/static/assets/{graph-vUevIs4s.js.map → graph-DBSDya0j.js.map} +1 -1
- package/dist/static/assets/{index-BNBG2CE1.js → index-gn-aSKfG.js} +138 -144
- package/dist/static/assets/{index-BNBG2CE1.js.map → index-gn-aSKfG.js.map} +1 -1
- package/dist/static/assets/{infoDiagram-WHAUD3N6-CwEhVxkU.js → infoDiagram-WHAUD3N6-D4Hvl0bK.js} +5 -5
- package/dist/static/assets/{infoDiagram-WHAUD3N6-CwEhVxkU.js.map → infoDiagram-WHAUD3N6-D4Hvl0bK.js.map} +1 -1
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-Dtdq4G4Q.js → journeyDiagram-XKPGCS4Q-B3YmIoCv.js} +5 -5
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-Dtdq4G4Q.js.map → journeyDiagram-XKPGCS4Q-B3YmIoCv.js.map} +1 -1
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-Bli-AycJ.js → kanban-definition-3W4ZIXB7-dGCbR9Ty.js} +3 -3
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-Bli-AycJ.js.map → kanban-definition-3W4ZIXB7-dGCbR9Ty.js.map} +1 -1
- package/dist/static/assets/{layout-CGlA8c09.js → layout-D7y0xA6C.js} +5 -5
- package/dist/static/assets/{layout-CGlA8c09.js.map → layout-D7y0xA6C.js.map} +1 -1
- package/dist/static/assets/{linear-Da2jDWL3.js → linear-Cep1oHAS.js} +2 -2
- package/dist/static/assets/{linear-Da2jDWL3.js.map → linear-Cep1oHAS.js.map} +1 -1
- package/dist/static/assets/{min-Co741hTV.js → min-DWRXZ2qP.js} +3 -3
- package/dist/static/assets/{min-Co741hTV.js.map → min-DWRXZ2qP.js.map} +1 -1
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-DvkIjoq8.js → mindmap-definition-VGOIOE7T-FO6xgPgW.js} +4 -4
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-DvkIjoq8.js.map → mindmap-definition-VGOIOE7T-FO6xgPgW.js.map} +1 -1
- package/dist/static/assets/{pieDiagram-ADFJNKIX-BGuGhTu8.js → pieDiagram-ADFJNKIX-ChJaCst9.js} +7 -7
- package/dist/static/assets/{pieDiagram-ADFJNKIX-BGuGhTu8.js.map → pieDiagram-ADFJNKIX-ChJaCst9.js.map} +1 -1
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-DAZcrJMg.js → quadrantDiagram-AYHSOK5B-B8KuqHte.js} +3 -3
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-DAZcrJMg.js.map → quadrantDiagram-AYHSOK5B-B8KuqHte.js.map} +1 -1
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-CXN0DxZs.js → requirementDiagram-UZGBJVZJ-DoJMxEmX.js} +4 -4
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-CXN0DxZs.js.map → requirementDiagram-UZGBJVZJ-DoJMxEmX.js.map} +1 -1
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-B7-yAePZ.js → sankeyDiagram-TZEHDZUN-CsLnys5W.js} +2 -2
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-B7-yAePZ.js.map → sankeyDiagram-TZEHDZUN-CsLnys5W.js.map} +1 -1
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-DfBNY6h_.js → sequenceDiagram-WL72ISMW-CT4FY3X1.js} +4 -4
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-DfBNY6h_.js.map → sequenceDiagram-WL72ISMW-CT4FY3X1.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-BLo1xRVY.js → stateDiagram-FKZM4ZOC-B3IXupz6.js} +9 -9
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-BLo1xRVY.js.map → stateDiagram-FKZM4ZOC-B3IXupz6.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-Dq7MAD0I.js → stateDiagram-v2-4FDKWEC3-C80vDn17.js} +5 -5
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-Dq7MAD0I.js.map → stateDiagram-v2-4FDKWEC3-C80vDn17.js.map} +1 -1
- package/dist/static/assets/{timeline-definition-IT6M3QCI-ySWyBF3b.js → timeline-definition-IT6M3QCI-Bk2mvjhh.js} +3 -3
- package/dist/static/assets/{timeline-definition-IT6M3QCI-ySWyBF3b.js.map → timeline-definition-IT6M3QCI-Bk2mvjhh.js.map} +1 -1
- package/dist/static/assets/{treemap-KMMF4GRG-DOp4sqOh.js → treemap-KMMF4GRG-mWi2Ai-0.js} +4 -4
- package/dist/static/assets/{treemap-KMMF4GRG-DOp4sqOh.js.map → treemap-KMMF4GRG-mWi2Ai-0.js.map} +1 -1
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-vkmh67qb.js → xychartDiagram-PRI3JC2R-B5-7mQpW.js} +3 -3
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-vkmh67qb.js.map → xychartDiagram-PRI3JC2R-B5-7mQpW.js.map} +1 -1
- package/dist/static/index.html +1 -1
- package/dist/tools/context-health.js +7 -7
- package/dist/utils/task-doc.js +16 -16
- package/package.json +2 -2
- package/dist/docs/keep-going.zh.md +0 -162
- package/dist/docs/showing-by-doing.md +0 -208
- package/dist/docs/showing-by-doing.zh.md +0 -177
- package/dist/minds/promptdocs.js +0 -263
- package/dist/snippets/README.en.md +0 -3
package/dist/agent-priming.js
CHANGED
|
@@ -585,12 +585,14 @@ function formatRtwsGitInventoryRound2(language, inventory) {
|
|
|
585
585
|
].join('\n');
|
|
586
586
|
}
|
|
587
587
|
function formatPreludeIntro(language, reused, shellPolicy, shellSpecialistId) {
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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 =
|
|
667
|
+
const shellSpecialistMention = `@${shellSpecialistId.trim()}`;
|
|
666
668
|
if (language === 'zh') {
|
|
667
669
|
return [
|
|
668
|
-
`你是 shell
|
|
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
|
|
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
|
-
: '
|
|
790
|
+
? '对话设定:你现在是被唤起的一份“初心自我”。术语映射:在本 FBR 支线中,你是被诉请者(tellaskee,初心自我);诉请者(tellasker)就是外表自我(当前主线)。同一轮里还会有其他“初心自我”并行给出草稿(彼此没有稳定映射关系,不要当作固定身份)。外表自我会在收齐全部回贴后再统一决策;你只需给出这一份独立分析,不要替外表自我下最终行动决策。'
|
|
791
|
+
: '对话设定:当前成员未启用 FBR(无并行“初心自我”草稿)。';
|
|
790
792
|
const effortLineEn = options.fbrEffort >= 1
|
|
791
|
-
? '
|
|
792
|
-
: '
|
|
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
|
|
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
|
-
'
|
|
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
|
|
830
|
+
'- Clearly separate: factual evidence / uncertainties / suggested next step (for tellasker / outer-self distillation after all drafts return).',
|
|
829
831
|
'',
|
|
830
|
-
'Environment info (
|
|
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
|
|
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();
|
package/dist/llm/driver.js
CHANGED
|
@@ -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,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: '
|
|
29
|
-
readonlyDelegateWhenNeeded:
|
|
28
|
+
readonlyAuthorized: '你仅被授权使用 `readonly_shell` 做只读检查(仅允许白名单命令前缀;不得写入/删除/联网/进程管理):符合只读目的时请直接调用。',
|
|
29
|
+
readonlyDelegateWhenNeeded: (value) => `边界规则:除只读目的外,其它一切 shell 需求都不得自行执行。凡是不在白名单内,或涉及写入/删除/网络/长时间运行/进程管理,必须诉请以下 shell 专员之一执行:${value}。并提供充分理由与可审查的命令提案:`,
|
|
30
30
|
noShellTools: '你不具备 shell 工具(本环境仅 shell 专员可执行 shell):不要尝试“编造/假设”命令输出,也不要要求系统直接执行。',
|
|
31
|
-
delegateWhenNeeded:
|
|
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) =>
|
|
39
|
-
tellaskBlockReminder:
|
|
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
|
|
58
|
-
readonlyDelegateWhenNeeded:
|
|
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:
|
|
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
|
|
68
|
-
tellaskBlockReminder:
|
|
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
|
-
'-
|
|
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
|
|
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');
|