@yeaft/webchat-agent 0.0.228 → 0.0.229

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/conversation.js CHANGED
@@ -60,7 +60,6 @@ export async function sendConversationList() {
60
60
  userId: session.userId,
61
61
  username: session.username,
62
62
  type: 'crew',
63
- goal: session.goal
64
63
  });
65
64
  }
66
65
  // 追加索引中已停止的 crew sessions(不重复)
package/crew-i18n.js CHANGED
@@ -9,7 +9,7 @@ const messages = {
9
9
  'zh-CN': {
10
10
  // buildRoleSystemPrompt
11
11
  teamCollab: '# 团队协作',
12
- teamCollabIntro: (goal) => goal ? `你正在一个 AI 团队中工作。项目目标是: ${goal}` : '你正在一个 AI 团队中工作。等待用户提出任务或问题。',
12
+ teamCollabIntro: () => '你正在一个 AI 团队中工作。等待用户提出任务或问题。',
13
13
  teamMembers: '团队成员:',
14
14
  decisionMakerTag: '决策者',
15
15
 
@@ -113,12 +113,6 @@ ${isDevTeam ? '3' : '2'}. **任务完成** - 所有任务已完成,给出完
113
113
  reviewCode: '请审查代码变更',
114
114
  testFeature: '请测试功能',
115
115
 
116
- // buildInitialTask
117
- projectStart: '项目启动!',
118
- goalLabel: '目标',
119
- firstRoleInstruction: '你是第一个开始工作的角色。请分析目标,开始你的工作。\n完成后,通过 ROUTE 块将结果传递给下一个合适的角色。',
120
- availableRoles: '团队中可用的角色:',
121
-
122
116
  // writeSharedClaudeMd
123
117
  projectGoal: '# 项目目标',
124
118
  projectCodePath: '# 项目代码路径',
@@ -188,7 +182,7 @@ ${isDevTeam ? '3' : '2'}. **任务完成** - 所有任务已完成,给出完
188
182
  'en': {
189
183
  // buildRoleSystemPrompt
190
184
  teamCollab: '# Team Collaboration',
191
- teamCollabIntro: (goal) => goal ? `You are working in an AI team. The project goal is: ${goal}` : 'You are working in an AI team. Waiting for the user to assign tasks or questions.',
185
+ teamCollabIntro: () => 'You are working in an AI team. Waiting for the user to assign tasks or questions.',
192
186
  teamMembers: 'Team members:',
193
187
  decisionMakerTag: 'Decision Maker',
194
188
 
@@ -292,12 +286,6 @@ After development is complete, send two ROUTE blocks simultaneously to ${revName
292
286
  reviewCode: 'Please review code changes',
293
287
  testFeature: 'Please test the feature',
294
288
 
295
- // buildInitialTask
296
- projectStart: 'Project started!',
297
- goalLabel: 'Goal',
298
- firstRoleInstruction: 'You are the first role to start working. Analyze the goal and begin your work.\nWhen done, pass the result to the next appropriate role via a ROUTE block.',
299
- availableRoles: 'Available roles in the team:',
300
-
301
289
  // writeSharedClaudeMd
302
290
  projectGoal: '# Project Goal',
303
291
  projectCodePath: '# Project Code Path',
package/crew.js CHANGED
@@ -254,7 +254,6 @@ function sessionToIndexEntry(session) {
254
254
  projectDir: session.projectDir,
255
255
  sharedDir: session.sharedDir,
256
256
  status: session.status,
257
- goal: session.goal,
258
257
  name: session.name || '',
259
258
  userId: session.userId,
260
259
  username: session.username,
@@ -312,9 +311,7 @@ async function saveSessionMeta(session) {
312
311
  sessionId: session.id,
313
312
  projectDir: session.projectDir,
314
313
  sharedDir: session.sharedDir,
315
- goal: session.goal,
316
314
  name: session.name || '',
317
- sharedKnowledge: session.sharedKnowledge || '',
318
315
  status: session.status,
319
316
  roles: Array.from(session.roles.values()).map(r => ({
320
317
  name: r.name, displayName: r.displayName, icon: r.icon,
@@ -322,7 +319,6 @@ async function saveSessionMeta(session) {
322
319
  groupIndex: r.groupIndex, roleType: r.roleType, model: r.model
323
320
  })),
324
321
  decisionMaker: session.decisionMaker,
325
- maxRounds: session.maxRounds,
326
322
  round: session.round,
327
323
  createdAt: session.createdAt,
328
324
  updatedAt: Date.now(),
@@ -652,16 +648,13 @@ export async function resumeCrewSession(msg) {
652
648
  sessionId,
653
649
  projectDir: session.projectDir,
654
650
  sharedDir: session.sharedDir,
655
- goal: session.goal,
656
651
  name: session.name || '',
657
- sharedKnowledge: session.sharedKnowledge || '',
658
652
  roles: roles.map(r => ({
659
653
  name: r.name, displayName: r.displayName, icon: r.icon,
660
654
  description: r.description, isDecisionMaker: r.isDecisionMaker || false,
661
655
  groupIndex: r.groupIndex, roleType: r.roleType, model: r.model
662
656
  })),
663
657
  decisionMaker: session.decisionMaker,
664
- maxRounds: session.maxRounds,
665
658
  userId: session.userId,
666
659
  username: session.username,
667
660
  uiMessages: cleanedMessages,
@@ -693,15 +686,12 @@ export async function resumeCrewSession(msg) {
693
686
  id: sessionId,
694
687
  projectDir: meta.projectDir,
695
688
  sharedDir: meta.sharedDir || indexEntry.sharedDir,
696
- goal: meta.goal,
697
689
  name: meta.name || '',
698
- sharedKnowledge: meta.sharedKnowledge || '',
699
690
  roles: new Map(roles.map(r => [r.name, r])),
700
691
  roleStates: new Map(),
701
692
  decisionMaker,
702
693
  status: 'waiting_human',
703
694
  round: meta.round || 0,
704
- maxRounds: meta.maxRounds || 20,
705
695
  costUsd: meta.costUsd || 0,
706
696
  totalInputTokens: meta.totalInputTokens || 0,
707
697
  totalOutputTokens: meta.totalOutputTokens || 0,
@@ -731,16 +721,13 @@ export async function resumeCrewSession(msg) {
731
721
  sessionId,
732
722
  projectDir: session.projectDir,
733
723
  sharedDir: session.sharedDir,
734
- goal: session.goal,
735
724
  name: session.name || '',
736
- sharedKnowledge: session.sharedKnowledge || '',
737
725
  roles: roles.map(r => ({
738
726
  name: r.name, displayName: r.displayName, icon: r.icon,
739
727
  description: r.description, isDecisionMaker: r.isDecisionMaker || false,
740
728
  groupIndex: r.groupIndex, roleType: r.roleType, model: r.model
741
729
  })),
742
730
  decisionMaker,
743
- maxRounds: session.maxRounds,
744
731
  userId: session.userId,
745
732
  username: session.username,
746
733
  uiMessages: session.uiMessages,
@@ -798,11 +785,8 @@ export async function createCrewSession(msg) {
798
785
  sessionId,
799
786
  projectDir,
800
787
  sharedDir: sharedDirRel,
801
- goal,
802
788
  name,
803
- sharedKnowledge,
804
789
  roles: rawRoles = [], // [{ name, displayName, icon, description, claudeMd, model, budget, isDecisionMaker, count }]
805
- maxRounds = 20,
806
790
  teamType = 'dev',
807
791
  language = 'zh-CN',
808
792
  userId,
@@ -833,15 +817,12 @@ export async function createCrewSession(msg) {
833
817
  id: sessionId,
834
818
  projectDir,
835
819
  sharedDir,
836
- goal,
837
820
  name: name || '',
838
- sharedKnowledge: sharedKnowledge || '',
839
821
  roles: new Map(roles.map(r => [r.name, r])),
840
822
  roleStates: new Map(),
841
823
  decisionMaker,
842
824
  status: 'initializing', // ← 新增初始化状态
843
825
  round: 0,
844
- maxRounds,
845
826
  costUsd: 0,
846
827
  totalInputTokens: 0,
847
828
  totalOutputTokens: 0,
@@ -869,9 +850,7 @@ export async function createCrewSession(msg) {
869
850
  sessionId,
870
851
  projectDir,
871
852
  sharedDir,
872
- goal,
873
853
  name: name || '',
874
- sharedKnowledge: sharedKnowledge || '',
875
854
  roles: roles.map(r => ({
876
855
  name: r.name,
877
856
  displayName: r.displayName,
@@ -883,7 +862,6 @@ export async function createCrewSession(msg) {
883
862
  groupIndex: r.groupIndex
884
863
  })),
885
864
  decisionMaker,
886
- maxRounds,
887
865
  userId,
888
866
  username
889
867
  });
@@ -895,7 +873,7 @@ export async function createCrewSession(msg) {
895
873
  // 初始化共享区(角色目录 + CLAUDE.md)
896
874
  session.initProgress = 'roles';
897
875
  sendStatusUpdate(session);
898
- await initSharedDir(sharedDir, goal, roles, projectDir, sharedKnowledge, language);
876
+ await initSharedDir(sharedDir, roles, projectDir, language);
899
877
 
900
878
  // 初始化 git worktrees
901
879
  const groupIndices = [...new Set(roles.filter(r => r.groupIndex > 0).map(r => r.groupIndex))];
@@ -923,15 +901,6 @@ export async function createCrewSession(msg) {
923
901
  }
924
902
  session.initProgress = null;
925
903
  sendStatusUpdate(session);
926
-
927
- // 如果有目标且状态为 running,自动启动第一个角色
928
- if (goal && roles.length > 0 && session.status === 'running') {
929
- const firstRole = roles.find(r => r.name === 'pm') || roles[0];
930
- if (firstRole) {
931
- const initialPrompt = buildInitialTask(goal, firstRole, roles, language);
932
- await dispatchToRole(session, firstRole.name, initialPrompt, 'system');
933
- }
934
- }
935
904
  } catch (e) {
936
905
  console.error('[Crew] Session initialization failed:', e);
937
906
  if (session.status === 'initializing') {
@@ -1087,18 +1056,16 @@ export async function removeRoleFromSession(msg) {
1087
1056
  }
1088
1057
 
1089
1058
  /**
1090
- * 更新 crew session 的 name 和 sharedKnowledge
1059
+ * 更新 crew session 的 name
1091
1060
  */
1092
1061
  export async function handleUpdateCrewSession(msg) {
1093
- const { sessionId, name, sharedKnowledge } = msg;
1062
+ const { sessionId, name } = msg;
1094
1063
  const session = crewSessions.get(sessionId);
1095
1064
  if (!session) {
1096
1065
  console.warn(`[Crew] Session not found for update: ${sessionId}`);
1097
1066
  return;
1098
1067
  }
1099
1068
  if (name !== undefined) session.name = name;
1100
- if (sharedKnowledge !== undefined) session.sharedKnowledge = sharedKnowledge;
1101
- await updateSharedClaudeMd(session);
1102
1069
  await saveSessionMeta(session);
1103
1070
  await upsertCrewIndex(session);
1104
1071
  }
@@ -1118,7 +1085,7 @@ export async function handleUpdateCrewSession(msg) {
1118
1085
  * └── {roleName}/
1119
1086
  * └── CLAUDE.md ← 角色定义 + 个人记忆
1120
1087
  */
1121
- async function initSharedDir(sharedDir, goal, roles, projectDir, sharedKnowledge = '', language = 'zh-CN') {
1088
+ async function initSharedDir(sharedDir, roles, projectDir, language = 'zh-CN') {
1122
1089
  await fs.mkdir(sharedDir, { recursive: true });
1123
1090
  await fs.mkdir(join(sharedDir, 'context'), { recursive: true });
1124
1091
  await fs.mkdir(join(sharedDir, 'sessions'), { recursive: true });
@@ -1130,7 +1097,7 @@ async function initSharedDir(sharedDir, goal, roles, projectDir, sharedKnowledge
1130
1097
  }
1131
1098
 
1132
1099
  // 生成 .crew/CLAUDE.md(共享级)
1133
- await writeSharedClaudeMd(sharedDir, goal, roles, projectDir, sharedKnowledge, language);
1100
+ await writeSharedClaudeMd(sharedDir, roles, projectDir, language);
1134
1101
  }
1135
1102
 
1136
1103
  /**
@@ -1154,14 +1121,10 @@ async function initRoleDir(sharedDir, role, language = 'zh-CN') {
1154
1121
  * 写入 .crew/CLAUDE.md — 共享级(所有角色自动继承)
1155
1122
  * 记忆直接写在 CLAUDE.md 中,Claude Code 会自动加载
1156
1123
  */
1157
- async function writeSharedClaudeMd(sharedDir, goal, roles, projectDir, sharedKnowledge = '', language = 'zh-CN') {
1124
+ async function writeSharedClaudeMd(sharedDir, roles, projectDir, language = 'zh-CN') {
1158
1125
  const m = getMessages(language);
1159
- const sharedMemoryContent = sharedKnowledge
1160
- ? `${m.sharedMemoryTitle}\n${sharedKnowledge}\n`
1161
- : `${m.sharedMemoryTitle}\n${m.sharedMemoryDefault}\n`;
1162
1126
 
1163
1127
  const claudeMd = `${m.projectGoal}
1164
- ${goal}
1165
1128
 
1166
1129
  ${m.projectCodePath}
1167
1130
  ${projectDir}
@@ -1181,7 +1144,9 @@ ${m.worktreeRulesContent}
1181
1144
 
1182
1145
  ${m.featureRecordShared}
1183
1146
 
1184
- ${sharedMemoryContent}`;
1147
+ ${m.sharedMemoryTitle}
1148
+ ${m.sharedMemoryDefault}
1149
+ `;
1185
1150
 
1186
1151
  await fs.writeFile(join(sharedDir, 'CLAUDE.md'), claudeMd);
1187
1152
  }
@@ -1220,7 +1185,7 @@ ${m.personalMemoryDefault}
1220
1185
  */
1221
1186
  async function updateSharedClaudeMd(session) {
1222
1187
  const roles = Array.from(session.roles.values());
1223
- await writeSharedClaudeMd(session.sharedDir, session.goal, roles, session.projectDir, session.sharedKnowledge, session.language || 'zh-CN');
1188
+ await writeSharedClaudeMd(session.sharedDir, roles, session.projectDir, session.language || 'zh-CN');
1224
1189
  }
1225
1190
 
1226
1191
  // =====================================================================
@@ -1584,7 +1549,7 @@ function buildRoleSystemPrompt(role, session) {
1584
1549
  const m = getMessages(session.language || 'zh-CN');
1585
1550
 
1586
1551
  let prompt = `${m.teamCollab}
1587
- ${m.teamCollabIntro(session.goal)}
1552
+ ${m.teamCollabIntro()}
1588
1553
 
1589
1554
  ${m.teamMembers}
1590
1555
  ${allRoles.map(r => `- ${roleLabel(r)}: ${r.description}${r.isDecisionMaker ? ` (${m.decisionMakerTag})` : ''}`).join('\n')}`;
@@ -1726,17 +1691,6 @@ Always respond in 中文. Use 中文 for all explanations, comments, and communi
1726
1691
 
1727
1692
  return prompt;
1728
1693
  }
1729
- function buildInitialTask(goal, firstRole, allRoles, language = 'zh-CN') {
1730
- const m = getMessages(language);
1731
- return `${m.projectStart}
1732
-
1733
- ${m.goalLabel}: ${goal}
1734
-
1735
- ${m.firstRoleInstruction}
1736
-
1737
- ${m.availableRoles}
1738
- ${allRoles.map(r => `- ${r.name}: ${roleLabel(r)} - ${r.description}`).join('\n')}`;
1739
- }
1740
1694
 
1741
1695
  // =====================================================================
1742
1696
  // Role Output Processing
@@ -3117,7 +3071,6 @@ function sendStatusUpdate(session) {
3117
3071
  status: session.status,
3118
3072
  currentRole,
3119
3073
  round: session.round,
3120
- maxRounds: session.maxRounds,
3121
3074
  costUsd: session.costUsd,
3122
3075
  totalInputTokens: session.totalInputTokens,
3123
3076
  totalOutputTokens: session.totalOutputTokens,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yeaft/webchat-agent",
3
- "version": "0.0.228",
3
+ "version": "0.0.229",
4
4
  "description": "Remote agent for Yeaft WebChat — connects worker machines to the central server",
5
5
  "main": "index.js",
6
6
  "type": "module",