@elizaos/plugin-admin 1.5.2 → 1.5.3
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 +19 -23
- package/dist/index.mjs +17 -18
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @elizaos/plugin-admin
|
|
2
2
|
|
|
3
|
-
> ⚠️ **Secure by default** – The plugin is a no-op until admin
|
|
3
|
+
> ⚠️ **Secure by default** – The plugin is a no-op until admin features are explicitly unlocked by providing the correct `ADMIN_PASSWORD`.
|
|
4
4
|
|
|
5
5
|
A privileged plugin for ElizaOS that allows power-users to inspect and query **global** agent data that is normally sandboxed to the active room/channel.
|
|
6
6
|
|
|
@@ -8,7 +8,7 @@ A privileged plugin for ElizaOS that allows power-users to inspect and query **g
|
|
|
8
8
|
|
|
9
9
|
| Capability | Action | Description |
|
|
10
10
|
|------------|--------|-------------|
|
|
11
|
-
|
|
|
11
|
+
| Unlock Admin Features | `UNLOCK_ADMIN_FEATURES` | Validate the admin secret key and unlock all other actions/providers |
|
|
12
12
|
| Daily activity report | `GLOBAL_REPORT` | Aggregate message counts per room for a given day |
|
|
13
13
|
| List all users | `LIST_ALL_USERS` | Returns every user the agent knows about |
|
|
14
14
|
| List all rooms | `LIST_ALL_ROOMS` | Returns all chat rooms/channels |
|
|
@@ -39,9 +39,9 @@ Add the plugin to your agent's character file:
|
|
|
39
39
|
|
|
40
40
|
| Env Var | Required | Description |
|
|
41
41
|
|---------|----------|-------------|
|
|
42
|
-
| `ADMIN_PASSWORD` | **Yes** | The plaintext
|
|
42
|
+
| `ADMIN_PASSWORD` | **Yes** | The plaintext secret key that will unlock admin features |
|
|
43
43
|
|
|
44
|
-
**Never** commit the
|
|
44
|
+
**Never** commit the secret key – store it in your project‐local `.env`.
|
|
45
45
|
|
|
46
46
|
```env
|
|
47
47
|
ADMIN_PASSWORD=super-secret-value
|
|
@@ -49,27 +49,23 @@ ADMIN_PASSWORD=super-secret-value
|
|
|
49
49
|
|
|
50
50
|
## Usage
|
|
51
51
|
|
|
52
|
-
### 1.
|
|
52
|
+
### 1. Unlock Admin Features
|
|
53
53
|
|
|
54
|
-
When chatting with the agent
|
|
54
|
+
When chatting with the agent, use a phrase that includes "admin" and "unlock" or "key", and provide the key.
|
|
55
55
|
|
|
56
|
+
**Recommended phrases:**
|
|
56
57
|
```
|
|
57
|
-
|
|
58
|
+
"Unlock admin features, the key is: super-secret-value"
|
|
59
|
+
"Enter admin mode, my key is super-secret-value"
|
|
60
|
+
"I need to unlock admin, password: super-secret-value"
|
|
58
61
|
```
|
|
59
62
|
|
|
60
|
-
The plugin will execute `
|
|
61
|
-
|
|
62
|
-
```json
|
|
63
|
-
{
|
|
64
|
-
"action": "ELEVATE_PRIVILEGE",
|
|
65
|
-
"options": { "password": "super-secret-value" }
|
|
66
|
-
}
|
|
67
|
-
```
|
|
63
|
+
The plugin will execute `UNLOCK_ADMIN_FEATURES` automatically.
|
|
68
64
|
|
|
69
65
|
On success, the agent responds:
|
|
70
66
|
|
|
71
67
|
```
|
|
72
|
-
✅
|
|
68
|
+
✅ Administrative features unlocked. You now have access to global commands.
|
|
73
69
|
```
|
|
74
70
|
|
|
75
71
|
All subsequent admin actions & providers become available for the session's lifetime.
|
|
@@ -80,14 +76,14 @@ All subsequent admin actions & providers become available for the session's life
|
|
|
80
76
|
"Give me a global report for today." → GLOBAL_REPORT
|
|
81
77
|
"List all users." → LIST_ALL_USERS
|
|
82
78
|
"List all rooms." → LIST_ALL_ROOMS
|
|
83
|
-
"Search all messages for 'production outage'." → SEARCH_MESSAGES
|
|
84
|
-
"Audit user abc123." → USER_AUDIT
|
|
79
|
+
"Search all messages for 'production outage'." → SEARCH_MESSAGES
|
|
80
|
+
"Audit user abc123." → USER_AUDIT
|
|
85
81
|
```
|
|
86
82
|
|
|
87
83
|
## Actions
|
|
88
84
|
|
|
89
|
-
###
|
|
90
|
-
Unlock admin functionality by providing the correct
|
|
85
|
+
### UNLOCK_ADMIN_FEATURES
|
|
86
|
+
Unlock admin functionality by providing the correct secret key.
|
|
91
87
|
- Validates against `ADMIN_PASSWORD` environment variable
|
|
92
88
|
- Uses SHA-256 hashing for security
|
|
93
89
|
- Unlocks all other admin actions once validated
|
|
@@ -123,7 +119,7 @@ Generate a detailed audit report for a specific user.
|
|
|
123
119
|
|
|
124
120
|
## Global Context Provider
|
|
125
121
|
|
|
126
|
-
When admin
|
|
122
|
+
When admin features are unlocked, the `GLOBAL_CONTEXT` provider automatically injects:
|
|
127
123
|
- Summary of last 50 messages across all rooms
|
|
128
124
|
- Message counts per room
|
|
129
125
|
- Formatted for LLM context understanding
|
|
@@ -136,7 +132,7 @@ This enables the agent to answer questions like:
|
|
|
136
132
|
## Security Considerations
|
|
137
133
|
|
|
138
134
|
1. **Password Hashing** – The plugin only stores a SHA-256 hash in memory. The plaintext password never leaves `process.env`.
|
|
139
|
-
2. **Session-based** – Admin
|
|
135
|
+
2. **Session-based** – Admin features are granted per runtime session. Restarting the agent requires re-authentication.
|
|
140
136
|
3. **Read-only** – Current actions are *read* queries. If you add write operations, double-check permissions.
|
|
141
137
|
4. **Audit logs** – Consider emitting events whenever an admin action runs to keep an audit trail.
|
|
142
138
|
|
|
@@ -169,7 +165,7 @@ bun run dev
|
|
|
169
165
|
|
|
170
166
|
When adding new admin actions:
|
|
171
167
|
1. Create action in `src/actions/`
|
|
172
|
-
2. Check admin
|
|
168
|
+
2. Check admin status in validate & handler
|
|
173
169
|
3. Use proper ElizaOS database methods (not raw SQL)
|
|
174
170
|
4. Add comprehensive examples
|
|
175
171
|
5. Update this README
|
package/dist/index.mjs
CHANGED
|
@@ -50,40 +50,39 @@ var _AdminService = class _AdminService extends Service {
|
|
|
50
50
|
_AdminService.serviceType = "ADMIN_SERVICE";
|
|
51
51
|
var AdminService = _AdminService;
|
|
52
52
|
|
|
53
|
-
// src/actions/
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
var elevatePrivilegeAction = {
|
|
59
|
-
name: "ELEVATE_PRIVILEGE",
|
|
60
|
-
description: "Elevate your privileges to admin by providing the admin password.",
|
|
53
|
+
// src/actions/unlockAdmin.ts
|
|
54
|
+
var unlockAdminAction = {
|
|
55
|
+
name: "UNLOCK_ADMIN_FEATURES",
|
|
56
|
+
description: "Unlocks special administrative features for the current session using a secret key.",
|
|
57
|
+
similes: ["unlock admin", "use admin key", "enter admin mode", "elevate privileges"],
|
|
61
58
|
examples: [
|
|
62
59
|
[
|
|
63
60
|
{
|
|
64
61
|
name: "user",
|
|
65
|
-
content: { text: "
|
|
62
|
+
content: { text: "Unlock admin features. The key is super-secret-123" }
|
|
66
63
|
},
|
|
67
64
|
{
|
|
68
65
|
name: "assistant",
|
|
69
|
-
content: { text: "
|
|
66
|
+
content: { text: "Administrative features unlocked." }
|
|
70
67
|
}
|
|
71
68
|
]
|
|
72
69
|
],
|
|
73
70
|
validate: async (runtime, message, state) => {
|
|
74
71
|
const text = message.content?.text?.toLowerCase() || "";
|
|
75
|
-
|
|
72
|
+
const hasTrigger = text.includes("admin") && (text.includes("unlock") || text.includes("key") || text.includes("password") || text.includes("priv"));
|
|
73
|
+
const hasKey = /(?:password|key|code|pin)\s*(?:is)?\s*:?\s*(\S+)/i.test(text);
|
|
74
|
+
return hasTrigger && hasKey;
|
|
76
75
|
},
|
|
77
76
|
handler: async (runtime, message, state) => {
|
|
78
77
|
const text = message.content?.text || "";
|
|
79
|
-
const
|
|
80
|
-
if (!
|
|
78
|
+
const keyMatch = text.match(/(?:password|key|code|pin)\s*(?:is)?\s*:?\s*(\S+)/i);
|
|
79
|
+
if (!keyMatch || !keyMatch[1]) {
|
|
81
80
|
return {
|
|
82
|
-
text: 'Please provide the admin
|
|
81
|
+
text: 'Please provide the key to unlock admin features. For example: "unlock admin, key is YOUR_KEY"',
|
|
83
82
|
success: false
|
|
84
83
|
};
|
|
85
84
|
}
|
|
86
|
-
const
|
|
85
|
+
const secretKey = keyMatch[1];
|
|
87
86
|
const service = runtime.getService("ADMIN_SERVICE");
|
|
88
87
|
if (!service) {
|
|
89
88
|
return {
|
|
@@ -91,9 +90,9 @@ var elevatePrivilegeAction = {
|
|
|
91
90
|
success: false
|
|
92
91
|
};
|
|
93
92
|
}
|
|
94
|
-
const success = service.unlock(
|
|
93
|
+
const success = service.unlock(secretKey);
|
|
95
94
|
return {
|
|
96
|
-
text: success ? "\u2705
|
|
95
|
+
text: success ? "\u2705 Administrative features unlocked. You now have access to global commands." : "\u274C Invalid secret key. Admin features remain locked.",
|
|
97
96
|
success
|
|
98
97
|
};
|
|
99
98
|
}
|
|
@@ -702,7 +701,7 @@ var adminPlugin = {
|
|
|
702
701
|
description: "Provides privileged administrative actions and global context providers once unlocked via an admin password.",
|
|
703
702
|
services: [AdminService],
|
|
704
703
|
actions: [
|
|
705
|
-
|
|
704
|
+
unlockAdminAction,
|
|
706
705
|
globalReportAction,
|
|
707
706
|
listAllUsersAction,
|
|
708
707
|
listAllRoomsAction,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/services/admin.ts","../src/actions/elevatePrivilege.ts","../src/actions/globalReport.ts","../src/actions/listAllUsers.ts","../src/actions/listAllRooms.ts","../src/actions/searchMessages.ts","../src/actions/userAudit.ts","../src/providers/globalContext.ts","../src/index.ts"],"sourcesContent":["import { IAgentRuntime, Service } from '@elizaos/core';\nimport crypto from 'crypto';\n\n/**\n * AdminService manages the unlocked state for admin privileges once the correct\n * password is provided via the `ELEVATE_PRIVILEGE` action.\n */\nexport class AdminService extends Service {\n static serviceType = 'ADMIN_SERVICE';\n \n private unlocked = false;\n private readonly passwordHash: string;\n\n capabilityDescription = 'Admin privilege management service';\n\n constructor(runtime?: IAgentRuntime) {\n super(runtime);\n if (!runtime) {\n throw new Error('AdminService requires runtime');\n }\n \n const pwd = runtime.getSetting('ADMIN_PASSWORD');\n if (!pwd) {\n runtime.logger.warn(\n '[plugin-admin] ADMIN_PASSWORD environment variable is not set. Elevation will always fail.'\n );\n }\n // Store SHA-256 hash for comparison\n this.passwordHash = pwd ? crypto.createHash('sha256').update(pwd).digest('hex') : '';\n }\n\n /**\n * Static method to start the service\n */\n static async start(runtime: IAgentRuntime): Promise<Service> {\n return new AdminService(runtime);\n }\n\n /**\n * Stop the service\n */\n async stop(): Promise<void> {\n this.unlocked = false;\n }\n\n /**\n * Attempt to unlock with the provided password.\n * Returns true on success, false otherwise.\n */\n public unlock(password: string): boolean {\n if (this.unlocked) return true;\n const hash = crypto.createHash('sha256').update(password).digest('hex');\n if (hash === this.passwordHash && this.passwordHash) {\n this.unlocked = true;\n this.runtime.logger.info('[plugin-admin] Admin privileges unlocked.');\n return true;\n }\n return false;\n }\n\n public isUnlocked(): boolean {\n return this.unlocked;\n }\n} ","import { Action, Memory, State } from '@elizaos/core';\nimport { AdminService } from '../services/admin';\nimport { z } from 'zod';\n\nconst paramsSchema = z.object({\n password: z.string().describe('The admin password'),\n});\n\n/**\n * Elevate privileges by providing the ADMIN_PASSWORD value. If successful, the\n * AdminService is unlocked enabling all other admin actions & providers.\n */\nexport const elevatePrivilegeAction: Action = {\n name: 'ELEVATE_PRIVILEGE',\n description: 'Elevate your privileges to admin by providing the admin password.',\n examples: [\n [\n { \n name: 'user', \n content: { text: 'Elevate my privileges to admin. Password: super-secret-123' } \n },\n { \n name: 'assistant', \n content: { text: 'Admin privileges granted.' } \n }\n ]\n ],\n validate: async (runtime, message: Memory, state?: State) => {\n // Check if message contains \"elevate\" and \"admin\" keywords\n const text = message.content?.text?.toLowerCase() || '';\n return text.includes('elevate') && (text.includes('admin') || text.includes('privilege'));\n },\n handler: async (runtime, message: Memory, state?: State) => {\n const text = message.content?.text || '';\n \n // Extract password from message - look for \"password:\" pattern\n const passwordMatch = text.match(/password:\\s*(\\S+)/i);\n if (!passwordMatch) {\n return {\n text: 'Please provide the admin password in the format: \"password: YOUR_PASSWORD\"',\n success: false\n };\n }\n\n const password = passwordMatch[1];\n const service = runtime.getService<AdminService>('ADMIN_SERVICE');\n \n if (!service) {\n return {\n text: 'Admin service not available.',\n success: false\n };\n }\n\n const success = service.unlock(password);\n \n return {\n text: success \n ? '✅ Admin privileges granted. You now have access to global commands.' \n : '❌ Invalid password. Admin privileges denied.',\n success\n };\n },\n}; ","import { Action, Memory, State, UUID } from '@elizaos/core';\nimport { AdminService } from '../services/admin';\n\nexport const globalReportAction: Action = {\n name: 'GLOBAL_REPORT',\n description: 'Generate a summary report of activity across all rooms for a given day',\n examples: [\n [\n { \n name: 'user', \n content: { text: 'Give me a global report for today' } \n },\n { \n name: 'assistant', \n content: { \n text: 'Daily Report:\\n📊 Total Messages: 142\\n🏠 Active Rooms: 5\\n\\nTop Rooms:\\n1. general (45 messages)\\n2. dev-chat (38 messages)\\n3. support (25 messages)'\n } \n }\n ]\n ],\n validate: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) return false;\n \n const text = message.content?.text?.toLowerCase() || '';\n return text.includes('report') && (text.includes('global') || text.includes('daily') || text.includes('today'));\n },\n handler: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) {\n return {\n text: '❌ Admin privileges required for global reports.',\n success: false\n };\n }\n\n try {\n const text = message.content?.text || '';\n \n // Extract date if specified, otherwise use today\n let date = new Date().toISOString().slice(0, 10);\n const dateMatch = text.match(/(\\d{4}-\\d{2}-\\d{2})/);\n if (dateMatch) {\n date = dateMatch[1];\n }\n \n const startTime = new Date(date).getTime();\n const endTime = startTime + 24 * 60 * 60 * 1000;\n\n // Get all memories for the date range\n const memories = await runtime.getMemories({\n tableName: 'memories',\n agentId: runtime.agentId,\n start: startTime,\n end: endTime\n });\n\n // Group by room\n const roomStats = new Map<string, number>();\n for (const memory of memories) {\n roomStats.set(memory.roomId, (roomStats.get(memory.roomId) || 0) + 1);\n }\n\n // Get room details\n const roomIds = Array.from(roomStats.keys()) as UUID[];\n const rooms = await runtime.getRoomsByIds(roomIds);\n const roomMap = new Map(rooms?.map(r => [r.id, r]) || []);\n\n const topRooms = Array.from(roomStats.entries())\n .map(([roomId, count]) => ({\n roomId,\n roomName: roomMap.get(roomId as UUID)?.name || `Room ${roomId.slice(0, 8)}`,\n count\n }))\n .sort((a, b) => b.count - a.count)\n .slice(0, 5);\n\n // Build report text\n let reportText = `📊 **Daily Report for ${date}**\\n\\n`;\n reportText += `**Summary:**\\n`;\n reportText += `• Total Messages: ${memories.length}\\n`;\n reportText += `• Active Rooms: ${roomStats.size}\\n\\n`;\n \n if (topRooms.length > 0) {\n reportText += `**Top ${topRooms.length} Most Active Rooms:**\\n`;\n topRooms.forEach((room, idx) => {\n reportText += `${idx + 1}. ${room.roomName} (${room.count} messages)\\n`;\n });\n } else {\n reportText += `No activity found for this date.\\n`;\n }\n\n return {\n text: reportText,\n data: {\n date,\n totalMessages: memories.length,\n totalRooms: roomStats.size,\n topRooms\n },\n success: true\n };\n } catch (error) {\n runtime.logger.error('[plugin-admin] Error in globalReport:', error);\n return {\n text: '❌ Error generating report. Please check the logs.',\n success: false\n };\n }\n },\n}; ","import { Action, Memory, State, UUID } from '@elizaos/core';\nimport { AdminService } from '../services/admin';\n\nexport const listAllUsersAction: Action = {\n name: 'LIST_ALL_USERS',\n description: 'Return a list of all users/entities known to the agent globally.',\n examples: [\n [\n { \n name: 'user', \n content: { text: 'List all users' } \n },\n { \n name: 'assistant', \n content: { \n text: 'Found 12 users:\\n\\n1. Alice - ID: abc123...\\n2. Bob - ID: def456...\\n3. Charlie - ID: ghi789...' \n } \n }\n ]\n ],\n validate: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) return false;\n \n const text = message.content?.text?.toLowerCase() || '';\n return (text.includes('list') || text.includes('show')) && \n (text.includes('users') || text.includes('entities') || text.includes('everyone'));\n },\n handler: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) {\n return {\n text: '❌ Admin privileges required to list users.',\n success: false\n };\n }\n\n try {\n // Get all unique entity IDs from memories\n const memories = await runtime.getMemories({\n tableName: 'memories',\n agentId: runtime.agentId,\n count: 1000 // Get more to ensure we capture all unique users\n });\n\n // Extract unique entity IDs\n const entityIds = new Set<string>();\n for (const memory of memories) {\n if (memory.entityId && memory.entityId !== runtime.agentId) {\n entityIds.add(memory.entityId);\n }\n }\n\n // Get entity details\n const entities = await runtime.getEntitiesByIds(Array.from(entityIds) as UUID[]);\n\n if (!entities || entities.length === 0) {\n return {\n text: 'No users found in the system.',\n success: true\n };\n }\n\n // Build response text\n let responseText = `👥 **Found ${entities.length} users:**\\n\\n`;\n \n entities.slice(0, 20).forEach((entity, idx) => {\n const primaryName = entity.names?.[0] || 'Unknown';\n const id = entity.id || 'no-id';\n responseText += `${idx + 1}. **${primaryName}** - ID: ${id.slice(0, 8)}...\\n`;\n });\n\n if (entities.length > 20) {\n responseText += `\\n... and ${entities.length - 20} more users.`;\n }\n\n return {\n text: responseText,\n data: {\n totalUsers: entities.length,\n users: entities.map(e => ({\n id: e.id,\n names: e.names || [],\n metadata: e.metadata || {}\n }))\n },\n success: true\n };\n } catch (error) {\n runtime.logger.error('[plugin-admin] Error in listAllUsers:', error);\n return {\n text: '❌ Error fetching users. Please check the logs.',\n success: false\n };\n }\n },\n}; ","import { Action, Memory, State, UUID } from '@elizaos/core';\nimport { AdminService } from '../services/admin';\n\nexport const listAllRoomsAction: Action = {\n name: 'LIST_ALL_ROOMS',\n description: 'Return a list of all chat rooms/channels known to the agent globally.',\n examples: [\n [\n { \n name: 'user', \n content: { text: 'List all rooms' } \n },\n { \n name: 'assistant', \n content: { \n text: 'Found 5 rooms:\\n\\n1. general - ID: abc123...\\n2. dev-chat - ID: def456...\\n3. support - ID: ghi789...' \n } \n }\n ]\n ],\n validate: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) return false;\n \n const text = message.content?.text?.toLowerCase() || '';\n return (text.includes('list') || text.includes('show')) && \n (text.includes('rooms') || text.includes('channels'));\n },\n handler: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) {\n return {\n text: '❌ Admin privileges required to list rooms.',\n success: false\n };\n }\n\n try {\n // Get unique room IDs from memories\n const memories = await runtime.getMemories({\n tableName: 'memories',\n agentId: runtime.agentId,\n count: 1000\n });\n\n // Extract unique room IDs\n const roomIds = new Set<string>();\n for (const memory of memories) {\n if (memory.roomId) {\n roomIds.add(memory.roomId);\n }\n }\n\n // Get room details\n const rooms = await runtime.getRoomsByIds(Array.from(roomIds) as UUID[]);\n\n if (!rooms || rooms.length === 0) {\n return {\n text: 'No rooms found in the system.',\n success: true\n };\n }\n\n // Build response text\n let responseText = `🏠 **Found ${rooms.length} rooms:**\\n\\n`;\n \n rooms.slice(0, 20).forEach((room, idx) => {\n const roomName = room.name || `Room ${room.id.slice(0, 8)}`;\n responseText += `${idx + 1}. **${roomName}** - ID: ${room.id.slice(0, 8)}...\\n`;\n if (room.source) {\n responseText += ` Source: ${room.source}\\n`;\n }\n });\n\n if (rooms.length > 20) {\n responseText += `\\n... and ${rooms.length - 20} more rooms.`;\n }\n\n return {\n text: responseText,\n data: {\n totalRooms: rooms.length,\n rooms: rooms.map(r => ({\n id: r.id,\n name: r.name || null,\n source: r.source,\n type: r.type,\n metadata: r.metadata || {}\n }))\n },\n success: true\n };\n } catch (error) {\n runtime.logger.error('[plugin-admin] Error in listAllRooms:', error);\n return {\n text: '❌ Error fetching rooms. Please check the logs.',\n success: false\n };\n }\n },\n}; ","import { Action, Memory, State } from '@elizaos/core';\nimport { AdminService } from '../services/admin';\n\nexport const searchMessagesAction: Action = {\n name: 'SEARCH_MESSAGES',\n description: 'Search for messages across all rooms globally.',\n examples: [\n [\n { \n name: 'user', \n content: { text: 'Search all messages for \"production outage\"' } \n },\n { \n name: 'assistant', \n content: { \n text: 'Found 3 messages matching \"production outage\":\\n\\n1. [2024-01-15 14:32] Entity abc123: \"We have a production outage affecting the API\"\\n2. [2024-01-15 14:35] Entity def456: \"I\\'m investigating the production outage now\"' \n } \n }\n ]\n ],\n validate: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) return false;\n \n const text = message.content?.text?.toLowerCase() || '';\n return text.includes('search') && (text.includes('message') || text.includes('all'));\n },\n handler: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) {\n return {\n text: '❌ Admin privileges required for global search.',\n success: false\n };\n }\n\n try {\n const text = message.content?.text || '';\n \n // Extract search query from message\n const queryMatch = text.match(/search\\s+(?:all\\s+)?(?:messages?\\s+)?(?:for\\s+)?[\"']?([^\"']+)[\"']?/i);\n if (!queryMatch) {\n return {\n text: 'Please specify what to search for. Example: \"Search all messages for production issue\"',\n success: false\n };\n }\n\n const searchQuery = queryMatch[1].trim();\n \n // Get all memories (with a reasonable limit)\n const memories = await runtime.getMemories({\n tableName: 'memories',\n agentId: runtime.agentId,\n count: 500\n });\n\n // Filter memories that contain the search query\n const searchLower = searchQuery.toLowerCase();\n const matches = memories.filter(mem => \n mem.content?.text?.toLowerCase().includes(searchLower)\n );\n\n if (matches.length === 0) {\n return {\n text: `No messages found containing \"${searchQuery}\"`,\n success: true\n };\n }\n\n // Sort by timestamp (newest first)\n matches.sort((a, b) => (b.createdAt || 0) - (a.createdAt || 0));\n\n // Get room details for context\n const roomIds = [...new Set(matches.map(m => m.roomId))];\n const rooms = await runtime.getRoomsByIds(roomIds);\n const roomMap = new Map(rooms?.map(r => [r.id, r]) || []);\n\n // Build response text\n let responseText = `🔍 **Found ${matches.length} messages matching \"${searchQuery}\":**\\n\\n`;\n \n matches.slice(0, 10).forEach((match, idx) => {\n const timestamp = match.createdAt \n ? new Date(match.createdAt).toISOString().replace('T', ' ').slice(0, 16)\n : 'Unknown time';\n const roomName = roomMap.get(match.roomId)?.name || `Room ${match.roomId.slice(0, 8)}`;\n const text = match.content?.text || '[No text]';\n const preview = text.length > 100 ? text.slice(0, 100) + '...' : text;\n \n responseText += `${idx + 1}. **[${timestamp}]** in ${roomName}\\n`;\n responseText += ` Entity ${match.entityId.slice(0, 8)}: \"${preview}\"\\n\\n`;\n });\n\n if (matches.length > 10) {\n responseText += `... and ${matches.length - 10} more messages.`;\n }\n\n return {\n text: responseText,\n data: {\n query: searchQuery,\n totalResults: matches.length,\n results: matches.slice(0, 20).map(m => ({\n id: m.id,\n roomId: m.roomId,\n entityId: m.entityId,\n content: m.content,\n createdAt: m.createdAt\n }))\n },\n success: true\n };\n } catch (error) {\n runtime.logger.error('[plugin-admin] Error in searchMessages:', error);\n return {\n text: '❌ Error searching messages. Please check the logs.',\n success: false\n };\n }\n },\n}; ","import { Action, Memory, State, UUID } from '@elizaos/core';\nimport { AdminService } from '../services/admin';\n\nexport const userAuditAction: Action = {\n name: 'USER_AUDIT',\n description: 'Generate a detailed audit report for a specific user/entity.',\n examples: [\n [\n { \n name: 'user', \n content: { text: 'Audit user abc123' } \n },\n { \n name: 'assistant', \n content: { \n text: 'User Audit Report:\\n\\n**Entity ID:** abc123...\\n**First Seen:** 2024-01-15 10:30\\n**Total Messages:** 45\\n**Active Rooms:** 3\\n**Most Active:** general (25 messages)' \n } \n }\n ]\n ],\n validate: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) return false;\n \n const text = message.content?.text?.toLowerCase() || '';\n return text.includes('audit') && (text.includes('user') || text.includes('entity'));\n },\n handler: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) {\n return {\n text: '❌ Admin privileges required for user audits.',\n success: false\n };\n }\n\n try {\n const text = message.content?.text || '';\n \n // Extract user ID from message\n const idMatch = text.match(/(?:audit\\s+(?:user|entity)\\s+)?([a-f0-9-]{8,})/i);\n if (!idMatch) {\n return {\n text: 'Please specify a user ID to audit. Example: \"Audit user abc123\"',\n success: false\n };\n }\n\n const userId = idMatch[1];\n \n // Get all messages from this user using getMemories instead\n const allMemories = await runtime.getMemories({\n tableName: 'memories',\n agentId: runtime.agentId,\n count: 1000\n });\n\n // Filter for the specific user\n const memories = allMemories.filter(m => m.entityId === userId);\n\n if (!memories.length) {\n return {\n text: `No activity found for user ${userId}`,\n success: true\n };\n }\n\n // Get entity details\n const entities = await runtime.getEntitiesByIds([userId as UUID]);\n const entity = entities?.[0];\n\n // Analyze activity\n const roomActivity = new Map<string, number>();\n let firstSeen = Infinity;\n let lastSeen = 0;\n\n for (const memory of memories) {\n const timestamp = memory.createdAt || 0;\n if (timestamp < firstSeen) firstSeen = timestamp;\n if (timestamp > lastSeen) lastSeen = timestamp;\n \n roomActivity.set(memory.roomId, (roomActivity.get(memory.roomId) || 0) + 1);\n }\n\n // Get room details\n const roomIds = Array.from(roomActivity.keys()) as UUID[];\n const rooms = await runtime.getRoomsByIds(roomIds);\n const roomMap = new Map(rooms?.map(r => [r.id, r]) || []);\n\n // Sort rooms by activity\n const topRooms = Array.from(roomActivity.entries())\n .map(([roomId, count]) => ({\n roomId,\n roomName: roomMap.get(roomId as UUID)?.name || `Room ${roomId.slice(0, 8)}`,\n count\n }))\n .sort((a, b) => b.count - a.count);\n\n // Build audit report\n let reportText = `📊 **User Audit Report**\\n\\n`;\n reportText += `**Entity ID:** ${userId}\\n`;\n reportText += `**Name(s):** ${entity?.names?.join(', ') || 'Unknown'}\\n`;\n reportText += `**First Seen:** ${new Date(firstSeen).toISOString()}\\n`;\n reportText += `**Last Seen:** ${new Date(lastSeen).toISOString()}\\n`;\n reportText += `**Total Messages:** ${memories.length}\\n`;\n reportText += `**Active Rooms:** ${roomActivity.size}\\n\\n`;\n \n reportText += `**Room Activity:**\\n`;\n topRooms.slice(0, 5).forEach((room, idx) => {\n reportText += `${idx + 1}. ${room.roomName} (${room.count} messages)\\n`;\n });\n\n // Add recent messages sample\n reportText += `\\n**Recent Messages:**\\n`;\n memories.slice(0, 5).forEach((msg, idx) => {\n const timestamp = new Date(msg.createdAt || 0).toISOString().slice(0, 16);\n const text = msg.content?.text || '[No text]';\n const preview = text.length > 80 ? text.slice(0, 80) + '...' : text;\n reportText += `${idx + 1}. [${timestamp}] \"${preview}\"\\n`;\n });\n\n return {\n text: reportText,\n data: {\n userId,\n entity,\n totalMessages: memories.length,\n firstSeen: new Date(firstSeen).toISOString(),\n lastSeen: new Date(lastSeen).toISOString(),\n roomActivity: topRooms\n },\n success: true\n };\n } catch (error) {\n runtime.logger.error('[plugin-admin] Error in userAudit:', error);\n return {\n text: '❌ Error generating user audit. Please check the logs.',\n success: false\n };\n }\n },\n}; ","import { Provider, ProviderResult, Memory, State, UUID } from '@elizaos/core';\nimport { AdminService } from '../services/admin';\n\n/**\n * Injects a summary of global events and messages across all rooms/channels\n * into the LLM prompt when admin privileges are unlocked.\n */\nexport const globalContextProvider: Provider = {\n name: 'GLOBAL_CONTEXT',\n description: 'Provides a high-level summary of all recent events across all rooms when admin is unlocked.',\n dynamic: true,\n private: true, // Only accessible when admin is unlocked\n get: async (runtime, message: Memory, state: State): Promise<ProviderResult> => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) {\n return {\n values: {},\n data: {},\n text: ''\n };\n }\n\n try {\n // Fetch last 50 messages across all rooms from memories table\n const memories = await runtime.getMemories({\n tableName: 'memories',\n count: 50,\n agentId: runtime.agentId\n });\n\n if (!memories.length) {\n return {\n values: {\n globalMessageCount: 0,\n globalRoomCount: 0\n },\n data: {\n messages: []\n },\n text: 'No recent messages found across all rooms.'\n };\n }\n\n // Group messages by room\n const roomMessages = new Map<string, any[]>();\n for (const msg of memories) {\n if (!roomMessages.has(msg.roomId)) {\n roomMessages.set(msg.roomId, []);\n }\n roomMessages.get(msg.roomId)!.push(msg);\n }\n\n // Build summary\n let summary = `Global Activity Summary (${memories.length} recent messages across ${roomMessages.size} rooms):\\n\\n`;\n \n for (const [roomId, msgs] of roomMessages) {\n const roomInfo = await runtime.getRoomsByIds([roomId as UUID]);\n const roomName = roomInfo?.[0]?.name || `Room ${roomId.slice(0, 8)}`;\n \n summary += `=== ${roomName} (${msgs.length} messages) ===\\n`;\n for (const msg of msgs.slice(0, 5)) { // Show max 5 messages per room\n const timestamp = new Date(msg.createdAt || 0).toISOString();\n const text = msg.content?.text || '[No text]';\n summary += `[${timestamp}] Entity ${msg.entityId.slice(0, 8)}: ${text.slice(0, 100)}${text.length > 100 ? '...' : ''}\\n`;\n }\n if (msgs.length > 5) {\n summary += `... and ${msgs.length - 5} more messages\\n`;\n }\n summary += '\\n';\n }\n\n return {\n values: {\n globalMessageCount: memories.length,\n globalRoomCount: roomMessages.size\n },\n data: {\n recentGlobalMessages: memories.slice(0, 10),\n roomsSummary: Array.from(roomMessages.entries()).map(([roomId, msgs]) => ({\n roomId,\n messageCount: msgs.length\n }))\n },\n text: summary\n };\n } catch (error) {\n runtime.logger.error('[plugin-admin] Error in globalContextProvider:', error);\n return {\n values: {},\n data: {},\n text: 'Error fetching global context.'\n };\n }\n },\n}; ","import { Plugin } from '@elizaos/core';\nimport { AdminService } from './services/admin';\n\nimport { elevatePrivilegeAction } from './actions/elevatePrivilege';\nimport { globalReportAction } from './actions/globalReport';\nimport { listAllUsersAction } from './actions/listAllUsers';\nimport { listAllRoomsAction } from './actions/listAllRooms';\nimport { searchMessagesAction } from './actions/searchMessages';\nimport { userAuditAction } from './actions/userAudit';\n\nimport { globalContextProvider } from './providers/globalContext';\n\nexport const adminPlugin: Plugin = {\n name: '@elizaos/plugin-admin',\n description:\n 'Provides privileged administrative actions and global context providers once unlocked via an admin password.',\n services: [AdminService],\n actions: [\n elevatePrivilegeAction, \n globalReportAction, \n listAllUsersAction, \n listAllRoomsAction,\n searchMessagesAction,\n userAuditAction\n ],\n providers: [globalContextProvider],\n};\n\nexport { AdminService } from './services/admin'; "],"mappings":"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","names":["text","text"]}
|
|
1
|
+
{"version":3,"sources":["../src/services/admin.ts","../src/actions/unlockAdmin.ts","../src/actions/globalReport.ts","../src/actions/listAllUsers.ts","../src/actions/listAllRooms.ts","../src/actions/searchMessages.ts","../src/actions/userAudit.ts","../src/providers/globalContext.ts","../src/index.ts"],"sourcesContent":["import { IAgentRuntime, Service } from '@elizaos/core';\nimport crypto from 'crypto';\n\n/**\n * AdminService manages the unlocked state for admin privileges once the correct\n * password is provided via the `ELEVATE_PRIVILEGE` action.\n */\nexport class AdminService extends Service {\n static serviceType = 'ADMIN_SERVICE';\n \n private unlocked = false;\n private readonly passwordHash: string;\n\n capabilityDescription = 'Admin privilege management service';\n\n constructor(runtime?: IAgentRuntime) {\n super(runtime);\n if (!runtime) {\n throw new Error('AdminService requires runtime');\n }\n \n const pwd = runtime.getSetting('ADMIN_PASSWORD');\n if (!pwd) {\n runtime.logger.warn(\n '[plugin-admin] ADMIN_PASSWORD environment variable is not set. Elevation will always fail.'\n );\n }\n // Store SHA-256 hash for comparison\n this.passwordHash = pwd ? crypto.createHash('sha256').update(pwd).digest('hex') : '';\n }\n\n /**\n * Static method to start the service\n */\n static async start(runtime: IAgentRuntime): Promise<Service> {\n return new AdminService(runtime);\n }\n\n /**\n * Stop the service\n */\n async stop(): Promise<void> {\n this.unlocked = false;\n }\n\n /**\n * Attempt to unlock with the provided password.\n * Returns true on success, false otherwise.\n */\n public unlock(password: string): boolean {\n if (this.unlocked) return true;\n const hash = crypto.createHash('sha256').update(password).digest('hex');\n if (hash === this.passwordHash && this.passwordHash) {\n this.unlocked = true;\n this.runtime.logger.info('[plugin-admin] Admin privileges unlocked.');\n return true;\n }\n return false;\n }\n\n public isUnlocked(): boolean {\n return this.unlocked;\n }\n} ","import { Action, Memory, State } from '@elizaos/core';\nimport { AdminService } from '../services/admin';\n\n/**\n * Unlocks administrative features for the current session by providing a secret key.\n * This action is framed to be less alarming to the base model's safety filters.\n */\nexport const unlockAdminAction: Action = {\n name: 'UNLOCK_ADMIN_FEATURES',\n description: 'Unlocks special administrative features for the current session using a secret key.',\n similes: ['unlock admin', 'use admin key', 'enter admin mode', 'elevate privileges'],\n examples: [\n [\n { \n name: 'user', \n content: { text: 'Unlock admin features. The key is super-secret-123' } \n },\n { \n name: 'assistant', \n content: { text: 'Administrative features unlocked.' } \n }\n ]\n ],\n validate: async (runtime, message: Memory, state?: State) => {\n const text = message.content?.text?.toLowerCase() || '';\n const hasTrigger = text.includes('admin') && (text.includes('unlock') || text.includes('key') || text.includes('password') || text.includes('priv'));\n const hasKey = /(?:password|key|code|pin)\\s*(?:is)?\\s*:?\\s*(\\S+)/i.test(text);\n return hasTrigger && hasKey;\n },\n handler: async (runtime, message: Memory, state?: State) => {\n const text = message.content?.text || '';\n \n // Flexible regex to find the key/password\n const keyMatch = text.match(/(?:password|key|code|pin)\\s*(?:is)?\\s*:?\\s*(\\S+)/i);\n \n if (!keyMatch || !keyMatch[1]) {\n return {\n text: 'Please provide the key to unlock admin features. For example: \"unlock admin, key is YOUR_KEY\"',\n success: false\n };\n }\n\n const secretKey = keyMatch[1];\n const service = runtime.getService<AdminService>('ADMIN_SERVICE');\n \n if (!service) {\n return {\n text: 'Admin service not available.',\n success: false\n };\n }\n\n const success = service.unlock(secretKey);\n \n return {\n text: success \n ? '✅ Administrative features unlocked. You now have access to global commands.' \n : '❌ Invalid secret key. Admin features remain locked.',\n success\n };\n },\n}; ","import { Action, Memory, State, UUID } from '@elizaos/core';\nimport { AdminService } from '../services/admin';\n\nexport const globalReportAction: Action = {\n name: 'GLOBAL_REPORT',\n description: 'Generate a summary report of activity across all rooms for a given day',\n examples: [\n [\n { \n name: 'user', \n content: { text: 'Give me a global report for today' } \n },\n { \n name: 'assistant', \n content: { \n text: 'Daily Report:\\n📊 Total Messages: 142\\n🏠 Active Rooms: 5\\n\\nTop Rooms:\\n1. general (45 messages)\\n2. dev-chat (38 messages)\\n3. support (25 messages)'\n } \n }\n ]\n ],\n validate: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) return false;\n \n const text = message.content?.text?.toLowerCase() || '';\n return text.includes('report') && (text.includes('global') || text.includes('daily') || text.includes('today'));\n },\n handler: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) {\n return {\n text: '❌ Admin privileges required for global reports.',\n success: false\n };\n }\n\n try {\n const text = message.content?.text || '';\n \n // Extract date if specified, otherwise use today\n let date = new Date().toISOString().slice(0, 10);\n const dateMatch = text.match(/(\\d{4}-\\d{2}-\\d{2})/);\n if (dateMatch) {\n date = dateMatch[1];\n }\n \n const startTime = new Date(date).getTime();\n const endTime = startTime + 24 * 60 * 60 * 1000;\n\n // Get all memories for the date range\n const memories = await runtime.getMemories({\n tableName: 'memories',\n agentId: runtime.agentId,\n start: startTime,\n end: endTime\n });\n\n // Group by room\n const roomStats = new Map<string, number>();\n for (const memory of memories) {\n roomStats.set(memory.roomId, (roomStats.get(memory.roomId) || 0) + 1);\n }\n\n // Get room details\n const roomIds = Array.from(roomStats.keys()) as UUID[];\n const rooms = await runtime.getRoomsByIds(roomIds);\n const roomMap = new Map(rooms?.map(r => [r.id, r]) || []);\n\n const topRooms = Array.from(roomStats.entries())\n .map(([roomId, count]) => ({\n roomId,\n roomName: roomMap.get(roomId as UUID)?.name || `Room ${roomId.slice(0, 8)}`,\n count\n }))\n .sort((a, b) => b.count - a.count)\n .slice(0, 5);\n\n // Build report text\n let reportText = `📊 **Daily Report for ${date}**\\n\\n`;\n reportText += `**Summary:**\\n`;\n reportText += `• Total Messages: ${memories.length}\\n`;\n reportText += `• Active Rooms: ${roomStats.size}\\n\\n`;\n \n if (topRooms.length > 0) {\n reportText += `**Top ${topRooms.length} Most Active Rooms:**\\n`;\n topRooms.forEach((room, idx) => {\n reportText += `${idx + 1}. ${room.roomName} (${room.count} messages)\\n`;\n });\n } else {\n reportText += `No activity found for this date.\\n`;\n }\n\n return {\n text: reportText,\n data: {\n date,\n totalMessages: memories.length,\n totalRooms: roomStats.size,\n topRooms\n },\n success: true\n };\n } catch (error) {\n runtime.logger.error('[plugin-admin] Error in globalReport:', error);\n return {\n text: '❌ Error generating report. Please check the logs.',\n success: false\n };\n }\n },\n}; ","import { Action, Memory, State, UUID } from '@elizaos/core';\nimport { AdminService } from '../services/admin';\n\nexport const listAllUsersAction: Action = {\n name: 'LIST_ALL_USERS',\n description: 'Return a list of all users/entities known to the agent globally.',\n examples: [\n [\n { \n name: 'user', \n content: { text: 'List all users' } \n },\n { \n name: 'assistant', \n content: { \n text: 'Found 12 users:\\n\\n1. Alice - ID: abc123...\\n2. Bob - ID: def456...\\n3. Charlie - ID: ghi789...' \n } \n }\n ]\n ],\n validate: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) return false;\n \n const text = message.content?.text?.toLowerCase() || '';\n return (text.includes('list') || text.includes('show')) && \n (text.includes('users') || text.includes('entities') || text.includes('everyone'));\n },\n handler: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) {\n return {\n text: '❌ Admin privileges required to list users.',\n success: false\n };\n }\n\n try {\n // Get all unique entity IDs from memories\n const memories = await runtime.getMemories({\n tableName: 'memories',\n agentId: runtime.agentId,\n count: 1000 // Get more to ensure we capture all unique users\n });\n\n // Extract unique entity IDs\n const entityIds = new Set<string>();\n for (const memory of memories) {\n if (memory.entityId && memory.entityId !== runtime.agentId) {\n entityIds.add(memory.entityId);\n }\n }\n\n // Get entity details\n const entities = await runtime.getEntitiesByIds(Array.from(entityIds) as UUID[]);\n\n if (!entities || entities.length === 0) {\n return {\n text: 'No users found in the system.',\n success: true\n };\n }\n\n // Build response text\n let responseText = `👥 **Found ${entities.length} users:**\\n\\n`;\n \n entities.slice(0, 20).forEach((entity, idx) => {\n const primaryName = entity.names?.[0] || 'Unknown';\n const id = entity.id || 'no-id';\n responseText += `${idx + 1}. **${primaryName}** - ID: ${id.slice(0, 8)}...\\n`;\n });\n\n if (entities.length > 20) {\n responseText += `\\n... and ${entities.length - 20} more users.`;\n }\n\n return {\n text: responseText,\n data: {\n totalUsers: entities.length,\n users: entities.map(e => ({\n id: e.id,\n names: e.names || [],\n metadata: e.metadata || {}\n }))\n },\n success: true\n };\n } catch (error) {\n runtime.logger.error('[plugin-admin] Error in listAllUsers:', error);\n return {\n text: '❌ Error fetching users. Please check the logs.',\n success: false\n };\n }\n },\n}; ","import { Action, Memory, State, UUID } from '@elizaos/core';\nimport { AdminService } from '../services/admin';\n\nexport const listAllRoomsAction: Action = {\n name: 'LIST_ALL_ROOMS',\n description: 'Return a list of all chat rooms/channels known to the agent globally.',\n examples: [\n [\n { \n name: 'user', \n content: { text: 'List all rooms' } \n },\n { \n name: 'assistant', \n content: { \n text: 'Found 5 rooms:\\n\\n1. general - ID: abc123...\\n2. dev-chat - ID: def456...\\n3. support - ID: ghi789...' \n } \n }\n ]\n ],\n validate: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) return false;\n \n const text = message.content?.text?.toLowerCase() || '';\n return (text.includes('list') || text.includes('show')) && \n (text.includes('rooms') || text.includes('channels'));\n },\n handler: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) {\n return {\n text: '❌ Admin privileges required to list rooms.',\n success: false\n };\n }\n\n try {\n // Get unique room IDs from memories\n const memories = await runtime.getMemories({\n tableName: 'memories',\n agentId: runtime.agentId,\n count: 1000\n });\n\n // Extract unique room IDs\n const roomIds = new Set<string>();\n for (const memory of memories) {\n if (memory.roomId) {\n roomIds.add(memory.roomId);\n }\n }\n\n // Get room details\n const rooms = await runtime.getRoomsByIds(Array.from(roomIds) as UUID[]);\n\n if (!rooms || rooms.length === 0) {\n return {\n text: 'No rooms found in the system.',\n success: true\n };\n }\n\n // Build response text\n let responseText = `🏠 **Found ${rooms.length} rooms:**\\n\\n`;\n \n rooms.slice(0, 20).forEach((room, idx) => {\n const roomName = room.name || `Room ${room.id.slice(0, 8)}`;\n responseText += `${idx + 1}. **${roomName}** - ID: ${room.id.slice(0, 8)}...\\n`;\n if (room.source) {\n responseText += ` Source: ${room.source}\\n`;\n }\n });\n\n if (rooms.length > 20) {\n responseText += `\\n... and ${rooms.length - 20} more rooms.`;\n }\n\n return {\n text: responseText,\n data: {\n totalRooms: rooms.length,\n rooms: rooms.map(r => ({\n id: r.id,\n name: r.name || null,\n source: r.source,\n type: r.type,\n metadata: r.metadata || {}\n }))\n },\n success: true\n };\n } catch (error) {\n runtime.logger.error('[plugin-admin] Error in listAllRooms:', error);\n return {\n text: '❌ Error fetching rooms. Please check the logs.',\n success: false\n };\n }\n },\n}; ","import { Action, Memory, State } from '@elizaos/core';\nimport { AdminService } from '../services/admin';\n\nexport const searchMessagesAction: Action = {\n name: 'SEARCH_MESSAGES',\n description: 'Search for messages across all rooms globally.',\n examples: [\n [\n { \n name: 'user', \n content: { text: 'Search all messages for \"production outage\"' } \n },\n { \n name: 'assistant', \n content: { \n text: 'Found 3 messages matching \"production outage\":\\n\\n1. [2024-01-15 14:32] Entity abc123: \"We have a production outage affecting the API\"\\n2. [2024-01-15 14:35] Entity def456: \"I\\'m investigating the production outage now\"' \n } \n }\n ]\n ],\n validate: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) return false;\n \n const text = message.content?.text?.toLowerCase() || '';\n return text.includes('search') && (text.includes('message') || text.includes('all'));\n },\n handler: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) {\n return {\n text: '❌ Admin privileges required for global search.',\n success: false\n };\n }\n\n try {\n const text = message.content?.text || '';\n \n // Extract search query from message\n const queryMatch = text.match(/search\\s+(?:all\\s+)?(?:messages?\\s+)?(?:for\\s+)?[\"']?([^\"']+)[\"']?/i);\n if (!queryMatch) {\n return {\n text: 'Please specify what to search for. Example: \"Search all messages for production issue\"',\n success: false\n };\n }\n\n const searchQuery = queryMatch[1].trim();\n \n // Get all memories (with a reasonable limit)\n const memories = await runtime.getMemories({\n tableName: 'memories',\n agentId: runtime.agentId,\n count: 500\n });\n\n // Filter memories that contain the search query\n const searchLower = searchQuery.toLowerCase();\n const matches = memories.filter(mem => \n mem.content?.text?.toLowerCase().includes(searchLower)\n );\n\n if (matches.length === 0) {\n return {\n text: `No messages found containing \"${searchQuery}\"`,\n success: true\n };\n }\n\n // Sort by timestamp (newest first)\n matches.sort((a, b) => (b.createdAt || 0) - (a.createdAt || 0));\n\n // Get room details for context\n const roomIds = [...new Set(matches.map(m => m.roomId))];\n const rooms = await runtime.getRoomsByIds(roomIds);\n const roomMap = new Map(rooms?.map(r => [r.id, r]) || []);\n\n // Build response text\n let responseText = `🔍 **Found ${matches.length} messages matching \"${searchQuery}\":**\\n\\n`;\n \n matches.slice(0, 10).forEach((match, idx) => {\n const timestamp = match.createdAt \n ? new Date(match.createdAt).toISOString().replace('T', ' ').slice(0, 16)\n : 'Unknown time';\n const roomName = roomMap.get(match.roomId)?.name || `Room ${match.roomId.slice(0, 8)}`;\n const text = match.content?.text || '[No text]';\n const preview = text.length > 100 ? text.slice(0, 100) + '...' : text;\n \n responseText += `${idx + 1}. **[${timestamp}]** in ${roomName}\\n`;\n responseText += ` Entity ${match.entityId.slice(0, 8)}: \"${preview}\"\\n\\n`;\n });\n\n if (matches.length > 10) {\n responseText += `... and ${matches.length - 10} more messages.`;\n }\n\n return {\n text: responseText,\n data: {\n query: searchQuery,\n totalResults: matches.length,\n results: matches.slice(0, 20).map(m => ({\n id: m.id,\n roomId: m.roomId,\n entityId: m.entityId,\n content: m.content,\n createdAt: m.createdAt\n }))\n },\n success: true\n };\n } catch (error) {\n runtime.logger.error('[plugin-admin] Error in searchMessages:', error);\n return {\n text: '❌ Error searching messages. Please check the logs.',\n success: false\n };\n }\n },\n}; ","import { Action, Memory, State, UUID } from '@elizaos/core';\nimport { AdminService } from '../services/admin';\n\nexport const userAuditAction: Action = {\n name: 'USER_AUDIT',\n description: 'Generate a detailed audit report for a specific user/entity.',\n examples: [\n [\n { \n name: 'user', \n content: { text: 'Audit user abc123' } \n },\n { \n name: 'assistant', \n content: { \n text: 'User Audit Report:\\n\\n**Entity ID:** abc123...\\n**First Seen:** 2024-01-15 10:30\\n**Total Messages:** 45\\n**Active Rooms:** 3\\n**Most Active:** general (25 messages)' \n } \n }\n ]\n ],\n validate: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) return false;\n \n const text = message.content?.text?.toLowerCase() || '';\n return text.includes('audit') && (text.includes('user') || text.includes('entity'));\n },\n handler: async (runtime, message: Memory, state?: State) => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) {\n return {\n text: '❌ Admin privileges required for user audits.',\n success: false\n };\n }\n\n try {\n const text = message.content?.text || '';\n \n // Extract user ID from message\n const idMatch = text.match(/(?:audit\\s+(?:user|entity)\\s+)?([a-f0-9-]{8,})/i);\n if (!idMatch) {\n return {\n text: 'Please specify a user ID to audit. Example: \"Audit user abc123\"',\n success: false\n };\n }\n\n const userId = idMatch[1];\n \n // Get all messages from this user using getMemories instead\n const allMemories = await runtime.getMemories({\n tableName: 'memories',\n agentId: runtime.agentId,\n count: 1000\n });\n\n // Filter for the specific user\n const memories = allMemories.filter(m => m.entityId === userId);\n\n if (!memories.length) {\n return {\n text: `No activity found for user ${userId}`,\n success: true\n };\n }\n\n // Get entity details\n const entities = await runtime.getEntitiesByIds([userId as UUID]);\n const entity = entities?.[0];\n\n // Analyze activity\n const roomActivity = new Map<string, number>();\n let firstSeen = Infinity;\n let lastSeen = 0;\n\n for (const memory of memories) {\n const timestamp = memory.createdAt || 0;\n if (timestamp < firstSeen) firstSeen = timestamp;\n if (timestamp > lastSeen) lastSeen = timestamp;\n \n roomActivity.set(memory.roomId, (roomActivity.get(memory.roomId) || 0) + 1);\n }\n\n // Get room details\n const roomIds = Array.from(roomActivity.keys()) as UUID[];\n const rooms = await runtime.getRoomsByIds(roomIds);\n const roomMap = new Map(rooms?.map(r => [r.id, r]) || []);\n\n // Sort rooms by activity\n const topRooms = Array.from(roomActivity.entries())\n .map(([roomId, count]) => ({\n roomId,\n roomName: roomMap.get(roomId as UUID)?.name || `Room ${roomId.slice(0, 8)}`,\n count\n }))\n .sort((a, b) => b.count - a.count);\n\n // Build audit report\n let reportText = `📊 **User Audit Report**\\n\\n`;\n reportText += `**Entity ID:** ${userId}\\n`;\n reportText += `**Name(s):** ${entity?.names?.join(', ') || 'Unknown'}\\n`;\n reportText += `**First Seen:** ${new Date(firstSeen).toISOString()}\\n`;\n reportText += `**Last Seen:** ${new Date(lastSeen).toISOString()}\\n`;\n reportText += `**Total Messages:** ${memories.length}\\n`;\n reportText += `**Active Rooms:** ${roomActivity.size}\\n\\n`;\n \n reportText += `**Room Activity:**\\n`;\n topRooms.slice(0, 5).forEach((room, idx) => {\n reportText += `${idx + 1}. ${room.roomName} (${room.count} messages)\\n`;\n });\n\n // Add recent messages sample\n reportText += `\\n**Recent Messages:**\\n`;\n memories.slice(0, 5).forEach((msg, idx) => {\n const timestamp = new Date(msg.createdAt || 0).toISOString().slice(0, 16);\n const text = msg.content?.text || '[No text]';\n const preview = text.length > 80 ? text.slice(0, 80) + '...' : text;\n reportText += `${idx + 1}. [${timestamp}] \"${preview}\"\\n`;\n });\n\n return {\n text: reportText,\n data: {\n userId,\n entity,\n totalMessages: memories.length,\n firstSeen: new Date(firstSeen).toISOString(),\n lastSeen: new Date(lastSeen).toISOString(),\n roomActivity: topRooms\n },\n success: true\n };\n } catch (error) {\n runtime.logger.error('[plugin-admin] Error in userAudit:', error);\n return {\n text: '❌ Error generating user audit. Please check the logs.',\n success: false\n };\n }\n },\n}; ","import { Provider, ProviderResult, Memory, State, UUID } from '@elizaos/core';\nimport { AdminService } from '../services/admin';\n\n/**\n * Injects a summary of global events and messages across all rooms/channels\n * into the LLM prompt when admin privileges are unlocked.\n */\nexport const globalContextProvider: Provider = {\n name: 'GLOBAL_CONTEXT',\n description: 'Provides a high-level summary of all recent events across all rooms when admin is unlocked.',\n dynamic: true,\n private: true, // Only accessible when admin is unlocked\n get: async (runtime, message: Memory, state: State): Promise<ProviderResult> => {\n const admin = runtime.getService<AdminService>('ADMIN_SERVICE');\n if (!admin || !admin.isUnlocked()) {\n return {\n values: {},\n data: {},\n text: ''\n };\n }\n\n try {\n // Fetch last 50 messages across all rooms from memories table\n const memories = await runtime.getMemories({\n tableName: 'memories',\n count: 50,\n agentId: runtime.agentId\n });\n\n if (!memories.length) {\n return {\n values: {\n globalMessageCount: 0,\n globalRoomCount: 0\n },\n data: {\n messages: []\n },\n text: 'No recent messages found across all rooms.'\n };\n }\n\n // Group messages by room\n const roomMessages = new Map<string, any[]>();\n for (const msg of memories) {\n if (!roomMessages.has(msg.roomId)) {\n roomMessages.set(msg.roomId, []);\n }\n roomMessages.get(msg.roomId)!.push(msg);\n }\n\n // Build summary\n let summary = `Global Activity Summary (${memories.length} recent messages across ${roomMessages.size} rooms):\\n\\n`;\n \n for (const [roomId, msgs] of roomMessages) {\n const roomInfo = await runtime.getRoomsByIds([roomId as UUID]);\n const roomName = roomInfo?.[0]?.name || `Room ${roomId.slice(0, 8)}`;\n \n summary += `=== ${roomName} (${msgs.length} messages) ===\\n`;\n for (const msg of msgs.slice(0, 5)) { // Show max 5 messages per room\n const timestamp = new Date(msg.createdAt || 0).toISOString();\n const text = msg.content?.text || '[No text]';\n summary += `[${timestamp}] Entity ${msg.entityId.slice(0, 8)}: ${text.slice(0, 100)}${text.length > 100 ? '...' : ''}\\n`;\n }\n if (msgs.length > 5) {\n summary += `... and ${msgs.length - 5} more messages\\n`;\n }\n summary += '\\n';\n }\n\n return {\n values: {\n globalMessageCount: memories.length,\n globalRoomCount: roomMessages.size\n },\n data: {\n recentGlobalMessages: memories.slice(0, 10),\n roomsSummary: Array.from(roomMessages.entries()).map(([roomId, msgs]) => ({\n roomId,\n messageCount: msgs.length\n }))\n },\n text: summary\n };\n } catch (error) {\n runtime.logger.error('[plugin-admin] Error in globalContextProvider:', error);\n return {\n values: {},\n data: {},\n text: 'Error fetching global context.'\n };\n }\n },\n}; ","import { Plugin } from '@elizaos/core';\nimport { AdminService } from './services/admin';\n\nimport { unlockAdminAction } from './actions/unlockAdmin';\nimport { globalReportAction } from './actions/globalReport';\nimport { listAllUsersAction } from './actions/listAllUsers';\nimport { listAllRoomsAction } from './actions/listAllRooms';\nimport { searchMessagesAction } from './actions/searchMessages';\nimport { userAuditAction } from './actions/userAudit';\n\nimport { globalContextProvider } from './providers/globalContext';\n\nexport const adminPlugin: Plugin = {\n name: '@elizaos/plugin-admin',\n description:\n 'Provides privileged administrative actions and global context providers once unlocked via an admin password.',\n services: [AdminService],\n actions: [\n unlockAdminAction, \n globalReportAction, \n listAllUsersAction, \n listAllRoomsAction,\n searchMessagesAction,\n userAuditAction\n ],\n providers: [globalContextProvider],\n};\n\nexport { AdminService } from './services/admin'; "],"mappings":";AAAA,SAAwB,eAAe;AACvC,OAAO,YAAY;AAMZ,IAAM,gBAAN,MAAM,sBAAqB,QAAQ;AAAA,EAQxC,YAAY,SAAyB;AACnC,UAAM,OAAO;AANf,SAAQ,WAAW;AAGnB,iCAAwB;AAItB,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,MAAM,+BAA+B;AAAA,IACjD;AAEA,UAAM,MAAM,QAAQ,WAAW,gBAAgB;AAC/C,QAAI,CAAC,KAAK;AACR,cAAQ,OAAO;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAEA,SAAK,eAAe,MAAM,OAAO,WAAW,QAAQ,EAAE,OAAO,GAAG,EAAE,OAAO,KAAK,IAAI;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,MAAM,SAA0C;AAC3D,WAAO,IAAI,cAAa,OAAO;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAsB;AAC1B,SAAK,WAAW;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,OAAO,UAA2B;AACvC,QAAI,KAAK,SAAU,QAAO;AAC1B,UAAM,OAAO,OAAO,WAAW,QAAQ,EAAE,OAAO,QAAQ,EAAE,OAAO,KAAK;AACtE,QAAI,SAAS,KAAK,gBAAgB,KAAK,cAAc;AACnD,WAAK,WAAW;AAChB,WAAK,QAAQ,OAAO,KAAK,2CAA2C;AACpE,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEO,aAAsB;AAC3B,WAAO,KAAK;AAAA,EACd;AACF;AAxDa,cACJ,cAAc;AADhB,IAAM,eAAN;;;ACAA,IAAM,oBAA4B;AAAA,EACvC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS,CAAC,gBAAgB,iBAAiB,oBAAoB,oBAAoB;AAAA,EACnF,UAAU;AAAA,IACR;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,SAAS,EAAE,MAAM,qDAAqD;AAAA,MACxE;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS,EAAE,MAAM,oCAAoC;AAAA,MACvD;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU,OAAO,SAAS,SAAiB,UAAkB;AAC3D,UAAM,OAAO,QAAQ,SAAS,MAAM,YAAY,KAAK;AACrD,UAAM,aAAa,KAAK,SAAS,OAAO,MAAM,KAAK,SAAS,QAAQ,KAAK,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,UAAU,KAAK,KAAK,SAAS,MAAM;AAClJ,UAAM,SAAS,oDAAoD,KAAK,IAAI;AAC5E,WAAO,cAAc;AAAA,EACvB;AAAA,EACA,SAAS,OAAO,SAAS,SAAiB,UAAkB;AAC1D,UAAM,OAAO,QAAQ,SAAS,QAAQ;AAGtC,UAAM,WAAW,KAAK,MAAM,mDAAmD;AAE/E,QAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG;AAC7B,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAEA,UAAM,YAAY,SAAS,CAAC;AAC5B,UAAM,UAAU,QAAQ,WAAyB,eAAe;AAEhE,QAAI,CAAC,SAAS;AACZ,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAEA,UAAM,UAAU,QAAQ,OAAO,SAAS;AAExC,WAAO;AAAA,MACL,MAAM,UACF,qFACA;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AACF;;;AC1DO,IAAM,qBAA6B;AAAA,EACxC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACR;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,SAAS,EAAE,MAAM,oCAAoC;AAAA,MACvD;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU,OAAO,SAAS,SAAiB,UAAkB;AAC3D,UAAM,QAAQ,QAAQ,WAAyB,eAAe;AAC9D,QAAI,CAAC,SAAS,CAAC,MAAM,WAAW,EAAG,QAAO;AAE1C,UAAM,OAAO,QAAQ,SAAS,MAAM,YAAY,KAAK;AACrD,WAAO,KAAK,SAAS,QAAQ,MAAM,KAAK,SAAS,QAAQ,KAAK,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,OAAO;AAAA,EAC/G;AAAA,EACA,SAAS,OAAO,SAAS,SAAiB,UAAkB;AAC1D,UAAM,QAAQ,QAAQ,WAAyB,eAAe;AAC9D,QAAI,CAAC,SAAS,CAAC,MAAM,WAAW,GAAG;AACjC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAEA,QAAI;AACF,YAAM,OAAO,QAAQ,SAAS,QAAQ;AAGtC,UAAI,QAAO,oBAAI,KAAK,GAAE,YAAY,EAAE,MAAM,GAAG,EAAE;AAC/C,YAAM,YAAY,KAAK,MAAM,qBAAqB;AAClD,UAAI,WAAW;AACb,eAAO,UAAU,CAAC;AAAA,MACpB;AAEA,YAAM,YAAY,IAAI,KAAK,IAAI,EAAE,QAAQ;AACzC,YAAM,UAAU,YAAY,KAAK,KAAK,KAAK;AAG3C,YAAM,WAAW,MAAM,QAAQ,YAAY;AAAA,QACzC,WAAW;AAAA,QACX,SAAS,QAAQ;AAAA,QACjB,OAAO;AAAA,QACP,KAAK;AAAA,MACP,CAAC;AAGD,YAAM,YAAY,oBAAI,IAAoB;AAC1C,iBAAW,UAAU,UAAU;AAC7B,kBAAU,IAAI,OAAO,SAAS,UAAU,IAAI,OAAO,MAAM,KAAK,KAAK,CAAC;AAAA,MACtE;AAGA,YAAM,UAAU,MAAM,KAAK,UAAU,KAAK,CAAC;AAC3C,YAAM,QAAQ,MAAM,QAAQ,cAAc,OAAO;AACjD,YAAM,UAAU,IAAI,IAAI,OAAO,IAAI,OAAK,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AAExD,YAAM,WAAW,MAAM,KAAK,UAAU,QAAQ,CAAC,EAC5C,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO;AAAA,QACzB;AAAA,QACA,UAAU,QAAQ,IAAI,MAAc,GAAG,QAAQ,QAAQ,OAAO,MAAM,GAAG,CAAC,CAAC;AAAA,QACzE;AAAA,MACF,EAAE,EACD,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK,EAChC,MAAM,GAAG,CAAC;AAGb,UAAI,aAAa,gCAAyB,IAAI;AAAA;AAAA;AAC9C,oBAAc;AAAA;AACd,oBAAc,0BAAqB,SAAS,MAAM;AAAA;AAClD,oBAAc,wBAAmB,UAAU,IAAI;AAAA;AAAA;AAE/C,UAAI,SAAS,SAAS,GAAG;AACvB,sBAAc,SAAS,SAAS,MAAM;AAAA;AACtC,iBAAS,QAAQ,CAAC,MAAM,QAAQ;AAC9B,wBAAc,GAAG,MAAM,CAAC,KAAK,KAAK,QAAQ,KAAK,KAAK,KAAK;AAAA;AAAA,QAC3D,CAAC;AAAA,MACH,OAAO;AACL,sBAAc;AAAA;AAAA,MAChB;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,UACJ;AAAA,UACA,eAAe,SAAS;AAAA,UACxB,YAAY,UAAU;AAAA,UACtB;AAAA,QACF;AAAA,QACA,SAAS;AAAA,MACX;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,OAAO,MAAM,yCAAyC,KAAK;AACnE,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;;;AC3GO,IAAM,qBAA6B;AAAA,EACxC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACR;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,SAAS,EAAE,MAAM,iBAAiB;AAAA,MACpC;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU,OAAO,SAAS,SAAiB,UAAkB;AAC3D,UAAM,QAAQ,QAAQ,WAAyB,eAAe;AAC9D,QAAI,CAAC,SAAS,CAAC,MAAM,WAAW,EAAG,QAAO;AAE1C,UAAM,OAAO,QAAQ,SAAS,MAAM,YAAY,KAAK;AACrD,YAAQ,KAAK,SAAS,MAAM,KAAK,KAAK,SAAS,MAAM,OAC7C,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,UAAU,KAAK,KAAK,SAAS,UAAU;AAAA,EACzF;AAAA,EACA,SAAS,OAAO,SAAS,SAAiB,UAAkB;AAC1D,UAAM,QAAQ,QAAQ,WAAyB,eAAe;AAC9D,QAAI,CAAC,SAAS,CAAC,MAAM,WAAW,GAAG;AACjC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAEA,QAAI;AAEF,YAAM,WAAW,MAAM,QAAQ,YAAY;AAAA,QACzC,WAAW;AAAA,QACX,SAAS,QAAQ;AAAA,QACjB,OAAO;AAAA;AAAA,MACT,CAAC;AAGD,YAAM,YAAY,oBAAI,IAAY;AAClC,iBAAW,UAAU,UAAU;AAC7B,YAAI,OAAO,YAAY,OAAO,aAAa,QAAQ,SAAS;AAC1D,oBAAU,IAAI,OAAO,QAAQ;AAAA,QAC/B;AAAA,MACF;AAGA,YAAM,WAAW,MAAM,QAAQ,iBAAiB,MAAM,KAAK,SAAS,CAAW;AAE/E,UAAI,CAAC,YAAY,SAAS,WAAW,GAAG;AACtC,eAAO;AAAA,UACL,MAAM;AAAA,UACN,SAAS;AAAA,QACX;AAAA,MACF;AAGA,UAAI,eAAe,qBAAc,SAAS,MAAM;AAAA;AAAA;AAEhD,eAAS,MAAM,GAAG,EAAE,EAAE,QAAQ,CAAC,QAAQ,QAAQ;AAC7C,cAAM,cAAc,OAAO,QAAQ,CAAC,KAAK;AACzC,cAAM,KAAK,OAAO,MAAM;AACxB,wBAAgB,GAAG,MAAM,CAAC,OAAO,WAAW,YAAY,GAAG,MAAM,GAAG,CAAC,CAAC;AAAA;AAAA,MACxE,CAAC;AAED,UAAI,SAAS,SAAS,IAAI;AACxB,wBAAgB;AAAA,UAAa,SAAS,SAAS,EAAE;AAAA,MACnD;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,YAAY,SAAS;AAAA,UACrB,OAAO,SAAS,IAAI,QAAM;AAAA,YACxB,IAAI,EAAE;AAAA,YACN,OAAO,EAAE,SAAS,CAAC;AAAA,YACnB,UAAU,EAAE,YAAY,CAAC;AAAA,UAC3B,EAAE;AAAA,QACJ;AAAA,QACA,SAAS;AAAA,MACX;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,OAAO,MAAM,yCAAyC,KAAK;AACnE,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;;;AC7FO,IAAM,qBAA6B;AAAA,EACxC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACR;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,SAAS,EAAE,MAAM,iBAAiB;AAAA,MACpC;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU,OAAO,SAAS,SAAiB,UAAkB;AAC3D,UAAM,QAAQ,QAAQ,WAAyB,eAAe;AAC9D,QAAI,CAAC,SAAS,CAAC,MAAM,WAAW,EAAG,QAAO;AAE1C,UAAM,OAAO,QAAQ,SAAS,MAAM,YAAY,KAAK;AACrD,YAAQ,KAAK,SAAS,MAAM,KAAK,KAAK,SAAS,MAAM,OAC7C,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,UAAU;AAAA,EAC5D;AAAA,EACA,SAAS,OAAO,SAAS,SAAiB,UAAkB;AAC1D,UAAM,QAAQ,QAAQ,WAAyB,eAAe;AAC9D,QAAI,CAAC,SAAS,CAAC,MAAM,WAAW,GAAG;AACjC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAEA,QAAI;AAEF,YAAM,WAAW,MAAM,QAAQ,YAAY;AAAA,QACzC,WAAW;AAAA,QACX,SAAS,QAAQ;AAAA,QACjB,OAAO;AAAA,MACT,CAAC;AAGD,YAAM,UAAU,oBAAI,IAAY;AAChC,iBAAW,UAAU,UAAU;AAC7B,YAAI,OAAO,QAAQ;AACjB,kBAAQ,IAAI,OAAO,MAAM;AAAA,QAC3B;AAAA,MACF;AAGA,YAAM,QAAQ,MAAM,QAAQ,cAAc,MAAM,KAAK,OAAO,CAAW;AAEvE,UAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,eAAO;AAAA,UACL,MAAM;AAAA,UACN,SAAS;AAAA,QACX;AAAA,MACF;AAGA,UAAI,eAAe,qBAAc,MAAM,MAAM;AAAA;AAAA;AAE7C,YAAM,MAAM,GAAG,EAAE,EAAE,QAAQ,CAAC,MAAM,QAAQ;AACxC,cAAM,WAAW,KAAK,QAAQ,QAAQ,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;AACzD,wBAAgB,GAAG,MAAM,CAAC,OAAO,QAAQ,YAAY,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;AAAA;AACxE,YAAI,KAAK,QAAQ;AACf,0BAAgB,cAAc,KAAK,MAAM;AAAA;AAAA,QAC3C;AAAA,MACF,CAAC;AAED,UAAI,MAAM,SAAS,IAAI;AACrB,wBAAgB;AAAA,UAAa,MAAM,SAAS,EAAE;AAAA,MAChD;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,YAAY,MAAM;AAAA,UAClB,OAAO,MAAM,IAAI,QAAM;AAAA,YACrB,IAAI,EAAE;AAAA,YACN,MAAM,EAAE,QAAQ;AAAA,YAChB,QAAQ,EAAE;AAAA,YACV,MAAM,EAAE;AAAA,YACR,UAAU,EAAE,YAAY,CAAC;AAAA,UAC3B,EAAE;AAAA,QACJ;AAAA,QACA,SAAS;AAAA,MACX;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,OAAO,MAAM,yCAAyC,KAAK;AACnE,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;;;ACjGO,IAAM,uBAA+B;AAAA,EAC1C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACR;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,SAAS,EAAE,MAAM,8CAA8C;AAAA,MACjE;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA;AAAA;AAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU,OAAO,SAAS,SAAiB,UAAkB;AAC3D,UAAM,QAAQ,QAAQ,WAAyB,eAAe;AAC9D,QAAI,CAAC,SAAS,CAAC,MAAM,WAAW,EAAG,QAAO;AAE1C,UAAM,OAAO,QAAQ,SAAS,MAAM,YAAY,KAAK;AACrD,WAAO,KAAK,SAAS,QAAQ,MAAM,KAAK,SAAS,SAAS,KAAK,KAAK,SAAS,KAAK;AAAA,EACpF;AAAA,EACA,SAAS,OAAO,SAAS,SAAiB,UAAkB;AAC1D,UAAM,QAAQ,QAAQ,WAAyB,eAAe;AAC9D,QAAI,CAAC,SAAS,CAAC,MAAM,WAAW,GAAG;AACjC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAEA,QAAI;AACF,YAAM,OAAO,QAAQ,SAAS,QAAQ;AAGtC,YAAM,aAAa,KAAK,MAAM,qEAAqE;AACnG,UAAI,CAAC,YAAY;AACf,eAAO;AAAA,UACL,MAAM;AAAA,UACN,SAAS;AAAA,QACX;AAAA,MACF;AAEA,YAAM,cAAc,WAAW,CAAC,EAAE,KAAK;AAGvC,YAAM,WAAW,MAAM,QAAQ,YAAY;AAAA,QACzC,WAAW;AAAA,QACX,SAAS,QAAQ;AAAA,QACjB,OAAO;AAAA,MACT,CAAC;AAGD,YAAM,cAAc,YAAY,YAAY;AAC5C,YAAM,UAAU,SAAS;AAAA,QAAO,SAC9B,IAAI,SAAS,MAAM,YAAY,EAAE,SAAS,WAAW;AAAA,MACvD;AAEA,UAAI,QAAQ,WAAW,GAAG;AACxB,eAAO;AAAA,UACL,MAAM,iCAAiC,WAAW;AAAA,UAClD,SAAS;AAAA,QACX;AAAA,MACF;AAGA,cAAQ,KAAK,CAAC,GAAG,OAAO,EAAE,aAAa,MAAM,EAAE,aAAa,EAAE;AAG9D,YAAM,UAAU,CAAC,GAAG,IAAI,IAAI,QAAQ,IAAI,OAAK,EAAE,MAAM,CAAC,CAAC;AACvD,YAAM,QAAQ,MAAM,QAAQ,cAAc,OAAO;AACjD,YAAM,UAAU,IAAI,IAAI,OAAO,IAAI,OAAK,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AAGxD,UAAI,eAAe,qBAAc,QAAQ,MAAM,uBAAuB,WAAW;AAAA;AAAA;AAEjF,cAAQ,MAAM,GAAG,EAAE,EAAE,QAAQ,CAAC,OAAO,QAAQ;AAC3C,cAAM,YAAY,MAAM,YACpB,IAAI,KAAK,MAAM,SAAS,EAAE,YAAY,EAAE,QAAQ,KAAK,GAAG,EAAE,MAAM,GAAG,EAAE,IACrE;AACJ,cAAM,WAAW,QAAQ,IAAI,MAAM,MAAM,GAAG,QAAQ,QAAQ,MAAM,OAAO,MAAM,GAAG,CAAC,CAAC;AACpF,cAAMA,QAAO,MAAM,SAAS,QAAQ;AACpC,cAAM,UAAUA,MAAK,SAAS,MAAMA,MAAK,MAAM,GAAG,GAAG,IAAI,QAAQA;AAEjE,wBAAgB,GAAG,MAAM,CAAC,QAAQ,SAAS,UAAU,QAAQ;AAAA;AAC7D,wBAAgB,aAAa,MAAM,SAAS,MAAM,GAAG,CAAC,CAAC,MAAM,OAAO;AAAA;AAAA;AAAA,MACtE,CAAC;AAED,UAAI,QAAQ,SAAS,IAAI;AACvB,wBAAgB,WAAW,QAAQ,SAAS,EAAE;AAAA,MAChD;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,OAAO;AAAA,UACP,cAAc,QAAQ;AAAA,UACtB,SAAS,QAAQ,MAAM,GAAG,EAAE,EAAE,IAAI,QAAM;AAAA,YACtC,IAAI,EAAE;AAAA,YACN,QAAQ,EAAE;AAAA,YACV,UAAU,EAAE;AAAA,YACZ,SAAS,EAAE;AAAA,YACX,WAAW,EAAE;AAAA,UACf,EAAE;AAAA,QACJ;AAAA,QACA,SAAS;AAAA,MACX;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,OAAO,MAAM,2CAA2C,KAAK;AACrE,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;;;ACrHO,IAAM,kBAA0B;AAAA,EACrC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACR;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,SAAS,EAAE,MAAM,oBAAoB;AAAA,MACvC;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU,OAAO,SAAS,SAAiB,UAAkB;AAC3D,UAAM,QAAQ,QAAQ,WAAyB,eAAe;AAC9D,QAAI,CAAC,SAAS,CAAC,MAAM,WAAW,EAAG,QAAO;AAE1C,UAAM,OAAO,QAAQ,SAAS,MAAM,YAAY,KAAK;AACrD,WAAO,KAAK,SAAS,OAAO,MAAM,KAAK,SAAS,MAAM,KAAK,KAAK,SAAS,QAAQ;AAAA,EACnF;AAAA,EACA,SAAS,OAAO,SAAS,SAAiB,UAAkB;AAC1D,UAAM,QAAQ,QAAQ,WAAyB,eAAe;AAC9D,QAAI,CAAC,SAAS,CAAC,MAAM,WAAW,GAAG;AACjC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAEA,QAAI;AACF,YAAM,OAAO,QAAQ,SAAS,QAAQ;AAGtC,YAAM,UAAU,KAAK,MAAM,iDAAiD;AAC5E,UAAI,CAAC,SAAS;AACZ,eAAO;AAAA,UACL,MAAM;AAAA,UACN,SAAS;AAAA,QACX;AAAA,MACF;AAEA,YAAM,SAAS,QAAQ,CAAC;AAGxB,YAAM,cAAc,MAAM,QAAQ,YAAY;AAAA,QAC5C,WAAW;AAAA,QACX,SAAS,QAAQ;AAAA,QACjB,OAAO;AAAA,MACT,CAAC;AAGD,YAAM,WAAW,YAAY,OAAO,OAAK,EAAE,aAAa,MAAM;AAE9D,UAAI,CAAC,SAAS,QAAQ;AACpB,eAAO;AAAA,UACL,MAAM,8BAA8B,MAAM;AAAA,UAC1C,SAAS;AAAA,QACX;AAAA,MACF;AAGA,YAAM,WAAW,MAAM,QAAQ,iBAAiB,CAAC,MAAc,CAAC;AAChE,YAAM,SAAS,WAAW,CAAC;AAG3B,YAAM,eAAe,oBAAI,IAAoB;AAC7C,UAAI,YAAY;AAChB,UAAI,WAAW;AAEf,iBAAW,UAAU,UAAU;AAC7B,cAAM,YAAY,OAAO,aAAa;AACtC,YAAI,YAAY,UAAW,aAAY;AACvC,YAAI,YAAY,SAAU,YAAW;AAErC,qBAAa,IAAI,OAAO,SAAS,aAAa,IAAI,OAAO,MAAM,KAAK,KAAK,CAAC;AAAA,MAC5E;AAGA,YAAM,UAAU,MAAM,KAAK,aAAa,KAAK,CAAC;AAC9C,YAAM,QAAQ,MAAM,QAAQ,cAAc,OAAO;AACjD,YAAM,UAAU,IAAI,IAAI,OAAO,IAAI,OAAK,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AAGxD,YAAM,WAAW,MAAM,KAAK,aAAa,QAAQ,CAAC,EAC/C,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO;AAAA,QACzB;AAAA,QACA,UAAU,QAAQ,IAAI,MAAc,GAAG,QAAQ,QAAQ,OAAO,MAAM,GAAG,CAAC,CAAC;AAAA,QACzE;AAAA,MACF,EAAE,EACD,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAGnC,UAAI,aAAa;AAAA;AAAA;AACjB,oBAAc,kBAAkB,MAAM;AAAA;AACtC,oBAAc,gBAAgB,QAAQ,OAAO,KAAK,IAAI,KAAK,SAAS;AAAA;AACpE,oBAAc,mBAAmB,IAAI,KAAK,SAAS,EAAE,YAAY,CAAC;AAAA;AAClE,oBAAc,kBAAkB,IAAI,KAAK,QAAQ,EAAE,YAAY,CAAC;AAAA;AAChE,oBAAc,uBAAuB,SAAS,MAAM;AAAA;AACpD,oBAAc,qBAAqB,aAAa,IAAI;AAAA;AAAA;AAEpD,oBAAc;AAAA;AACd,eAAS,MAAM,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,QAAQ;AAC1C,sBAAc,GAAG,MAAM,CAAC,KAAK,KAAK,QAAQ,KAAK,KAAK,KAAK;AAAA;AAAA,MAC3D,CAAC;AAGD,oBAAc;AAAA;AAAA;AACd,eAAS,MAAM,GAAG,CAAC,EAAE,QAAQ,CAAC,KAAK,QAAQ;AACzC,cAAM,YAAY,IAAI,KAAK,IAAI,aAAa,CAAC,EAAE,YAAY,EAAE,MAAM,GAAG,EAAE;AACxE,cAAMC,QAAO,IAAI,SAAS,QAAQ;AAClC,cAAM,UAAUA,MAAK,SAAS,KAAKA,MAAK,MAAM,GAAG,EAAE,IAAI,QAAQA;AAC/D,sBAAc,GAAG,MAAM,CAAC,MAAM,SAAS,MAAM,OAAO;AAAA;AAAA,MACtD,CAAC;AAED,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA,eAAe,SAAS;AAAA,UACxB,WAAW,IAAI,KAAK,SAAS,EAAE,YAAY;AAAA,UAC3C,UAAU,IAAI,KAAK,QAAQ,EAAE,YAAY;AAAA,UACzC,cAAc;AAAA,QAChB;AAAA,QACA,SAAS;AAAA,MACX;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,OAAO,MAAM,sCAAsC,KAAK;AAChE,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;;;ACtIO,IAAM,wBAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,EACT,SAAS;AAAA;AAAA,EACT,KAAK,OAAO,SAAS,SAAiB,UAA0C;AAC9E,UAAM,QAAQ,QAAQ,WAAyB,eAAe;AAC9D,QAAI,CAAC,SAAS,CAAC,MAAM,WAAW,GAAG;AACjC,aAAO;AAAA,QACL,QAAQ,CAAC;AAAA,QACT,MAAM,CAAC;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAEA,QAAI;AAEF,YAAM,WAAW,MAAM,QAAQ,YAAY;AAAA,QACzC,WAAW;AAAA,QACX,OAAO;AAAA,QACP,SAAS,QAAQ;AAAA,MACnB,CAAC;AAED,UAAI,CAAC,SAAS,QAAQ;AACpB,eAAO;AAAA,UACL,QAAQ;AAAA,YACN,oBAAoB;AAAA,YACpB,iBAAiB;AAAA,UACnB;AAAA,UACA,MAAM;AAAA,YACJ,UAAU,CAAC;AAAA,UACb;AAAA,UACA,MAAM;AAAA,QACR;AAAA,MACF;AAGA,YAAM,eAAe,oBAAI,IAAmB;AAC5C,iBAAW,OAAO,UAAU;AAC1B,YAAI,CAAC,aAAa,IAAI,IAAI,MAAM,GAAG;AACjC,uBAAa,IAAI,IAAI,QAAQ,CAAC,CAAC;AAAA,QACjC;AACA,qBAAa,IAAI,IAAI,MAAM,EAAG,KAAK,GAAG;AAAA,MACxC;AAGA,UAAI,UAAU,4BAA4B,SAAS,MAAM,2BAA2B,aAAa,IAAI;AAAA;AAAA;AAErG,iBAAW,CAAC,QAAQ,IAAI,KAAK,cAAc;AACzC,cAAM,WAAW,MAAM,QAAQ,cAAc,CAAC,MAAc,CAAC;AAC7D,cAAM,WAAW,WAAW,CAAC,GAAG,QAAQ,QAAQ,OAAO,MAAM,GAAG,CAAC,CAAC;AAElE,mBAAW,OAAO,QAAQ,KAAK,KAAK,MAAM;AAAA;AAC1C,mBAAW,OAAO,KAAK,MAAM,GAAG,CAAC,GAAG;AAClC,gBAAM,YAAY,IAAI,KAAK,IAAI,aAAa,CAAC,EAAE,YAAY;AAC3D,gBAAM,OAAO,IAAI,SAAS,QAAQ;AAClC,qBAAW,IAAI,SAAS,YAAY,IAAI,SAAS,MAAM,GAAG,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,SAAS,MAAM,QAAQ,EAAE;AAAA;AAAA,QACtH;AACA,YAAI,KAAK,SAAS,GAAG;AACnB,qBAAW,WAAW,KAAK,SAAS,CAAC;AAAA;AAAA,QACvC;AACA,mBAAW;AAAA,MACb;AAEA,aAAO;AAAA,QACL,QAAQ;AAAA,UACN,oBAAoB,SAAS;AAAA,UAC7B,iBAAiB,aAAa;AAAA,QAChC;AAAA,QACA,MAAM;AAAA,UACJ,sBAAsB,SAAS,MAAM,GAAG,EAAE;AAAA,UAC1C,cAAc,MAAM,KAAK,aAAa,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,QAAQ,IAAI,OAAO;AAAA,YACxE;AAAA,YACA,cAAc,KAAK;AAAA,UACrB,EAAE;AAAA,QACJ;AAAA,QACA,MAAM;AAAA,MACR;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,OAAO,MAAM,kDAAkD,KAAK;AAC5E,aAAO;AAAA,QACL,QAAQ,CAAC;AAAA,QACT,MAAM,CAAC;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;;;AClFO,IAAM,cAAsB;AAAA,EACjC,MAAM;AAAA,EACN,aACE;AAAA,EACF,UAAU,CAAC,YAAY;AAAA,EACvB,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,WAAW,CAAC,qBAAqB;AACnC;","names":["text","text"]}
|
package/package.json
CHANGED