@johpaz/hive 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +44 -0
- package/README.md +310 -0
- package/package.json +96 -0
- package/packages/cli/package.json +28 -0
- package/packages/cli/src/commands/agent-run.ts +168 -0
- package/packages/cli/src/commands/agents.ts +398 -0
- package/packages/cli/src/commands/chat.ts +142 -0
- package/packages/cli/src/commands/config.ts +50 -0
- package/packages/cli/src/commands/cron.ts +161 -0
- package/packages/cli/src/commands/dev.ts +95 -0
- package/packages/cli/src/commands/doctor.ts +133 -0
- package/packages/cli/src/commands/gateway.ts +443 -0
- package/packages/cli/src/commands/logs.ts +57 -0
- package/packages/cli/src/commands/mcp.ts +175 -0
- package/packages/cli/src/commands/message.ts +77 -0
- package/packages/cli/src/commands/onboard.ts +1868 -0
- package/packages/cli/src/commands/security.ts +144 -0
- package/packages/cli/src/commands/service.ts +50 -0
- package/packages/cli/src/commands/sessions.ts +116 -0
- package/packages/cli/src/commands/skills.ts +187 -0
- package/packages/cli/src/commands/update.ts +25 -0
- package/packages/cli/src/index.ts +185 -0
- package/packages/cli/src/utils/token.ts +6 -0
- package/packages/code-bridge/README.md +78 -0
- package/packages/code-bridge/package.json +18 -0
- package/packages/code-bridge/src/index.ts +95 -0
- package/packages/code-bridge/src/process-manager.ts +212 -0
- package/packages/code-bridge/src/schemas.ts +133 -0
- package/packages/core/package.json +46 -0
- package/packages/core/src/agent/agent-loop.ts +369 -0
- package/packages/core/src/agent/compaction.ts +140 -0
- package/packages/core/src/agent/context-compiler.ts +378 -0
- package/packages/core/src/agent/context-guard.ts +91 -0
- package/packages/core/src/agent/context.ts +138 -0
- package/packages/core/src/agent/conversation-store.ts +198 -0
- package/packages/core/src/agent/curator.ts +158 -0
- package/packages/core/src/agent/hooks.ts +166 -0
- package/packages/core/src/agent/index.ts +116 -0
- package/packages/core/src/agent/llm-client.ts +503 -0
- package/packages/core/src/agent/native-tools.ts +505 -0
- package/packages/core/src/agent/prompt-builder.ts +532 -0
- package/packages/core/src/agent/providers/index.ts +167 -0
- package/packages/core/src/agent/providers.ts +1 -0
- package/packages/core/src/agent/reflector.ts +170 -0
- package/packages/core/src/agent/service.ts +64 -0
- package/packages/core/src/agent/stuck-loop.ts +133 -0
- package/packages/core/src/agent/supervisor.ts +39 -0
- package/packages/core/src/agent/tracer.ts +102 -0
- package/packages/core/src/agent/workspace.ts +110 -0
- package/packages/core/src/canvas/canvas-manager.test.ts +161 -0
- package/packages/core/src/canvas/canvas-manager.ts +319 -0
- package/packages/core/src/canvas/canvas-tools.ts +420 -0
- package/packages/core/src/canvas/emitter.ts +115 -0
- package/packages/core/src/canvas/index.ts +2 -0
- package/packages/core/src/channels/base.ts +138 -0
- package/packages/core/src/channels/discord.ts +260 -0
- package/packages/core/src/channels/index.ts +7 -0
- package/packages/core/src/channels/manager.ts +383 -0
- package/packages/core/src/channels/slack.ts +287 -0
- package/packages/core/src/channels/telegram.ts +502 -0
- package/packages/core/src/channels/webchat.ts +128 -0
- package/packages/core/src/channels/whatsapp.ts +375 -0
- package/packages/core/src/config/index.ts +12 -0
- package/packages/core/src/config/loader.ts +529 -0
- package/packages/core/src/events/event-bus.ts +169 -0
- package/packages/core/src/gateway/index.ts +5 -0
- package/packages/core/src/gateway/initializer.ts +290 -0
- package/packages/core/src/gateway/lane-queue.ts +169 -0
- package/packages/core/src/gateway/resolver.ts +108 -0
- package/packages/core/src/gateway/router.ts +124 -0
- package/packages/core/src/gateway/server.ts +3317 -0
- package/packages/core/src/gateway/session.ts +95 -0
- package/packages/core/src/gateway/slash-commands.ts +192 -0
- package/packages/core/src/heartbeat/index.ts +157 -0
- package/packages/core/src/index.ts +19 -0
- package/packages/core/src/integrations/catalog.ts +286 -0
- package/packages/core/src/integrations/env.ts +64 -0
- package/packages/core/src/integrations/index.ts +2 -0
- package/packages/core/src/memory/index.ts +1 -0
- package/packages/core/src/memory/notes.ts +68 -0
- package/packages/core/src/plugins/api.ts +128 -0
- package/packages/core/src/plugins/index.ts +2 -0
- package/packages/core/src/plugins/loader.ts +365 -0
- package/packages/core/src/resilience/circuit-breaker.ts +225 -0
- package/packages/core/src/security/google-chat.ts +269 -0
- package/packages/core/src/security/index.ts +192 -0
- package/packages/core/src/security/pairing.ts +250 -0
- package/packages/core/src/security/rate-limit.ts +270 -0
- package/packages/core/src/security/signal.ts +321 -0
- package/packages/core/src/state/store.ts +312 -0
- package/packages/core/src/storage/bun-sqlite-store.ts +188 -0
- package/packages/core/src/storage/crypto.ts +101 -0
- package/packages/core/src/storage/db-context.ts +333 -0
- package/packages/core/src/storage/onboarding.ts +1087 -0
- package/packages/core/src/storage/schema.ts +541 -0
- package/packages/core/src/storage/seed.ts +571 -0
- package/packages/core/src/storage/sqlite.ts +387 -0
- package/packages/core/src/storage/usage.ts +212 -0
- package/packages/core/src/tools/bridge-events.ts +74 -0
- package/packages/core/src/tools/browser.ts +275 -0
- package/packages/core/src/tools/codebridge.ts +421 -0
- package/packages/core/src/tools/coordinator-tools.ts +179 -0
- package/packages/core/src/tools/cron.ts +611 -0
- package/packages/core/src/tools/exec.ts +140 -0
- package/packages/core/src/tools/fs.ts +364 -0
- package/packages/core/src/tools/index.ts +12 -0
- package/packages/core/src/tools/memory.ts +176 -0
- package/packages/core/src/tools/notify.ts +113 -0
- package/packages/core/src/tools/project-management.ts +376 -0
- package/packages/core/src/tools/project.ts +375 -0
- package/packages/core/src/tools/read.ts +158 -0
- package/packages/core/src/tools/web.ts +436 -0
- package/packages/core/src/tools/workspace.ts +171 -0
- package/packages/core/src/utils/benchmark.ts +80 -0
- package/packages/core/src/utils/crypto.ts +73 -0
- package/packages/core/src/utils/date.ts +42 -0
- package/packages/core/src/utils/index.ts +4 -0
- package/packages/core/src/utils/logger.ts +388 -0
- package/packages/core/src/utils/retry.ts +70 -0
- package/packages/core/src/voice/index.ts +583 -0
- package/packages/core/tsconfig.json +9 -0
- package/packages/mcp/package.json +26 -0
- package/packages/mcp/src/config.ts +13 -0
- package/packages/mcp/src/index.ts +1 -0
- package/packages/mcp/src/logger.ts +42 -0
- package/packages/mcp/src/manager.ts +434 -0
- package/packages/mcp/src/transports/index.ts +67 -0
- package/packages/mcp/src/transports/sse.ts +241 -0
- package/packages/mcp/src/transports/websocket.ts +159 -0
- package/packages/skills/package.json +21 -0
- package/packages/skills/src/bundled/agent_management/SKILL.md +24 -0
- package/packages/skills/src/bundled/browser_automation/SKILL.md +30 -0
- package/packages/skills/src/bundled/context_compact/SKILL.md +35 -0
- package/packages/skills/src/bundled/cron_manager/SKILL.md +52 -0
- package/packages/skills/src/bundled/file_manager/SKILL.md +76 -0
- package/packages/skills/src/bundled/http_client/SKILL.md +24 -0
- package/packages/skills/src/bundled/memory/SKILL.md +42 -0
- package/packages/skills/src/bundled/project_management/SKILL.md +26 -0
- package/packages/skills/src/bundled/shell/SKILL.md +43 -0
- package/packages/skills/src/bundled/system_notify/SKILL.md +52 -0
- package/packages/skills/src/bundled/voice/SKILL.md +25 -0
- package/packages/skills/src/bundled/web_search/SKILL.md +29 -0
- package/packages/skills/src/index.ts +1 -0
- package/packages/skills/src/loader.ts +282 -0
- package/packages/tools/package.json +43 -0
- package/packages/tools/src/browser/browser.test.ts +111 -0
- package/packages/tools/src/browser/index.ts +272 -0
- package/packages/tools/src/canvas/index.ts +220 -0
- package/packages/tools/src/cron/cron.test.ts +164 -0
- package/packages/tools/src/cron/index.ts +304 -0
- package/packages/tools/src/filesystem/filesystem.test.ts +240 -0
- package/packages/tools/src/filesystem/index.ts +379 -0
- package/packages/tools/src/git/index.ts +239 -0
- package/packages/tools/src/index.ts +4 -0
- package/packages/tools/src/shell/detect-env.ts +70 -0
- package/packages/tools/tsconfig.json +9 -0
|
@@ -0,0 +1,541 @@
|
|
|
1
|
+
export const SCHEMA = `
|
|
2
|
+
PRAGMA journal_mode = WAL;
|
|
3
|
+
PRAGMA foreign_keys = ON;
|
|
4
|
+
|
|
5
|
+
-- ENCRYPTION KEY (stored separately, used for encrypting sensitive data)
|
|
6
|
+
-- The encryption key is derived from HIVE_MASTER_KEY env var or generated on first run
|
|
7
|
+
|
|
8
|
+
-- CONFIGURATION (all linked to user)
|
|
9
|
+
|
|
10
|
+
CREATE TABLE IF NOT EXISTS users (
|
|
11
|
+
id TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(16)))),
|
|
12
|
+
name TEXT,
|
|
13
|
+
language TEXT,
|
|
14
|
+
timezone TEXT,
|
|
15
|
+
occupation TEXT,
|
|
16
|
+
notes TEXT,
|
|
17
|
+
master_key_hash TEXT,
|
|
18
|
+
preferred_cron_channel TEXT NOT NULL DEFAULT 'auto',
|
|
19
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
-- Providers: linked to user (API key encrypted)
|
|
23
|
+
-- Solo la empresa (OpenAI, Groq, ElevenLabs, etc.)
|
|
24
|
+
-- La API key es del provider, no del modelo
|
|
25
|
+
-- category: 'llm', 'stt', 'tts' (default: llm)
|
|
26
|
+
CREATE TABLE IF NOT EXISTS providers (
|
|
27
|
+
id TEXT PRIMARY KEY,
|
|
28
|
+
name TEXT NOT NULL UNIQUE,
|
|
29
|
+
api_key_encrypted TEXT,
|
|
30
|
+
api_key_iv TEXT,
|
|
31
|
+
headers_encrypted TEXT,
|
|
32
|
+
headers_iv TEXT,
|
|
33
|
+
base_url TEXT,
|
|
34
|
+
category TEXT NOT NULL DEFAULT 'llm',
|
|
35
|
+
num_ctx INTEGER,
|
|
36
|
+
num_gpu INTEGER DEFAULT -1,
|
|
37
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
38
|
+
active INTEGER NOT NULL DEFAULT 0,
|
|
39
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
-- Models: linked to provider
|
|
43
|
+
-- model_type: 'llm', 'stt', 'tts', 'vision', 'embedding'
|
|
44
|
+
-- stt models: whisper-1, whisper-large-v3
|
|
45
|
+
-- tts models: tts-1, gpt-4o-mini-tts, eleven_multilingual_v2
|
|
46
|
+
CREATE TABLE IF NOT EXISTS models (
|
|
47
|
+
id TEXT PRIMARY KEY,
|
|
48
|
+
provider_id TEXT REFERENCES providers(id) ON DELETE CASCADE,
|
|
49
|
+
name TEXT NOT NULL,
|
|
50
|
+
model_type TEXT NOT NULL DEFAULT 'llm',
|
|
51
|
+
context_window INTEGER,
|
|
52
|
+
capabilities TEXT,
|
|
53
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
54
|
+
active INTEGER NOT NULL DEFAULT 0
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
-- Agents: linked to user + provider/model
|
|
58
|
+
-- role: 'coordinator' | 'worker'
|
|
59
|
+
-- system_prompt: explicit prompt (description is a human-readable summary)
|
|
60
|
+
-- tools_json: JSON array of tool IDs this agent can use (NULL = all)
|
|
61
|
+
-- skills_json: JSON array of skill IDs this agent can use (NULL = all)
|
|
62
|
+
-- parent_id: agent that created this one (NULL for coordinator)
|
|
63
|
+
-- max_iterations: loop limit per invocation
|
|
64
|
+
CREATE TABLE IF NOT EXISTS agents (
|
|
65
|
+
id TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(16)))),
|
|
66
|
+
user_id TEXT REFERENCES users(id) ON DELETE CASCADE,
|
|
67
|
+
name TEXT NOT NULL,
|
|
68
|
+
description TEXT,
|
|
69
|
+
system_prompt TEXT,
|
|
70
|
+
tone TEXT,
|
|
71
|
+
role TEXT NOT NULL DEFAULT 'coordinator',
|
|
72
|
+
status TEXT NOT NULL DEFAULT 'idle',
|
|
73
|
+
is_coordinator INTEGER NOT NULL DEFAULT 1,
|
|
74
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
75
|
+
provider_id TEXT REFERENCES providers(id),
|
|
76
|
+
model_id TEXT REFERENCES models(id),
|
|
77
|
+
tools_json TEXT,
|
|
78
|
+
skills_json TEXT,
|
|
79
|
+
parent_id TEXT REFERENCES agents(id) ON DELETE SET NULL,
|
|
80
|
+
max_iterations INTEGER NOT NULL DEFAULT 10,
|
|
81
|
+
headers_encrypted TEXT,
|
|
82
|
+
headers_iv TEXT,
|
|
83
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
84
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
-- Channels: linked to user (or global if user_id is NULL)
|
|
88
|
+
-- voice_enabled: enables speech-to-text for incoming audio
|
|
89
|
+
-- tts_enabled: enables text-to-speech for outgoing responses
|
|
90
|
+
-- stt_provider: which STT provider to use (groq-whisper, openai-whisper)
|
|
91
|
+
-- tts_provider: which TTS provider to use (elevenlabs, openai-tts)
|
|
92
|
+
-- tts_voice_id: specific voice ID for TTS (e.g., ElevenLabs voice ID)
|
|
93
|
+
-- step_delivery_mode: how to send intermediate steps to user:
|
|
94
|
+
-- "new_messages" = send new message for each step (default)
|
|
95
|
+
-- "edit" = edit same message (Telegram/Discord only)
|
|
96
|
+
-- "thread" = use threading (Slack only)
|
|
97
|
+
CREATE TABLE IF NOT EXISTS channels (
|
|
98
|
+
id TEXT PRIMARY KEY,
|
|
99
|
+
user_id TEXT REFERENCES users(id) ON DELETE CASCADE,
|
|
100
|
+
type TEXT NOT NULL,
|
|
101
|
+
config_encrypted TEXT,
|
|
102
|
+
config_iv TEXT,
|
|
103
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
104
|
+
active INTEGER NOT NULL DEFAULT 0,
|
|
105
|
+
status TEXT NOT NULL DEFAULT 'disconnected',
|
|
106
|
+
last_active INTEGER,
|
|
107
|
+
voice_enabled INTEGER NOT NULL DEFAULT 0,
|
|
108
|
+
tts_enabled INTEGER NOT NULL DEFAULT 0,
|
|
109
|
+
stt_provider TEXT,
|
|
110
|
+
tts_provider TEXT,
|
|
111
|
+
tts_voice_id TEXT,
|
|
112
|
+
step_delivery_mode TEXT DEFAULT 'new_messages'
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
-- MCP Servers: linked to user (or global if user_id is NULL)
|
|
116
|
+
CREATE TABLE IF NOT EXISTS mcp_servers (
|
|
117
|
+
id TEXT PRIMARY KEY,
|
|
118
|
+
name TEXT NOT NULL,
|
|
119
|
+
transport TEXT NOT NULL,
|
|
120
|
+
command TEXT,
|
|
121
|
+
args TEXT,
|
|
122
|
+
env_encrypted TEXT,
|
|
123
|
+
env_iv TEXT,
|
|
124
|
+
headers_encrypted TEXT,
|
|
125
|
+
headers_iv TEXT,
|
|
126
|
+
url TEXT,
|
|
127
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
128
|
+
active INTEGER NOT NULL DEFAULT 0,
|
|
129
|
+
builtin INTEGER NOT NULL DEFAULT 0,
|
|
130
|
+
status TEXT NOT NULL DEFAULT 'disconnected',
|
|
131
|
+
tools_count INTEGER DEFAULT 0
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
-- Skills: can be global (system) or user-specific
|
|
135
|
+
CREATE TABLE IF NOT EXISTS skills (
|
|
136
|
+
id TEXT PRIMARY KEY,
|
|
137
|
+
name TEXT NOT NULL,
|
|
138
|
+
description TEXT,
|
|
139
|
+
version TEXT,
|
|
140
|
+
author TEXT,
|
|
141
|
+
category TEXT,
|
|
142
|
+
icon TEXT,
|
|
143
|
+
source TEXT NOT NULL,
|
|
144
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
145
|
+
active INTEGER NOT NULL DEFAULT 0,
|
|
146
|
+
permissions TEXT, -- JSON
|
|
147
|
+
dependencies TEXT, -- JSON
|
|
148
|
+
tools TEXT, -- JSON (List of tool IDs associated with this skill)
|
|
149
|
+
metadata TEXT, -- Otros metadatos específicos
|
|
150
|
+
content TEXT,
|
|
151
|
+
file_path TEXT
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
-- Tools: global (bundled), not user-specific
|
|
155
|
+
-- category: 'bundled', 'workspace', 'project', 'builtin', 'voice'
|
|
156
|
+
CREATE TABLE IF NOT EXISTS tools (
|
|
157
|
+
id TEXT PRIMARY KEY,
|
|
158
|
+
name TEXT NOT NULL UNIQUE,
|
|
159
|
+
description TEXT,
|
|
160
|
+
category TEXT,
|
|
161
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
162
|
+
active INTEGER NOT NULL DEFAULT 0,
|
|
163
|
+
schema TEXT
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
-- Ethics: global templates (user selects one)
|
|
167
|
+
CREATE TABLE IF NOT EXISTS ethics (
|
|
168
|
+
id TEXT PRIMARY KEY,
|
|
169
|
+
name TEXT NOT NULL,
|
|
170
|
+
description TEXT,
|
|
171
|
+
content TEXT NOT NULL,
|
|
172
|
+
is_default INTEGER NOT NULL DEFAULT 0,
|
|
173
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
174
|
+
active INTEGER NOT NULL DEFAULT 0
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
-- Code Bridge: external CLI tools configuration (global)
|
|
178
|
+
CREATE TABLE IF NOT EXISTS code_bridge (
|
|
179
|
+
id TEXT PRIMARY KEY,
|
|
180
|
+
user_id TEXT REFERENCES users(id) ON DELETE CASCADE,
|
|
181
|
+
name TEXT NOT NULL UNIQUE,
|
|
182
|
+
cli_command TEXT NOT NULL,
|
|
183
|
+
enabled INTEGER NOT NULL DEFAULT 0,
|
|
184
|
+
active INTEGER NOT NULL DEFAULT 0,
|
|
185
|
+
port INTEGER DEFAULT 18791,
|
|
186
|
+
config TEXT
|
|
187
|
+
);
|
|
188
|
+
|
|
189
|
+
-- Code Bridge Config: key-value store for configuration (voice_wake_word, etc.)
|
|
190
|
+
CREATE TABLE IF NOT EXISTS code_bridge_config (
|
|
191
|
+
id TEXT PRIMARY KEY,
|
|
192
|
+
user_id TEXT REFERENCES users(id) ON DELETE CASCADE,
|
|
193
|
+
key TEXT NOT NULL,
|
|
194
|
+
value TEXT,
|
|
195
|
+
UNIQUE(user_id, key)
|
|
196
|
+
);
|
|
197
|
+
|
|
198
|
+
-- USER IDENTITIES (channel + user mapping)
|
|
199
|
+
|
|
200
|
+
CREATE TABLE IF NOT EXISTS user_identities (
|
|
201
|
+
user_id TEXT NOT NULL REFERENCES users(id),
|
|
202
|
+
channel TEXT NOT NULL,
|
|
203
|
+
channel_user_id TEXT NOT NULL,
|
|
204
|
+
linked_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
205
|
+
PRIMARY KEY (user_id, channel)
|
|
206
|
+
);
|
|
207
|
+
|
|
208
|
+
-- MESSAGES (linked to session)
|
|
209
|
+
|
|
210
|
+
CREATE TABLE IF NOT EXISTS messages (
|
|
211
|
+
id TEXT PRIMARY KEY,
|
|
212
|
+
thread_id TEXT NOT NULL,
|
|
213
|
+
session_id TEXT NOT NULL,
|
|
214
|
+
role TEXT NOT NULL CHECK(role IN ('user','assistant','system','tool')),
|
|
215
|
+
content TEXT NOT NULL,
|
|
216
|
+
metadata TEXT,
|
|
217
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
218
|
+
);
|
|
219
|
+
|
|
220
|
+
-- LANGGRAPH CHECKPOINTER (linked to user)
|
|
221
|
+
|
|
222
|
+
CREATE TABLE IF NOT EXISTS lg_checkpoints (
|
|
223
|
+
user_id TEXT REFERENCES users(id),
|
|
224
|
+
thread_id TEXT NOT NULL,
|
|
225
|
+
checkpoint_ns TEXT NOT NULL DEFAULT '',
|
|
226
|
+
checkpoint_id TEXT NOT NULL,
|
|
227
|
+
parent_id TEXT,
|
|
228
|
+
type TEXT,
|
|
229
|
+
checkpoint BLOB NOT NULL,
|
|
230
|
+
metadata BLOB NOT NULL,
|
|
231
|
+
PRIMARY KEY (user_id, thread_id, checkpoint_ns, checkpoint_id)
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
CREATE TABLE IF NOT EXISTS lg_checkpoint_writes (
|
|
235
|
+
user_id TEXT REFERENCES users(id),
|
|
236
|
+
thread_id TEXT NOT NULL,
|
|
237
|
+
checkpoint_ns TEXT NOT NULL DEFAULT '',
|
|
238
|
+
checkpoint_id TEXT NOT NULL,
|
|
239
|
+
task_id TEXT NOT NULL,
|
|
240
|
+
idx INTEGER NOT NULL,
|
|
241
|
+
channel TEXT NOT NULL,
|
|
242
|
+
type TEXT,
|
|
243
|
+
value BLOB NOT NULL,
|
|
244
|
+
PRIMARY KEY (user_id, thread_id, checkpoint_ns, checkpoint_id, task_id, idx)
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
-- ONBOARDING PROGRESS
|
|
248
|
+
|
|
249
|
+
CREATE TABLE IF NOT EXISTS onboarding_progress (
|
|
250
|
+
id TEXT PRIMARY KEY,
|
|
251
|
+
user_id TEXT REFERENCES users(id) ON DELETE CASCADE,
|
|
252
|
+
step TEXT NOT NULL,
|
|
253
|
+
data TEXT,
|
|
254
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
255
|
+
);
|
|
256
|
+
|
|
257
|
+
-- NOTES
|
|
258
|
+
CREATE TABLE IF NOT EXISTS notes (
|
|
259
|
+
id TEXT PRIMARY KEY,
|
|
260
|
+
title TEXT NOT NULL UNIQUE,
|
|
261
|
+
content TEXT,
|
|
262
|
+
active INTEGER NOT NULL DEFAULT 1,
|
|
263
|
+
createdAt INTEGER DEFAULT (unixepoch()),
|
|
264
|
+
updatedAt INTEGER DEFAULT (unixepoch())
|
|
265
|
+
);
|
|
266
|
+
|
|
267
|
+
-- USAGE TRACKING (tokens, costs)
|
|
268
|
+
CREATE TABLE IF NOT EXISTS usage_records (
|
|
269
|
+
id TEXT PRIMARY KEY,
|
|
270
|
+
provider TEXT NOT NULL,
|
|
271
|
+
model TEXT NOT NULL,
|
|
272
|
+
input_tokens INTEGER NOT NULL DEFAULT 0,
|
|
273
|
+
output_tokens INTEGER NOT NULL DEFAULT 0,
|
|
274
|
+
cost_usd REAL NOT NULL DEFAULT 0,
|
|
275
|
+
latency_ms INTEGER,
|
|
276
|
+
toon_saved_tokens INTEGER NOT NULL DEFAULT 0,
|
|
277
|
+
toon_saved_cost REAL NOT NULL DEFAULT 0,
|
|
278
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
279
|
+
);
|
|
280
|
+
|
|
281
|
+
-- CRON JOBS: scheduled tasks with notification channel
|
|
282
|
+
-- notify_channel_id: which channel to send notifications to when task runs
|
|
283
|
+
-- max_runs: NULL = unlimited; auto-disables when run_count reaches max_runs
|
|
284
|
+
-- expires_at: NULL = never expires; auto-disables after this UTC timestamp
|
|
285
|
+
CREATE TABLE IF NOT EXISTS cron_jobs (
|
|
286
|
+
id TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(16)))),
|
|
287
|
+
user_id TEXT REFERENCES users(id) ON DELETE CASCADE,
|
|
288
|
+
name TEXT NOT NULL,
|
|
289
|
+
cron_expression TEXT NOT NULL,
|
|
290
|
+
task_type TEXT NOT NULL DEFAULT 'message',
|
|
291
|
+
task_config TEXT,
|
|
292
|
+
notify_channel_id TEXT,
|
|
293
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
294
|
+
max_runs INTEGER,
|
|
295
|
+
run_count INTEGER NOT NULL DEFAULT 0,
|
|
296
|
+
expires_at INTEGER,
|
|
297
|
+
last_run INTEGER,
|
|
298
|
+
next_run INTEGER,
|
|
299
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
300
|
+
);
|
|
301
|
+
|
|
302
|
+
-- INDICES
|
|
303
|
+
|
|
304
|
+
CREATE INDEX IF NOT EXISTS idx_models_provider ON models(provider_id);
|
|
305
|
+
CREATE INDEX IF NOT EXISTS idx_models_type ON models(model_type);
|
|
306
|
+
CREATE INDEX IF NOT EXISTS idx_agents_user ON agents(user_id);
|
|
307
|
+
CREATE INDEX IF NOT EXISTS idx_channels_user ON channels(user_id);
|
|
308
|
+
CREATE INDEX IF NOT EXISTS idx_channels_type ON channels(type);
|
|
309
|
+
CREATE INDEX IF NOT EXISTS idx_ethics ON ethics(id);
|
|
310
|
+
CREATE INDEX IF NOT EXISTS idx_code_bridge ON code_bridge(id);
|
|
311
|
+
CREATE INDEX IF NOT EXISTS idx_messages_thread ON messages(thread_id);
|
|
312
|
+
CREATE INDEX IF NOT EXISTS idx_messages_session ON messages(session_id);
|
|
313
|
+
CREATE INDEX IF NOT EXISTS idx_identities_user ON user_identities(user_id);
|
|
314
|
+
CREATE INDEX IF NOT EXISTS idx_lg_cp_user_thread ON lg_checkpoints(user_id, thread_id);
|
|
315
|
+
CREATE INDEX IF NOT EXISTS idx_usage_provider_model ON usage_records(provider, model);
|
|
316
|
+
CREATE INDEX IF NOT EXISTS idx_usage_created_at ON usage_records(created_at);
|
|
317
|
+
CREATE INDEX IF NOT EXISTS idx_code_bridge_config_user ON code_bridge_config(user_id);
|
|
318
|
+
CREATE INDEX IF NOT EXISTS idx_cron_jobs_user ON cron_jobs(user_id);
|
|
319
|
+
CREATE INDEX IF NOT EXISTS idx_cron_jobs_enabled ON cron_jobs(enabled);
|
|
320
|
+
CREATE INDEX IF NOT EXISTS idx_cron_jobs_next_run ON cron_jobs(next_run);
|
|
321
|
+
`;
|
|
322
|
+
|
|
323
|
+
export const PROJECTS_SCHEMA = `
|
|
324
|
+
-- PROJECTS: tareas multi-paso con seguimiento de progreso
|
|
325
|
+
CREATE TABLE IF NOT EXISTS projects (
|
|
326
|
+
id TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(16)))),
|
|
327
|
+
user_id TEXT REFERENCES users(id) ON DELETE CASCADE,
|
|
328
|
+
agent_id TEXT REFERENCES agents(id) ON DELETE SET NULL,
|
|
329
|
+
name TEXT NOT NULL,
|
|
330
|
+
description TEXT,
|
|
331
|
+
type TEXT NOT NULL DEFAULT 'general',
|
|
332
|
+
task TEXT,
|
|
333
|
+
progress INTEGER NOT NULL DEFAULT 0 CHECK(progress >= 0 AND progress <= 100),
|
|
334
|
+
status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending','active','paused','done','failed')),
|
|
335
|
+
context TEXT,
|
|
336
|
+
parent_id TEXT REFERENCES projects(id) ON DELETE SET NULL,
|
|
337
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
338
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
339
|
+
started_at INTEGER,
|
|
340
|
+
completed_at INTEGER
|
|
341
|
+
);
|
|
342
|
+
|
|
343
|
+
-- TASKS: subtareas atómicas asociadas a un proyecto, con agente asignado
|
|
344
|
+
-- depends_on: JSON array of task IDs that must complete before this one
|
|
345
|
+
-- priority: higher = more urgent
|
|
346
|
+
-- error: reason for failure if status='failed'
|
|
347
|
+
CREATE TABLE IF NOT EXISTS tasks (
|
|
348
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
349
|
+
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
350
|
+
agent_id TEXT REFERENCES agents(id) ON DELETE SET NULL,
|
|
351
|
+
parent_task_id INTEGER REFERENCES tasks(id) ON DELETE CASCADE,
|
|
352
|
+
name TEXT NOT NULL,
|
|
353
|
+
description TEXT,
|
|
354
|
+
status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending','in_progress','completed','failed','blocked')),
|
|
355
|
+
progress INTEGER NOT NULL DEFAULT 0 CHECK(progress >= 0 AND progress <= 100),
|
|
356
|
+
priority INTEGER NOT NULL DEFAULT 0,
|
|
357
|
+
depends_on TEXT,
|
|
358
|
+
result TEXT,
|
|
359
|
+
error TEXT,
|
|
360
|
+
metadata TEXT,
|
|
361
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
362
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
363
|
+
completed_at INTEGER
|
|
364
|
+
);
|
|
365
|
+
|
|
366
|
+
CREATE INDEX IF NOT EXISTS idx_projects_user ON projects(user_id);
|
|
367
|
+
CREATE INDEX IF NOT EXISTS idx_projects_agent ON projects(agent_id);
|
|
368
|
+
CREATE INDEX IF NOT EXISTS idx_projects_parent ON projects(parent_id);
|
|
369
|
+
CREATE INDEX IF NOT EXISTS idx_projects_status ON projects(status);
|
|
370
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_project ON tasks(project_id);
|
|
371
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_agent ON tasks(agent_id);
|
|
372
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
|
|
373
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_priority ON tasks(priority);
|
|
374
|
+
`;
|
|
375
|
+
|
|
376
|
+
// ─── Context Engine + ACE tables ─────────────────────────────────────────────
|
|
377
|
+
|
|
378
|
+
export const CONTEXT_ENGINE_SCHEMA = `
|
|
379
|
+
-- CONVERSATIONS: full message history per thread (replaces lg_checkpoints)
|
|
380
|
+
-- role: 'user' | 'assistant' | 'tool' | 'system'
|
|
381
|
+
-- tool_calls_json: JSON array of tool calls if the message triggered any
|
|
382
|
+
-- token_count: estimated tokens for context budget tracking
|
|
383
|
+
CREATE TABLE IF NOT EXISTS conversations (
|
|
384
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
385
|
+
thread_id TEXT NOT NULL,
|
|
386
|
+
channel TEXT NOT NULL DEFAULT 'webchat',
|
|
387
|
+
role TEXT NOT NULL CHECK(role IN ('user','assistant','tool','system')),
|
|
388
|
+
content TEXT NOT NULL,
|
|
389
|
+
tool_calls_json TEXT,
|
|
390
|
+
tool_call_id TEXT,
|
|
391
|
+
token_count INTEGER NOT NULL DEFAULT 0,
|
|
392
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
393
|
+
);
|
|
394
|
+
|
|
395
|
+
-- SUMMARIES: compressed digests of long conversations
|
|
396
|
+
-- The Context Compiler uses the summary instead of old raw messages
|
|
397
|
+
CREATE TABLE IF NOT EXISTS summaries (
|
|
398
|
+
thread_id TEXT PRIMARY KEY,
|
|
399
|
+
summary TEXT NOT NULL,
|
|
400
|
+
messages_covered INTEGER NOT NULL DEFAULT 0,
|
|
401
|
+
last_message_id INTEGER,
|
|
402
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
403
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
404
|
+
);
|
|
405
|
+
|
|
406
|
+
-- SCRATCHPAD: persistent key-value notes per conversation
|
|
407
|
+
-- Survives context compression. Written by agents via save_note tool.
|
|
408
|
+
CREATE TABLE IF NOT EXISTS scratchpad (
|
|
409
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
410
|
+
thread_id TEXT NOT NULL,
|
|
411
|
+
key TEXT NOT NULL,
|
|
412
|
+
value TEXT NOT NULL,
|
|
413
|
+
source TEXT,
|
|
414
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
415
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
416
|
+
UNIQUE(thread_id, key)
|
|
417
|
+
);
|
|
418
|
+
|
|
419
|
+
-- TRACES: execution log for every agent invocation (ACE Generator output)
|
|
420
|
+
-- success: 1 = ok, 0 = failure
|
|
421
|
+
-- tokens_used: total tokens consumed in this invocation
|
|
422
|
+
CREATE TABLE IF NOT EXISTS traces (
|
|
423
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
424
|
+
thread_id TEXT NOT NULL,
|
|
425
|
+
agent_id TEXT NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
|
|
426
|
+
agent_name TEXT NOT NULL,
|
|
427
|
+
tool_used TEXT,
|
|
428
|
+
input_summary TEXT NOT NULL,
|
|
429
|
+
output_summary TEXT NOT NULL,
|
|
430
|
+
success INTEGER NOT NULL DEFAULT 1,
|
|
431
|
+
error_message TEXT,
|
|
432
|
+
duration_ms INTEGER,
|
|
433
|
+
tokens_used INTEGER,
|
|
434
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
435
|
+
);
|
|
436
|
+
|
|
437
|
+
-- REFLECTIONS: insights extracted by the ACE Reflector from traces
|
|
438
|
+
-- insight_type: 'success_pattern' | 'failure_pattern' | 'optimization' | 'ethics_violation'
|
|
439
|
+
-- confidence: 0.0 to 1.0
|
|
440
|
+
CREATE TABLE IF NOT EXISTS reflections (
|
|
441
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
442
|
+
trace_ids TEXT NOT NULL,
|
|
443
|
+
insight_type TEXT NOT NULL CHECK(insight_type IN ('success_pattern','failure_pattern','optimization','ethics_violation')),
|
|
444
|
+
description TEXT NOT NULL,
|
|
445
|
+
affected_tools TEXT,
|
|
446
|
+
affected_agents TEXT,
|
|
447
|
+
confidence REAL NOT NULL DEFAULT 0.5,
|
|
448
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
449
|
+
);
|
|
450
|
+
|
|
451
|
+
-- PLAYBOOK: evolved rules injected by Context Compiler (ACE Curator output)
|
|
452
|
+
-- category: 'tool_selection' | 'response_quality' | 'error_avoidance' | 'optimization' | 'agent_creation'
|
|
453
|
+
-- applicable_to: JSON array of contexts where this rule applies
|
|
454
|
+
-- helpful_count / harmful_count: feedback from execution outcomes
|
|
455
|
+
-- active: 0 = pruned by Curator
|
|
456
|
+
CREATE TABLE IF NOT EXISTS playbook (
|
|
457
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
458
|
+
rule TEXT NOT NULL,
|
|
459
|
+
category TEXT NOT NULL CHECK(category IN ('tool_selection','response_quality','error_avoidance','optimization','agent_creation')),
|
|
460
|
+
applicable_to TEXT,
|
|
461
|
+
helpful_count INTEGER NOT NULL DEFAULT 0,
|
|
462
|
+
harmful_count INTEGER NOT NULL DEFAULT 0,
|
|
463
|
+
source_reflection_id INTEGER REFERENCES reflections(id) ON DELETE SET NULL,
|
|
464
|
+
active INTEGER NOT NULL DEFAULT 1,
|
|
465
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
466
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
467
|
+
);
|
|
468
|
+
|
|
469
|
+
-- TOOL_CACHE: cached results for deterministic/expensive tool calls
|
|
470
|
+
-- cache_key: hash of tool_id + serialized params
|
|
471
|
+
-- ttl_seconds: 0 = no expiry
|
|
472
|
+
CREATE TABLE IF NOT EXISTS tool_cache (
|
|
473
|
+
cache_key TEXT PRIMARY KEY,
|
|
474
|
+
tool_id TEXT NOT NULL,
|
|
475
|
+
result TEXT NOT NULL,
|
|
476
|
+
ttl_seconds INTEGER NOT NULL DEFAULT 3600,
|
|
477
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
478
|
+
);
|
|
479
|
+
|
|
480
|
+
-- FTS5 indexes for fast semantic search in Context Compiler
|
|
481
|
+
|
|
482
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS playbook_fts USING fts5(
|
|
483
|
+
rule,
|
|
484
|
+
category,
|
|
485
|
+
applicable_to,
|
|
486
|
+
content='playbook',
|
|
487
|
+
content_rowid='id'
|
|
488
|
+
);
|
|
489
|
+
|
|
490
|
+
-- Triggers to keep playbook_fts in sync with playbook
|
|
491
|
+
CREATE TRIGGER IF NOT EXISTS playbook_fts_insert AFTER INSERT ON playbook BEGIN
|
|
492
|
+
INSERT INTO playbook_fts(rowid, rule, category, applicable_to)
|
|
493
|
+
VALUES (new.id, new.rule, new.category, new.applicable_to);
|
|
494
|
+
END;
|
|
495
|
+
|
|
496
|
+
CREATE TRIGGER IF NOT EXISTS playbook_fts_update AFTER UPDATE ON playbook BEGIN
|
|
497
|
+
INSERT INTO playbook_fts(playbook_fts, rowid, rule, category, applicable_to)
|
|
498
|
+
VALUES ('delete', old.id, old.rule, old.category, old.applicable_to);
|
|
499
|
+
INSERT INTO playbook_fts(rowid, rule, category, applicable_to)
|
|
500
|
+
VALUES (new.id, new.rule, new.category, new.applicable_to);
|
|
501
|
+
END;
|
|
502
|
+
|
|
503
|
+
CREATE TRIGGER IF NOT EXISTS playbook_fts_delete AFTER DELETE ON playbook BEGIN
|
|
504
|
+
INSERT INTO playbook_fts(playbook_fts, rowid, rule, category, applicable_to)
|
|
505
|
+
VALUES ('delete', old.id, old.rule, old.category, old.applicable_to);
|
|
506
|
+
END;
|
|
507
|
+
|
|
508
|
+
-- FTS5: tool catalog search (populated by syncNativeToolsToDB on each startup)
|
|
509
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS tools_fts USING fts5(
|
|
510
|
+
tool_name UNINDEXED,
|
|
511
|
+
name,
|
|
512
|
+
description,
|
|
513
|
+
category
|
|
514
|
+
);
|
|
515
|
+
|
|
516
|
+
-- INDICES
|
|
517
|
+
CREATE INDEX IF NOT EXISTS idx_conversations_thread ON conversations(thread_id);
|
|
518
|
+
CREATE INDEX IF NOT EXISTS idx_conversations_role ON conversations(role);
|
|
519
|
+
CREATE INDEX IF NOT EXISTS idx_scratchpad_thread ON scratchpad(thread_id);
|
|
520
|
+
CREATE INDEX IF NOT EXISTS idx_traces_thread ON traces(thread_id);
|
|
521
|
+
CREATE INDEX IF NOT EXISTS idx_traces_agent ON traces(agent_id);
|
|
522
|
+
CREATE INDEX IF NOT EXISTS idx_traces_success ON traces(success);
|
|
523
|
+
CREATE INDEX IF NOT EXISTS idx_reflections_type ON reflections(insight_type);
|
|
524
|
+
CREATE INDEX IF NOT EXISTS idx_playbook_active ON playbook(active);
|
|
525
|
+
CREATE INDEX IF NOT EXISTS idx_playbook_category ON playbook(category);
|
|
526
|
+
CREATE INDEX IF NOT EXISTS idx_tool_cache_tool ON tool_cache(tool_id);
|
|
527
|
+
|
|
528
|
+
-- HIVE_CAPABILITIES: knowledge base del ecosistema Hive inyectada en el system prompt
|
|
529
|
+
-- section: 'architecture' | 'tools' | 'agents' | 'canvas' | 'code_bridge' | 'channels' | 'memory'
|
|
530
|
+
-- sort_order: orden de aparición en el system prompt
|
|
531
|
+
-- active: 0 = desactivado (no se inyecta)
|
|
532
|
+
CREATE TABLE IF NOT EXISTS hive_capabilities (
|
|
533
|
+
id TEXT PRIMARY KEY,
|
|
534
|
+
section TEXT NOT NULL,
|
|
535
|
+
title TEXT NOT NULL,
|
|
536
|
+
content TEXT NOT NULL,
|
|
537
|
+
active INTEGER NOT NULL DEFAULT 1,
|
|
538
|
+
sort_order INTEGER NOT NULL DEFAULT 0,
|
|
539
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
540
|
+
);
|
|
541
|
+
`;
|