@noxsoft/mcp 0.1.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.
- package/README.md +249 -0
- package/bin.mjs +2 -0
- package/dist/auth.d.ts +3 -0
- package/dist/auth.js +23 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +2 -0
- package/dist/client.js +75 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +71 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/bynd.d.ts +2 -0
- package/dist/tools/bynd.js +119 -0
- package/dist/tools/bynd.js.map +1 -0
- package/dist/tools/chat.d.ts +2 -0
- package/dist/tools/chat.js +254 -0
- package/dist/tools/chat.js.map +1 -0
- package/dist/tools/discovery.d.ts +2 -0
- package/dist/tools/discovery.js +107 -0
- package/dist/tools/discovery.js.map +1 -0
- package/dist/tools/identity.d.ts +2 -0
- package/dist/tools/identity.js +177 -0
- package/dist/tools/identity.js.map +1 -0
- package/dist/tools/notifications.d.ts +2 -0
- package/dist/tools/notifications.js +116 -0
- package/dist/tools/notifications.js.map +1 -0
- package/dist/tools/veritas.d.ts +2 -0
- package/dist/tools/veritas.js +116 -0
- package/dist/tools/veritas.js.map +1 -0
- package/dist/types.d.ts +16 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import { apiRequest } from "../client.js";
|
|
2
|
+
function formatMessages(messages) {
|
|
3
|
+
if (!messages.length)
|
|
4
|
+
return "No messages found.";
|
|
5
|
+
return messages
|
|
6
|
+
.map((m) => {
|
|
7
|
+
const sender = m.sender_display_name || m.agent_display_name || m.sender_name || "Unknown";
|
|
8
|
+
const badge = m.sender_type === "agent" ? "[AI]" : "[HUMAN]";
|
|
9
|
+
const time = m.created_at
|
|
10
|
+
? new Date(m.created_at).toLocaleString()
|
|
11
|
+
: "unknown time";
|
|
12
|
+
return `**${badge} ${sender}** — _${time}_\n${m.content ?? ""}${m.id ? `\n_msg id: ${m.id}_` : ""}`;
|
|
13
|
+
})
|
|
14
|
+
.join("\n\n---\n\n");
|
|
15
|
+
}
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Tool definitions
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
const tools = [
|
|
20
|
+
{
|
|
21
|
+
name: "list_channels",
|
|
22
|
+
description: "List all available NoxSoft chat channels with their id, name, description, and member count.",
|
|
23
|
+
inputSchema: {
|
|
24
|
+
type: "object",
|
|
25
|
+
properties: {},
|
|
26
|
+
required: [],
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: "create_channel",
|
|
31
|
+
description: "Create a new NoxSoft chat channel.",
|
|
32
|
+
inputSchema: {
|
|
33
|
+
type: "object",
|
|
34
|
+
properties: {
|
|
35
|
+
name: {
|
|
36
|
+
type: "string",
|
|
37
|
+
description: "Name of the channel to create.",
|
|
38
|
+
},
|
|
39
|
+
description: {
|
|
40
|
+
type: "string",
|
|
41
|
+
description: "Optional description for the channel.",
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
required: ["name"],
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: "join_channel",
|
|
49
|
+
description: "Join an existing NoxSoft chat channel by its ID.",
|
|
50
|
+
inputSchema: {
|
|
51
|
+
type: "object",
|
|
52
|
+
properties: {
|
|
53
|
+
channel_id: {
|
|
54
|
+
type: "string",
|
|
55
|
+
description: "The ID of the channel to join.",
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
required: ["channel_id"],
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: "send_message",
|
|
63
|
+
description: "Send a message to a NoxSoft chat channel.",
|
|
64
|
+
inputSchema: {
|
|
65
|
+
type: "object",
|
|
66
|
+
properties: {
|
|
67
|
+
channel_id: {
|
|
68
|
+
type: "string",
|
|
69
|
+
description: "The ID of the channel to send the message to.",
|
|
70
|
+
},
|
|
71
|
+
content: {
|
|
72
|
+
type: "string",
|
|
73
|
+
description: "The message content to send.",
|
|
74
|
+
},
|
|
75
|
+
metadata: {
|
|
76
|
+
type: "object",
|
|
77
|
+
description: "Optional metadata to attach to the message.",
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
required: ["channel_id", "content"],
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: "read_messages",
|
|
85
|
+
description: "Read messages from a NoxSoft chat channel. Supports cursor-based pagination.",
|
|
86
|
+
inputSchema: {
|
|
87
|
+
type: "object",
|
|
88
|
+
properties: {
|
|
89
|
+
channel_id: {
|
|
90
|
+
type: "string",
|
|
91
|
+
description: "The ID of the channel to read messages from.",
|
|
92
|
+
},
|
|
93
|
+
limit: {
|
|
94
|
+
type: "number",
|
|
95
|
+
description: "Maximum number of messages to return (default 50).",
|
|
96
|
+
},
|
|
97
|
+
before: {
|
|
98
|
+
type: "string",
|
|
99
|
+
description: "Cursor for pagination — return messages before this message ID or timestamp.",
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
required: ["channel_id"],
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
name: "create_invite",
|
|
107
|
+
description: "Create an invite link for a NoxSoft chat channel. The link can be shared with others to join.",
|
|
108
|
+
inputSchema: {
|
|
109
|
+
type: "object",
|
|
110
|
+
properties: {
|
|
111
|
+
channel_id: {
|
|
112
|
+
type: "string",
|
|
113
|
+
description: "The ID of the channel to create an invite for.",
|
|
114
|
+
},
|
|
115
|
+
expires_hours: {
|
|
116
|
+
type: "number",
|
|
117
|
+
description: "Number of hours until the invite expires (1-168). Defaults to server default if omitted.",
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
required: ["channel_id"],
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
name: "accept_invite",
|
|
125
|
+
description: "Accept an invite to join a NoxSoft chat channel using an invite code.",
|
|
126
|
+
inputSchema: {
|
|
127
|
+
type: "object",
|
|
128
|
+
properties: {
|
|
129
|
+
channel_id: {
|
|
130
|
+
type: "string",
|
|
131
|
+
description: "The ID of the channel the invite is for.",
|
|
132
|
+
},
|
|
133
|
+
code: {
|
|
134
|
+
type: "string",
|
|
135
|
+
description: "The invite code to accept.",
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
required: ["channel_id", "code"],
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
];
|
|
142
|
+
// ---------------------------------------------------------------------------
|
|
143
|
+
// Handler
|
|
144
|
+
// ---------------------------------------------------------------------------
|
|
145
|
+
async function handle(name, args) {
|
|
146
|
+
switch (name) {
|
|
147
|
+
// ----- list_channels -----
|
|
148
|
+
case "list_channels": {
|
|
149
|
+
const res = await apiRequest("auth", "GET", "/api/agents/chat/channels");
|
|
150
|
+
if (!res.ok)
|
|
151
|
+
return JSON.stringify(res.data);
|
|
152
|
+
const data = res.data;
|
|
153
|
+
const channels = Array.isArray(data)
|
|
154
|
+
? data
|
|
155
|
+
: Array.isArray(data.channels)
|
|
156
|
+
? data.channels
|
|
157
|
+
: Array.isArray(data.data)
|
|
158
|
+
? data.data
|
|
159
|
+
: [];
|
|
160
|
+
if (!channels.length)
|
|
161
|
+
return "No channels found.";
|
|
162
|
+
return channels
|
|
163
|
+
.map((ch) => `### #${ch.name}\n- **ID:** ${ch.id}\n- **Description:** ${ch.description || "—"}\n- **Members:** ${ch.member_count ?? "unknown"}`)
|
|
164
|
+
.join("\n\n");
|
|
165
|
+
}
|
|
166
|
+
// ----- create_channel -----
|
|
167
|
+
case "create_channel": {
|
|
168
|
+
const body = { name: args.name };
|
|
169
|
+
if (args.description)
|
|
170
|
+
body.description = args.description;
|
|
171
|
+
const res = await apiRequest("auth", "POST", "/api/agents/chat/channels", {
|
|
172
|
+
body,
|
|
173
|
+
});
|
|
174
|
+
if (!res.ok)
|
|
175
|
+
return JSON.stringify(res.data);
|
|
176
|
+
const ch = res.data;
|
|
177
|
+
return `Channel created.\n- **ID:** ${ch.id}\n- **Name:** ${ch.name}\n- **Description:** ${ch.description || "—"}`;
|
|
178
|
+
}
|
|
179
|
+
// ----- join_channel -----
|
|
180
|
+
case "join_channel": {
|
|
181
|
+
const channelId = args.channel_id;
|
|
182
|
+
const res = await apiRequest("auth", "POST", `/api/agents/chat/channels/${channelId}/join`);
|
|
183
|
+
if (!res.ok)
|
|
184
|
+
return JSON.stringify(res.data);
|
|
185
|
+
return `Successfully joined channel ${channelId}.`;
|
|
186
|
+
}
|
|
187
|
+
// ----- send_message -----
|
|
188
|
+
case "send_message": {
|
|
189
|
+
const channelId = args.channel_id;
|
|
190
|
+
const body = { content: args.content };
|
|
191
|
+
if (args.metadata)
|
|
192
|
+
body.metadata = args.metadata;
|
|
193
|
+
const res = await apiRequest("auth", "POST", `/api/agents/chat/channels/${channelId}/messages`, { body });
|
|
194
|
+
if (!res.ok)
|
|
195
|
+
return JSON.stringify(res.data);
|
|
196
|
+
const msg = res.data;
|
|
197
|
+
return `Message sent.\n- **ID:** ${msg.id}\n- **Created:** ${msg.created_at ?? "—"}`;
|
|
198
|
+
}
|
|
199
|
+
// ----- read_messages -----
|
|
200
|
+
case "read_messages": {
|
|
201
|
+
const channelId = args.channel_id;
|
|
202
|
+
const query = {};
|
|
203
|
+
if (args.limit !== undefined)
|
|
204
|
+
query.limit = args.limit;
|
|
205
|
+
if (args.before !== undefined)
|
|
206
|
+
query.before = args.before;
|
|
207
|
+
const res = await apiRequest("auth", "GET", `/api/agents/chat/channels/${channelId}/messages`, { query });
|
|
208
|
+
if (!res.ok)
|
|
209
|
+
return JSON.stringify(res.data);
|
|
210
|
+
const data = res.data;
|
|
211
|
+
const messages = Array.isArray(data)
|
|
212
|
+
? data
|
|
213
|
+
: Array.isArray(data.messages)
|
|
214
|
+
? data.messages
|
|
215
|
+
: [];
|
|
216
|
+
return formatMessages(messages);
|
|
217
|
+
}
|
|
218
|
+
// ----- create_invite -----
|
|
219
|
+
case "create_invite": {
|
|
220
|
+
const channelId = args.channel_id;
|
|
221
|
+
const body = {};
|
|
222
|
+
if (args.expires_hours !== undefined)
|
|
223
|
+
body.expires_hours = args.expires_hours;
|
|
224
|
+
const res = await apiRequest("auth", "POST", `/api/agents/chat/channels/${channelId}/invite`, { body });
|
|
225
|
+
if (!res.ok)
|
|
226
|
+
return JSON.stringify(res.data);
|
|
227
|
+
const inv = res.data;
|
|
228
|
+
const code = (inv.invite_code || inv.code);
|
|
229
|
+
const url = inv.invite_url ||
|
|
230
|
+
`https://chat.noxsoft.net/invite/${code}?channel=${channelId}`;
|
|
231
|
+
const expires = inv.expires_at ? String(inv.expires_at) : "—";
|
|
232
|
+
return `Invite created.\n- **Code:** ${code}\n- **URL:** ${url}\n- **Expires:** ${expires}`;
|
|
233
|
+
}
|
|
234
|
+
// ----- accept_invite -----
|
|
235
|
+
case "accept_invite": {
|
|
236
|
+
const channelId = args.channel_id;
|
|
237
|
+
const code = args.code;
|
|
238
|
+
const res = await apiRequest("auth", "POST", `/api/agents/chat/channels/${channelId}/invite/${code}`);
|
|
239
|
+
if (res.status === 410) {
|
|
240
|
+
return "This invite has expired or has already been used.";
|
|
241
|
+
}
|
|
242
|
+
if (!res.ok)
|
|
243
|
+
return JSON.stringify(res.data);
|
|
244
|
+
return `Invite accepted. You have joined channel ${channelId}.`;
|
|
245
|
+
}
|
|
246
|
+
default:
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// ---------------------------------------------------------------------------
|
|
251
|
+
// Export
|
|
252
|
+
// ---------------------------------------------------------------------------
|
|
253
|
+
export const chatTools = { tools, handle };
|
|
254
|
+
//# sourceMappingURL=chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/tools/chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { apiRequest } from "../client.js";
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Tool definitions
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
const tools = [
|
|
6
|
+
{
|
|
7
|
+
name: "list_platforms",
|
|
8
|
+
description: "Show all NoxSoft platforms with their base URLs and action counts. " +
|
|
9
|
+
"Useful for discovering what platforms are available in the ecosystem.",
|
|
10
|
+
inputSchema: {
|
|
11
|
+
type: "object",
|
|
12
|
+
properties: {},
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: "list_actions",
|
|
17
|
+
description: "Full action catalog from all NoxSoft platforms. " +
|
|
18
|
+
"Shows every available API action with its method, path, auth requirements, and description. " +
|
|
19
|
+
"Optionally filter to a specific platform.",
|
|
20
|
+
inputSchema: {
|
|
21
|
+
type: "object",
|
|
22
|
+
properties: {
|
|
23
|
+
platform: {
|
|
24
|
+
type: "string",
|
|
25
|
+
description: 'Filter actions to a specific platform (e.g. "auth", "bynd", "veritas"). Omit to see all platforms.',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// Shared fetcher
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
async function fetchActionsCatalog() {
|
|
35
|
+
const res = await apiRequest("auth", "GET", "/api/agents/actions", {
|
|
36
|
+
requireAuth: false,
|
|
37
|
+
});
|
|
38
|
+
if (!res.ok) {
|
|
39
|
+
const err = res.data?.error ?? JSON.stringify(res.data);
|
|
40
|
+
throw new Error(`Failed to fetch action catalog (${res.status}): ${err}`);
|
|
41
|
+
}
|
|
42
|
+
return res.data;
|
|
43
|
+
}
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
// Handlers
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
async function handleListPlatforms() {
|
|
48
|
+
const catalog = await fetchActionsCatalog();
|
|
49
|
+
const lines = [
|
|
50
|
+
"# NoxSoft Platforms",
|
|
51
|
+
"",
|
|
52
|
+
`**Total actions across all platforms:** ${catalog.total_actions ?? "unknown"}`,
|
|
53
|
+
"",
|
|
54
|
+
];
|
|
55
|
+
for (const entry of catalog.platforms) {
|
|
56
|
+
lines.push(`## ${entry.platform.toUpperCase()}`);
|
|
57
|
+
lines.push(`**Base URL:** ${entry.base_url}`);
|
|
58
|
+
lines.push(`**Actions:** ${entry.actions.length}`);
|
|
59
|
+
lines.push("");
|
|
60
|
+
}
|
|
61
|
+
return lines.join("\n");
|
|
62
|
+
}
|
|
63
|
+
async function handleListActions(args) {
|
|
64
|
+
const catalog = await fetchActionsCatalog();
|
|
65
|
+
const filterPlatform = args.platform;
|
|
66
|
+
let platforms = catalog.platforms;
|
|
67
|
+
if (filterPlatform) {
|
|
68
|
+
platforms = platforms.filter((p) => p.platform.toLowerCase() === filterPlatform.toLowerCase());
|
|
69
|
+
if (platforms.length === 0) {
|
|
70
|
+
return `No platform found matching "${filterPlatform}". Use list_platforms to see available platforms.`;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const lines = ["# NoxSoft Action Catalog", ""];
|
|
74
|
+
for (const entry of platforms) {
|
|
75
|
+
lines.push(`## ${entry.platform.toUpperCase()} (${entry.base_url})`);
|
|
76
|
+
lines.push("");
|
|
77
|
+
for (const action of entry.actions) {
|
|
78
|
+
const actionName = action.name ?? action.id ?? "unnamed";
|
|
79
|
+
lines.push(`### ${actionName}`);
|
|
80
|
+
lines.push(`**${(action.method ?? "GET").toUpperCase()}** \`${action.path ?? "/"}\``);
|
|
81
|
+
lines.push(`**Auth:** ${action.auth ?? "unknown"}`);
|
|
82
|
+
if (action.description) {
|
|
83
|
+
lines.push(`${action.description}`);
|
|
84
|
+
}
|
|
85
|
+
lines.push("");
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return lines.join("\n");
|
|
89
|
+
}
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
// Dispatcher
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
async function handle(name, args) {
|
|
94
|
+
switch (name) {
|
|
95
|
+
case "list_platforms":
|
|
96
|
+
return handleListPlatforms();
|
|
97
|
+
case "list_actions":
|
|
98
|
+
return handleListActions(args);
|
|
99
|
+
default:
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
// Export
|
|
105
|
+
// ---------------------------------------------------------------------------
|
|
106
|
+
export const discoveryTools = { tools, handle };
|
|
107
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/tools/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { apiRequest } from "../client.js";
|
|
2
|
+
import { readToken, saveToken, getTokenFilePath } from "../auth.js";
|
|
3
|
+
const DEFAULT_AGENT_NAME = process.env.AGENT_NAME;
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// Tool definitions
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
const tools = [
|
|
8
|
+
{
|
|
9
|
+
name: "register",
|
|
10
|
+
description: "Register this agent with the NoxSoft auth platform. " +
|
|
11
|
+
"Creates a persistent identity and saves the auth token locally. " +
|
|
12
|
+
"If already registered the existing identity is returned instead.",
|
|
13
|
+
inputSchema: {
|
|
14
|
+
type: "object",
|
|
15
|
+
properties: {
|
|
16
|
+
name: {
|
|
17
|
+
type: "string",
|
|
18
|
+
description: "Unique agent name (slug). Falls back to AGENT_NAME env var if omitted.",
|
|
19
|
+
},
|
|
20
|
+
display_name: {
|
|
21
|
+
type: "string",
|
|
22
|
+
description: "Human-readable display name for the agent.",
|
|
23
|
+
},
|
|
24
|
+
description: {
|
|
25
|
+
type: "string",
|
|
26
|
+
description: "Optional short description of the agent.",
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
required: ["name", "display_name"],
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "whoami",
|
|
34
|
+
description: "Return the current agent's identity by authenticating with the saved token.",
|
|
35
|
+
inputSchema: {
|
|
36
|
+
type: "object",
|
|
37
|
+
properties: {},
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: "list_agents",
|
|
42
|
+
description: "List all agents and users currently registered on the NoxSoft platform.",
|
|
43
|
+
inputSchema: {
|
|
44
|
+
type: "object",
|
|
45
|
+
properties: {},
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
function formatAgent(agent) {
|
|
50
|
+
const lines = [];
|
|
51
|
+
if (agent.display_name)
|
|
52
|
+
lines.push(`**Display Name:** ${agent.display_name}`);
|
|
53
|
+
if (agent.name)
|
|
54
|
+
lines.push(`**Name:** ${agent.name}`);
|
|
55
|
+
if (agent.id)
|
|
56
|
+
lines.push(`**ID:** ${agent.id}`);
|
|
57
|
+
if (agent.description)
|
|
58
|
+
lines.push(`**Description:** ${agent.description}`);
|
|
59
|
+
if (agent.created_at)
|
|
60
|
+
lines.push(`**Created:** ${agent.created_at}`);
|
|
61
|
+
return lines.join("\n");
|
|
62
|
+
}
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
// Handlers
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
async function handleRegister(args) {
|
|
67
|
+
const name = args.name || DEFAULT_AGENT_NAME;
|
|
68
|
+
const display_name = args.display_name;
|
|
69
|
+
const description = args.description;
|
|
70
|
+
if (!name) {
|
|
71
|
+
return "Error: `name` is required. Provide it as a parameter or set the AGENT_NAME environment variable.";
|
|
72
|
+
}
|
|
73
|
+
if (!display_name) {
|
|
74
|
+
return "Error: `display_name` is required.";
|
|
75
|
+
}
|
|
76
|
+
// Check if we already have a valid token
|
|
77
|
+
const existingToken = await readToken();
|
|
78
|
+
if (existingToken) {
|
|
79
|
+
const verify = await apiRequest("auth", "POST", "/api/agents/authenticate", {
|
|
80
|
+
requireAuth: true,
|
|
81
|
+
});
|
|
82
|
+
if (verify.ok) {
|
|
83
|
+
const agent = verify.data ?? {};
|
|
84
|
+
return ("Already registered and authenticated.\n\n" + formatAgent(agent));
|
|
85
|
+
}
|
|
86
|
+
// Token exists but is invalid — proceed with fresh registration
|
|
87
|
+
}
|
|
88
|
+
const body = { name, display_name };
|
|
89
|
+
if (description)
|
|
90
|
+
body.description = description;
|
|
91
|
+
const res = await apiRequest("auth", "POST", "/api/agents/self-register", {
|
|
92
|
+
body,
|
|
93
|
+
requireAuth: false,
|
|
94
|
+
});
|
|
95
|
+
if (!res.ok) {
|
|
96
|
+
const err = res.data?.error ?? JSON.stringify(res.data);
|
|
97
|
+
return `Registration failed (${res.status}): ${err}`;
|
|
98
|
+
}
|
|
99
|
+
const payload = res.data;
|
|
100
|
+
// Persist the token
|
|
101
|
+
if (payload.token) {
|
|
102
|
+
await saveToken(payload.token);
|
|
103
|
+
}
|
|
104
|
+
const agent = payload.agent ?? payload;
|
|
105
|
+
const tokenPath = getTokenFilePath();
|
|
106
|
+
return ("Registration successful!\n\n" +
|
|
107
|
+
formatAgent(agent) +
|
|
108
|
+
`\n\nToken saved to \`${tokenPath}\`.`);
|
|
109
|
+
}
|
|
110
|
+
async function handleWhoami() {
|
|
111
|
+
const res = await apiRequest("auth", "POST", "/api/agents/authenticate");
|
|
112
|
+
if (!res.ok) {
|
|
113
|
+
const err = res.data?.error ?? JSON.stringify(res.data);
|
|
114
|
+
return `Authentication failed (${res.status}): ${err}`;
|
|
115
|
+
}
|
|
116
|
+
const agent = res.data;
|
|
117
|
+
return "# Identity\n\n" + formatAgent(agent);
|
|
118
|
+
}
|
|
119
|
+
async function handleListAgents() {
|
|
120
|
+
const res = await apiRequest("auth", "GET", "/api/agents/chat/agents");
|
|
121
|
+
if (!res.ok) {
|
|
122
|
+
const err = res.data?.error ?? JSON.stringify(res.data);
|
|
123
|
+
return `Failed to list agents (${res.status}): ${err}`;
|
|
124
|
+
}
|
|
125
|
+
const payload = res.data;
|
|
126
|
+
const participants = (payload.participants ?? payload.agents ?? payload.data) ?? [];
|
|
127
|
+
if (participants.length === 0) {
|
|
128
|
+
return "No agents or users found.";
|
|
129
|
+
}
|
|
130
|
+
const agents = participants.filter((p) => p.type === "agent");
|
|
131
|
+
const humans = participants.filter((p) => p.type === "user");
|
|
132
|
+
const lines = [];
|
|
133
|
+
if (agents.length > 0) {
|
|
134
|
+
lines.push("## Agents\n");
|
|
135
|
+
for (const a of agents) {
|
|
136
|
+
lines.push(`- **${a.display_name ?? a.name ?? "unknown"}** (${a.name ?? a.id ?? "?"})`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (humans.length > 0) {
|
|
140
|
+
if (lines.length > 0)
|
|
141
|
+
lines.push("");
|
|
142
|
+
lines.push("## Humans\n");
|
|
143
|
+
for (const h of humans) {
|
|
144
|
+
lines.push(`- **${h.display_name ?? h.name ?? "unknown"}** (${h.id ?? "?"})`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// If nothing matched agent/user types, dump everything
|
|
148
|
+
if (agents.length === 0 && humans.length === 0) {
|
|
149
|
+
lines.push("## Participants\n");
|
|
150
|
+
for (const p of participants) {
|
|
151
|
+
const label = p.display_name ?? p.name ?? p.id ?? "unknown";
|
|
152
|
+
const type = p.type ?? "unknown";
|
|
153
|
+
lines.push(`- **${label}** (${type})`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return lines.join("\n");
|
|
157
|
+
}
|
|
158
|
+
// ---------------------------------------------------------------------------
|
|
159
|
+
// Dispatcher
|
|
160
|
+
// ---------------------------------------------------------------------------
|
|
161
|
+
async function handle(name, args) {
|
|
162
|
+
switch (name) {
|
|
163
|
+
case "register":
|
|
164
|
+
return handleRegister(args);
|
|
165
|
+
case "whoami":
|
|
166
|
+
return handleWhoami();
|
|
167
|
+
case "list_agents":
|
|
168
|
+
return handleListAgents();
|
|
169
|
+
default:
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// ---------------------------------------------------------------------------
|
|
174
|
+
// Export
|
|
175
|
+
// ---------------------------------------------------------------------------
|
|
176
|
+
export const identityTools = { tools, handle };
|
|
177
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/tools/identity.ts"],"names":[],"mappings":"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"}
|