group-chat-mcp 0.1.0 → 0.1.2

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.
@@ -0,0 +1,32 @@
1
+ name: Publish to npm
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ permissions:
8
+ contents: read
9
+ id-token: write
10
+
11
+ jobs:
12
+ publish:
13
+ runs-on: ubuntu-latest
14
+ environment: npm-publish
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+
18
+ - uses: actions/setup-node@v4
19
+ with:
20
+ node-version: 24
21
+ registry-url: https://registry.npmjs.org
22
+
23
+ - run: npm ci
24
+ - run: npm run build
25
+ - run: npm test
26
+
27
+ - name: Set version from tag
28
+ run: |
29
+ TAG="${GITHUB_REF_NAME#v}"
30
+ npm version "$TAG" --no-git-tag-version --allow-same-version
31
+
32
+ - run: npm publish --provenance --access public
package/CHANGELOG.md CHANGED
@@ -5,6 +5,17 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.1.1] - 2026-03-21
9
+
10
+ ### Changed
11
+
12
+ - Claude Code installer now uses `claude mcp add/remove` CLI instead of writing settings files directly
13
+ - Scope mapping: Global → `--scope user`, Local → `--scope project`
14
+
15
+ ### Fixed
16
+
17
+ - Paths with spaces no longer break CLI installation (`execFileSync` replaces string-based `execSync`)
18
+
8
19
  ## [0.1.0] - 2026-03-21
9
20
 
10
21
  ### Added
package/README.md CHANGED
@@ -40,7 +40,7 @@ The installer prompts for:
40
40
  - **IDE**: Claude Code, Cursor, or Both
41
41
  - **Scope**: Global (all projects) or Local (current project only)
42
42
 
43
- This writes the MCP server configuration to the appropriate settings file. No manual JSON editing required.
43
+ For Claude Code, the installer registers the MCP server via `claude mcp add` (requires the Claude Code CLI on PATH). For Cursor, it writes the configuration to the appropriate settings file.
44
44
 
45
45
  To remove the configuration:
46
46
 
@@ -1,5 +1,3 @@
1
- export declare const CLAUDE_CODE_GLOBAL: string;
2
1
  export declare const CURSOR_GLOBAL: string;
3
- export declare function CLAUDE_CODE_LOCAL(): string;
4
2
  export declare function CURSOR_LOCAL(): string;
5
3
  //# sourceMappingURL=settings-paths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-paths.d.ts","sourceRoot":"","sources":["../../src/constants/settings-paths.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB,QAAsD,CAAC;AACtF,eAAO,MAAM,aAAa,QAAiD,CAAC;AAE5E,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
1
+ {"version":3,"file":"settings-paths.d.ts","sourceRoot":"","sources":["../../src/constants/settings-paths.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,QAAiD,CAAC;AAE5E,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
@@ -1,10 +1,6 @@
1
1
  import os from 'node:os';
2
2
  import path from 'node:path';
3
- export const CLAUDE_CODE_GLOBAL = path.join(os.homedir(), '.claude', 'settings.json');
4
3
  export const CURSOR_GLOBAL = path.join(os.homedir(), '.cursor', 'mcp.json');
5
- export function CLAUDE_CODE_LOCAL() {
6
- return path.join(process.cwd(), '.mcp.json');
7
- }
8
4
  export function CURSOR_LOCAL() {
9
5
  return path.join(process.cwd(), '.cursor', 'mcp.json');
10
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"settings-paths.js","sourceRoot":"","sources":["../../src/constants/settings-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;AACtF,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAE5E,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AACzD,CAAC"}
1
+ {"version":3,"file":"settings-paths.js","sourceRoot":"","sources":["../../src/constants/settings-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAE5E,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AACzD,CAAC"}
package/dist/gchat.js CHANGED
@@ -40,13 +40,25 @@ async function main() {
40
40
  const scopeName = scope === Scope.Global ? 'global' : 'local';
41
41
  if (result.command === 'install') {
42
42
  await installer.install({ ide, scope });
43
- const settingsPath = installer.resolveSettingsPath(ide, scope);
44
- console.log(`✓ Installed group-chat-mcp for ${ideName} (${scopeName}): ${settingsPath}`);
43
+ if (ide === IDE.ClaudeCode) {
44
+ const claudeScope = installer.claudeCodeScope(scope);
45
+ console.log(`✓ Installed group-chat-mcp for ${ideName} (${claudeScope})`);
46
+ }
47
+ else {
48
+ const settingsPath = installer.resolveSettingsPath(ide, scope);
49
+ console.log(`✓ Installed group-chat-mcp for ${ideName} (${scopeName}): ${settingsPath}`);
50
+ }
45
51
  }
46
52
  else {
47
53
  await installer.uninstall({ ide, scope });
48
- const settingsPath = installer.resolveSettingsPath(ide, scope);
49
- console.log(`✓ Uninstalled group-chat-mcp from ${ideName} (${scopeName}): ${settingsPath}`);
54
+ if (ide === IDE.ClaudeCode) {
55
+ const claudeScope = installer.claudeCodeScope(scope);
56
+ console.log(`✓ Uninstalled group-chat-mcp from ${ideName} (${claudeScope})`);
57
+ }
58
+ else {
59
+ const settingsPath = installer.resolveSettingsPath(ide, scope);
60
+ console.log(`✓ Uninstalled group-chat-mcp from ${ideName} (${scopeName}): ${settingsPath}`);
61
+ }
50
62
  }
51
63
  }
52
64
  }
package/dist/gchat.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"gchat.js","sourceRoot":"","sources":["../src/gchat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gchat.js","sourceRoot":"","sources":["../src/gchat.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,8 @@ export declare class InstallerService {
7
7
  uninstall(options: UninstallOptions): Promise<void>;
8
8
  resolveServerPath(): string;
9
9
  resolveSettingsPath(ide: IDE, scope: Scope): string;
10
+ claudeCodeScope(scope: Scope): string;
11
+ protected execClaudeCli(args: string[]): void;
10
12
  private readSettingsFile;
11
13
  private writeAtomically;
12
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"installer-service.d.ts","sourceRoot":"","sources":["../../src/services/installer-service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAO1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,qBAAa,gBAAgB;IACrB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB/C,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BzD,iBAAiB,IAAI,MAAM;IAe3B,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM;YASrC,gBAAgB;YAyBhB,eAAe;CAU9B"}
1
+ {"version":3,"file":"installer-service.d.ts","sourceRoot":"","sources":["../../src/services/installer-service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAK1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,qBAAa,gBAAgB;IACrB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B/C,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCzD,iBAAiB,IAAI,MAAM;IAe3B,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM;IASnD,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM;IAIrC,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;YAa/B,gBAAgB;YAyBhB,eAAe;CAU9B"}
@@ -1,13 +1,20 @@
1
1
  import fs from 'node:fs/promises';
2
2
  import { existsSync } from 'node:fs';
3
+ import { execFileSync } from 'node:child_process';
3
4
  import path from 'node:path';
4
5
  import { fileURLToPath } from 'node:url';
5
6
  import { IDE } from '../enums/ide.js';
6
7
  import { Scope } from '../enums/scope.js';
7
- import { CLAUDE_CODE_GLOBAL, CLAUDE_CODE_LOCAL, CURSOR_GLOBAL, CURSOR_LOCAL, } from '../constants/settings-paths.js';
8
+ import { CURSOR_GLOBAL, CURSOR_LOCAL, } from '../constants/settings-paths.js';
8
9
  export class InstallerService {
9
10
  async install(options) {
10
11
  const serverPath = this.resolveServerPath();
12
+ if (options.ide === IDE.ClaudeCode) {
13
+ const scope = this.claudeCodeScope(options.scope);
14
+ this.execClaudeCli(['mcp', 'add', 'group-chat-mcp', '--scope', scope, '--', 'node', serverPath]);
15
+ return;
16
+ }
17
+ // Cursor: JSON file approach
11
18
  const settingsPath = this.resolveSettingsPath(options.ide, options.scope);
12
19
  await fs.mkdir(path.dirname(settingsPath), { recursive: true });
13
20
  const config = await this.readSettingsFile(settingsPath);
@@ -21,6 +28,20 @@ export class InstallerService {
21
28
  await this.writeAtomically(settingsPath, config);
22
29
  }
23
30
  async uninstall(options) {
31
+ if (options.ide === IDE.ClaudeCode) {
32
+ const scope = this.claudeCodeScope(options.scope);
33
+ try {
34
+ this.execClaudeCli(['mcp', 'remove', 'group-chat-mcp', '--scope', scope]);
35
+ }
36
+ catch (err) {
37
+ const message = err instanceof Error ? err.message : String(err);
38
+ if (!message.toLowerCase().includes('not found')) {
39
+ throw err;
40
+ }
41
+ }
42
+ return;
43
+ }
44
+ // Cursor: JSON file approach
24
45
  const settingsPath = this.resolveSettingsPath(options.ide, options.scope);
25
46
  let config;
26
47
  try {
@@ -54,10 +75,26 @@ export class InstallerService {
54
75
  }
55
76
  resolveSettingsPath(ide, scope) {
56
77
  switch (ide) {
57
- case IDE.ClaudeCode:
58
- return scope === Scope.Global ? CLAUDE_CODE_GLOBAL : CLAUDE_CODE_LOCAL();
59
78
  case IDE.Cursor:
60
79
  return scope === Scope.Global ? CURSOR_GLOBAL : CURSOR_LOCAL();
80
+ default:
81
+ throw new Error(`resolveSettingsPath is not supported for ${ide}`);
82
+ }
83
+ }
84
+ claudeCodeScope(scope) {
85
+ return scope === Scope.Global ? 'user' : 'project';
86
+ }
87
+ execClaudeCli(args) {
88
+ try {
89
+ execFileSync('claude', args, { stdio: 'pipe' });
90
+ }
91
+ catch (err) {
92
+ const nodeErr = err;
93
+ if (nodeErr.code === 'ENOENT') {
94
+ throw new Error('Claude Code CLI not found. Install it from https://docs.anthropic.com/en/docs/claude-code');
95
+ }
96
+ const stderr = err?.stderr?.toString().trim() ?? '';
97
+ throw new Error(`Claude CLI failed: ${stderr || 'unknown error'}`);
61
98
  }
62
99
  }
63
100
  async readSettingsFile(settingsPath) {
@@ -1 +1 @@
1
- {"version":3,"file":"installer-service.js","sourceRoot":"","sources":["../../src/services/installer-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"installer-service.js","sourceRoot":"","sources":["../../src/services/installer-service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,11 @@
1
1
  {
2
2
  "name": "group-chat-mcp",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/appboypov/group-chat-mcp"
8
+ },
5
9
  "main": "dist/index.js",
6
10
  "bin": {
7
11
  "gchat": "dist/gchat.js"
@@ -1,10 +0,0 @@
1
- import { NotificationType } from '../enums/notification-type.js';
2
- import { StateService } from '../services/state-service.js';
3
- export declare function writeNotificationToParticipants(stateService: StateService, conversationId: string, senderId: string, type: NotificationType, content: string, excludeAgentId?: string): Promise<void>;
4
- export declare function handleToolCall(stateService: StateService, name: string, agentId: string, rawArgs: Record<string, unknown> | undefined): Promise<{
5
- content: {
6
- type: "text";
7
- text: string;
8
- }[];
9
- }>;
10
- //# sourceMappingURL=tool-handlers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/tool-handlers.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAWjE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAa5D,wBAAsB,+BAA+B,CACnD,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED,wBAAsB,cAAc,CAClC,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;;;;;GAuN7C"}
@@ -1,198 +0,0 @@
1
- import path from 'node:path';
2
- import { v4 as uuidv4 } from 'uuid';
3
- import { BASE_DIR, INBOXES_DIR } from '../constants/storage.js';
4
- import { ConversationType } from '../enums/conversation-type.js';
5
- import { NotificationType } from '../enums/notification-type.js';
6
- import { ListConversationsArgsSchema, ListParticipantsArgsSchema, SendMessageArgsSchema, GetConversationArgsSchema, UpdateProfileArgsSchema, CreateConversationArgsSchema, JoinConversationArgsSchema, LeaveConversationArgsSchema, } from '../schemas/tool-schemas.js';
7
- import { appendToJsonArray } from '../utils/file-utils.js';
8
- import { withFileLock } from '../utils/file-lock.js';
9
- function textResult(text) {
10
- return { content: [{ type: 'text', text }] };
11
- }
12
- function errorResult(message) {
13
- return { content: [{ type: 'text', text: `Error: ${message}` }], isError: true };
14
- }
15
- export async function writeNotificationToParticipants(stateService, conversationId, senderId, type, content, excludeAgentId) {
16
- const conversation = await stateService.getConversation(conversationId);
17
- if (!conversation)
18
- return;
19
- for (const participantId of conversation.participants) {
20
- if (participantId === (excludeAgentId ?? senderId))
21
- continue;
22
- const notification = {
23
- id: uuidv4(),
24
- type,
25
- conversationId,
26
- agentId: senderId,
27
- content,
28
- timestamp: Date.now(),
29
- };
30
- const inboxPath = path.join(BASE_DIR, INBOXES_DIR, `${participantId}.json`);
31
- await withFileLock(inboxPath, async () => {
32
- await appendToJsonArray(inboxPath, notification);
33
- });
34
- }
35
- }
36
- export async function handleToolCall(stateService, name, agentId, rawArgs) {
37
- switch (name) {
38
- case 'list_conversations': {
39
- const args = ListConversationsArgsSchema.parse(rawArgs ?? {});
40
- const scope = args.scope ?? 'all';
41
- const agent = await stateService.getAgent(agentId);
42
- if (scope === 'project' && !agent) {
43
- return errorResult('Agent is not registered. Register first before listing project conversations.');
44
- }
45
- let conversations;
46
- if (scope === 'project' && agent?.projectPath) {
47
- conversations = await stateService.getConversations({ projectPath: agent.projectPath });
48
- }
49
- else {
50
- conversations = await stateService.getConversations({});
51
- }
52
- const active = conversations.filter((c) => c.archivedAt == null);
53
- if (active.length === 0) {
54
- return textResult('No conversations found.');
55
- }
56
- const lines = active.map((c) => `- [${c.id}] ${c.name ?? '(unnamed)'} | Type: ${c.type} | Topic: ${c.topic ?? 'none'} | Participants: ${c.participants.length}`);
57
- return textResult(`Conversations (${active.length}):\n${lines.join('\n')}`);
58
- }
59
- case 'list_participants': {
60
- const args = ListParticipantsArgsSchema.parse(rawArgs ?? {});
61
- const conversationId = args.conversationId;
62
- if (conversationId) {
63
- const conversation = await stateService.getConversation(conversationId);
64
- if (!conversation) {
65
- return errorResult(`Conversation ${conversationId} not found.`);
66
- }
67
- const agents = await stateService.getAgents();
68
- const participants = agents.filter((a) => conversation.participants.includes(a.id));
69
- if (participants.length === 0) {
70
- return textResult('No participants in this conversation.');
71
- }
72
- const lines = participants.map((a) => `- [${a.id}] ${a.profile.name ?? '(no name)'} | Role: ${a.profile.role ?? 'none'} | Expertise: ${a.profile.expertise ?? 'none'} | Status: ${a.profile.status ?? 'none'}`);
73
- return textResult(`Participants in ${conversation.name ?? conversationId} (${participants.length}):\n${lines.join('\n')}`);
74
- }
75
- const agents = await stateService.getAgents();
76
- if (agents.length === 0) {
77
- return textResult('No agents registered.');
78
- }
79
- const lines = agents.map((a) => `- [${a.id}] ${a.profile.name ?? '(no name)'} | Role: ${a.profile.role ?? 'none'} | Project: ${a.projectPath} | Conversations: ${a.conversations.length}`);
80
- return textResult(`All agents (${agents.length}):\n${lines.join('\n')}`);
81
- }
82
- case 'send_message': {
83
- const args = SendMessageArgsSchema.parse(rawArgs ?? {});
84
- const { content, conversationId, agentId: targetAgentId } = args;
85
- if (!conversationId && !targetAgentId) {
86
- return errorResult('Either conversationId or agentId is required.');
87
- }
88
- let targetConversationId;
89
- if (conversationId) {
90
- const conversation = await stateService.getConversation(conversationId);
91
- if (!conversation) {
92
- return errorResult(`Conversation ${conversationId} not found.`);
93
- }
94
- if (!conversation.participants.includes(agentId)) {
95
- return errorResult('You must join this conversation before sending messages.');
96
- }
97
- targetConversationId = conversationId;
98
- }
99
- else {
100
- const dmConversation = await stateService.getOrCreateDmConversation(agentId, targetAgentId);
101
- targetConversationId = dmConversation.id;
102
- }
103
- const message = await stateService.addMessage(targetConversationId, agentId, content, 'message');
104
- return textResult(`Message sent (${message.id}) to conversation ${targetConversationId}.`);
105
- }
106
- case 'get_conversation': {
107
- const args = GetConversationArgsSchema.parse(rawArgs ?? {});
108
- const { conversationId } = args;
109
- const conversation = await stateService.getConversation(conversationId);
110
- if (!conversation) {
111
- return errorResult(`Conversation ${conversationId} not found.`);
112
- }
113
- const messages = await stateService.getMessages(conversationId);
114
- const agents = await stateService.getAgents();
115
- const agentMap = new Map(agents.map((a) => [a.id, a]));
116
- const header = [
117
- `Conversation: ${conversation.name ?? '(unnamed)'}`,
118
- `ID: ${conversation.id}`,
119
- `Type: ${conversation.type}`,
120
- `Topic: ${conversation.topic ?? 'none'}`,
121
- `Participants: ${conversation.participants.length}`,
122
- `Created: ${new Date(conversation.createdAt).toISOString()}`,
123
- '',
124
- '--- Messages ---',
125
- ];
126
- const messageLines = messages.map((m) => {
127
- const sender = agentMap.get(m.senderId);
128
- const senderName = sender?.profile.name ?? m.senderId;
129
- const time = new Date(m.timestamp).toISOString();
130
- if (m.type === 'system') {
131
- return `[${time}] ** ${m.content} **`;
132
- }
133
- return `[${time}] ${senderName}: ${m.content}`;
134
- });
135
- return textResult([...header, ...messageLines].join('\n'));
136
- }
137
- case 'update_profile': {
138
- const args = UpdateProfileArgsSchema.parse(rawArgs ?? {});
139
- const profileUpdate = {};
140
- if (args.name !== undefined)
141
- profileUpdate.name = args.name;
142
- if (args.role !== undefined)
143
- profileUpdate.role = args.role;
144
- if (args.expertise !== undefined)
145
- profileUpdate.expertise = args.expertise;
146
- if (args.status !== undefined)
147
- profileUpdate.status = args.status;
148
- const agent = await stateService.updateProfile(agentId, profileUpdate);
149
- const updatedFields = Object.keys(profileUpdate).join(', ');
150
- for (const conversationId of agent.conversations) {
151
- await writeNotificationToParticipants(stateService, conversationId, agentId, NotificationType.ProfileUpdate, `${agent.profile.name ?? agentId} updated: ${updatedFields}`, agentId);
152
- }
153
- const lines = [
154
- 'Profile updated:',
155
- ` Name: ${agent.profile.name ?? 'not set'}`,
156
- ` Role: ${agent.profile.role ?? 'not set'}`,
157
- ` Expertise: ${agent.profile.expertise ?? 'not set'}`,
158
- ` Status: ${agent.profile.status ?? 'not set'}`,
159
- ];
160
- return textResult(lines.join('\n'));
161
- }
162
- case 'create_conversation': {
163
- const args = CreateConversationArgsSchema.parse(rawArgs ?? {});
164
- const convName = args.name;
165
- const topic = args.topic;
166
- const conversation = await stateService.createConversation({
167
- type: ConversationType.Group,
168
- name: convName,
169
- topic,
170
- participants: [agentId],
171
- });
172
- return textResult(`Conversation created:\n ID: ${conversation.id}\n Name: ${conversation.name}\n Topic: ${conversation.topic ?? 'none'}\n Type: ${conversation.type}`);
173
- }
174
- case 'join_conversation': {
175
- const args = JoinConversationArgsSchema.parse(rawArgs ?? {});
176
- const { conversationId } = args;
177
- await stateService.joinConversation(agentId, conversationId);
178
- const agent = await stateService.getAgent(agentId);
179
- const agentName = agent?.profile.name ?? agentId;
180
- await stateService.addMessage(conversationId, agentId, `${agentName} joined the conversation.`, 'system');
181
- await writeNotificationToParticipants(stateService, conversationId, agentId, NotificationType.Join, `${agentName} joined the conversation.`);
182
- return textResult(`Joined conversation ${conversationId}.`);
183
- }
184
- case 'leave_conversation': {
185
- const args = LeaveConversationArgsSchema.parse(rawArgs ?? {});
186
- const { conversationId } = args;
187
- const agent = await stateService.getAgent(agentId);
188
- const agentName = agent?.profile.name ?? agentId;
189
- await stateService.addMessage(conversationId, agentId, `${agentName} left the conversation.`, 'system');
190
- await writeNotificationToParticipants(stateService, conversationId, agentId, NotificationType.Leave, `${agentName} left the conversation.`);
191
- await stateService.leaveConversation(agentId, conversationId);
192
- return textResult(`Left conversation ${conversationId}.`);
193
- }
194
- default:
195
- return errorResult(`Unknown tool: ${name}`);
196
- }
197
- }
198
- //# sourceMappingURL=tool-handlers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-handlers.js","sourceRoot":"","sources":["../../src/handlers/tool-handlers.ts"],"names":[],"mappings":"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"}