kitty-hive 0.1.1 → 0.2.0

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.
Files changed (60) hide show
  1. package/README.md +106 -129
  2. package/README.zh.md +136 -105
  3. package/channel.ts +194 -431
  4. package/dist/auth.d.ts +10 -6
  5. package/dist/auth.js +32 -17
  6. package/dist/auth.js.map +1 -1
  7. package/dist/db.d.ts +32 -16
  8. package/dist/db.js +210 -113
  9. package/dist/db.js.map +1 -1
  10. package/dist/federation-http.d.ts +2 -0
  11. package/dist/federation-http.js +233 -0
  12. package/dist/federation-http.js.map +1 -0
  13. package/dist/index.js +79 -76
  14. package/dist/index.js.map +1 -1
  15. package/dist/log.d.ts +3 -0
  16. package/dist/log.js +10 -0
  17. package/dist/log.js.map +1 -0
  18. package/dist/mcp/agent-tools.d.ts +2 -0
  19. package/dist/mcp/agent-tools.js +66 -0
  20. package/dist/mcp/agent-tools.js.map +1 -0
  21. package/dist/mcp/dm-tools.d.ts +2 -0
  22. package/dist/mcp/dm-tools.js +54 -0
  23. package/dist/mcp/dm-tools.js.map +1 -0
  24. package/dist/mcp/federation-tools.d.ts +2 -0
  25. package/dist/mcp/federation-tools.js +30 -0
  26. package/dist/mcp/federation-tools.js.map +1 -0
  27. package/dist/mcp/server.d.ts +2 -0
  28. package/dist/mcp/server.js +62 -0
  29. package/dist/mcp/server.js.map +1 -0
  30. package/dist/mcp/task-tools.d.ts +2 -0
  31. package/dist/mcp/task-tools.js +128 -0
  32. package/dist/mcp/task-tools.js.map +1 -0
  33. package/dist/mcp/team-tools.d.ts +2 -0
  34. package/dist/mcp/team-tools.js +95 -0
  35. package/dist/mcp/team-tools.js.map +1 -0
  36. package/dist/models.d.ts +22 -10
  37. package/dist/models.js +1 -3
  38. package/dist/models.js.map +1 -1
  39. package/dist/server.d.ts +2 -3
  40. package/dist/server.js +38 -761
  41. package/dist/server.js.map +1 -1
  42. package/dist/sessions.d.ts +15 -0
  43. package/dist/sessions.js +107 -0
  44. package/dist/sessions.js.map +1 -0
  45. package/dist/tools/dm.d.ts +3 -2
  46. package/dist/tools/dm.js +14 -29
  47. package/dist/tools/dm.js.map +1 -1
  48. package/dist/tools/start.d.ts +3 -3
  49. package/dist/tools/start.js +18 -15
  50. package/dist/tools/start.js.map +1 -1
  51. package/dist/tools/task.d.ts +1 -1
  52. package/dist/tools/task.js +6 -5
  53. package/dist/tools/task.js.map +1 -1
  54. package/dist/tools/team.d.ts +62 -13
  55. package/dist/tools/team.js +102 -30
  56. package/dist/tools/team.js.map +1 -1
  57. package/package.json +2 -2
  58. package/dist/tools/room.d.ts +0 -39
  59. package/dist/tools/room.js +0 -35
  60. package/dist/tools/room.js.map +0 -1
@@ -1,43 +1,115 @@
1
- import { createRoom, appendRoomEvent, getRoomById, isMember, listTeams, getRoomMembers, getAgentById } from '../db.js';
1
+ import { createTeam, getTeamById, getTeamByName, listTeams, getAgentTeams, addTeamMember, isTeamMember, getTeamMembers, getTeamMember, setTeamNickname, appendTeamEvent, getTeamEvents, getLatestTeamEvents, getAgentById, } from '../db.js';
2
+ // --- hive.team.create ---
2
3
  export function handleTeamCreate(actorId, input) {
3
- // Check uniqueness
4
- const existing = listTeams().find(t => t.name === input.name);
4
+ const existing = getTeamByName(input.name);
5
5
  if (existing)
6
- throw new Error(`Team "${input.name}" already exists (room_id: ${existing.id})`);
7
- const room = createRoom('team', actorId, input.name);
8
- appendRoomEvent(room.id, 'join', actorId);
9
- return { room_id: room.id, name: input.name };
6
+ throw new Error(`Team "${input.name}" already exists (team_id: ${existing.id})`);
7
+ const team = createTeam(input.name, actorId);
8
+ addTeamMember(team.id, actorId, input.nickname ?? null);
9
+ appendTeamEvent(team.id, 'join', actorId, { nickname: input.nickname ?? null });
10
+ return { team_id: team.id, name: team.name };
10
11
  }
12
+ // --- hive.team.join ---
11
13
  export function handleTeamJoin(actorId, input) {
12
- let room;
13
- if (input.room_id) {
14
- room = getRoomById(input.room_id);
15
- }
16
- else if (input.name) {
17
- const teams = listTeams();
18
- room = teams.find(t => t.name === input.name);
19
- }
20
- if (!room)
21
- throw new Error(`Team not found: ${input.room_id || input.name}`);
22
- if (room.kind !== 'team')
23
- throw new Error('Not a team room');
24
- if (room.closed_at)
14
+ let team;
15
+ if (input.team_id)
16
+ team = getTeamById(input.team_id);
17
+ else if (input.name)
18
+ team = getTeamByName(input.name);
19
+ if (!team)
20
+ throw new Error(`Team not found: ${input.team_id || input.name}`);
21
+ if (team.closed_at)
25
22
  throw new Error('Team is closed');
26
- if (isMember(room.id, actorId))
23
+ if (isTeamMember(team.id, actorId))
27
24
  throw new Error('Already a member');
28
- appendRoomEvent(room.id, 'join', actorId);
29
- return { room_id: room.id, name: room.name };
25
+ // Check nickname conflict before insert
26
+ if (input.nickname) {
27
+ const conflict = getTeamMembers(team.id).find(m => m.nickname === input.nickname);
28
+ if (conflict)
29
+ throw new Error(`Nickname "${input.nickname}" already taken in this team`);
30
+ }
31
+ addTeamMember(team.id, actorId, input.nickname ?? null);
32
+ appendTeamEvent(team.id, 'join', actorId, { nickname: input.nickname ?? null });
33
+ return { team_id: team.id, name: team.name };
30
34
  }
31
35
  export function handleTeamList() {
32
- const teams = listTeams();
36
+ const teams = listTeams(true);
37
+ return {
38
+ teams: teams.map(t => {
39
+ const members = getTeamMembers(t.id).map(m => ({
40
+ id: m.agent_id,
41
+ display_name: m.nickname ?? (getAgentById(m.agent_id)?.display_name ?? m.agent_id),
42
+ }));
43
+ return { team_id: t.id, name: t.name, member_count: members.length, members };
44
+ }),
45
+ };
46
+ }
47
+ export function handleTeamInfo(actorId, input) {
48
+ const team = getTeamById(input.team_id);
49
+ if (!team)
50
+ throw new Error(`Team not found: ${input.team_id}`);
51
+ if (!isTeamMember(input.team_id, actorId))
52
+ throw new Error('Not a member of this team');
53
+ const members = getTeamMembers(input.team_id).map(m => {
54
+ const agent = getAgentById(m.agent_id);
55
+ return {
56
+ id: m.agent_id,
57
+ nickname: m.nickname,
58
+ display_name: agent?.display_name ?? 'unknown',
59
+ status: agent?.status ?? 'offline',
60
+ };
61
+ });
62
+ return {
63
+ team, members,
64
+ latest_events: getLatestTeamEvents(input.team_id, 10),
65
+ };
66
+ }
67
+ // --- hive.team.events ---
68
+ export function handleTeamEvents(actorId, input) {
69
+ if (!isTeamMember(input.team_id, actorId))
70
+ throw new Error('Not a member of this team');
71
+ const limit = Math.min(input.limit ?? 50, 200);
72
+ const events = getTeamEvents(input.team_id, input.since ?? 0, limit + 1);
73
+ const hasMore = events.length > limit;
74
+ if (hasMore)
75
+ events.pop();
76
+ return { events, has_more: hasMore };
77
+ }
78
+ // --- hive.team.message ---
79
+ export function handleTeamMessage(actorId, input) {
80
+ if (!isTeamMember(input.team_id, actorId))
81
+ throw new Error('Not a member of this team');
82
+ const event = appendTeamEvent(input.team_id, 'message', actorId, { content: input.content });
83
+ return { team_id: input.team_id, event_id: event.id, seq: event.seq };
84
+ }
85
+ // --- hive.team.nickname ---
86
+ export function handleTeamNickname(actorId, input) {
87
+ if (!isTeamMember(input.team_id, actorId))
88
+ throw new Error('Not a member of this team');
89
+ const member = getTeamMember(input.team_id, actorId);
90
+ if (input.nickname) {
91
+ const conflict = getTeamMembers(input.team_id).find(m => m.nickname === input.nickname && m.agent_id !== actorId);
92
+ if (conflict)
93
+ throw new Error(`Nickname "${input.nickname}" already taken in this team`);
94
+ }
95
+ setTeamNickname(input.team_id, actorId, input.nickname);
96
+ appendTeamEvent(input.team_id, 'rename', actorId, {
97
+ old_nickname: member.nickname, new_nickname: input.nickname,
98
+ });
99
+ return { team_id: input.team_id, nickname: input.nickname, old_nickname: member.nickname };
100
+ }
101
+ // --- hive.team.list (mine) ---
102
+ export function handleMyTeams(actorId) {
103
+ const teams = getAgentTeams(actorId, true);
33
104
  return {
34
105
  teams: teams.map(t => {
35
- const memberIds = getRoomMembers(t.id);
36
- const members = memberIds.map(id => {
37
- const agent = getAgentById(id);
38
- return agent?.display_name ?? id;
39
- });
40
- return { room_id: t.id, name: t.name, member_count: memberIds.length, members };
106
+ const me = getTeamMember(t.id, actorId);
107
+ return {
108
+ team_id: t.id,
109
+ name: t.name,
110
+ nickname: me?.nickname ?? null,
111
+ member_count: getTeamMembers(t.id).length,
112
+ };
41
113
  }),
42
114
  };
43
115
  }
@@ -1 +1 @@
1
- {"version":3,"file":"team.js","sourceRoot":"","sources":["../../src/tools/team.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AASvH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,KAAkB;IAClE,mBAAmB;IACnB,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9D,IAAI,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,8BAA8B,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;IAE/F,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;AAChD,CAAC;AASD,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,KAAgB;IAC9D,IAAI,IAAI,CAAC;IACT,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;QAC1B,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7E,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC7D,IAAI,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACtD,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAEpE,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AAC/C,CAAC;AAWD,MAAM,UAAU,cAAc;IAC5B,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACnB,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBACjC,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;gBAC/B,OAAO,KAAK,EAAE,YAAY,IAAI,EAAE,CAAC;YACnC,CAAC,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QAClF,CAAC,CAAC;KACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"team.js","sourceRoot":"","sources":["../../src/tools/team.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "kitty-hive",
3
- "version": "0.1.1",
4
- "description": "Room-first MCP server for multi-agent collaboration",
3
+ "version": "0.2.0",
4
+ "description": "MCP server for multi-agent collaboration — DM, tasks, workflow, federation",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "bin": {
@@ -1,39 +0,0 @@
1
- import type { Room, RoomEvent } from '../models.js';
2
- interface EventsInput {
3
- room_id: string;
4
- since?: number;
5
- limit?: number;
6
- }
7
- interface EventsOutput {
8
- events: RoomEvent[];
9
- has_more: boolean;
10
- }
11
- export declare function handleEvents(actorId: string, input: EventsInput): EventsOutput;
12
- interface ListInput {
13
- kind?: string;
14
- active_only?: boolean;
15
- }
16
- interface RoomSummary {
17
- id: string;
18
- name: string | null;
19
- kind: string;
20
- member_count: number;
21
- last_event_ts: string | null;
22
- }
23
- export declare function handleList(actorId: string, input: ListInput): {
24
- rooms: RoomSummary[];
25
- };
26
- interface InfoInput {
27
- room_id: string;
28
- }
29
- interface InfoOutput {
30
- room: Room;
31
- members: Array<{
32
- id: string;
33
- display_name: string;
34
- status: string;
35
- }>;
36
- latest_events: RoomEvent[];
37
- }
38
- export declare function handleInfo(actorId: string, input: InfoInput): InfoOutput;
39
- export {};
@@ -1,35 +0,0 @@
1
- import { getRoomById, getRoomEvents, getLastRoomEventTs, getLatestRoomEvents, isMember, getAgentRooms, getRoomMembers, getAgentById, } from '../db.js';
2
- export function handleEvents(actorId, input) {
3
- if (!isMember(input.room_id, actorId))
4
- throw new Error('Not a member of this room');
5
- const limit = Math.min(input.limit ?? 50, 200);
6
- const events = getRoomEvents(input.room_id, input.since ?? 0, limit + 1);
7
- const hasMore = events.length > limit;
8
- if (hasMore)
9
- events.pop();
10
- return { events, has_more: hasMore };
11
- }
12
- export function handleList(actorId, input) {
13
- const rooms = getAgentRooms(actorId, input.kind, input.active_only ?? true);
14
- const summaries = rooms.map(r => {
15
- const members = getRoomMembers(r.id);
16
- const lastTs = getLastRoomEventTs(r.id);
17
- return { id: r.id, name: r.name, kind: r.kind, member_count: members.length, last_event_ts: lastTs };
18
- });
19
- return { rooms: summaries };
20
- }
21
- export function handleInfo(actorId, input) {
22
- const room = getRoomById(input.room_id);
23
- if (!room)
24
- throw new Error(`Room not found: ${input.room_id}`);
25
- if (!isMember(input.room_id, actorId))
26
- throw new Error('Not a member of this room');
27
- const memberIds = getRoomMembers(input.room_id);
28
- const members = memberIds.map(id => {
29
- const agent = getAgentById(id);
30
- return { id, display_name: agent?.display_name ?? 'Unknown', status: agent?.status ?? 'offline' };
31
- });
32
- const latestEvents = getLatestRoomEvents(input.room_id, 10);
33
- return { room, members, latest_events: latestEvents };
34
- }
35
- //# sourceMappingURL=room.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"room.js","sourceRoot":"","sources":["../../src/tools/room.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,QAAQ,EAC7E,aAAa,EAAE,cAAc,EAAE,YAAY,GAC5C,MAAM,UAAU,CAAC;AAgBlB,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,KAAkB;IAC9D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;IACtC,IAAI,OAAO;QAAE,MAAM,CAAC,GAAG,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACvC,CAAC;AAiBD,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,KAAgB;IAC1D,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;IAC5E,MAAM,SAAS,GAAkB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QAC7C,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;IACvG,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC9B,CAAC;AAcD,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,KAAgB;IAC1D,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAEpF,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QACjC,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAC/B,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,IAAI,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,SAAS,EAAE,CAAC;IACpG,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAE5D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;AACxD,CAAC"}