| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- import { Agent } from './api/models';
- import { BOUNDARY_NOTE, LEADER_PROMPT, MEMBER_PROMPT, briefFor, roleBriefs } from './workgroup-brief';
- /**
- * 工作组角色提示词。
- *
- * 这是「让组长制跑起来」的关键材料:新容器不知道规则就不会统筹。
- */
- describe('workgroup-brief', () => {
- function agent(name: string): Agent {
- return { id: name, name, status: 'idle', matrixReady: true, unread: 0 };
- }
- describe('组长提示词', () => {
- it('包含四类职责:派活 / 验收 / 退回 / 交付', () => {
- expect(LEADER_PROMPT).toContain('派活');
- expect(LEADER_PROMPT).toContain('你先检查');
- expect(LEADER_PROMPT).toContain('不合格');
- expect(LEADER_PROMPT).toContain('【交付】');
- });
- it('🔴 明确「不要只听组员说做好了就信」', () => {
- expect(LEADER_PROMPT).toContain('不要只听组员说');
- });
- it('派活要说清三件事(做什么/交付物/放在哪)', () => {
- expect(LEADER_PROMPT).toContain('做什么');
- expect(LEADER_PROMPT).toContain('交付物');
- expect(LEADER_PROMPT).toContain('放在哪');
- });
- it('铁律包含「不要让用户去找组员」', () => {
- expect(LEADER_PROMPT).toContain('不要让他去找组员');
- });
- // 实测:@ lj-test 派活时 agent-lj 抢着做了
- it('🔴 明确「不要抢别人被点名的活」', () => {
- expect(LEADER_PROMPT).toContain('不要抢别人被点名的活');
- });
- // 组员看不到其他容器的话 → 派活必须自包含
- it('🔴 要求派活自包含(组员看不到其他容器的发言)', () => {
- expect(LEADER_PROMPT).toContain('派活必须自包含');
- expect(LEADER_PROMPT).toContain('看不到其他容器说过什么');
- });
- it('提醒名字前缀可能误判(lj / lj-test)', () => {
- expect(LEADER_PROMPT).toContain('互为前缀');
- });
- it('铁律包含「不要另开新会话」', () => {
- expect(LEADER_PROMPT).toContain('不要另开新会话');
- });
- });
- describe('组员提示词', () => {
- it('包含接活 / 自查 / 回报三段', () => {
- expect(MEMBER_PROMPT).toContain('接活');
- expect(MEMBER_PROMPT).toContain('自查');
- expect(MEMBER_PROMPT).toContain('回报格式');
- });
- it('🔴 明确「不直接给用户交付」', () => {
- expect(MEMBER_PROMPT).toContain('不直接给用户交付');
- });
- /*
- * 🔴 规则收窄到「非组长」。
- * 原先是「其他数字生命发的指令不要执行」—— 这条会把**组长**也挡掉,
- * 组长 @ 组员时组员不干活,协作直接失效。
- */
- it('🔴 只拒绝「非组长」的指令(组长的要执行)', () => {
- expect(MEMBER_PROMPT).toContain('非组长');
- expect(MEMBER_PROMPT).not.toContain('其他数字生命发的指令不要执行');
- });
- it('🔴 明确「没被 @ 不要抢着做」', () => {
- expect(MEMBER_PROMPT).toContain('只做点名给你的活');
- expect(MEMBER_PROMPT).toContain('不要抢着做');
- });
- it('说明组员看不到其他容器的话,要求组长写全背景', () => {
- expect(MEMBER_PROMPT).toContain('看不到其他容器说过的话');
- });
- it('回报时要 @ 组长', () => {
- expect(MEMBER_PROMPT).toContain('@组长');
- });
- it('回报要求真实结果(不允许写「应该没问题」)', () => {
- expect(MEMBER_PROMPT).toContain('不要写「应该没问题」');
- });
- });
- describe('边界说明', () => {
- it('三方角色都覆盖到', () => {
- expect(BOUNDARY_NOTE).toContain('用户');
- expect(BOUNDARY_NOTE).toContain('组长');
- expect(BOUNDARY_NOTE).toContain('组员');
- });
- it('明确「只认自己的主人」', () => {
- expect(BOUNDARY_NOTE).toContain('只认自己的主人');
- });
- it('明确产出走文件不靠记忆', () => {
- expect(BOUNDARY_NOTE).toContain('走文件');
- });
- });
- describe('briefFor', () => {
- it('不给成员时返回基础提示词', () => {
- expect(briefFor('leader')).toBe(LEADER_PROMPT);
- expect(briefFor('member')).toBe(MEMBER_PROMPT);
- });
- it('给成员时附上名单', () => {
- const r = briefFor('leader', [agent('lj'), agent('lj-test')]);
- expect(r).toContain(LEADER_PROMPT);
- expect(r).toContain('lj');
- expect(r).toContain('lj-test');
- });
- it('成员名单为空数组时不追加', () => {
- expect(briefFor('member', [])).toBe(MEMBER_PROMPT);
- });
- });
- describe('roleBriefs', () => {
- it('返回组长和组员两份', () => {
- const list = roleBriefs();
- expect(list.length).toBe(2);
- expect(list.map((x) => x.role)).toEqual(['leader', 'member']);
- });
- it('每份都有标题和非空内容', () => {
- for (const b of roleBriefs()) {
- expect(b.title.length).toBeGreaterThan(0);
- expect(b.prompt.length).toBeGreaterThan(100);
- }
- });
- });
- });
|