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.
- package/.github/workflows/publish.yml +32 -0
- package/CHANGELOG.md +11 -0
- package/README.md +1 -1
- package/dist/constants/settings-paths.d.ts +0 -2
- package/dist/constants/settings-paths.d.ts.map +1 -1
- package/dist/constants/settings-paths.js +0 -4
- package/dist/constants/settings-paths.js.map +1 -1
- package/dist/gchat.js +16 -4
- package/dist/gchat.js.map +1 -1
- package/dist/services/installer-service.d.ts +2 -0
- package/dist/services/installer-service.d.ts.map +1 -1
- package/dist/services/installer-service.js +40 -3
- package/dist/services/installer-service.js.map +1 -1
- package/package.json +5 -1
- package/dist/handlers/tool-handlers.d.ts +0 -10
- package/dist/handlers/tool-handlers.d.ts.map +0 -1
- package/dist/handlers/tool-handlers.js +0 -198
- package/dist/handlers/tool-handlers.js.map +0 -1
|
@@ -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
|
-
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-paths.d.ts","sourceRoot":"","sources":["../../src/constants/settings-paths.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,
|
|
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,
|
|
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
|
-
|
|
44
|
-
|
|
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
|
-
|
|
49
|
-
|
|
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":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,MAAM,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAEzC,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IACjC,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QACrD,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;IACtC,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;QACtB,IAAI,MAAM,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;QAEzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,GAAG,KAAK,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC;YAClE,MAAM,SAAS,GAAG,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YAE9D,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACjC,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;gBACxC,MAAM,YAAY,GAAG,SAAS,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;
|
|
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":"
|
|
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 {
|
|
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":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EACL,
|
|
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,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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"}
|