@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.
Files changed (156) hide show
  1. package/CONTRIBUTING.md +44 -0
  2. package/README.md +310 -0
  3. package/package.json +96 -0
  4. package/packages/cli/package.json +28 -0
  5. package/packages/cli/src/commands/agent-run.ts +168 -0
  6. package/packages/cli/src/commands/agents.ts +398 -0
  7. package/packages/cli/src/commands/chat.ts +142 -0
  8. package/packages/cli/src/commands/config.ts +50 -0
  9. package/packages/cli/src/commands/cron.ts +161 -0
  10. package/packages/cli/src/commands/dev.ts +95 -0
  11. package/packages/cli/src/commands/doctor.ts +133 -0
  12. package/packages/cli/src/commands/gateway.ts +443 -0
  13. package/packages/cli/src/commands/logs.ts +57 -0
  14. package/packages/cli/src/commands/mcp.ts +175 -0
  15. package/packages/cli/src/commands/message.ts +77 -0
  16. package/packages/cli/src/commands/onboard.ts +1868 -0
  17. package/packages/cli/src/commands/security.ts +144 -0
  18. package/packages/cli/src/commands/service.ts +50 -0
  19. package/packages/cli/src/commands/sessions.ts +116 -0
  20. package/packages/cli/src/commands/skills.ts +187 -0
  21. package/packages/cli/src/commands/update.ts +25 -0
  22. package/packages/cli/src/index.ts +185 -0
  23. package/packages/cli/src/utils/token.ts +6 -0
  24. package/packages/code-bridge/README.md +78 -0
  25. package/packages/code-bridge/package.json +18 -0
  26. package/packages/code-bridge/src/index.ts +95 -0
  27. package/packages/code-bridge/src/process-manager.ts +212 -0
  28. package/packages/code-bridge/src/schemas.ts +133 -0
  29. package/packages/core/package.json +46 -0
  30. package/packages/core/src/agent/agent-loop.ts +369 -0
  31. package/packages/core/src/agent/compaction.ts +140 -0
  32. package/packages/core/src/agent/context-compiler.ts +378 -0
  33. package/packages/core/src/agent/context-guard.ts +91 -0
  34. package/packages/core/src/agent/context.ts +138 -0
  35. package/packages/core/src/agent/conversation-store.ts +198 -0
  36. package/packages/core/src/agent/curator.ts +158 -0
  37. package/packages/core/src/agent/hooks.ts +166 -0
  38. package/packages/core/src/agent/index.ts +116 -0
  39. package/packages/core/src/agent/llm-client.ts +503 -0
  40. package/packages/core/src/agent/native-tools.ts +505 -0
  41. package/packages/core/src/agent/prompt-builder.ts +532 -0
  42. package/packages/core/src/agent/providers/index.ts +167 -0
  43. package/packages/core/src/agent/providers.ts +1 -0
  44. package/packages/core/src/agent/reflector.ts +170 -0
  45. package/packages/core/src/agent/service.ts +64 -0
  46. package/packages/core/src/agent/stuck-loop.ts +133 -0
  47. package/packages/core/src/agent/supervisor.ts +39 -0
  48. package/packages/core/src/agent/tracer.ts +102 -0
  49. package/packages/core/src/agent/workspace.ts +110 -0
  50. package/packages/core/src/canvas/canvas-manager.test.ts +161 -0
  51. package/packages/core/src/canvas/canvas-manager.ts +319 -0
  52. package/packages/core/src/canvas/canvas-tools.ts +420 -0
  53. package/packages/core/src/canvas/emitter.ts +115 -0
  54. package/packages/core/src/canvas/index.ts +2 -0
  55. package/packages/core/src/channels/base.ts +138 -0
  56. package/packages/core/src/channels/discord.ts +260 -0
  57. package/packages/core/src/channels/index.ts +7 -0
  58. package/packages/core/src/channels/manager.ts +383 -0
  59. package/packages/core/src/channels/slack.ts +287 -0
  60. package/packages/core/src/channels/telegram.ts +502 -0
  61. package/packages/core/src/channels/webchat.ts +128 -0
  62. package/packages/core/src/channels/whatsapp.ts +375 -0
  63. package/packages/core/src/config/index.ts +12 -0
  64. package/packages/core/src/config/loader.ts +529 -0
  65. package/packages/core/src/events/event-bus.ts +169 -0
  66. package/packages/core/src/gateway/index.ts +5 -0
  67. package/packages/core/src/gateway/initializer.ts +290 -0
  68. package/packages/core/src/gateway/lane-queue.ts +169 -0
  69. package/packages/core/src/gateway/resolver.ts +108 -0
  70. package/packages/core/src/gateway/router.ts +124 -0
  71. package/packages/core/src/gateway/server.ts +3317 -0
  72. package/packages/core/src/gateway/session.ts +95 -0
  73. package/packages/core/src/gateway/slash-commands.ts +192 -0
  74. package/packages/core/src/heartbeat/index.ts +157 -0
  75. package/packages/core/src/index.ts +19 -0
  76. package/packages/core/src/integrations/catalog.ts +286 -0
  77. package/packages/core/src/integrations/env.ts +64 -0
  78. package/packages/core/src/integrations/index.ts +2 -0
  79. package/packages/core/src/memory/index.ts +1 -0
  80. package/packages/core/src/memory/notes.ts +68 -0
  81. package/packages/core/src/plugins/api.ts +128 -0
  82. package/packages/core/src/plugins/index.ts +2 -0
  83. package/packages/core/src/plugins/loader.ts +365 -0
  84. package/packages/core/src/resilience/circuit-breaker.ts +225 -0
  85. package/packages/core/src/security/google-chat.ts +269 -0
  86. package/packages/core/src/security/index.ts +192 -0
  87. package/packages/core/src/security/pairing.ts +250 -0
  88. package/packages/core/src/security/rate-limit.ts +270 -0
  89. package/packages/core/src/security/signal.ts +321 -0
  90. package/packages/core/src/state/store.ts +312 -0
  91. package/packages/core/src/storage/bun-sqlite-store.ts +188 -0
  92. package/packages/core/src/storage/crypto.ts +101 -0
  93. package/packages/core/src/storage/db-context.ts +333 -0
  94. package/packages/core/src/storage/onboarding.ts +1087 -0
  95. package/packages/core/src/storage/schema.ts +541 -0
  96. package/packages/core/src/storage/seed.ts +571 -0
  97. package/packages/core/src/storage/sqlite.ts +387 -0
  98. package/packages/core/src/storage/usage.ts +212 -0
  99. package/packages/core/src/tools/bridge-events.ts +74 -0
  100. package/packages/core/src/tools/browser.ts +275 -0
  101. package/packages/core/src/tools/codebridge.ts +421 -0
  102. package/packages/core/src/tools/coordinator-tools.ts +179 -0
  103. package/packages/core/src/tools/cron.ts +611 -0
  104. package/packages/core/src/tools/exec.ts +140 -0
  105. package/packages/core/src/tools/fs.ts +364 -0
  106. package/packages/core/src/tools/index.ts +12 -0
  107. package/packages/core/src/tools/memory.ts +176 -0
  108. package/packages/core/src/tools/notify.ts +113 -0
  109. package/packages/core/src/tools/project-management.ts +376 -0
  110. package/packages/core/src/tools/project.ts +375 -0
  111. package/packages/core/src/tools/read.ts +158 -0
  112. package/packages/core/src/tools/web.ts +436 -0
  113. package/packages/core/src/tools/workspace.ts +171 -0
  114. package/packages/core/src/utils/benchmark.ts +80 -0
  115. package/packages/core/src/utils/crypto.ts +73 -0
  116. package/packages/core/src/utils/date.ts +42 -0
  117. package/packages/core/src/utils/index.ts +4 -0
  118. package/packages/core/src/utils/logger.ts +388 -0
  119. package/packages/core/src/utils/retry.ts +70 -0
  120. package/packages/core/src/voice/index.ts +583 -0
  121. package/packages/core/tsconfig.json +9 -0
  122. package/packages/mcp/package.json +26 -0
  123. package/packages/mcp/src/config.ts +13 -0
  124. package/packages/mcp/src/index.ts +1 -0
  125. package/packages/mcp/src/logger.ts +42 -0
  126. package/packages/mcp/src/manager.ts +434 -0
  127. package/packages/mcp/src/transports/index.ts +67 -0
  128. package/packages/mcp/src/transports/sse.ts +241 -0
  129. package/packages/mcp/src/transports/websocket.ts +159 -0
  130. package/packages/skills/package.json +21 -0
  131. package/packages/skills/src/bundled/agent_management/SKILL.md +24 -0
  132. package/packages/skills/src/bundled/browser_automation/SKILL.md +30 -0
  133. package/packages/skills/src/bundled/context_compact/SKILL.md +35 -0
  134. package/packages/skills/src/bundled/cron_manager/SKILL.md +52 -0
  135. package/packages/skills/src/bundled/file_manager/SKILL.md +76 -0
  136. package/packages/skills/src/bundled/http_client/SKILL.md +24 -0
  137. package/packages/skills/src/bundled/memory/SKILL.md +42 -0
  138. package/packages/skills/src/bundled/project_management/SKILL.md +26 -0
  139. package/packages/skills/src/bundled/shell/SKILL.md +43 -0
  140. package/packages/skills/src/bundled/system_notify/SKILL.md +52 -0
  141. package/packages/skills/src/bundled/voice/SKILL.md +25 -0
  142. package/packages/skills/src/bundled/web_search/SKILL.md +29 -0
  143. package/packages/skills/src/index.ts +1 -0
  144. package/packages/skills/src/loader.ts +282 -0
  145. package/packages/tools/package.json +43 -0
  146. package/packages/tools/src/browser/browser.test.ts +111 -0
  147. package/packages/tools/src/browser/index.ts +272 -0
  148. package/packages/tools/src/canvas/index.ts +220 -0
  149. package/packages/tools/src/cron/cron.test.ts +164 -0
  150. package/packages/tools/src/cron/index.ts +304 -0
  151. package/packages/tools/src/filesystem/filesystem.test.ts +240 -0
  152. package/packages/tools/src/filesystem/index.ts +379 -0
  153. package/packages/tools/src/git/index.ts +239 -0
  154. package/packages/tools/src/index.ts +4 -0
  155. package/packages/tools/src/shell/detect-env.ts +70 -0
  156. package/packages/tools/tsconfig.json +9 -0
@@ -0,0 +1,333 @@
1
+ import { logger } from "../utils/logger.ts";
2
+ import { getDb } from "./sqlite";
3
+
4
+ const log = logger.child("db-context");
5
+
6
+ /**
7
+ * Obtiene la configuración del agente desde la BD
8
+ */
9
+ export function getAgentFromDb(agentId: string): {
10
+ id: string;
11
+ name: string;
12
+ userId: string;
13
+ providerId: string | null;
14
+ modelId: string | null;
15
+ tone: string;
16
+ status: string;
17
+ } | null {
18
+ try {
19
+ const db = getDb();
20
+ const agent = db.query(`
21
+ SELECT id, name, user_id, provider_id, model_id, tone, status
22
+ FROM agents
23
+ WHERE id = ?
24
+ `).get(agentId) as any;
25
+
26
+ if (!agent) return null;
27
+
28
+ return agent;
29
+ } catch (e) {
30
+ log.error("[getAgentFromDb] Error:", { error: (e as Error).message });
31
+ return null;
32
+ }
33
+ }
34
+
35
+ /**
36
+ * Obtiene la configuración del usuario desde la BD
37
+ */
38
+ export function getUserFromDb(userId: string): {
39
+ id: string;
40
+ name: string;
41
+ language: string;
42
+ timezone: string;
43
+ occupation: string | null;
44
+ notes: string | null;
45
+ } | null {
46
+ try {
47
+ const db = getDb();
48
+ const user = db.query(`
49
+ SELECT id, name, language, timezone, occupation, notes
50
+ FROM users
51
+ WHERE id = ?
52
+ `).get(userId) as any;
53
+
54
+ if (!user) return null;
55
+
56
+ return user;
57
+ } catch (e) {
58
+ log.error("[getUserFromDb] Error:", { error: (e as Error).message });
59
+ return null;
60
+ }
61
+ }
62
+
63
+ /**
64
+ * Obtiene el template de ética desde la BD
65
+ */
66
+ export function getEthicsFromDb(ethicsId: string): {
67
+ id: string;
68
+ name: string;
69
+ description: string | null;
70
+ content: string;
71
+ } | null {
72
+ try {
73
+ const db = getDb();
74
+ const ethics = db.query(`
75
+ SELECT id, name, description, content
76
+ FROM ethics
77
+ WHERE id = ?
78
+ `).get(ethicsId) as any;
79
+
80
+ if (!ethics) return null;
81
+
82
+ return ethics;
83
+ } catch (e) {
84
+ log.error("[getEthicsFromDb] Error:", { error: (e as Error).message });
85
+ return null;
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Obtiene las tools activas desde la BD
91
+ */
92
+ export function getActiveToolsFromDb(): Array<{
93
+ id: string;
94
+ name: string;
95
+ description: string | null;
96
+ category: string | null;
97
+ }> {
98
+ try {
99
+ const db = getDb();
100
+ const results = db.query(`
101
+ SELECT id, name, description, category
102
+ FROM tools
103
+ WHERE active = 1
104
+ `).all() as Array<{
105
+ id: string;
106
+ name: string;
107
+ description: string | null;
108
+ category: string | null;
109
+ }>;
110
+
111
+ return results;
112
+ } catch (e) {
113
+ log.error("[getActiveToolsFromDb] Error:", { error: (e as Error).message });
114
+ return [];
115
+ }
116
+ }
117
+
118
+ /**
119
+ * Obtiene las skills activas desde la BD
120
+ */
121
+ export function getActiveSkillsFromDb(): Array<{
122
+ id: string;
123
+ name: string;
124
+ description: string | null;
125
+ source: string;
126
+ }> {
127
+ try {
128
+ const db = getDb();
129
+ const results = db.query(`
130
+ SELECT id, name, description, source
131
+ FROM skills
132
+ WHERE active = 1
133
+ `).all() as Array<{
134
+ id: string;
135
+ name: string;
136
+ description: string | null;
137
+ source: string;
138
+ }>;
139
+
140
+ return results;
141
+ } catch (e) {
142
+ log.error("[getActiveSkillsFromDb] Error:", { error: (e as Error).message });
143
+ return [];
144
+ }
145
+ }
146
+
147
+ /**
148
+ * Obtiene los MCP servers (activos e inactivos) desde la BD
149
+ */
150
+ export function getAllMcpServersFromDb(): Array<{
151
+ id: string;
152
+ name: string;
153
+ transport: string;
154
+ command: string | null;
155
+ args: string | null;
156
+ url: string | null;
157
+ enabled: boolean;
158
+ active: boolean;
159
+ builtin: boolean;
160
+ }> {
161
+ try {
162
+ const db = getDb();
163
+ const results = db.query(`
164
+ SELECT id, name, transport, command, args, url, enabled, active, builtin
165
+ FROM mcp_servers
166
+ `).all() as Array<{
167
+ id: string;
168
+ name: string;
169
+ transport: string;
170
+ command: string | null;
171
+ args: string | null;
172
+ url: string | null;
173
+ enabled: number;
174
+ active: number;
175
+ builtin: number;
176
+ }>;
177
+
178
+ return results.map(r => ({
179
+ ...r,
180
+ enabled: r.enabled === 1,
181
+ active: r.active === 1,
182
+ builtin: r.builtin === 1,
183
+ }));
184
+ } catch (e) {
185
+ log.error("[getAllMcpServersFromDb] Error:", { error: (e as Error).message });
186
+ return [];
187
+ }
188
+ }
189
+
190
+ /**
191
+ * Obtiene los channels activos desde la BD
192
+ */
193
+ export function getActiveChannelsFromDb(): Array<{
194
+ id: string;
195
+ type: string;
196
+ accountId: string;
197
+ status: string;
198
+ }> {
199
+ try {
200
+ const db = getDb();
201
+ const results = db.query(`
202
+ SELECT id, type, id as account_id, status
203
+ FROM channels
204
+ WHERE active = 1
205
+ `).all() as Array<{
206
+ id: string;
207
+ type: string;
208
+ account_id: string;
209
+ status: string;
210
+ }>;
211
+
212
+ return results.map(r => ({
213
+ id: r.id,
214
+ type: r.type,
215
+ accountId: r.id,
216
+ status: r.status,
217
+ }));
218
+ } catch (e) {
219
+ log.error("[getActiveChannelsFromDb] Error:", { error: (e as Error).message });
220
+ return [];
221
+ }
222
+ }
223
+
224
+ /**
225
+ * Obtiene la configuración de Code Bridge desde la BD
226
+ */
227
+ export function getCodeBridgeFromDb(): Array<{
228
+ id: string;
229
+ name: string;
230
+ cliCommand: string;
231
+ port: number;
232
+ enabled: boolean;
233
+ active: boolean;
234
+ }> {
235
+ try {
236
+ const db = getDb();
237
+ const results = db.query(`
238
+ SELECT id, name, cli_command, port, enabled, active
239
+ FROM code_bridge
240
+ WHERE enabled = 1 OR active = 1
241
+ `).all() as Array<{
242
+ id: string;
243
+ name: string;
244
+ cli_command: string;
245
+ port: number;
246
+ enabled: number;
247
+ active: number;
248
+ }>;
249
+
250
+ return results.map(r => ({
251
+ id: r.id,
252
+ name: r.name,
253
+ cliCommand: r.cli_command,
254
+ port: r.port,
255
+ enabled: r.enabled === 1,
256
+ active: r.active === 1,
257
+ }));
258
+ } catch (e) {
259
+ log.error("[getCodeBridgeFromDb] Error:", { error: (e as Error).message });
260
+ return [];
261
+ }
262
+ }
263
+
264
+ /**
265
+ * Obtiene los providers activos con API key configurada desde la BD
266
+ */
267
+ export function getActiveProvidersFromDb(): Array<{
268
+ id: string;
269
+ name: string;
270
+ baseUrl: string | null;
271
+ hasApiKey: boolean;
272
+ }> {
273
+ try {
274
+ const db = getDb();
275
+ const results = db.query(`
276
+ SELECT id, name, base_url, api_key_encrypted
277
+ FROM providers
278
+ WHERE active = 1 AND api_key_encrypted IS NOT NULL
279
+ `).all() as Array<{
280
+ id: string;
281
+ name: string;
282
+ base_url: string | null;
283
+ api_key_encrypted: string | null;
284
+ }>;
285
+
286
+ return results.map(r => ({
287
+ id: r.id,
288
+ name: r.name,
289
+ baseUrl: r.base_url,
290
+ hasApiKey: r.api_key_encrypted !== null,
291
+ }));
292
+ } catch (e) {
293
+ log.error("[getActiveProvidersFromDb] Error:", { error: (e as Error).message });
294
+ return [];
295
+ }
296
+ }
297
+
298
+ /**
299
+ * Obtiene los models activos desde la BD
300
+ */
301
+ export function getActiveModelsFromDb(): Array<{
302
+ id: string;
303
+ name: string;
304
+ providerId: string;
305
+ contextWindow: number | null;
306
+ capabilities: string | null;
307
+ }> {
308
+ try {
309
+ const db = getDb();
310
+ const results = db.query(`
311
+ SELECT id, name, provider_id, context_window, capabilities
312
+ FROM models
313
+ WHERE active = 1
314
+ `).all() as Array<{
315
+ id: string;
316
+ name: string;
317
+ provider_id: string;
318
+ context_window: number | null;
319
+ capabilities: string | null;
320
+ }>;
321
+
322
+ return results.map(r => ({
323
+ id: r.id,
324
+ name: r.name,
325
+ providerId: r.provider_id,
326
+ contextWindow: r.context_window,
327
+ capabilities: r.capabilities,
328
+ }));
329
+ } catch (e) {
330
+ log.error("[getActiveModelsFromDb] Error:", { error: (e as Error).message });
331
+ return [];
332
+ }
333
+ }