@hybridaione/hybridclaw 0.1.5
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/.env.example +14 -0
- package/.github/workflows/pages.yml +41 -0
- package/AGENTS.md +24 -0
- package/CHANGELOG.md +113 -0
- package/LICENSE +21 -0
- package/README.md +226 -0
- package/SECURITY.md +67 -0
- package/config.example.json +62 -0
- package/container/Dockerfile +23 -0
- package/container/package-lock.json +246 -0
- package/container/package.json +17 -0
- package/container/src/hybridai-client.ts +38 -0
- package/container/src/index.ts +198 -0
- package/container/src/ipc.ts +37 -0
- package/container/src/tools.ts +1008 -0
- package/container/src/types.ts +74 -0
- package/container/src/web-fetch.ts +389 -0
- package/container/tsconfig.json +16 -0
- package/dist/agent.d.ts +3 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +21 -0
- package/dist/agent.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +32 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +38 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +107 -0
- package/dist/config.js.map +1 -0
- package/dist/container-runner.d.ts +11 -0
- package/dist/container-runner.d.ts.map +1 -0
- package/dist/container-runner.js +246 -0
- package/dist/container-runner.js.map +1 -0
- package/dist/conversation.d.ts +18 -0
- package/dist/conversation.d.ts.map +1 -0
- package/dist/conversation.js +29 -0
- package/dist/conversation.js.map +1 -0
- package/dist/db.d.ts +29 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +205 -0
- package/dist/db.js.map +1 -0
- package/dist/discord.d.ts +17 -0
- package/dist/discord.d.ts.map +1 -0
- package/dist/discord.js +115 -0
- package/dist/discord.js.map +1 -0
- package/dist/env.d.ts +6 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +36 -0
- package/dist/env.js.map +1 -0
- package/dist/gateway-client.d.ts +8 -0
- package/dist/gateway-client.d.ts.map +1 -0
- package/dist/gateway-client.js +57 -0
- package/dist/gateway-client.js.map +1 -0
- package/dist/gateway-service.d.ts +23 -0
- package/dist/gateway-service.d.ts.map +1 -0
- package/dist/gateway-service.js +360 -0
- package/dist/gateway-service.js.map +1 -0
- package/dist/gateway-types.d.ts +40 -0
- package/dist/gateway-types.d.ts.map +1 -0
- package/dist/gateway-types.js +6 -0
- package/dist/gateway-types.js.map +1 -0
- package/dist/gateway.d.ts +2 -0
- package/dist/gateway.d.ts.map +1 -0
- package/dist/gateway.js +138 -0
- package/dist/gateway.js.map +1 -0
- package/dist/hatch.d.ts +7 -0
- package/dist/hatch.d.ts.map +1 -0
- package/dist/hatch.js +99 -0
- package/dist/hatch.js.map +1 -0
- package/dist/health.d.ts +2 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/health.js +169 -0
- package/dist/health.js.map +1 -0
- package/dist/heartbeat.d.ts +3 -0
- package/dist/heartbeat.d.ts.map +1 -0
- package/dist/heartbeat.js +103 -0
- package/dist/heartbeat.js.map +1 -0
- package/dist/hybridai-bots.d.ts +5 -0
- package/dist/hybridai-bots.d.ts.map +1 -0
- package/dist/hybridai-bots.js +34 -0
- package/dist/hybridai-bots.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +60 -0
- package/dist/index.js.map +1 -0
- package/dist/ipc.d.ts +33 -0
- package/dist/ipc.d.ts.map +1 -0
- package/dist/ipc.js +142 -0
- package/dist/ipc.js.map +1 -0
- package/dist/logger.d.ts +3 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +21 -0
- package/dist/logger.js.map +1 -0
- package/dist/mount-security.d.ts +28 -0
- package/dist/mount-security.d.ts.map +1 -0
- package/dist/mount-security.js +187 -0
- package/dist/mount-security.js.map +1 -0
- package/dist/onboarding.d.ts +7 -0
- package/dist/onboarding.d.ts.map +1 -0
- package/dist/onboarding.js +445 -0
- package/dist/onboarding.js.map +1 -0
- package/dist/prompt-hooks.d.ts +17 -0
- package/dist/prompt-hooks.d.ts.map +1 -0
- package/dist/prompt-hooks.js +83 -0
- package/dist/prompt-hooks.js.map +1 -0
- package/dist/runtime-config.d.ts +78 -0
- package/dist/runtime-config.d.ts.map +1 -0
- package/dist/runtime-config.js +471 -0
- package/dist/runtime-config.js.map +1 -0
- package/dist/scheduled-task-runner.d.ts +11 -0
- package/dist/scheduled-task-runner.d.ts.map +1 -0
- package/dist/scheduled-task-runner.js +16 -0
- package/dist/scheduled-task-runner.js.map +1 -0
- package/dist/scheduler.d.ts +11 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +165 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/session-maintenance.d.ts +9 -0
- package/dist/session-maintenance.d.ts.map +1 -0
- package/dist/session-maintenance.js +168 -0
- package/dist/session-maintenance.js.map +1 -0
- package/dist/session-transcripts.d.ts +11 -0
- package/dist/session-transcripts.d.ts.map +1 -0
- package/dist/session-transcripts.js +32 -0
- package/dist/session-transcripts.js.map +1 -0
- package/dist/side-effects.d.ts +3 -0
- package/dist/side-effects.d.ts.map +1 -0
- package/dist/side-effects.js +30 -0
- package/dist/side-effects.js.map +1 -0
- package/dist/skills.d.ts +32 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +376 -0
- package/dist/skills.js.map +1 -0
- package/dist/tui.d.ts +2 -0
- package/dist/tui.d.ts.map +1 -0
- package/dist/tui.js +305 -0
- package/dist/tui.js.map +1 -0
- package/dist/types.d.ts +132 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/workspace.d.ts +25 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +154 -0
- package/dist/workspace.js.map +1 -0
- package/docs/chat.html +929 -0
- package/docs/hai_logo_free.png +0 -0
- package/docs/hero.png +0 -0
- package/docs/index.html +1213 -0
- package/package.json +34 -0
- package/skills/current-time/SKILL.md +26 -0
- package/skills/iss-position/SKILL.md +46 -0
- package/skills/iss-position/agents/openai.yaml +3 -0
- package/skills/iss-position/scripts/get_iss_position.py +107 -0
- package/skills/repo-orientation/SKILL.md +74 -0
- package/src/agent.ts +35 -0
- package/src/cli.ts +35 -0
- package/src/config.ts +137 -0
- package/src/container-runner.ts +305 -0
- package/src/conversation.ts +49 -0
- package/src/db.ts +290 -0
- package/src/discord.ts +156 -0
- package/src/env.ts +36 -0
- package/src/gateway-client.ts +73 -0
- package/src/gateway-service.ts +456 -0
- package/src/gateway-types.ts +47 -0
- package/src/gateway.ts +199 -0
- package/src/health.ts +189 -0
- package/src/heartbeat.ts +121 -0
- package/src/hybridai-bots.ts +48 -0
- package/src/ipc.ts +163 -0
- package/src/logger.ts +26 -0
- package/src/mount-security.ts +216 -0
- package/src/onboarding.ts +569 -0
- package/src/prompt-hooks.ts +113 -0
- package/src/runtime-config.ts +588 -0
- package/src/scheduled-task-runner.ts +26 -0
- package/src/scheduler.ts +196 -0
- package/src/session-maintenance.ts +263 -0
- package/src/session-transcripts.ts +45 -0
- package/src/side-effects.ts +41 -0
- package/src/skills.ts +429 -0
- package/src/tui.ts +327 -0
- package/src/types.ts +135 -0
- package/src/workspace.ts +171 -0
- package/templates/AGENTS.md +104 -0
- package/templates/BOOT.md +3 -0
- package/templates/BOOTSTRAP.md +54 -0
- package/templates/HEARTBEAT.md +5 -0
- package/templates/IDENTITY.md +18 -0
- package/templates/MEMORY.md +19 -0
- package/templates/SOUL.md +36 -0
- package/templates/TOOLS.md +22 -0
- package/templates/USER.md +17 -0
- package/tsconfig.json +18 -0
package/dist/config.js
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import os from 'os';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { loadEnvFile } from './env.js';
|
|
5
|
+
import { ensureRuntimeConfigFile, getRuntimeConfig, onRuntimeConfigChange, } from './runtime-config.js';
|
|
6
|
+
loadEnvFile();
|
|
7
|
+
ensureRuntimeConfigFile();
|
|
8
|
+
function required(name) {
|
|
9
|
+
const val = process.env[name];
|
|
10
|
+
if (!val)
|
|
11
|
+
throw new Error(`Missing required env var: ${name}`);
|
|
12
|
+
return val;
|
|
13
|
+
}
|
|
14
|
+
function resolveAppVersion() {
|
|
15
|
+
const envVersion = process.env.npm_package_version;
|
|
16
|
+
if (envVersion)
|
|
17
|
+
return envVersion;
|
|
18
|
+
const packagePath = path.join(process.cwd(), 'package.json');
|
|
19
|
+
try {
|
|
20
|
+
const raw = fs.readFileSync(packagePath, 'utf-8');
|
|
21
|
+
const parsed = JSON.parse(raw);
|
|
22
|
+
if (typeof parsed.version === 'string' && parsed.version.trim()) {
|
|
23
|
+
return parsed.version.trim();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// fall through
|
|
28
|
+
}
|
|
29
|
+
return '0.0.0';
|
|
30
|
+
}
|
|
31
|
+
export const APP_VERSION = resolveAppVersion();
|
|
32
|
+
// Secrets stay in env/.env
|
|
33
|
+
export const DISCORD_TOKEN = process.env.DISCORD_TOKEN || '';
|
|
34
|
+
export const HYBRIDAI_API_KEY = required('HYBRIDAI_API_KEY');
|
|
35
|
+
// Runtime settings hot-reload from config.json
|
|
36
|
+
export let DISCORD_PREFIX = '!claw';
|
|
37
|
+
export let HYBRIDAI_BASE_URL = 'https://hybridai.one';
|
|
38
|
+
export let HYBRIDAI_MODEL = 'gpt-5-nano';
|
|
39
|
+
export let HYBRIDAI_CHATBOT_ID = '';
|
|
40
|
+
export let HYBRIDAI_ENABLE_RAG = true;
|
|
41
|
+
export let HYBRIDAI_MODELS = ['gpt-5-nano', 'gpt-5-mini', 'gpt-5'];
|
|
42
|
+
export let CONTAINER_IMAGE = 'hybridclaw-agent';
|
|
43
|
+
export let CONTAINER_MEMORY = '512m';
|
|
44
|
+
export let CONTAINER_CPUS = '1';
|
|
45
|
+
export let CONTAINER_TIMEOUT = 60_000;
|
|
46
|
+
export const MOUNT_ALLOWLIST_PATH = path.join(os.homedir(), '.config', 'hybridclaw', 'mount-allowlist.json');
|
|
47
|
+
export let ADDITIONAL_MOUNTS = '';
|
|
48
|
+
export let CONTAINER_MAX_OUTPUT_SIZE = 10_485_760;
|
|
49
|
+
export let MAX_CONCURRENT_CONTAINERS = 5;
|
|
50
|
+
export let HEARTBEAT_ENABLED = true;
|
|
51
|
+
export let HEARTBEAT_INTERVAL = 1_800_000;
|
|
52
|
+
export let HEARTBEAT_CHANNEL = '';
|
|
53
|
+
export let HEALTH_HOST = '127.0.0.1';
|
|
54
|
+
export let HEALTH_PORT = 9090;
|
|
55
|
+
export let WEB_API_TOKEN = '';
|
|
56
|
+
export let GATEWAY_BASE_URL = 'http://127.0.0.1:9090';
|
|
57
|
+
export let GATEWAY_API_TOKEN = '';
|
|
58
|
+
export let DB_PATH = 'data/hybridclaw.db';
|
|
59
|
+
export let DATA_DIR = path.dirname(DB_PATH);
|
|
60
|
+
export let SESSION_COMPACTION_ENABLED = true;
|
|
61
|
+
export let SESSION_COMPACTION_THRESHOLD = 120;
|
|
62
|
+
export let SESSION_COMPACTION_KEEP_RECENT = 40;
|
|
63
|
+
export let SESSION_COMPACTION_SUMMARY_MAX_CHARS = 8_000;
|
|
64
|
+
export let PRE_COMPACTION_MEMORY_FLUSH_ENABLED = true;
|
|
65
|
+
export let PRE_COMPACTION_MEMORY_FLUSH_MAX_MESSAGES = 80;
|
|
66
|
+
export let PRE_COMPACTION_MEMORY_FLUSH_MAX_CHARS = 24_000;
|
|
67
|
+
function applyRuntimeConfig(config) {
|
|
68
|
+
DISCORD_PREFIX = config.discord.prefix;
|
|
69
|
+
HYBRIDAI_BASE_URL = config.hybridai.baseUrl;
|
|
70
|
+
HYBRIDAI_MODEL = config.hybridai.defaultModel;
|
|
71
|
+
HYBRIDAI_CHATBOT_ID = config.hybridai.defaultChatbotId;
|
|
72
|
+
HYBRIDAI_ENABLE_RAG = config.hybridai.enableRag;
|
|
73
|
+
HYBRIDAI_MODELS = [...config.hybridai.models];
|
|
74
|
+
CONTAINER_IMAGE = config.container.image;
|
|
75
|
+
CONTAINER_MEMORY = config.container.memory;
|
|
76
|
+
CONTAINER_CPUS = config.container.cpus;
|
|
77
|
+
CONTAINER_TIMEOUT = config.container.timeoutMs;
|
|
78
|
+
ADDITIONAL_MOUNTS = config.container.additionalMounts;
|
|
79
|
+
CONTAINER_MAX_OUTPUT_SIZE = config.container.maxOutputBytes;
|
|
80
|
+
MAX_CONCURRENT_CONTAINERS = Math.max(1, config.container.maxConcurrent);
|
|
81
|
+
HEARTBEAT_ENABLED = config.heartbeat.enabled;
|
|
82
|
+
HEARTBEAT_INTERVAL = config.heartbeat.intervalMs;
|
|
83
|
+
HEARTBEAT_CHANNEL = config.heartbeat.channel;
|
|
84
|
+
HEALTH_HOST = config.ops.healthHost;
|
|
85
|
+
HEALTH_PORT = config.ops.healthPort;
|
|
86
|
+
WEB_API_TOKEN = process.env.WEB_API_TOKEN || config.ops.webApiToken;
|
|
87
|
+
GATEWAY_BASE_URL = config.ops.gatewayBaseUrl;
|
|
88
|
+
GATEWAY_API_TOKEN = process.env.GATEWAY_API_TOKEN || config.ops.gatewayApiToken || WEB_API_TOKEN;
|
|
89
|
+
DB_PATH = config.ops.dbPath;
|
|
90
|
+
DATA_DIR = path.dirname(DB_PATH);
|
|
91
|
+
SESSION_COMPACTION_ENABLED = config.sessionCompaction.enabled;
|
|
92
|
+
SESSION_COMPACTION_THRESHOLD = Math.max(20, config.sessionCompaction.threshold);
|
|
93
|
+
SESSION_COMPACTION_KEEP_RECENT = Math.max(1, Math.min(config.sessionCompaction.keepRecent, SESSION_COMPACTION_THRESHOLD - 1));
|
|
94
|
+
SESSION_COMPACTION_SUMMARY_MAX_CHARS = Math.max(1_000, config.sessionCompaction.summaryMaxChars);
|
|
95
|
+
PRE_COMPACTION_MEMORY_FLUSH_ENABLED = config.sessionCompaction.preCompactionMemoryFlush.enabled;
|
|
96
|
+
PRE_COMPACTION_MEMORY_FLUSH_MAX_MESSAGES = Math.max(8, config.sessionCompaction.preCompactionMemoryFlush.maxMessages);
|
|
97
|
+
PRE_COMPACTION_MEMORY_FLUSH_MAX_CHARS = Math.max(4_000, config.sessionCompaction.preCompactionMemoryFlush.maxChars);
|
|
98
|
+
}
|
|
99
|
+
applyRuntimeConfig(getRuntimeConfig());
|
|
100
|
+
onRuntimeConfigChange((next) => {
|
|
101
|
+
applyRuntimeConfig(next);
|
|
102
|
+
});
|
|
103
|
+
export { onRuntimeConfigChange as onConfigChange };
|
|
104
|
+
export function getConfigSnapshot() {
|
|
105
|
+
return getRuntimeConfig();
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ChatMessage, ContainerOutput, ScheduledTask, ToolProgressEvent } from './types.js';
|
|
2
|
+
export declare function getActiveContainerCount(): number;
|
|
3
|
+
/**
|
|
4
|
+
* Send a request to a persistent container and wait for the response.
|
|
5
|
+
*/
|
|
6
|
+
export declare function runContainer(sessionId: string, messages: ChatMessage[], chatbotId: string, enableRag: boolean, model?: string, agentId?: string, channelId?: string, scheduledTasks?: ScheduledTask[], allowedTools?: string[], onToolProgress?: (event: ToolProgressEvent) => void, abortSignal?: AbortSignal): Promise<ContainerOutput>;
|
|
7
|
+
/**
|
|
8
|
+
* Stop all containers (for graceful shutdown).
|
|
9
|
+
*/
|
|
10
|
+
export declare function stopAllContainers(): void;
|
|
11
|
+
//# sourceMappingURL=container-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-runner.d.ts","sourceRoot":"","sources":["../src/container-runner.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAmB,WAAW,EAAkB,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAoDlI,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAkHD;;GAEG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,OAAO,EAClB,KAAK,GAAE,MAAuB,EAC9B,OAAO,GAAE,MAAkB,EAC3B,SAAS,GAAE,MAAW,EACtB,cAAc,CAAC,EAAE,aAAa,EAAE,EAChC,YAAY,CAAC,EAAE,MAAM,EAAE,EACvB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,EACnD,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,eAAe,CAAC,CA0F1B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAMxC"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Container Runner — manages a pool of persistent containers.
|
|
3
|
+
* Containers stay alive between requests and exit after an idle timeout.
|
|
4
|
+
*/
|
|
5
|
+
import { spawn } from 'child_process';
|
|
6
|
+
import { ADDITIONAL_MOUNTS, CONTAINER_CPUS, CONTAINER_IMAGE, CONTAINER_MEMORY, CONTAINER_TIMEOUT, HYBRIDAI_API_KEY, HYBRIDAI_BASE_URL, HYBRIDAI_MODEL, MAX_CONCURRENT_CONTAINERS, } from './config.js';
|
|
7
|
+
import { cleanupIpc, ensureAgentDirs, ensureSessionDirs, getSessionPaths, readOutput, writeInput } from './ipc.js';
|
|
8
|
+
import { logger } from './logger.js';
|
|
9
|
+
import { validateAdditionalMounts } from './mount-security.js';
|
|
10
|
+
const IDLE_TIMEOUT_MS = 300_000; // 5 minutes — matches container-side default
|
|
11
|
+
const pool = new Map();
|
|
12
|
+
const TOOL_RESULT_RE = /^\[tool\]\s+([a-zA-Z0-9_.-]+)\s+result\s+\((\d+)ms\):\s*(.*)$/;
|
|
13
|
+
const TOOL_START_RE = /^\[tool\]\s+([a-zA-Z0-9_.-]+):\s*(.*)$/;
|
|
14
|
+
function emitToolProgress(entry, line) {
|
|
15
|
+
const callback = entry.onToolProgress;
|
|
16
|
+
if (!callback)
|
|
17
|
+
return;
|
|
18
|
+
const resultMatch = line.match(TOOL_RESULT_RE);
|
|
19
|
+
if (resultMatch) {
|
|
20
|
+
try {
|
|
21
|
+
callback({
|
|
22
|
+
sessionId: entry.sessionId,
|
|
23
|
+
toolName: resultMatch[1],
|
|
24
|
+
phase: 'finish',
|
|
25
|
+
durationMs: parseInt(resultMatch[2], 10),
|
|
26
|
+
preview: resultMatch[3],
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
logger.debug({ sessionId: entry.sessionId, err }, 'Tool progress callback failed');
|
|
31
|
+
}
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const startMatch = line.match(TOOL_START_RE);
|
|
35
|
+
if (startMatch) {
|
|
36
|
+
try {
|
|
37
|
+
callback({
|
|
38
|
+
sessionId: entry.sessionId,
|
|
39
|
+
toolName: startMatch[1],
|
|
40
|
+
phase: 'start',
|
|
41
|
+
preview: startMatch[2],
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
logger.debug({ sessionId: entry.sessionId, err }, 'Tool progress callback failed');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export function getActiveContainerCount() {
|
|
50
|
+
return pool.size;
|
|
51
|
+
}
|
|
52
|
+
function stopContainer(containerName) {
|
|
53
|
+
const proc = spawn('docker', ['stop', containerName], { stdio: 'ignore' });
|
|
54
|
+
proc.on('error', (err) => {
|
|
55
|
+
logger.debug({ containerName, err }, 'Failed to stop container');
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get or spawn a persistent container for a session.
|
|
60
|
+
*/
|
|
61
|
+
function getOrSpawnContainer(sessionId, agentId) {
|
|
62
|
+
const existing = pool.get(sessionId);
|
|
63
|
+
if (existing && !existing.process.killed && existing.process.exitCode === null) {
|
|
64
|
+
logger.debug({ sessionId, containerName: existing.containerName }, 'Reusing container');
|
|
65
|
+
return existing;
|
|
66
|
+
}
|
|
67
|
+
// Clean up stale entry
|
|
68
|
+
if (existing) {
|
|
69
|
+
pool.delete(sessionId);
|
|
70
|
+
}
|
|
71
|
+
ensureSessionDirs(sessionId);
|
|
72
|
+
ensureAgentDirs(agentId);
|
|
73
|
+
const { ipcPath, workspacePath } = getSessionPaths(sessionId, agentId);
|
|
74
|
+
const containerName = `hybridclaw-${sessionId.replace(/[^a-zA-Z0-9-]/g, '-')}-${Date.now()}`;
|
|
75
|
+
const args = [
|
|
76
|
+
'run',
|
|
77
|
+
'--rm',
|
|
78
|
+
'-i',
|
|
79
|
+
'--name', containerName,
|
|
80
|
+
'--memory', CONTAINER_MEMORY,
|
|
81
|
+
`--cpus=${CONTAINER_CPUS}`,
|
|
82
|
+
'--read-only',
|
|
83
|
+
'--tmpfs', '/tmp',
|
|
84
|
+
'-v', `${workspacePath}:/workspace:rw`,
|
|
85
|
+
'-v', `${ipcPath}:/ipc:rw`,
|
|
86
|
+
'-e', `HYBRIDAI_BASE_URL=${HYBRIDAI_BASE_URL}`,
|
|
87
|
+
'-e', `HYBRIDAI_MODEL=${HYBRIDAI_MODEL}`,
|
|
88
|
+
'-e', `CONTAINER_IDLE_TIMEOUT=${IDLE_TIMEOUT_MS}`,
|
|
89
|
+
];
|
|
90
|
+
// Run as host user so bind-mount file ownership matches
|
|
91
|
+
const hostUid = process.getuid?.();
|
|
92
|
+
const hostGid = process.getgid?.();
|
|
93
|
+
if (hostUid != null && hostUid !== 0 && hostUid !== 1000) {
|
|
94
|
+
args.push('--user', `${hostUid}:${hostGid}`);
|
|
95
|
+
args.push('-e', 'HOME=/home/node');
|
|
96
|
+
}
|
|
97
|
+
// Validate and append additional mounts
|
|
98
|
+
if (ADDITIONAL_MOUNTS) {
|
|
99
|
+
try {
|
|
100
|
+
const requested = JSON.parse(ADDITIONAL_MOUNTS);
|
|
101
|
+
const validated = validateAdditionalMounts(requested);
|
|
102
|
+
for (const m of validated) {
|
|
103
|
+
args.push('-v', `${m.hostPath}:${m.containerPath}:${m.readonly ? 'ro' : 'rw'}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
logger.warn({ error: err instanceof Error ? err.message : String(err) }, 'Failed to parse ADDITIONAL_MOUNTS');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
args.push(CONTAINER_IMAGE);
|
|
111
|
+
logger.info({ sessionId, containerName }, 'Spawning persistent container');
|
|
112
|
+
const proc = spawn('docker', args, {
|
|
113
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
114
|
+
});
|
|
115
|
+
const entry = {
|
|
116
|
+
process: proc,
|
|
117
|
+
containerName,
|
|
118
|
+
sessionId,
|
|
119
|
+
startedAt: Date.now(),
|
|
120
|
+
stderrBuffer: '',
|
|
121
|
+
};
|
|
122
|
+
proc.stderr.on('data', (data) => {
|
|
123
|
+
entry.stderrBuffer += data.toString('utf-8');
|
|
124
|
+
const lines = entry.stderrBuffer.split('\n');
|
|
125
|
+
entry.stderrBuffer = lines.pop() || '';
|
|
126
|
+
for (const rawLine of lines) {
|
|
127
|
+
const line = rawLine.trim();
|
|
128
|
+
if (!line)
|
|
129
|
+
continue;
|
|
130
|
+
logger.debug({ container: containerName }, line);
|
|
131
|
+
emitToolProgress(entry, line);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
proc.on('close', (code) => {
|
|
135
|
+
const tail = entry.stderrBuffer.trim();
|
|
136
|
+
if (tail) {
|
|
137
|
+
logger.debug({ container: containerName }, tail);
|
|
138
|
+
emitToolProgress(entry, tail);
|
|
139
|
+
entry.stderrBuffer = '';
|
|
140
|
+
}
|
|
141
|
+
pool.delete(sessionId);
|
|
142
|
+
logger.info({ sessionId, containerName, code }, 'Container exited');
|
|
143
|
+
});
|
|
144
|
+
proc.on('error', (err) => {
|
|
145
|
+
pool.delete(sessionId);
|
|
146
|
+
logger.error({ sessionId, containerName, error: err }, 'Container error');
|
|
147
|
+
});
|
|
148
|
+
pool.set(sessionId, entry);
|
|
149
|
+
return entry;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Send a request to a persistent container and wait for the response.
|
|
153
|
+
*/
|
|
154
|
+
export async function runContainer(sessionId, messages, chatbotId, enableRag, model = HYBRIDAI_MODEL, agentId = chatbotId, channelId = '', scheduledTasks, allowedTools, onToolProgress, abortSignal) {
|
|
155
|
+
// Enforce concurrent container limit
|
|
156
|
+
if (pool.size >= MAX_CONCURRENT_CONTAINERS && !pool.has(sessionId)) {
|
|
157
|
+
return {
|
|
158
|
+
status: 'error',
|
|
159
|
+
result: null,
|
|
160
|
+
toolsUsed: [],
|
|
161
|
+
error: `Too many active containers (${pool.size}/${MAX_CONCURRENT_CONTAINERS}). Try again later.`,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
const startTime = Date.now();
|
|
165
|
+
// Clean any stale output from previous request
|
|
166
|
+
cleanupIpc(sessionId);
|
|
167
|
+
ensureSessionDirs(sessionId);
|
|
168
|
+
const isNewContainer = !pool.has(sessionId) || pool.get(sessionId).process.killed || pool.get(sessionId).process.exitCode !== null;
|
|
169
|
+
let entry;
|
|
170
|
+
try {
|
|
171
|
+
entry = getOrSpawnContainer(sessionId, agentId);
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
return {
|
|
175
|
+
status: 'error',
|
|
176
|
+
result: null,
|
|
177
|
+
toolsUsed: [],
|
|
178
|
+
error: `Container spawn error: ${err instanceof Error ? err.message : String(err)}`,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
const input = {
|
|
182
|
+
sessionId,
|
|
183
|
+
messages,
|
|
184
|
+
chatbotId,
|
|
185
|
+
enableRag,
|
|
186
|
+
apiKey: HYBRIDAI_API_KEY,
|
|
187
|
+
baseUrl: HYBRIDAI_BASE_URL.replace(/\/\/(localhost|127\.0\.0\.1)([:\/])/, '//host.docker.internal$2'),
|
|
188
|
+
model,
|
|
189
|
+
channelId,
|
|
190
|
+
scheduledTasks: scheduledTasks?.map((t) => ({
|
|
191
|
+
id: t.id,
|
|
192
|
+
cronExpr: t.cron_expr,
|
|
193
|
+
runAt: t.run_at,
|
|
194
|
+
everyMs: t.every_ms,
|
|
195
|
+
prompt: t.prompt,
|
|
196
|
+
enabled: t.enabled,
|
|
197
|
+
lastRun: t.last_run,
|
|
198
|
+
createdAt: t.created_at,
|
|
199
|
+
})),
|
|
200
|
+
allowedTools,
|
|
201
|
+
};
|
|
202
|
+
entry.onToolProgress = onToolProgress;
|
|
203
|
+
const onAbort = () => {
|
|
204
|
+
logger.info({ sessionId, containerName: entry.containerName }, 'Interrupt requested, stopping container');
|
|
205
|
+
stopContainer(entry.containerName);
|
|
206
|
+
};
|
|
207
|
+
if (abortSignal) {
|
|
208
|
+
abortSignal.addEventListener('abort', onAbort, { once: true });
|
|
209
|
+
if (abortSignal.aborted)
|
|
210
|
+
onAbort();
|
|
211
|
+
}
|
|
212
|
+
try {
|
|
213
|
+
if (isNewContainer) {
|
|
214
|
+
// First request: send full input (including apiKey) via stdin — no file on disk.
|
|
215
|
+
// Write JSON on a single line followed by newline as delimiter.
|
|
216
|
+
// Do NOT end stdin — closing stdin can cause docker -i to terminate the container.
|
|
217
|
+
entry.process.stdin?.write(JSON.stringify(input) + '\n');
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
// Follow-up requests: write to IPC file, omitting apiKey
|
|
221
|
+
writeInput(sessionId, input, { omitApiKey: true });
|
|
222
|
+
}
|
|
223
|
+
// Wait for the container to produce output
|
|
224
|
+
const output = await readOutput(sessionId, CONTAINER_TIMEOUT, { signal: abortSignal });
|
|
225
|
+
const duration = Date.now() - startTime;
|
|
226
|
+
logger.info({ sessionId, containerName: entry.containerName, duration, status: output.status, toolsUsed: output.toolsUsed }, 'Request completed');
|
|
227
|
+
return output;
|
|
228
|
+
}
|
|
229
|
+
finally {
|
|
230
|
+
abortSignal?.removeEventListener('abort', onAbort);
|
|
231
|
+
if (entry.onToolProgress === onToolProgress) {
|
|
232
|
+
entry.onToolProgress = undefined;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Stop all containers (for graceful shutdown).
|
|
238
|
+
*/
|
|
239
|
+
export function stopAllContainers() {
|
|
240
|
+
for (const [sessionId, entry] of pool) {
|
|
241
|
+
logger.info({ sessionId, containerName: entry.containerName }, 'Stopping container (shutdown)');
|
|
242
|
+
stopContainer(entry.containerName);
|
|
243
|
+
}
|
|
244
|
+
pool.clear();
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=container-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-runner.js","sourceRoot":"","sources":["../src/container-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type Skill } from './skills.js';
|
|
2
|
+
import type { ChatMessage } from './types.js';
|
|
3
|
+
interface HistoryMessage {
|
|
4
|
+
role: string;
|
|
5
|
+
content: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ConversationContext {
|
|
8
|
+
messages: ChatMessage[];
|
|
9
|
+
skills: Skill[];
|
|
10
|
+
}
|
|
11
|
+
export declare function buildConversationContext(params: {
|
|
12
|
+
agentId: string;
|
|
13
|
+
sessionSummary?: string | null;
|
|
14
|
+
history: HistoryMessage[];
|
|
15
|
+
expandLatestHistoryUser?: boolean;
|
|
16
|
+
}): ConversationContext;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=conversation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,GAAG,mBAAmB,CA6BtB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { expandSkillInvocation, loadSkills } from './skills.js';
|
|
2
|
+
import { buildSystemPromptFromHooks } from './prompt-hooks.js';
|
|
3
|
+
export function buildConversationContext(params) {
|
|
4
|
+
const { agentId, sessionSummary, history, expandLatestHistoryUser = false } = params;
|
|
5
|
+
const skills = loadSkills(agentId);
|
|
6
|
+
const systemPrompt = buildSystemPromptFromHooks({
|
|
7
|
+
agentId,
|
|
8
|
+
sessionSummary,
|
|
9
|
+
skills,
|
|
10
|
+
purpose: 'conversation',
|
|
11
|
+
});
|
|
12
|
+
const messages = [];
|
|
13
|
+
if (systemPrompt) {
|
|
14
|
+
messages.push({ role: 'system', content: systemPrompt });
|
|
15
|
+
}
|
|
16
|
+
const historyMessages = [...history].reverse().map((msg) => ({
|
|
17
|
+
role: msg.role,
|
|
18
|
+
content: msg.content,
|
|
19
|
+
}));
|
|
20
|
+
if (expandLatestHistoryUser && historyMessages.length > 0) {
|
|
21
|
+
const latest = historyMessages[historyMessages.length - 1];
|
|
22
|
+
if (latest.role === 'user' && typeof latest.content === 'string') {
|
|
23
|
+
latest.content = expandSkillInvocation(latest.content, skills);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
messages.push(...historyMessages);
|
|
27
|
+
return { messages, skills };
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=conversation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.js","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAc,MAAM,aAAa,CAAC;AAE5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAY/D,MAAM,UAAU,wBAAwB,CAAC,MAKxC;IACC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,uBAAuB,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;IACrF,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,YAAY,GAAG,0BAA0B,CAAC;QAC9C,OAAO;QACP,cAAc;QACd,MAAM;QACN,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,IAAI,YAAY,EAAE,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,eAAe,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAe,EAAE,CAAC,CAAC;QACxE,IAAI,EAAE,GAAG,CAAC,IAA2B;QACrC,OAAO,EAAE,GAAG,CAAC,OAAO;KACrB,CAAC,CAAC,CAAC;IAEJ,IAAI,uBAAuB,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3D,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACjE,MAAM,CAAC,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;IAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC"}
|
package/dist/db.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { AuditEntry, ScheduledTask, Session, StoredMessage } from './types.js';
|
|
2
|
+
export declare function initDatabase(): void;
|
|
3
|
+
export declare function getOrCreateSession(sessionId: string, guildId: string | null, channelId: string): Session;
|
|
4
|
+
export declare function getSessionById(sessionId: string): Session | undefined;
|
|
5
|
+
export declare function updateSessionChatbot(sessionId: string, chatbotId: string | null): void;
|
|
6
|
+
export declare function updateSessionModel(sessionId: string, model: string | null): void;
|
|
7
|
+
export declare function updateSessionRag(sessionId: string, enableRag: boolean): void;
|
|
8
|
+
export declare function getAllSessions(): Session[];
|
|
9
|
+
export declare function getSessionCount(): number;
|
|
10
|
+
export declare function clearSessionHistory(sessionId: string): number;
|
|
11
|
+
export declare function storeMessage(sessionId: string, userId: string, username: string | null, role: string, content: string): void;
|
|
12
|
+
export declare function getConversationHistory(sessionId: string, limit?: number): StoredMessage[];
|
|
13
|
+
export interface CompactionCandidate {
|
|
14
|
+
cutoffId: number;
|
|
15
|
+
olderMessages: StoredMessage[];
|
|
16
|
+
}
|
|
17
|
+
export declare function getCompactionCandidateMessages(sessionId: string, keepRecent: number): CompactionCandidate | null;
|
|
18
|
+
export declare function deleteMessagesBeforeId(sessionId: string, cutoffId: number): number;
|
|
19
|
+
export declare function updateSessionSummary(sessionId: string, summary: string): void;
|
|
20
|
+
export declare function markSessionMemoryFlush(sessionId: string): void;
|
|
21
|
+
export declare function createTask(sessionId: string, channelId: string, cronExpr: string, prompt: string, runAt?: string, everyMs?: number): number;
|
|
22
|
+
export declare function getTasksForSession(sessionId: string): ScheduledTask[];
|
|
23
|
+
export declare function getAllEnabledTasks(): ScheduledTask[];
|
|
24
|
+
export declare function updateTaskLastRun(taskId: number): void;
|
|
25
|
+
export declare function toggleTask(taskId: number, enabled: boolean): void;
|
|
26
|
+
export declare function deleteTask(taskId: number): void;
|
|
27
|
+
export declare function logAudit(event: string, sessionId?: string, detail?: Record<string, unknown>, durationMs?: number): void;
|
|
28
|
+
export declare function getRecentAudit(limit?: number): AuditEntry[];
|
|
29
|
+
//# sourceMappingURL=db.d.ts.map
|
package/dist/db.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAyFpF,wBAAgB,YAAY,IAAI,IAAI,CAQnC;AAID,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAaT;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAIrE;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAEtF;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAEhF;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAE5E;AAED,wBAAgB,cAAc,IAAI,OAAO,EAAE,CAE1C;AAED,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAM7D;AAID,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,IAAI,CAQN;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,aAAa,EAAE,CAMrF;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,aAAa,EAAE,CAAC;CAChC;AAED,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,mBAAmB,GAAG,IAAI,CAgB5B;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQlF;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAK7E;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAE9D;AAID,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAKR;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE,CAIrE;AAED,wBAAgB,kBAAkB,IAAI,aAAa,EAAE,CAEpD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEtD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAEjE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE/C;AAID,wBAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CAIN;AAED,wBAAgB,cAAc,CAAC,KAAK,SAAK,GAAG,UAAU,EAAE,CAIvD"}
|