agent-world 0.11.1 → 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 +17 -7
- 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 +15 -3
- package/scripts/launch-electron.js +0 -58
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Storage Module - File I/O Operations for World-Level Agent Skills
|
|
3
|
+
*
|
|
4
|
+
* Purpose:
|
|
5
|
+
* File-based storage for world-scoped skills following the Anthropic Agent Skills Protocol.
|
|
6
|
+
* Each skill is a directory under `{world-dir}/skills/{skill-name}/` containing a `SKILL.md`
|
|
7
|
+
* file with YAML frontmatter metadata and markdown body instructions.
|
|
8
|
+
*
|
|
9
|
+
* Features:
|
|
10
|
+
* - SKILL.md parsing with YAML frontmatter extraction and validation
|
|
11
|
+
* - Skill CRUD operations (import, read, list, delete, export)
|
|
12
|
+
* - `.meta.json` write-time cache for fast metadata listing
|
|
13
|
+
* - Cache fallback to SKILL.md parsing when cache is missing or corrupt
|
|
14
|
+
* - Path traversal protection using resolve + startsWith guards
|
|
15
|
+
* - Duplicate skill rejection via `skillExists()` check before import
|
|
16
|
+
* - Content size and line-count validation with warnings
|
|
17
|
+
*
|
|
18
|
+
* Notes:
|
|
19
|
+
* - Follows `agent-storage.ts` pattern: standalone module with explicit `rootPath`
|
|
20
|
+
* - Uses `fs/promises` for all I/O, pure functions, no classes
|
|
21
|
+
* - Skills are NOT tool calls — they follow the Anthropic Agent Skills Protocol
|
|
22
|
+
* as a content/instruction protocol (app reads SKILL.md, injects into user message)
|
|
23
|
+
* - Skill metadata limits: name max 64 chars (kebab-case), description max 256 chars
|
|
24
|
+
*
|
|
25
|
+
* Recent Changes:
|
|
26
|
+
* - 2026-02-09: Initial implementation for world-level skills system
|
|
27
|
+
*/
|
|
28
|
+
import { promises as fs } from 'fs';
|
|
29
|
+
import * as path from 'path';
|
|
30
|
+
import { DuplicateSkillError } from '../types.js';
|
|
31
|
+
// ============================================================
|
|
32
|
+
// Constants
|
|
33
|
+
// ============================================================
|
|
34
|
+
/** Maximum allowed length for skill name. */
|
|
35
|
+
const MAX_NAME_LENGTH = 64;
|
|
36
|
+
/** Maximum allowed length for skill description. */
|
|
37
|
+
const MAX_DESCRIPTION_LENGTH = 256;
|
|
38
|
+
/** Maximum SKILL.md file size in bytes before warning (50 KB). */
|
|
39
|
+
const MAX_CONTENT_SIZE_WARN = 50 * 1024;
|
|
40
|
+
/** Maximum SKILL.md line count before warning. */
|
|
41
|
+
const MAX_LINE_COUNT_WARN = 500;
|
|
42
|
+
/** Pattern for valid skill names (kebab-case). */
|
|
43
|
+
const SKILL_NAME_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
44
|
+
/** Name of the metadata cache file. */
|
|
45
|
+
const META_CACHE_FILENAME = '.meta.json';
|
|
46
|
+
/** Name of the skill definition file. */
|
|
47
|
+
const SKILL_FILENAME = 'SKILL.md';
|
|
48
|
+
// ============================================================
|
|
49
|
+
// Path Helpers
|
|
50
|
+
// ============================================================
|
|
51
|
+
/**
|
|
52
|
+
* Get the skills root directory for a world.
|
|
53
|
+
*/
|
|
54
|
+
export function getSkillsDir(rootPath, worldId) {
|
|
55
|
+
return path.join(rootPath, worldId, 'skills');
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get the directory path for a specific skill.
|
|
59
|
+
*/
|
|
60
|
+
export function getSkillDir(rootPath, worldId, skillName) {
|
|
61
|
+
return path.join(getSkillsDir(rootPath, worldId), skillName);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get the SKILL.md file path for a specific skill.
|
|
65
|
+
*/
|
|
66
|
+
export function getSkillFilePath(rootPath, worldId, skillName) {
|
|
67
|
+
return path.join(getSkillDir(rootPath, worldId, skillName), SKILL_FILENAME);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get the .meta.json cache file path for a world's skills.
|
|
71
|
+
*/
|
|
72
|
+
function getMetaCachePath(rootPath, worldId) {
|
|
73
|
+
return path.join(getSkillsDir(rootPath, worldId), META_CACHE_FILENAME);
|
|
74
|
+
}
|
|
75
|
+
// ============================================================
|
|
76
|
+
// Directory Helpers
|
|
77
|
+
// ============================================================
|
|
78
|
+
/**
|
|
79
|
+
* Ensure the skills root directory exists.
|
|
80
|
+
*/
|
|
81
|
+
export async function ensureSkillsDirectory(rootPath, worldId) {
|
|
82
|
+
await fs.mkdir(getSkillsDir(rootPath, worldId), { recursive: true });
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Ensure a specific skill directory exists.
|
|
86
|
+
*/
|
|
87
|
+
export async function ensureSkillDirectory(rootPath, worldId, skillName) {
|
|
88
|
+
await fs.mkdir(getSkillDir(rootPath, worldId, skillName), { recursive: true });
|
|
89
|
+
}
|
|
90
|
+
// ============================================================
|
|
91
|
+
// Path Safety
|
|
92
|
+
// ============================================================
|
|
93
|
+
/**
|
|
94
|
+
* Validate that a resolved path stays within the expected base directory.
|
|
95
|
+
* Prevents path traversal attacks (e.g., `../../etc/passwd`).
|
|
96
|
+
*/
|
|
97
|
+
function assertSafePath(filePath, baseDir) {
|
|
98
|
+
const resolved = path.resolve(filePath);
|
|
99
|
+
const resolvedBase = path.resolve(baseDir);
|
|
100
|
+
const sep = path.sep || '/';
|
|
101
|
+
if (!resolved.startsWith(resolvedBase + sep) && resolved !== resolvedBase) {
|
|
102
|
+
throw new Error(`Path traversal detected: ${filePath} escapes ${baseDir}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// ============================================================
|
|
106
|
+
// YAML Frontmatter Parsing
|
|
107
|
+
// ============================================================
|
|
108
|
+
/**
|
|
109
|
+
* Parse SKILL.md content into metadata (YAML frontmatter) and body content.
|
|
110
|
+
* Supports standard YAML frontmatter delimited by `---` lines.
|
|
111
|
+
*
|
|
112
|
+
* @param raw - Raw file content of SKILL.md
|
|
113
|
+
* @returns Parsed SkillData with metadata and content
|
|
114
|
+
* @throws Error if frontmatter is missing or malformed
|
|
115
|
+
*/
|
|
116
|
+
export function parseSkillFile(raw) {
|
|
117
|
+
const trimmed = raw.trimStart();
|
|
118
|
+
if (!trimmed.startsWith('---')) {
|
|
119
|
+
throw new Error('SKILL.md must start with YAML frontmatter (---)');
|
|
120
|
+
}
|
|
121
|
+
const endIndex = trimmed.indexOf('\n---', 3);
|
|
122
|
+
if (endIndex === -1) {
|
|
123
|
+
throw new Error('SKILL.md YAML frontmatter is not properly closed (missing closing ---)');
|
|
124
|
+
}
|
|
125
|
+
const yamlBlock = trimmed.substring(3, endIndex).trim();
|
|
126
|
+
const body = trimmed.substring(endIndex + 4).trim();
|
|
127
|
+
const metadata = parseSimpleYaml(yamlBlock);
|
|
128
|
+
return { metadata, content: body };
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Minimal YAML parser for frontmatter fields.
|
|
132
|
+
* Handles simple key-value pairs and arrays (inline `[a, b]` syntax).
|
|
133
|
+
* Does NOT support nested objects, multi-line strings, or complex YAML.
|
|
134
|
+
*/
|
|
135
|
+
function parseSimpleYaml(yaml) {
|
|
136
|
+
const result = {};
|
|
137
|
+
const lines = yaml.split('\n');
|
|
138
|
+
for (const line of lines) {
|
|
139
|
+
const trimmed = line.trim();
|
|
140
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
141
|
+
continue;
|
|
142
|
+
const colonIndex = trimmed.indexOf(':');
|
|
143
|
+
if (colonIndex === -1)
|
|
144
|
+
continue;
|
|
145
|
+
const key = trimmed.substring(0, colonIndex).trim();
|
|
146
|
+
let value = trimmed.substring(colonIndex + 1).trim();
|
|
147
|
+
// Handle inline arrays: [item1, item2]
|
|
148
|
+
if (value.startsWith('[') && value.endsWith(']')) {
|
|
149
|
+
value = value
|
|
150
|
+
.slice(1, -1)
|
|
151
|
+
.split(',')
|
|
152
|
+
.map((item) => item.trim().replace(/^["']|["']$/g, ''))
|
|
153
|
+
.filter((item) => item.length > 0);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
// Remove surrounding quotes
|
|
157
|
+
value = value.replace(/^["']|["']$/g, '');
|
|
158
|
+
}
|
|
159
|
+
result[key] = value;
|
|
160
|
+
}
|
|
161
|
+
if (!result.name || !result.description) {
|
|
162
|
+
throw new Error('SKILL.md frontmatter must contain required fields: name, description');
|
|
163
|
+
}
|
|
164
|
+
return result;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Extract just the metadata from a SKILL.md file (without body content).
|
|
168
|
+
*/
|
|
169
|
+
export function extractSkillMetadata(raw) {
|
|
170
|
+
return parseSkillFile(raw).metadata;
|
|
171
|
+
}
|
|
172
|
+
// ============================================================
|
|
173
|
+
// Validation
|
|
174
|
+
// ============================================================
|
|
175
|
+
/**
|
|
176
|
+
* Validate skill metadata against protocol constraints.
|
|
177
|
+
*/
|
|
178
|
+
export function validateSkillMetadata(metadata) {
|
|
179
|
+
const errors = [];
|
|
180
|
+
const warnings = [];
|
|
181
|
+
// Name validation
|
|
182
|
+
if (!metadata.name) {
|
|
183
|
+
errors.push('Skill name is required');
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
if (metadata.name.length > MAX_NAME_LENGTH) {
|
|
187
|
+
errors.push(`Skill name exceeds maximum length of ${MAX_NAME_LENGTH} characters`);
|
|
188
|
+
}
|
|
189
|
+
if (!SKILL_NAME_PATTERN.test(metadata.name)) {
|
|
190
|
+
errors.push('Skill name must be kebab-case (lowercase alphanumeric with hyphens)');
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// Description validation
|
|
194
|
+
if (!metadata.description) {
|
|
195
|
+
errors.push('Skill description is required');
|
|
196
|
+
}
|
|
197
|
+
else if (metadata.description.length > MAX_DESCRIPTION_LENGTH) {
|
|
198
|
+
errors.push(`Skill description exceeds maximum length of ${MAX_DESCRIPTION_LENGTH} characters`);
|
|
199
|
+
}
|
|
200
|
+
// Optional field warnings
|
|
201
|
+
if (!metadata.version) {
|
|
202
|
+
warnings.push('No version specified');
|
|
203
|
+
}
|
|
204
|
+
return { valid: errors.length === 0, errors, warnings };
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Validate skill content (SKILL.md body) for size and line count.
|
|
208
|
+
*/
|
|
209
|
+
export function validateSkillContent(content) {
|
|
210
|
+
const errors = [];
|
|
211
|
+
const warnings = [];
|
|
212
|
+
const byteSize = Buffer.byteLength(content, 'utf8');
|
|
213
|
+
if (byteSize > MAX_CONTENT_SIZE_WARN) {
|
|
214
|
+
warnings.push(`Skill content is ${Math.round(byteSize / 1024)} KB (recommended max: ${MAX_CONTENT_SIZE_WARN / 1024} KB)`);
|
|
215
|
+
}
|
|
216
|
+
const lineCount = content.split('\n').length;
|
|
217
|
+
if (lineCount > MAX_LINE_COUNT_WARN) {
|
|
218
|
+
warnings.push(`Skill content has ${lineCount} lines (recommended max: ${MAX_LINE_COUNT_WARN})`);
|
|
219
|
+
}
|
|
220
|
+
return { valid: errors.length === 0, errors, warnings };
|
|
221
|
+
}
|
|
222
|
+
// ============================================================
|
|
223
|
+
// File CRUD Operations
|
|
224
|
+
// ============================================================
|
|
225
|
+
/**
|
|
226
|
+
* Check if a skill exists in a world.
|
|
227
|
+
*/
|
|
228
|
+
export async function skillExists(rootPath, worldId, skillName) {
|
|
229
|
+
try {
|
|
230
|
+
const filePath = getSkillFilePath(rootPath, worldId, skillName);
|
|
231
|
+
await fs.access(filePath);
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Save a SKILL.md file for a skill.
|
|
240
|
+
*/
|
|
241
|
+
export async function saveSkillFile(rootPath, worldId, skillName, content) {
|
|
242
|
+
await ensureSkillDirectory(rootPath, worldId, skillName);
|
|
243
|
+
const filePath = getSkillFilePath(rootPath, worldId, skillName);
|
|
244
|
+
assertSafePath(filePath, getSkillsDir(rootPath, worldId));
|
|
245
|
+
await fs.writeFile(filePath, content, 'utf8');
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Load a SKILL.md file content for a skill.
|
|
249
|
+
*/
|
|
250
|
+
export async function loadSkillFile(rootPath, worldId, skillName) {
|
|
251
|
+
const filePath = getSkillFilePath(rootPath, worldId, skillName);
|
|
252
|
+
assertSafePath(filePath, getSkillsDir(rootPath, worldId));
|
|
253
|
+
return fs.readFile(filePath, 'utf8');
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Delete a skill directory and all its contents.
|
|
257
|
+
*/
|
|
258
|
+
export async function deleteSkillFolder(rootPath, worldId, skillName) {
|
|
259
|
+
try {
|
|
260
|
+
const skillDir = getSkillDir(rootPath, worldId, skillName);
|
|
261
|
+
assertSafePath(skillDir, getSkillsDir(rootPath, worldId));
|
|
262
|
+
await fs.rm(skillDir, { recursive: true, force: true });
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* List all skill folder names in a world's skills directory.
|
|
271
|
+
*/
|
|
272
|
+
export async function listSkillFolders(rootPath, worldId) {
|
|
273
|
+
try {
|
|
274
|
+
const skillsDir = getSkillsDir(rootPath, worldId);
|
|
275
|
+
const entries = await fs.readdir(skillsDir, { withFileTypes: true });
|
|
276
|
+
return entries
|
|
277
|
+
.filter(entry => entry.isDirectory())
|
|
278
|
+
.map(entry => entry.name);
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
return [];
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// ============================================================
|
|
285
|
+
// High-Level Operations
|
|
286
|
+
// ============================================================
|
|
287
|
+
/**
|
|
288
|
+
* Get a full WorldSkill object for a specific skill.
|
|
289
|
+
*/
|
|
290
|
+
export async function getWorldSkill(rootPath, worldId, skillName) {
|
|
291
|
+
try {
|
|
292
|
+
const raw = await loadSkillFile(rootPath, worldId, skillName);
|
|
293
|
+
const skillData = parseSkillFile(raw);
|
|
294
|
+
const dirPath = getSkillDir(rootPath, worldId, skillName);
|
|
295
|
+
const filePath = getSkillFilePath(rootPath, worldId, skillName);
|
|
296
|
+
return {
|
|
297
|
+
metadata: skillData.metadata,
|
|
298
|
+
content: skillData.content,
|
|
299
|
+
dirPath,
|
|
300
|
+
filePath,
|
|
301
|
+
contentSize: Buffer.byteLength(raw, 'utf8'),
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
catch {
|
|
305
|
+
return null;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Get just the metadata for a specific skill.
|
|
310
|
+
*/
|
|
311
|
+
export async function getWorldSkillMetadata(rootPath, worldId, skillName) {
|
|
312
|
+
try {
|
|
313
|
+
const raw = await loadSkillFile(rootPath, worldId, skillName);
|
|
314
|
+
return extractSkillMetadata(raw);
|
|
315
|
+
}
|
|
316
|
+
catch {
|
|
317
|
+
return null;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* List all WorldSkill objects in a world.
|
|
322
|
+
*/
|
|
323
|
+
export async function listWorldSkills(rootPath, worldId) {
|
|
324
|
+
const folders = await listSkillFolders(rootPath, worldId);
|
|
325
|
+
const skills = [];
|
|
326
|
+
for (const folder of folders) {
|
|
327
|
+
const skill = await getWorldSkill(rootPath, worldId, folder);
|
|
328
|
+
if (skill) {
|
|
329
|
+
skills.push(skill);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return skills;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* List skill metadata for all skills in a world.
|
|
336
|
+
* Uses `.meta.json` cache for fast listing; falls back to SKILL.md parsing.
|
|
337
|
+
*/
|
|
338
|
+
export async function listWorldSkillsMetadata(rootPath, worldId) {
|
|
339
|
+
// Try cache first
|
|
340
|
+
const cached = await loadMetaCache(rootPath, worldId);
|
|
341
|
+
if (cached) {
|
|
342
|
+
return cached;
|
|
343
|
+
}
|
|
344
|
+
// Fallback: parse all SKILL.md files
|
|
345
|
+
const folders = await listSkillFolders(rootPath, worldId);
|
|
346
|
+
const metadataList = [];
|
|
347
|
+
for (const folder of folders) {
|
|
348
|
+
const metadata = await getWorldSkillMetadata(rootPath, worldId, folder);
|
|
349
|
+
if (metadata) {
|
|
350
|
+
metadataList.push(metadata);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
// Write collected metadata to cache for next time (avoids re-reading all SKILL.md files)
|
|
354
|
+
if (metadataList.length > 0) {
|
|
355
|
+
try {
|
|
356
|
+
await ensureSkillsDirectory(rootPath, worldId);
|
|
357
|
+
const cachePath = getMetaCachePath(rootPath, worldId);
|
|
358
|
+
await fs.writeFile(cachePath, JSON.stringify(metadataList, null, 2), 'utf8');
|
|
359
|
+
}
|
|
360
|
+
catch {
|
|
361
|
+
// Cache write failure is non-critical
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
return metadataList;
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Import a skill into a world from raw SKILL.md content.
|
|
368
|
+
* Validates metadata, rejects duplicates, and regenerates cache.
|
|
369
|
+
*
|
|
370
|
+
* @throws {DuplicateSkillError} if skill with same name already exists
|
|
371
|
+
* @throws {Error} if content is invalid
|
|
372
|
+
*/
|
|
373
|
+
export async function importWorldSkill(rootPath, worldId, skillContent) {
|
|
374
|
+
// Parse and validate
|
|
375
|
+
const skillData = parseSkillFile(skillContent);
|
|
376
|
+
const metaValidation = validateSkillMetadata(skillData.metadata);
|
|
377
|
+
if (!metaValidation.valid) {
|
|
378
|
+
throw new Error(`Invalid skill metadata: ${metaValidation.errors.join(', ')}`);
|
|
379
|
+
}
|
|
380
|
+
const skillName = skillData.metadata.name;
|
|
381
|
+
// Check for duplicates
|
|
382
|
+
if (await skillExists(rootPath, worldId, skillName)) {
|
|
383
|
+
throw new DuplicateSkillError(skillName);
|
|
384
|
+
}
|
|
385
|
+
// Save skill file
|
|
386
|
+
await saveSkillFile(rootPath, worldId, skillName, skillContent);
|
|
387
|
+
// Regenerate metadata cache
|
|
388
|
+
await regenerateMetaCache(rootPath, worldId);
|
|
389
|
+
// Return the full WorldSkill object
|
|
390
|
+
return (await getWorldSkill(rootPath, worldId, skillName));
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Export a skill's SKILL.md content as a raw string.
|
|
394
|
+
*/
|
|
395
|
+
export async function exportWorldSkill(rootPath, worldId, skillName) {
|
|
396
|
+
try {
|
|
397
|
+
return await loadSkillFile(rootPath, worldId, skillName);
|
|
398
|
+
}
|
|
399
|
+
catch {
|
|
400
|
+
return null;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Delete a skill from a world and regenerate the metadata cache.
|
|
405
|
+
*/
|
|
406
|
+
export async function deleteWorldSkill(rootPath, worldId, skillName) {
|
|
407
|
+
const deleted = await deleteSkillFolder(rootPath, worldId, skillName);
|
|
408
|
+
if (deleted) {
|
|
409
|
+
await regenerateMetaCache(rootPath, worldId);
|
|
410
|
+
}
|
|
411
|
+
return deleted;
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Get total size (in bytes) of all SKILL.md files in a world.
|
|
415
|
+
*/
|
|
416
|
+
export async function getWorldSkillsSize(rootPath, worldId) {
|
|
417
|
+
const folders = await listSkillFolders(rootPath, worldId);
|
|
418
|
+
let totalSize = 0;
|
|
419
|
+
for (const folder of folders) {
|
|
420
|
+
try {
|
|
421
|
+
const filePath = getSkillFilePath(rootPath, worldId, folder);
|
|
422
|
+
const stat = await fs.stat(filePath);
|
|
423
|
+
totalSize += stat.size;
|
|
424
|
+
}
|
|
425
|
+
catch {
|
|
426
|
+
// Skip unreadable files
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
return totalSize;
|
|
430
|
+
}
|
|
431
|
+
// ============================================================
|
|
432
|
+
// `.meta.json` Cache
|
|
433
|
+
// ============================================================
|
|
434
|
+
/**
|
|
435
|
+
* Regenerate the `.meta.json` metadata cache from all SKILL.md files.
|
|
436
|
+
*/
|
|
437
|
+
export async function regenerateMetaCache(rootPath, worldId) {
|
|
438
|
+
await ensureSkillsDirectory(rootPath, worldId);
|
|
439
|
+
const folders = await listSkillFolders(rootPath, worldId);
|
|
440
|
+
const metadataList = [];
|
|
441
|
+
for (const folder of folders) {
|
|
442
|
+
try {
|
|
443
|
+
const raw = await loadSkillFile(rootPath, worldId, folder);
|
|
444
|
+
const metadata = extractSkillMetadata(raw);
|
|
445
|
+
metadataList.push(metadata);
|
|
446
|
+
}
|
|
447
|
+
catch {
|
|
448
|
+
// Skip malformed skill files
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
const cachePath = getMetaCachePath(rootPath, worldId);
|
|
452
|
+
await fs.writeFile(cachePath, JSON.stringify(metadataList, null, 2), 'utf8');
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* Load the `.meta.json` metadata cache.
|
|
456
|
+
* Returns null if cache is missing or corrupt.
|
|
457
|
+
*/
|
|
458
|
+
export async function loadMetaCache(rootPath, worldId) {
|
|
459
|
+
try {
|
|
460
|
+
const cachePath = getMetaCachePath(rootPath, worldId);
|
|
461
|
+
const raw = await fs.readFile(cachePath, 'utf8');
|
|
462
|
+
const parsed = JSON.parse(raw);
|
|
463
|
+
if (!Array.isArray(parsed)) {
|
|
464
|
+
return null;
|
|
465
|
+
}
|
|
466
|
+
// Basic validation: ensure each entry has name and description
|
|
467
|
+
const valid = parsed.every((item) => typeof item.name === 'string' && typeof item.description === 'string');
|
|
468
|
+
return valid ? parsed : null;
|
|
469
|
+
}
|
|
470
|
+
catch {
|
|
471
|
+
return null;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
//# sourceMappingURL=skill-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-storage.js","sourceRoot":"","sources":["../../../core/storage/skill-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite Database Schema for Agent World System
|
|
3
|
+
*
|
|
4
|
+
* Logger Category: storage.schema
|
|
5
|
+
* Purpose: Schema utilities and PRAGMA configuration
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - PRAGMA configuration for performance and integrity
|
|
9
|
+
* - Schema version tracking (PRAGMA user_version)
|
|
10
|
+
* - Database statistics and integrity validation
|
|
11
|
+
* - Index and trigger creation utilities
|
|
12
|
+
*
|
|
13
|
+
* Schema Design:
|
|
14
|
+
* - worlds: Core world configuration and metadata
|
|
15
|
+
* - agents: Agent configuration with LLM settings
|
|
16
|
+
* - agent_memory: Current active conversation memory
|
|
17
|
+
* - memory_archives: Archive session metadata with rich information
|
|
18
|
+
* - archived_messages: Historical conversation content linked to archives
|
|
19
|
+
* - archive_statistics: Usage analytics and management data
|
|
20
|
+
* - world_chats: Chat session management
|
|
21
|
+
* - events: Event storage with sequences
|
|
22
|
+
* - event_sequences: Atomic sequence generation
|
|
23
|
+
*
|
|
24
|
+
* Implementation:
|
|
25
|
+
* - PRAGMA settings for performance and integrity
|
|
26
|
+
* - JSON column types for flexible configuration storage
|
|
27
|
+
* - Timestamp tracking for all operations
|
|
28
|
+
* - Cascading deletes for data consistency
|
|
29
|
+
* - Prepared statements for security and performance
|
|
30
|
+
* - 2025-11-02: Refactored to remove migration logic (now in migration-runner.ts)
|
|
31
|
+
* - 2025-11-02: Schema initialization deprecated - all databases use migration system (0000-0009)
|
|
32
|
+
* - 2025-11-02: Removed initializeSchema() - migration 0000 handles base schema creation
|
|
33
|
+
*/
|
|
34
|
+
import type { Database } from 'sqlite3';
|
|
35
|
+
export interface SQLiteConfig {
|
|
36
|
+
database: string;
|
|
37
|
+
enableWAL?: boolean;
|
|
38
|
+
busyTimeout?: number;
|
|
39
|
+
cacheSize?: number;
|
|
40
|
+
enableForeignKeys?: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface ArchiveMetadata {
|
|
43
|
+
sessionName?: string;
|
|
44
|
+
archiveReason?: string;
|
|
45
|
+
messageCount: number;
|
|
46
|
+
startTime?: string;
|
|
47
|
+
endTime?: string;
|
|
48
|
+
participants: string[];
|
|
49
|
+
tags?: string[];
|
|
50
|
+
}
|
|
51
|
+
export interface ArchiveStatistics {
|
|
52
|
+
totalArchives: number;
|
|
53
|
+
totalMessages: number;
|
|
54
|
+
averageSessionLength: number;
|
|
55
|
+
mostActiveAgent: string;
|
|
56
|
+
archiveFrequency: {
|
|
57
|
+
[key: string]: number;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export interface SQLiteSchemaContext {
|
|
61
|
+
db: Database;
|
|
62
|
+
config: SQLiteConfig;
|
|
63
|
+
isInitialized: boolean;
|
|
64
|
+
}
|
|
65
|
+
export declare function createSQLiteSchemaContext(config: SQLiteConfig): Promise<SQLiteSchemaContext>;
|
|
66
|
+
export declare function configurePragmas(ctx: {
|
|
67
|
+
db: Database;
|
|
68
|
+
config: SQLiteConfig;
|
|
69
|
+
}): void;
|
|
70
|
+
/**
|
|
71
|
+
* @deprecated All schema initialization is now handled by the migration system.
|
|
72
|
+
* This file only provides utility functions for PRAGMA configuration and database introspection.
|
|
73
|
+
* Schema creation (tables, indexes, triggers) is defined in migrations/*.sql files.
|
|
74
|
+
*/
|
|
75
|
+
export declare function getSchemaVersion(ctx: SQLiteSchemaContext): Promise<number>;
|
|
76
|
+
export declare function setSchemaVersion(ctx: SQLiteSchemaContext, version: number): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Validate database integrity
|
|
79
|
+
* Checks for corruption and foreign key constraint violations
|
|
80
|
+
*/
|
|
81
|
+
export declare function validateIntegrity(ctx: SQLiteSchemaContext): Promise<{
|
|
82
|
+
isValid: boolean;
|
|
83
|
+
errors: string[];
|
|
84
|
+
}>;
|
|
85
|
+
export declare function getDatabaseStats(ctx: SQLiteSchemaContext): Promise<{
|
|
86
|
+
worldCount: number;
|
|
87
|
+
agentCount: number;
|
|
88
|
+
activeMemoryCount: number;
|
|
89
|
+
archiveCount: number;
|
|
90
|
+
archivedMessageCount: number;
|
|
91
|
+
databaseSize: number;
|
|
92
|
+
}>;
|
|
93
|
+
export declare function closeSchema(ctx: SQLiteSchemaContext): Promise<void>;
|
|
94
|
+
export declare function getDatabase(ctx: SQLiteSchemaContext): Database;
|
|
95
|
+
//# sourceMappingURL=sqlite-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-schema.d.ts","sourceRoot":"","sources":["../../../core/storage/sqlite-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAUxC,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAGD,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAGD,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CAC7C;AAID,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,QAAQ,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,yBAAyB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAqBlG;AAGD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG,IAAI,CAgBlF;AAED;;;;GAIG;AAEH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhF;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/F;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAkBjH;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC;IACxE,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC,CAyBD;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOzE;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,mBAAmB,GAAG,QAAQ,CAE9D"}
|