agent-world 0.11.0 → 0.12.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 +55 -4
- package/dist/cli/commands.d.ts +109 -0
- package/dist/cli/commands.js +2024 -0
- package/dist/cli/display.d.ts +124 -0
- package/dist/cli/display.js +381 -0
- package/dist/cli/hitl.d.ts +33 -0
- package/dist/cli/hitl.js +81 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/stream.d.ts +41 -0
- package/dist/cli/stream.js +222 -0
- package/dist/core/activity-tracker.d.ts +16 -0
- package/dist/core/activity-tracker.d.ts.map +1 -0
- package/dist/core/activity-tracker.js +91 -0
- package/dist/core/activity-tracker.js.map +1 -0
- package/dist/core/ai-commands.d.ts +16 -0
- package/dist/core/ai-commands.d.ts.map +1 -0
- package/dist/core/ai-commands.js +24 -0
- package/dist/core/ai-commands.js.map +1 -0
- package/dist/core/ai-sdk-patch.d.ts +24 -0
- package/dist/core/ai-sdk-patch.d.ts.map +1 -0
- package/dist/core/ai-sdk-patch.js +169 -0
- package/dist/core/ai-sdk-patch.js.map +1 -0
- package/dist/core/anthropic-direct.d.ts +52 -0
- package/dist/core/anthropic-direct.d.ts.map +1 -0
- package/dist/core/anthropic-direct.js +301 -0
- package/dist/core/anthropic-direct.js.map +1 -0
- package/dist/core/approval-cache.d.ts +104 -0
- package/dist/core/approval-cache.d.ts.map +1 -0
- package/dist/core/approval-cache.js +150 -0
- package/dist/core/approval-cache.js.map +1 -0
- package/dist/core/chat-constants.d.ts +20 -0
- package/dist/core/chat-constants.d.ts.map +1 -0
- package/dist/core/chat-constants.js +22 -0
- package/dist/core/chat-constants.js.map +1 -0
- package/dist/core/create-agent-tool.d.ts +66 -0
- package/dist/core/create-agent-tool.d.ts.map +1 -0
- package/dist/core/create-agent-tool.js +212 -0
- package/dist/core/create-agent-tool.js.map +1 -0
- package/dist/core/events/approval-checker.d.ts +61 -0
- package/dist/core/events/approval-checker.d.ts.map +1 -0
- package/dist/core/events/approval-checker.js +226 -0
- package/dist/core/events/approval-checker.js.map +1 -0
- package/dist/core/events/index.d.ts +25 -0
- package/dist/core/events/index.d.ts.map +1 -0
- package/dist/core/events/index.js +30 -0
- package/dist/core/events/index.js.map +1 -0
- package/dist/core/events/memory-manager.d.ts +73 -0
- package/dist/core/events/memory-manager.d.ts.map +1 -0
- package/dist/core/events/memory-manager.js +1218 -0
- package/dist/core/events/memory-manager.js.map +1 -0
- package/dist/core/events/mention-logic.d.ts +39 -0
- package/dist/core/events/mention-logic.d.ts.map +1 -0
- package/dist/core/events/mention-logic.js +163 -0
- package/dist/core/events/mention-logic.js.map +1 -0
- package/dist/core/events/orchestrator.d.ts +69 -0
- package/dist/core/events/orchestrator.d.ts.map +1 -0
- package/dist/core/events/orchestrator.js +883 -0
- package/dist/core/events/orchestrator.js.map +1 -0
- package/dist/core/events/persistence.d.ts +41 -0
- package/dist/core/events/persistence.d.ts.map +1 -0
- package/dist/core/events/persistence.js +296 -0
- package/dist/core/events/persistence.js.map +1 -0
- package/dist/core/events/publishers.d.ts +81 -0
- package/dist/core/events/publishers.d.ts.map +1 -0
- package/dist/core/events/publishers.js +272 -0
- package/dist/core/events/publishers.js.map +1 -0
- package/dist/core/events/subscribers.d.ts +45 -0
- package/dist/core/events/subscribers.d.ts.map +1 -0
- package/dist/core/events/subscribers.js +288 -0
- package/dist/core/events/subscribers.js.map +1 -0
- package/dist/core/events/tool-bridge-logging.d.ts +28 -0
- package/dist/core/events/tool-bridge-logging.d.ts.map +1 -0
- package/dist/core/events/tool-bridge-logging.js +94 -0
- package/dist/core/events/tool-bridge-logging.js.map +1 -0
- package/dist/core/events-metadata.d.ts +72 -0
- package/dist/core/events-metadata.d.ts.map +1 -0
- package/dist/core/events-metadata.js +167 -0
- package/dist/core/events-metadata.js.map +1 -0
- package/dist/core/events.d.ts +186 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/events.js +1248 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/export.d.ts +106 -0
- package/dist/core/export.d.ts.map +1 -0
- package/dist/core/export.js +705 -0
- package/dist/core/export.js.map +1 -0
- package/dist/core/file-tools.d.ts +114 -0
- package/dist/core/file-tools.d.ts.map +1 -0
- package/dist/core/file-tools.js +370 -0
- package/dist/core/file-tools.js.map +1 -0
- package/dist/core/google-direct.d.ts +58 -0
- package/dist/core/google-direct.d.ts.map +1 -0
- package/dist/core/google-direct.js +298 -0
- package/dist/core/google-direct.js.map +1 -0
- package/dist/core/hitl.d.ts +54 -0
- package/dist/core/hitl.d.ts.map +1 -0
- package/dist/core/hitl.js +153 -0
- package/dist/core/hitl.js.map +1 -0
- package/dist/core/index.d.ts +59 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +70 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/llm-config.d.ts +128 -0
- package/dist/core/llm-config.d.ts.map +1 -0
- package/dist/core/llm-config.js +164 -0
- package/dist/core/llm-config.js.map +1 -0
- package/dist/core/llm-manager.d.ts +163 -0
- package/dist/core/llm-manager.d.ts.map +1 -0
- package/dist/core/llm-manager.js +669 -0
- package/dist/core/llm-manager.js.map +1 -0
- package/dist/core/load-skill-tool.d.ts +55 -0
- package/dist/core/load-skill-tool.d.ts.map +1 -0
- package/dist/core/load-skill-tool.js +468 -0
- package/dist/core/load-skill-tool.js.map +1 -0
- package/dist/core/logger.d.ts +88 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +358 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/managers.d.ts +131 -0
- package/dist/core/managers.d.ts.map +1 -0
- package/dist/core/managers.js +1223 -0
- package/dist/core/managers.js.map +1 -0
- package/dist/core/mcp-server-registry.d.ts +304 -0
- package/dist/core/mcp-server-registry.d.ts.map +1 -0
- package/dist/core/mcp-server-registry.js +1769 -0
- package/dist/core/mcp-server-registry.js.map +1 -0
- package/dist/core/mcp-tools.d.ts +56 -0
- package/dist/core/mcp-tools.d.ts.map +1 -0
- package/dist/core/mcp-tools.js +186 -0
- package/dist/core/mcp-tools.js.map +1 -0
- package/dist/core/message-prep.d.ts +81 -0
- package/dist/core/message-prep.d.ts.map +1 -0
- package/dist/core/message-prep.js +223 -0
- package/dist/core/message-prep.js.map +1 -0
- package/dist/core/message-processing-control.d.ts +54 -0
- package/dist/core/message-processing-control.d.ts.map +1 -0
- package/dist/core/message-processing-control.js +139 -0
- package/dist/core/message-processing-control.js.map +1 -0
- package/dist/core/openai-direct.d.ts +80 -0
- package/dist/core/openai-direct.d.ts.map +1 -0
- package/dist/core/openai-direct.js +374 -0
- package/dist/core/openai-direct.js.map +1 -0
- package/dist/core/shell-cmd-tool.d.ts +235 -0
- package/dist/core/shell-cmd-tool.d.ts.map +1 -0
- package/dist/core/shell-cmd-tool.js +1157 -0
- package/dist/core/shell-cmd-tool.js.map +1 -0
- package/dist/core/shell-process-registry.d.ts +88 -0
- package/dist/core/shell-process-registry.d.ts.map +1 -0
- package/dist/core/shell-process-registry.js +309 -0
- package/dist/core/shell-process-registry.js.map +1 -0
- package/dist/core/skill-registry.d.ts +75 -0
- package/dist/core/skill-registry.d.ts.map +1 -0
- package/dist/core/skill-registry.js +369 -0
- package/dist/core/skill-registry.js.map +1 -0
- package/dist/core/skill-script-runner.d.ts +89 -0
- package/dist/core/skill-script-runner.d.ts.map +1 -0
- package/dist/core/skill-script-runner.js +274 -0
- package/dist/core/skill-script-runner.js.map +1 -0
- package/dist/core/skill-selector.d.ts +65 -0
- package/dist/core/skill-selector.d.ts.map +1 -0
- package/dist/core/skill-selector.js +190 -0
- package/dist/core/skill-selector.js.map +1 -0
- package/dist/core/skill-settings.d.ts +20 -0
- package/dist/core/skill-settings.d.ts.map +1 -0
- package/dist/core/skill-settings.js +40 -0
- package/dist/core/skill-settings.js.map +1 -0
- package/dist/core/storage/agent-storage.d.ts +134 -0
- package/dist/core/storage/agent-storage.d.ts.map +1 -0
- package/dist/core/storage/agent-storage.js +498 -0
- package/dist/core/storage/agent-storage.js.map +1 -0
- package/dist/core/storage/eventStorage/fileEventStorage.d.ts +100 -0
- package/dist/core/storage/eventStorage/fileEventStorage.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/fileEventStorage.js +494 -0
- package/dist/core/storage/eventStorage/fileEventStorage.js.map +1 -0
- package/dist/core/storage/eventStorage/index.d.ts +31 -0
- package/dist/core/storage/eventStorage/index.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/index.js +31 -0
- package/dist/core/storage/eventStorage/index.js.map +1 -0
- package/dist/core/storage/eventStorage/memoryEventStorage.d.ts +87 -0
- package/dist/core/storage/eventStorage/memoryEventStorage.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/memoryEventStorage.js +244 -0
- package/dist/core/storage/eventStorage/memoryEventStorage.js.map +1 -0
- package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts +45 -0
- package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/sqliteEventStorage.js +301 -0
- package/dist/core/storage/eventStorage/sqliteEventStorage.js.map +1 -0
- package/dist/core/storage/eventStorage/types.d.ts +142 -0
- package/dist/core/storage/eventStorage/types.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/types.js +43 -0
- package/dist/core/storage/eventStorage/types.js.map +1 -0
- package/dist/core/storage/eventStorage/validation.d.ts +30 -0
- package/dist/core/storage/eventStorage/validation.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/validation.js +68 -0
- package/dist/core/storage/eventStorage/validation.js.map +1 -0
- package/dist/core/storage/legacy-migrations.d.ts +45 -0
- package/dist/core/storage/legacy-migrations.d.ts.map +1 -0
- package/dist/core/storage/legacy-migrations.js +295 -0
- package/dist/core/storage/legacy-migrations.js.map +1 -0
- package/dist/core/storage/memory-storage.d.ts +105 -0
- package/dist/core/storage/memory-storage.d.ts.map +1 -0
- package/dist/core/storage/memory-storage.js +415 -0
- package/dist/core/storage/memory-storage.js.map +1 -0
- package/dist/core/storage/migration-runner.d.ts +96 -0
- package/dist/core/storage/migration-runner.d.ts.map +1 -0
- package/dist/core/storage/migration-runner.js +306 -0
- package/dist/core/storage/migration-runner.js.map +1 -0
- package/dist/core/storage/queue-storage.d.ts +147 -0
- package/dist/core/storage/queue-storage.d.ts.map +1 -0
- package/dist/core/storage/queue-storage.js +290 -0
- package/dist/core/storage/queue-storage.js.map +1 -0
- package/dist/core/storage/skill-storage.d.ts +136 -0
- package/dist/core/storage/skill-storage.d.ts.map +1 -0
- package/dist/core/storage/skill-storage.js +474 -0
- package/dist/core/storage/skill-storage.js.map +1 -0
- package/dist/core/storage/sqlite-schema.d.ts +95 -0
- package/dist/core/storage/sqlite-schema.d.ts.map +1 -0
- package/dist/core/storage/sqlite-schema.js +156 -0
- package/dist/core/storage/sqlite-schema.js.map +1 -0
- package/dist/core/storage/sqlite-storage.d.ts +146 -0
- package/dist/core/storage/sqlite-storage.d.ts.map +1 -0
- package/dist/core/storage/sqlite-storage.js +709 -0
- package/dist/core/storage/sqlite-storage.js.map +1 -0
- package/dist/core/storage/storage-factory.d.ts +61 -0
- package/dist/core/storage/storage-factory.d.ts.map +1 -0
- package/dist/core/storage/storage-factory.js +794 -0
- package/dist/core/storage/storage-factory.js.map +1 -0
- package/dist/core/storage/validation.d.ts +36 -0
- package/dist/core/storage/validation.d.ts.map +1 -0
- package/dist/core/storage/validation.js +79 -0
- package/dist/core/storage/validation.js.map +1 -0
- package/dist/core/storage/world-storage.d.ts +114 -0
- package/dist/core/storage/world-storage.d.ts.map +1 -0
- package/dist/core/storage/world-storage.js +378 -0
- package/dist/core/storage/world-storage.js.map +1 -0
- package/dist/core/subscription.d.ts +43 -0
- package/dist/core/subscription.d.ts.map +1 -0
- package/dist/core/subscription.js +227 -0
- package/dist/core/subscription.js.map +1 -0
- package/dist/core/tool-utils.d.ts +80 -0
- package/dist/core/tool-utils.d.ts.map +1 -0
- package/dist/core/tool-utils.js +273 -0
- package/dist/core/tool-utils.js.map +1 -0
- package/dist/core/types.d.ts +595 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +158 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/utils.d.ts +138 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +478 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/core/world-class.d.ts +43 -0
- package/dist/core/world-class.d.ts.map +1 -0
- package/dist/core/world-class.js +90 -0
- package/dist/core/world-class.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/public/assets/agent-sprites-DJFgj-zP.png +0 -0
- package/dist/public/assets/border-KHK37r8y.svg +83 -0
- package/dist/public/assets/index-C9kPXL6G.css +1 -0
- package/dist/public/assets/index-DOQEHGWt.js +96 -0
- package/dist/public/index.html +21 -0
- package/dist/server/api.d.ts +2 -0
- package/dist/server/api.js +1124 -0
- package/dist/server/index.d.ts +29 -0
- package/dist/server/sse-handler.d.ts +62 -0
- package/dist/server/sse-handler.js +234 -0
- package/package.json +21 -5
- package/scripts/launch-electron.js +0 -58
|
@@ -0,0 +1,478 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manager Utilities - Helper functions for managers and agent processing
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Unique ID generation for events and messages using crypto.randomUUID()
|
|
6
|
+
* - Chat ID generation using nanoid for human-readable IDs
|
|
7
|
+
* - Manager-specific utility functions for string manipulation and processing
|
|
8
|
+
* - String manipulation utilities (kebab-case conversion for IDs and names)
|
|
9
|
+
* - Agent and message processing utilities with world-aware operations
|
|
10
|
+
* - LLM message preparation with conversation history and system prompts
|
|
11
|
+
* - Mention extraction with first-mention-only logic and case-insensitive matching
|
|
12
|
+
* - Sender type detection for humans, agents, and system messages
|
|
13
|
+
* - Agent memory filtering for LLM context (prevents irrelevant message pollution)
|
|
14
|
+
*
|
|
15
|
+
* Core Utilities:
|
|
16
|
+
* - generateId: Crypto-based unique ID generation for messages and events
|
|
17
|
+
* - generateChatId: Nanoid-based short ID generation for chat history
|
|
18
|
+
* - toKebabCase: String conversion for consistent naming conventions
|
|
19
|
+
* - getWorldTurnLimit: World-specific turn limit retrieval with fallback defaults
|
|
20
|
+
* - extractMentions: Case-insensitive mention extraction with first-mention-only logic
|
|
21
|
+
* - determineSenderType: Sender classification for message filtering and processing
|
|
22
|
+
* - prepareMessagesForLLM: Message formatting for LLM calls with history and system prompts
|
|
23
|
+
* - wouldAgentHaveRespondedToHistoricalMessage: Filters irrelevant messages from LLM context
|
|
24
|
+
*
|
|
25
|
+
* Implementation Details:
|
|
26
|
+
* - Uses native crypto.randomUUID() for ID generation ensuring uniqueness
|
|
27
|
+
* - Uses nanoid for human-readable chat IDs (8 characters, URL-safe)
|
|
28
|
+
* - Self-contained utility functions with no external dependencies
|
|
29
|
+
* - Ready for manager module integration with consistent interfaces
|
|
30
|
+
* - All types imported from types.ts for better organization and reusability
|
|
31
|
+
* - World-aware functions that respect world-specific configurations
|
|
32
|
+
* - Message processing utilities that handle AI SDK compatibility
|
|
33
|
+
* - Agent memory filtering prevents LLM context pollution from irrelevant messages
|
|
34
|
+
*
|
|
35
|
+
* Recent Changes:
|
|
36
|
+
* - 2026-02-19: Replaced raw `working directory: <value>` system-prompt suffix with explicit `shell_cmd` scope instructions and a no-echo directive.
|
|
37
|
+
* - 2026-02-16: Added env-driven global/project skill-scope filtering for the `## Agent Skills` system prompt section.
|
|
38
|
+
* - 2026-02-15: prepareMessagesForLLM now appends a concise, strict cross-agent addressing rule requiring `@<agent_id>, <message>` when targeting a specific agent.
|
|
39
|
+
* - 2026-02-14: prepareMessagesForLLM now injects an `## Agent Skills` section with registry-backed `<available_skills>` entries and `load_skill` guidance.
|
|
40
|
+
* - 2026-02-14: Added shared default working-directory resolver (env override -> user home -> `./`) and switched missing world `working_directory` fallback from `./` to user home.
|
|
41
|
+
* - 2026-02-13: prepareMessagesForLLM began appending execution-directory context from world `working_directory`.
|
|
42
|
+
* - 2026-02-08: Fixed wouldAgentHaveRespondedToHistoricalMessage to include assistant messages with tool_calls
|
|
43
|
+
* (prevents OpenAI error: "messages with role 'tool' must be a response to a preceeding message with 'tool_calls'")
|
|
44
|
+
* - Enhanced comment documentation with detailed feature descriptions
|
|
45
|
+
* - Improved function descriptions with implementation details
|
|
46
|
+
* - Added details about world-aware operations and LLM integration
|
|
47
|
+
* - Added nanoid support for chat ID generation
|
|
48
|
+
* - Added wouldAgentHaveRespondedToHistoricalMessage for LLM context filtering
|
|
49
|
+
* - Updated prepareMessagesForLLM to filter irrelevant conversation history
|
|
50
|
+
* - Consolidated with message-prep.ts filtering for client-side tool calls
|
|
51
|
+
*/
|
|
52
|
+
import { nanoid } from 'nanoid';
|
|
53
|
+
import { homedir } from 'os';
|
|
54
|
+
import { getSkillSourceScope, getSkillsForSystemPrompt, waitForInitialSkillSync } from './skill-registry.js';
|
|
55
|
+
import { parseSkillIdListFromEnv } from './skill-settings.js';
|
|
56
|
+
import { createCategoryLogger } from './logger.js';
|
|
57
|
+
const logger = createCategoryLogger('core.utils');
|
|
58
|
+
/**
|
|
59
|
+
* Resolve default working directory when world variable is not configured.
|
|
60
|
+
* Priority:
|
|
61
|
+
* 1) AGENT_WORLD_DEFAULT_WORKING_DIRECTORY (runtime override)
|
|
62
|
+
* 2) OS user home directory
|
|
63
|
+
* 3) "./" hard fallback
|
|
64
|
+
*/
|
|
65
|
+
export function getDefaultWorkingDirectory() {
|
|
66
|
+
const envValue = typeof process !== 'undefined'
|
|
67
|
+
? process.env?.AGENT_WORLD_DEFAULT_WORKING_DIRECTORY
|
|
68
|
+
: undefined;
|
|
69
|
+
const trimmedEnvValue = typeof envValue === 'string' ? envValue.trim() : '';
|
|
70
|
+
if (trimmedEnvValue) {
|
|
71
|
+
return trimmedEnvValue;
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const homePath = homedir();
|
|
75
|
+
const trimmedHomePath = typeof homePath === 'string' ? homePath.trim() : '';
|
|
76
|
+
if (trimmedHomePath) {
|
|
77
|
+
return trimmedHomePath;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// Fall through to final static fallback.
|
|
82
|
+
}
|
|
83
|
+
return './';
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Generate unique ID for messages and events
|
|
87
|
+
*/
|
|
88
|
+
export function generateId() {
|
|
89
|
+
try {
|
|
90
|
+
return nanoid();
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
// Fallback for environments where nanoid import fails
|
|
94
|
+
console.warn('[generateId] nanoid not available, using fallback');
|
|
95
|
+
return 'id-' + Math.random().toString(36).substr(2, 9) + '-' + Date.now().toString(36);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Generate short, human-readable ID for chat history
|
|
100
|
+
*/
|
|
101
|
+
export function generateChatId() {
|
|
102
|
+
return nanoid(8); // 8 characters, URL-safe
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Simple runtime environment detection
|
|
106
|
+
* Returns true for Node.js, false for browser
|
|
107
|
+
*/
|
|
108
|
+
export function isNodeEnvironment() {
|
|
109
|
+
// Robust Node.js detection: process.versions.node is always present in Node
|
|
110
|
+
return typeof process !== 'undefined' && !!process.versions && !!process.versions.node;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Convert a string to kebab-case
|
|
114
|
+
* @param str - The string to convert
|
|
115
|
+
* @returns The kebab-case version of the string
|
|
116
|
+
*/
|
|
117
|
+
export function toKebabCase(str) {
|
|
118
|
+
if (!str)
|
|
119
|
+
return '';
|
|
120
|
+
return str
|
|
121
|
+
.replace(/\s+/g, '-') // Replace spaces with hyphens
|
|
122
|
+
.replace(/([a-z])([A-Z])/g, '$1-$2') // Insert hyphen between camelCase
|
|
123
|
+
.replace(/[^a-zA-Z0-9-]/g, '-') // Replace special characters with hyphens
|
|
124
|
+
.replace(/-+/g, '-') // Replace multiple hyphens with single
|
|
125
|
+
.replace(/^-|-$/g, '') // Remove leading/trailing hyphens
|
|
126
|
+
.toLowerCase(); // Convert to lowercase
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Parse .env-style text into key-value map.
|
|
130
|
+
* Supported:
|
|
131
|
+
* - Comments: # comment
|
|
132
|
+
* - Blank lines
|
|
133
|
+
* - KEY=value entries (optional whitespace around '=')
|
|
134
|
+
* Invalid lines are ignored.
|
|
135
|
+
*/
|
|
136
|
+
export function parseEnvText(variablesText) {
|
|
137
|
+
const envMap = {};
|
|
138
|
+
if (!variablesText || typeof variablesText !== 'string') {
|
|
139
|
+
return envMap;
|
|
140
|
+
}
|
|
141
|
+
const lines = variablesText.split(/\r?\n/);
|
|
142
|
+
for (const rawLine of lines) {
|
|
143
|
+
const line = rawLine.trim();
|
|
144
|
+
if (!line || line.startsWith('#')) {
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
const separatorIndex = line.indexOf('=');
|
|
148
|
+
if (separatorIndex <= 0) {
|
|
149
|
+
logger.debug('Ignoring invalid env line', { line: rawLine });
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
const key = line.slice(0, separatorIndex).trim();
|
|
153
|
+
const value = line.slice(separatorIndex + 1).trim();
|
|
154
|
+
if (!key) {
|
|
155
|
+
logger.debug('Ignoring env line with empty key', { line: rawLine });
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
envMap[key] = value;
|
|
159
|
+
}
|
|
160
|
+
return envMap;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Get a single env value from .env-style text
|
|
164
|
+
*/
|
|
165
|
+
export function getEnvValueFromText(variablesText, key) {
|
|
166
|
+
if (!key) {
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
const envMap = parseEnvText(variablesText);
|
|
170
|
+
if (Object.prototype.hasOwnProperty.call(envMap, key)) {
|
|
171
|
+
return envMap[key];
|
|
172
|
+
}
|
|
173
|
+
if (key === 'working_directory') {
|
|
174
|
+
return getDefaultWorkingDirectory();
|
|
175
|
+
}
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
function buildAgentMentionFormatRule() {
|
|
179
|
+
return [
|
|
180
|
+
'Always use this format when addressing a specific agent: @<agent>, <message>.',
|
|
181
|
+
'Put @<agent> at the very start of the reply.',
|
|
182
|
+
'Do not use other addressing styles (e.g. To @<agent>, Hi @<agent>, Hey @<agent>, Hello @<agent>, or mid-sentence mentions).'
|
|
183
|
+
].join('\n');
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Interpolate template variables in form {{ variable }} from env map.
|
|
187
|
+
* Missing variables are replaced with empty string.
|
|
188
|
+
*/
|
|
189
|
+
export function interpolateTemplateVariables(template, envMap) {
|
|
190
|
+
if (!template) {
|
|
191
|
+
return '';
|
|
192
|
+
}
|
|
193
|
+
return template.replace(/\{\{\s*([A-Za-z0-9_\-]+)\s*\}\}/g, (_match, variableName) => {
|
|
194
|
+
if (Object.prototype.hasOwnProperty.call(envMap, variableName)) {
|
|
195
|
+
return envMap[variableName] ?? '';
|
|
196
|
+
}
|
|
197
|
+
return '';
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
function escapeXmlText(value) {
|
|
201
|
+
return value
|
|
202
|
+
.replace(/&/g, '&')
|
|
203
|
+
.replace(/</g, '<')
|
|
204
|
+
.replace(/>/g, '>');
|
|
205
|
+
}
|
|
206
|
+
async function buildAgentSkillsPromptSection() {
|
|
207
|
+
await waitForInitialSkillSync();
|
|
208
|
+
const includeGlobalSkills = String(process.env.AGENT_WORLD_ENABLE_GLOBAL_SKILLS ?? 'true').toLowerCase() !== 'false';
|
|
209
|
+
const includeProjectSkills = String(process.env.AGENT_WORLD_ENABLE_PROJECT_SKILLS ?? 'true').toLowerCase() !== 'false';
|
|
210
|
+
const availableSkills = getSkillsForSystemPrompt({
|
|
211
|
+
includeGlobal: includeGlobalSkills,
|
|
212
|
+
includeProject: includeProjectSkills,
|
|
213
|
+
});
|
|
214
|
+
const disabledGlobalSkillIds = parseSkillIdListFromEnv(process.env.AGENT_WORLD_DISABLED_GLOBAL_SKILLS);
|
|
215
|
+
const disabledProjectSkillIds = parseSkillIdListFromEnv(process.env.AGENT_WORLD_DISABLED_PROJECT_SKILLS);
|
|
216
|
+
const filteredAvailableSkills = availableSkills.filter((skill) => {
|
|
217
|
+
const skillId = String(skill?.skill_id || '').trim();
|
|
218
|
+
if (!skillId) {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
const sourceScope = getSkillSourceScope(skillId);
|
|
222
|
+
if (sourceScope === 'project') {
|
|
223
|
+
return !disabledProjectSkillIds.has(skillId);
|
|
224
|
+
}
|
|
225
|
+
return !disabledGlobalSkillIds.has(skillId);
|
|
226
|
+
});
|
|
227
|
+
const lines = [
|
|
228
|
+
'## Agent Skills',
|
|
229
|
+
'You have access to a library of agent skills. Find skill by:',
|
|
230
|
+
'1. Review the <available_skills> list below.',
|
|
231
|
+
"2. If the user's request matches a skill's purpose, use the load_skill with skill id tool",
|
|
232
|
+
' to fetch the full instructions.',
|
|
233
|
+
'',
|
|
234
|
+
'<available_skills>',
|
|
235
|
+
];
|
|
236
|
+
for (const skill of filteredAvailableSkills) {
|
|
237
|
+
lines.push(' <skill>');
|
|
238
|
+
lines.push(` <id>${escapeXmlText(skill.skill_id)}</id>`);
|
|
239
|
+
lines.push(` <description>${escapeXmlText(skill.description)}</description>`);
|
|
240
|
+
lines.push(' </skill>');
|
|
241
|
+
}
|
|
242
|
+
lines.push('</available_skills>');
|
|
243
|
+
return lines.join('\n');
|
|
244
|
+
}
|
|
245
|
+
// Import types for utility functions
|
|
246
|
+
import { SenderType } from './types.js';
|
|
247
|
+
/**
|
|
248
|
+
* Get world-specific turn limit or default value
|
|
249
|
+
*/
|
|
250
|
+
export function getWorldTurnLimit(world) {
|
|
251
|
+
return world.turnLimit || 5; // Default to 5 if not configured
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Extract @mentions from message content - returns only first valid mention
|
|
255
|
+
* Implements first-mention-only logic to prevent multiple agent responses
|
|
256
|
+
*/
|
|
257
|
+
export function extractMentions(content) {
|
|
258
|
+
if (!content)
|
|
259
|
+
return [];
|
|
260
|
+
const mentionRegex = /@(\w+(?:[-_]\w+)*)/g;
|
|
261
|
+
const allMentions = [];
|
|
262
|
+
let firstValidMention = null;
|
|
263
|
+
let match;
|
|
264
|
+
while ((match = mentionRegex.exec(content)) !== null) {
|
|
265
|
+
const mention = match[1];
|
|
266
|
+
if (mention && mention.length > 0) {
|
|
267
|
+
const lowerMention = mention.toLowerCase();
|
|
268
|
+
allMentions.push(lowerMention);
|
|
269
|
+
// Only keep the first valid mention
|
|
270
|
+
if (firstValidMention === null) {
|
|
271
|
+
firstValidMention = lowerMention;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// Return array with first mention only
|
|
276
|
+
return firstValidMention ? [firstValidMention] : [];
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Extract @mentions that appear at the beginning of paragraphs
|
|
280
|
+
* Implements paragraph-beginning-only logic for agent response triggering
|
|
281
|
+
*
|
|
282
|
+
* @param content - The message content to search for mentions
|
|
283
|
+
* @returns Array of mention names (lowercase) that appear at paragraph beginnings
|
|
284
|
+
*/
|
|
285
|
+
export function extractParagraphBeginningMentions(content) {
|
|
286
|
+
if (!content)
|
|
287
|
+
return [];
|
|
288
|
+
const validMentions = [];
|
|
289
|
+
const mentionPattern = /^(?:hey|hi|hello|to)\s+@(\w+(?:[-_]\w+)*)\b|^@(\w+(?:[-_]\w+)*)\b/i;
|
|
290
|
+
const lines = content.split(/\n/);
|
|
291
|
+
for (const line of lines) {
|
|
292
|
+
const trimmed = line.trimStart();
|
|
293
|
+
const match = mentionPattern.exec(trimmed);
|
|
294
|
+
if (match) {
|
|
295
|
+
const mention = match[1] || match[2];
|
|
296
|
+
if (mention) {
|
|
297
|
+
validMentions.push(mention.toLowerCase());
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return validMentions;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Determine sender type based on sender name (matches src/agent.ts logic)
|
|
305
|
+
*/
|
|
306
|
+
export function determineSenderType(sender) {
|
|
307
|
+
if (!sender)
|
|
308
|
+
return SenderType.SYSTEM;
|
|
309
|
+
const lowerSender = sender.toLowerCase();
|
|
310
|
+
if (lowerSender === 'human' || lowerSender === 'user' || lowerSender === 'you') {
|
|
311
|
+
return SenderType.HUMAN;
|
|
312
|
+
}
|
|
313
|
+
if (lowerSender === 'system') {
|
|
314
|
+
return SenderType.SYSTEM;
|
|
315
|
+
}
|
|
316
|
+
if (lowerSender === 'world') {
|
|
317
|
+
return SenderType.WORLD;
|
|
318
|
+
}
|
|
319
|
+
return SenderType.AGENT;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Check if agent would have responded to a historical message
|
|
323
|
+
* Replicates shouldAgentRespond logic for saved messages to filter LLM context
|
|
324
|
+
*
|
|
325
|
+
* @param agent - The agent to check response logic for
|
|
326
|
+
* @param message - The historical message to evaluate
|
|
327
|
+
* @returns true if agent would have responded to this message
|
|
328
|
+
*/
|
|
329
|
+
export function wouldAgentHaveRespondedToHistoricalMessage(agent, message) {
|
|
330
|
+
// Always include own messages (by agentId or sender)
|
|
331
|
+
if (message.agentId === agent.id || message.sender?.toLowerCase() === agent.id.toLowerCase()) {
|
|
332
|
+
return true;
|
|
333
|
+
}
|
|
334
|
+
const content = message.content || '';
|
|
335
|
+
// Never respond to turn limit messages (prevents endless loops)
|
|
336
|
+
if (content.includes('Turn limit reached')) {
|
|
337
|
+
return false;
|
|
338
|
+
}
|
|
339
|
+
// Never respond to system messages
|
|
340
|
+
if (message.sender === 'system') {
|
|
341
|
+
return false;
|
|
342
|
+
}
|
|
343
|
+
// Always include tool messages (they are results from previous interactions)
|
|
344
|
+
if (message.role === 'tool' || message.sender === 'tool') {
|
|
345
|
+
return true;
|
|
346
|
+
}
|
|
347
|
+
// Always include assistant messages with tool_calls (required for tool result context)
|
|
348
|
+
if (message.role === 'assistant' && message.tool_calls?.length) {
|
|
349
|
+
return true;
|
|
350
|
+
}
|
|
351
|
+
// Always respond to world messages
|
|
352
|
+
if (message.sender === 'world') {
|
|
353
|
+
return true;
|
|
354
|
+
}
|
|
355
|
+
const anyMentions = extractMentions(content);
|
|
356
|
+
const mentions = extractParagraphBeginningMentions(content);
|
|
357
|
+
// Determine sender type
|
|
358
|
+
const senderType = determineSenderType(message.sender);
|
|
359
|
+
// For HUMAN messages
|
|
360
|
+
if (senderType === SenderType.HUMAN) {
|
|
361
|
+
if (mentions.length === 0) {
|
|
362
|
+
// If there are ANY mentions anywhere but none at paragraph beginnings, don't respond
|
|
363
|
+
if (anyMentions.length > 0) {
|
|
364
|
+
return false;
|
|
365
|
+
}
|
|
366
|
+
else {
|
|
367
|
+
return true; // No mentions = public message
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
return mentions.includes(agent.id.toLowerCase());
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
// For agent messages, only respond if this agent has a paragraph-beginning mention
|
|
375
|
+
return mentions.includes(agent.id.toLowerCase());
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Convert MessageData to AgentMessage for memory storage
|
|
379
|
+
*/
|
|
380
|
+
export function messageDataToAgentMessage(messageData) {
|
|
381
|
+
return {
|
|
382
|
+
role: 'user',
|
|
383
|
+
content: messageData.content || messageData.payload?.content || '',
|
|
384
|
+
sender: messageData.sender,
|
|
385
|
+
createdAt: new Date()
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Prepare messages array for LLM using standard chat message format
|
|
390
|
+
* Filters conversation history by chatId if provided and excludes messages
|
|
391
|
+
* the agent would not have responded to (prevents irrelevant context pollution)
|
|
392
|
+
*/
|
|
393
|
+
export async function prepareMessagesForLLM(worldId, agent, chatId, includeCurrentMessage) {
|
|
394
|
+
const messages = [];
|
|
395
|
+
let worldEnvMap = {};
|
|
396
|
+
let worldVariablesText = '';
|
|
397
|
+
// Load FRESH agent from storage to get original system prompt (not patched)
|
|
398
|
+
// This ensures we always use the clean system prompt from storage
|
|
399
|
+
let freshSystemPrompt;
|
|
400
|
+
try {
|
|
401
|
+
const { createStorageWithWrappers } = await import('./storage/storage-factory.js');
|
|
402
|
+
const storage = await createStorageWithWrappers();
|
|
403
|
+
const freshAgent = await storage.loadAgent(worldId, agent.id);
|
|
404
|
+
freshSystemPrompt = freshAgent?.systemPrompt;
|
|
405
|
+
const world = await storage.loadWorld(worldId);
|
|
406
|
+
worldVariablesText = world?.variables || '';
|
|
407
|
+
worldEnvMap = parseEnvText(worldVariablesText);
|
|
408
|
+
}
|
|
409
|
+
catch (error) {
|
|
410
|
+
const { logger } = await import('./logger.js');
|
|
411
|
+
logger.error('Could not load agent from storage for system prompt', {
|
|
412
|
+
agentId: agent.id,
|
|
413
|
+
worldId,
|
|
414
|
+
error: error instanceof Error ? error.message : error
|
|
415
|
+
});
|
|
416
|
+
// Fallback to in-memory agent's system prompt
|
|
417
|
+
freshSystemPrompt = agent.systemPrompt;
|
|
418
|
+
}
|
|
419
|
+
// IDEMPOTENCE: Always add a system message first.
|
|
420
|
+
// System messages are NEVER saved to storage.
|
|
421
|
+
const interpolatedPrompt = interpolateTemplateVariables(freshSystemPrompt || '', worldEnvMap);
|
|
422
|
+
const workingDirectory = getEnvValueFromText(worldVariablesText, 'working_directory') || getDefaultWorkingDirectory();
|
|
423
|
+
const shellExecutionRule = 'When using `shell_cmd`, execute commands only within this trusted working directory scope: ' + workingDirectory;
|
|
424
|
+
const promptWithShellExecutionRule = interpolatedPrompt.trim().length > 0
|
|
425
|
+
? (interpolatedPrompt.endsWith('\n')
|
|
426
|
+
? `${interpolatedPrompt}${shellExecutionRule}`
|
|
427
|
+
: `${interpolatedPrompt}\n${shellExecutionRule}`)
|
|
428
|
+
: shellExecutionRule;
|
|
429
|
+
const agentSkillsPromptSection = await buildAgentSkillsPromptSection();
|
|
430
|
+
const promptWithSkills = promptWithShellExecutionRule.endsWith('\n')
|
|
431
|
+
? `${promptWithShellExecutionRule}\n${agentSkillsPromptSection}`
|
|
432
|
+
: `${promptWithShellExecutionRule}\n\n${agentSkillsPromptSection}`;
|
|
433
|
+
const mentionFormatRule = buildAgentMentionFormatRule();
|
|
434
|
+
const promptWithMentionRule = promptWithSkills.endsWith('\n')
|
|
435
|
+
? `${promptWithSkills}\n${mentionFormatRule}`
|
|
436
|
+
: `${promptWithSkills}\n\n${mentionFormatRule}`;
|
|
437
|
+
messages.push({
|
|
438
|
+
role: 'system',
|
|
439
|
+
content: promptWithMentionRule,
|
|
440
|
+
createdAt: new Date()
|
|
441
|
+
});
|
|
442
|
+
// Load FRESH conversation history from storage (not from in-memory agent)
|
|
443
|
+
// This ensures we always have the latest messages
|
|
444
|
+
let conversationHistory = [];
|
|
445
|
+
try {
|
|
446
|
+
const { createStorageWithWrappers } = await import('./storage/storage-factory.js');
|
|
447
|
+
const storage = await createStorageWithWrappers();
|
|
448
|
+
conversationHistory = await storage.getMemory(worldId, chatId);
|
|
449
|
+
}
|
|
450
|
+
catch (error) {
|
|
451
|
+
const { logger } = await import('./logger.js');
|
|
452
|
+
logger.error('Could not load conversation history from storage', {
|
|
453
|
+
agentId: agent.id,
|
|
454
|
+
worldId,
|
|
455
|
+
chatId,
|
|
456
|
+
error: error instanceof Error ? error.message : error
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
// Filter to only include messages from THIS specific agent
|
|
460
|
+
// getMemory returns messages from ALL agents, but we only want this agent's memory
|
|
461
|
+
const agentMessages = conversationHistory.filter(msg => msg.agentId === agent.id);
|
|
462
|
+
// IDEMPOTENCE: Always filter out system messages from history
|
|
463
|
+
// System message should only come from agent.systemPrompt above, never from storage
|
|
464
|
+
const filteredHistory = agentMessages.filter(msg => msg.role !== 'system');
|
|
465
|
+
// Filter to only include messages this agent would have responded to
|
|
466
|
+
// This prevents irrelevant "not mentioned" messages from polluting LLM context
|
|
467
|
+
const relevantHistory = filteredHistory.filter(msg => wouldAgentHaveRespondedToHistoricalMessage(agent, msg));
|
|
468
|
+
// Add filtered conversation history
|
|
469
|
+
messages.push(...relevantHistory);
|
|
470
|
+
// Add current message if provided
|
|
471
|
+
if (includeCurrentMessage) {
|
|
472
|
+
messages.push(messageDataToAgentMessage(includeCurrentMessage));
|
|
473
|
+
}
|
|
474
|
+
// Filter out client-side tool calls and orphaned tool results.
|
|
475
|
+
const { filterClientSideMessages } = await import('./message-prep.js');
|
|
476
|
+
return filterClientSideMessages(messages);
|
|
477
|
+
}
|
|
478
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../core/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC7G,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,MAAM,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B;IACxC,MAAM,QAAQ,GAAG,OAAO,OAAO,KAAK,WAAW;QAC7C,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,qCAAqC;QACpD,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,eAAe,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,eAAe,CAAC;QACzB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;IAC3C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sDAAsD;QACtD,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAClE,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,4EAA4E;IAC5E,OAAO,OAAO,OAAO,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;AACzF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IAEpB,OAAO,GAAG;SACP,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAW,8BAA8B;SAC7D,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAE,kCAAkC;SACvE,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,0CAA0C;SACzE,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAY,uCAAuC;SACtE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAU,kCAAkC;SACjE,WAAW,EAAE,CAAC,CAAiB,uBAAuB;AAC3D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,aAAsB;IACjD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,IAAI,CAAC,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACxD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3C,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,SAAS;QACX,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAC7D,SAAS;QACX,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEpD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACpE,SAAS;QACX,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,aAAiC,EAAE,GAAW;IAChF,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAC3C,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;QACtD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,GAAG,KAAK,mBAAmB,EAAE,CAAC;QAChC,OAAO,0BAA0B,EAAE,CAAC;IACtC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,2BAA2B;IAClC,OAAO;QACL,+EAA+E;QAC/E,8CAA8C;QAC9C,6HAA6H;KAC9H,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,QAAgB,EAAE,MAA8B;IAC3F,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,QAAQ,CAAC,OAAO,CAAC,kCAAkC,EAAE,CAAC,MAAM,EAAE,YAAoB,EAAE,EAAE;QAC3F,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC;YAC/D,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QACpC,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,6BAA6B;IAC1C,MAAM,uBAAuB,EAAE,CAAC;IAEhC,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC;IACrH,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC;IAEvH,MAAM,eAAe,GAAG,wBAAwB,CAAC;QAC/C,aAAa,EAAE,mBAAmB;QAClC,cAAc,EAAE,oBAAoB;KACrC,CAAC,CAAC;IAEH,MAAM,sBAAsB,GAAG,uBAAuB,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IACvG,MAAM,uBAAuB,GAAG,uBAAuB,CAAC,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAEzG,MAAM,uBAAuB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,CAAC,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAa;QACtB,iBAAiB;QACjB,8DAA8D;QAC9D,8CAA8C;QAC9C,2FAA2F;QAC3F,oCAAoC;QACpC,EAAE;QACF,oBAAoB;KACrB,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,uBAAuB,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,WAAW,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,oBAAoB,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACjF,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,qCAAqC;AACrC,OAAO,EAAgB,UAAU,EAA0C,MAAM,YAAY,CAAC;AAE9F;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAY;IAC5C,OAAO,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,iCAAiC;AAChE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAExB,MAAM,YAAY,GAAG,qBAAqB,CAAC;IAC3C,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,iBAAiB,GAAkB,IAAI,CAAC;IAC5C,IAAI,KAAK,CAAC;IAEV,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAC3C,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAE/B,oCAAoC;YACpC,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;gBAC/B,iBAAiB,GAAG,YAAY,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iCAAiC,CAAC,OAAe;IAC/D,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAExB,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,cAAc,GAAG,oEAAoE,CAAC;IAC5F,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,OAAO,EAAE,CAAC;gBACZ,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA0B;IAC5D,IAAI,CAAC,MAAM;QAAE,OAAO,UAAU,CAAC,MAAM,CAAC;IAEtC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAEzC,IAAI,WAAW,KAAK,OAAO,IAAI,WAAW,KAAK,MAAM,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;QAC/E,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1B,CAAC;IACD,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,UAAU,CAAC,MAAM,CAAC;IAC3B,CAAC;IACD,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,UAAU,CAAC,KAAK,CAAC;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,0CAA0C,CACxD,KAAY,EACZ,OAAqB;IAErB,qDAAqD;IACrD,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7F,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IAEtC,gEAAgE;IAChE,IAAI,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mCAAmC;IACnC,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6EAA6E;IAC7E,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uFAAuF;IACvF,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAK,OAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAChF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mCAAmC;IACnC,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,iCAAiC,CAAC,OAAO,CAAC,CAAC;IAE5D,wBAAwB;IACxB,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvD,qBAAqB;IACrB,IAAI,UAAU,KAAK,UAAU,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,qFAAqF;YACrF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO,KAAK,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,CAAC,+BAA+B;YAC9C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,mFAAmF;IACnF,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,WAAwB;IAChE,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE;QAClE,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,SAAS,EAAE,IAAI,IAAI,EAAE;KACtB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAe,EACf,KAAY,EACZ,MAAqB,EACrB,qBAAmC;IAEnC,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,IAAI,WAAW,GAA2B,EAAE,CAAC;IAC7C,IAAI,kBAAkB,GAAG,EAAE,CAAC;IAE5B,4EAA4E;IAC5E,kEAAkE;IAClE,IAAI,iBAAqC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,EAAE,yBAAyB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;QACnF,MAAM,OAAO,GAAG,MAAM,yBAAyB,EAAE,CAAC;QAClD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9D,iBAAiB,GAAG,UAAU,EAAE,YAAY,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC/C,kBAAkB,GAAG,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;QAC5C,WAAW,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,qDAAqD,EAAE;YAClE,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,OAAO;YACP,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;SACtD,CAAC,CAAC;QACH,8CAA8C;QAC9C,iBAAiB,GAAG,KAAK,CAAC,YAAY,CAAC;IACzC,CAAC;IAED,kDAAkD;IAClD,8CAA8C;IAC9C,MAAM,kBAAkB,GAAG,4BAA4B,CAAC,iBAAiB,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;IAC9F,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,IAAI,0BAA0B,EAAE,CAAC;IACtH,MAAM,kBAAkB,GAAG,6FAA6F,GAAG,gBAAgB,CAAC;IAC5I,MAAM,4BAA4B,GAAG,kBAAkB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QACvE,CAAC,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC;YAClC,CAAC,CAAC,GAAG,kBAAkB,GAAG,kBAAkB,EAAE;YAC9C,CAAC,CAAC,GAAG,kBAAkB,KAAK,kBAAkB,EAAE,CAAC;QACnD,CAAC,CAAC,kBAAkB,CAAC;IACvB,MAAM,wBAAwB,GAAG,MAAM,6BAA6B,EAAE,CAAC;IACvE,MAAM,gBAAgB,GAAG,4BAA4B,CAAC,QAAQ,CAAC,IAAI,CAAC;QAClE,CAAC,CAAC,GAAG,4BAA4B,KAAK,wBAAwB,EAAE;QAChE,CAAC,CAAC,GAAG,4BAA4B,OAAO,wBAAwB,EAAE,CAAC;IACrE,MAAM,iBAAiB,GAAG,2BAA2B,EAAE,CAAC;IACxD,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC3D,CAAC,CAAC,GAAG,gBAAgB,KAAK,iBAAiB,EAAE;QAC7C,CAAC,CAAC,GAAG,gBAAgB,OAAO,iBAAiB,EAAE,CAAC;IAElD,QAAQ,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,qBAAqB;QAC9B,SAAS,EAAE,IAAI,IAAI,EAAE;KACtB,CAAC,CAAC;IAEH,0EAA0E;IAC1E,kDAAkD;IAClD,IAAI,mBAAmB,GAAmB,EAAE,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,EAAE,yBAAyB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;QACnF,MAAM,OAAO,GAAG,MAAM,yBAAyB,EAAE,CAAC;QAClD,mBAAmB,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,kDAAkD,EAAE;YAC/D,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,OAAO;YACP,MAAM;YACN,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;SACtD,CAAC,CAAC;IACL,CAAC;IAED,2DAA2D;IAC3D,mFAAmF;IACnF,MAAM,aAAa,GAAG,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;IAElF,8DAA8D;IAC9D,oFAAoF;IACpF,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAE3E,qEAAqE;IACrE,+EAA+E;IAC/E,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACnD,0CAA0C,CAAC,KAAK,EAAE,GAAG,CAAC,CACvD,CAAC;IAEF,oCAAoC;IACpC,QAAQ,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;IAElC,kCAAkC;IAClC,IAAI,qBAAqB,EAAE,CAAC;QAC1B,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,+DAA+D;IAC/D,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACvE,OAAO,wBAAwB,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* World Class - Object-Oriented Wrapper for Core World Functions
|
|
3
|
+
*
|
|
4
|
+
* Provides a clean OOP interface wrapping core function-based API with automatic worldId management.
|
|
5
|
+
* Stateless design - each method delegates to core functions and fetches fresh data.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const world = new WorldClass(worldId);
|
|
10
|
+
* await world.delete();
|
|
11
|
+
* const agent = await world.createAgent({...});
|
|
12
|
+
* await world.clearAgentMemory('agent-name');
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
import { type World, type Agent, type Chat, type AgentMessage } from './index.js';
|
|
16
|
+
import type { CreateAgentParams, UpdateAgentParams, UpdateWorldParams } from './types.js';
|
|
17
|
+
/** Object-oriented wrapper for World management functions */
|
|
18
|
+
export declare class WorldClass {
|
|
19
|
+
private readonly worldId;
|
|
20
|
+
constructor(worldId: string);
|
|
21
|
+
delete(): Promise<boolean>;
|
|
22
|
+
update(updates: UpdateWorldParams): Promise<World | null>;
|
|
23
|
+
reload(): Promise<World | null>;
|
|
24
|
+
exportToMarkdown(): Promise<string>;
|
|
25
|
+
save(): Promise<void>;
|
|
26
|
+
createAgent(params: CreateAgentParams): Promise<Agent>;
|
|
27
|
+
getAgent(agentName: string): Promise<Agent | null>;
|
|
28
|
+
updateAgent(agentName: string, updates: UpdateAgentParams): Promise<Agent | null>;
|
|
29
|
+
deleteAgent(agentName: string): Promise<boolean>;
|
|
30
|
+
listAgents(): Promise<Agent[]>;
|
|
31
|
+
clearAgentMemory(agentName: string): Promise<Agent | null>;
|
|
32
|
+
listChats(): Promise<Chat[]>;
|
|
33
|
+
newChat(setAsCurrent?: boolean): Promise<World | null>;
|
|
34
|
+
restoreChat(chatId: string, setAsCurrent?: boolean): Promise<World | null>;
|
|
35
|
+
deleteChat(chatId: string): Promise<boolean>;
|
|
36
|
+
getMemory(chatId?: string | null): Promise<AgentMessage[] | null>;
|
|
37
|
+
get id(): string;
|
|
38
|
+
toString(): string;
|
|
39
|
+
toJSON(): {
|
|
40
|
+
id: string;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export default WorldClass;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"world-class.d.ts","sourceRoot":"","sources":["../../core/world-class.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAIL,KAAK,KAAK,EAAE,KAAK,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,YAAY,EACrD,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG1F,6DAA6D;AAC7D,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IAKtC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAI1B,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAIzD,MAAM,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAI/B,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC;IAItD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAIlD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAIjF,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhD,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAI9B,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAK1D,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAI5B,OAAO,CAAC,YAAY,GAAE,OAAc,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAI5D,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,GAAE,OAAc,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAQhF,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI5C,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC;IAKvE,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,QAAQ,IAAI,MAAM;IAIlB,MAAM,IAAI;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE;CAGzB;AAED,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* World Class - Object-Oriented Wrapper for Core World Functions
|
|
3
|
+
*
|
|
4
|
+
* Provides a clean OOP interface wrapping core function-based API with automatic worldId management.
|
|
5
|
+
* Stateless design - each method delegates to core functions and fetches fresh data.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const world = new WorldClass(worldId);
|
|
10
|
+
* await world.delete();
|
|
11
|
+
* const agent = await world.createAgent({...});
|
|
12
|
+
* await world.clearAgentMemory('agent-name');
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
import { getWorld, updateWorld, deleteWorld, exportWorldToMarkdown, getMemory, createAgent, getAgent, updateAgent, deleteAgent, listAgents, clearAgentMemory, listChats, deleteChat, newChat, restoreChat, } from './index.js';
|
|
16
|
+
import { toKebabCase } from './utils.js';
|
|
17
|
+
/** Object-oriented wrapper for World management functions */
|
|
18
|
+
export class WorldClass {
|
|
19
|
+
worldId;
|
|
20
|
+
constructor(worldId) {
|
|
21
|
+
this.worldId = worldId;
|
|
22
|
+
this.worldId = toKebabCase(this.worldId);
|
|
23
|
+
}
|
|
24
|
+
// WORLD OPERATIONS
|
|
25
|
+
async delete() {
|
|
26
|
+
return await deleteWorld(this.worldId);
|
|
27
|
+
}
|
|
28
|
+
async update(updates) {
|
|
29
|
+
return await updateWorld(this.worldId, updates);
|
|
30
|
+
}
|
|
31
|
+
async reload() {
|
|
32
|
+
return await getWorld(this.worldId);
|
|
33
|
+
}
|
|
34
|
+
async exportToMarkdown() {
|
|
35
|
+
return await exportWorldToMarkdown(this.worldId);
|
|
36
|
+
}
|
|
37
|
+
async save() {
|
|
38
|
+
// Stateless design - use update() with specific changes
|
|
39
|
+
}
|
|
40
|
+
// AGENT OPERATIONS
|
|
41
|
+
async createAgent(params) {
|
|
42
|
+
return await createAgent(this.worldId, params);
|
|
43
|
+
}
|
|
44
|
+
async getAgent(agentName) {
|
|
45
|
+
return await getAgent(this.worldId, agentName);
|
|
46
|
+
}
|
|
47
|
+
async updateAgent(agentName, updates) {
|
|
48
|
+
return await updateAgent(this.worldId, agentName, updates);
|
|
49
|
+
}
|
|
50
|
+
async deleteAgent(agentName) {
|
|
51
|
+
return await deleteAgent(this.worldId, agentName);
|
|
52
|
+
}
|
|
53
|
+
async listAgents() {
|
|
54
|
+
return await listAgents(this.worldId);
|
|
55
|
+
}
|
|
56
|
+
async clearAgentMemory(agentName) {
|
|
57
|
+
return await clearAgentMemory(this.worldId, agentName);
|
|
58
|
+
}
|
|
59
|
+
// CHAT OPERATIONS
|
|
60
|
+
async listChats() {
|
|
61
|
+
return await listChats(this.worldId);
|
|
62
|
+
}
|
|
63
|
+
async newChat(setAsCurrent = true) {
|
|
64
|
+
return await newChat(this.worldId);
|
|
65
|
+
}
|
|
66
|
+
async restoreChat(chatId, setAsCurrent = true) {
|
|
67
|
+
if (setAsCurrent) {
|
|
68
|
+
return await restoreChat(this.worldId, chatId);
|
|
69
|
+
}
|
|
70
|
+
const chats = await listChats(this.worldId);
|
|
71
|
+
return chats.some(c => c.id === chatId) ? await getWorld(this.worldId) : null;
|
|
72
|
+
}
|
|
73
|
+
async deleteChat(chatId) {
|
|
74
|
+
return await deleteChat(this.worldId, chatId);
|
|
75
|
+
}
|
|
76
|
+
async getMemory(chatId) {
|
|
77
|
+
return await getMemory(this.worldId, chatId);
|
|
78
|
+
}
|
|
79
|
+
// UTILITY METHODS
|
|
80
|
+
get id() {
|
|
81
|
+
return this.worldId;
|
|
82
|
+
}
|
|
83
|
+
toString() {
|
|
84
|
+
return `WorldClass(${this.worldId})`;
|
|
85
|
+
}
|
|
86
|
+
toJSON() {
|
|
87
|
+
return { id: this.worldId };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export default WorldClass;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"world-class.js","sourceRoot":"","sources":["../../core/world-class.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent World - Main Package Entry Point
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - World-centric agent management system
|
|
6
|
+
* - LLM provider abstraction layer
|
|
7
|
+
* - Event-driven architecture
|
|
8
|
+
* - TypeScript-native execution
|
|
9
|
+
* - Command-line and server interfaces
|
|
10
|
+
*
|
|
11
|
+
* This module re-exports the core functionality of Agent World for npm package usage.
|
|
12
|
+
*/
|
|
13
|
+
export * from './core/index';
|
|
14
|
+
export declare const PACKAGE_INFO: {
|
|
15
|
+
readonly name: "agent-world";
|
|
16
|
+
readonly version: "0.5.0";
|
|
17
|
+
readonly description: "A agent management system for building AI agent teams with just words.";
|
|
18
|
+
};
|
|
Binary file
|