@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,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coordinator-exclusive tools — native Tool interface, no LangChain.
|
|
3
|
+
*
|
|
4
|
+
* These tools are only available to agents with role='coordinator'.
|
|
5
|
+
* Workers receive only domain-specific tools + save_note + report_result.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { Tool } from "../agent/native-tools"
|
|
9
|
+
import { getDb } from "../storage/sqlite"
|
|
10
|
+
import { emitCanvas } from "../canvas/emitter"
|
|
11
|
+
import { saveScratchpadNote } from "../agent/conversation-store"
|
|
12
|
+
import { logger } from "../utils/logger"
|
|
13
|
+
|
|
14
|
+
const log = logger.child("coordinator-tools")
|
|
15
|
+
|
|
16
|
+
// ─── create_agent ─────────────────────────────────────────────────────────────
|
|
17
|
+
|
|
18
|
+
export const createAgentNative: Tool = {
|
|
19
|
+
name: "create_agent",
|
|
20
|
+
description:
|
|
21
|
+
"Crea un nuevo agente especializado (worker) en la base de datos. " +
|
|
22
|
+
"Úsalo cuando ningún agente existente sea adecuado para la tarea. " +
|
|
23
|
+
"Antes de crear, busca en la BD si ya existe uno con habilidades similares.",
|
|
24
|
+
parameters: {
|
|
25
|
+
type: "object",
|
|
26
|
+
properties: {
|
|
27
|
+
name: { type: "string", description: "Nombre corto del agente, ej: 'researcher'" },
|
|
28
|
+
description: {
|
|
29
|
+
type: "string",
|
|
30
|
+
description: "Qué sabe hacer este agente (para búsqueda futura)"
|
|
31
|
+
},
|
|
32
|
+
system_prompt: {
|
|
33
|
+
type: "string",
|
|
34
|
+
description: "Prompt de sistema completo para este agente"
|
|
35
|
+
},
|
|
36
|
+
tools_json: {
|
|
37
|
+
type: "string",
|
|
38
|
+
description: "JSON array de IDs de tools asignadas, ej: [\"web_search\",\"read\"]. null = todas"
|
|
39
|
+
},
|
|
40
|
+
skills_json: {
|
|
41
|
+
type: "string",
|
|
42
|
+
description: "JSON array de IDs de skills asignadas. null = todas"
|
|
43
|
+
},
|
|
44
|
+
model_id: { type: "string", description: "Modelo LLM a usar (hereda del coordinador si omite)" },
|
|
45
|
+
provider_id: { type: "string", description: "Provider ID (hereda del coordinador si omite)" },
|
|
46
|
+
},
|
|
47
|
+
required: ["name", "description", "system_prompt"],
|
|
48
|
+
},
|
|
49
|
+
execute: async (params: Record<string, unknown>, config?: any) => {
|
|
50
|
+
const db = getDb()
|
|
51
|
+
const userId = config?.configurable?.user_id || process.env.HIVE_USER_ID
|
|
52
|
+
const coordinator = db.query<any, []>(
|
|
53
|
+
"SELECT * FROM agents WHERE is_coordinator = 1 LIMIT 1"
|
|
54
|
+
).get()
|
|
55
|
+
|
|
56
|
+
const result = db.query(`
|
|
57
|
+
INSERT INTO agents (user_id, name, description, system_prompt, role, status,
|
|
58
|
+
is_coordinator, enabled, provider_id, model_id, tools_json, skills_json, parent_id)
|
|
59
|
+
VALUES (?, ?, ?, ?, 'worker', 'idle', 0, 1, ?, ?, ?, ?, ?)
|
|
60
|
+
RETURNING id
|
|
61
|
+
`).get(
|
|
62
|
+
userId,
|
|
63
|
+
params.name,
|
|
64
|
+
params.description,
|
|
65
|
+
params.system_prompt,
|
|
66
|
+
params.provider_id || coordinator?.provider_id || "openai",
|
|
67
|
+
params.model_id || coordinator?.model_id || "gpt-4o-mini",
|
|
68
|
+
params.tools_json ?? null,
|
|
69
|
+
params.skills_json ?? null,
|
|
70
|
+
coordinator?.id ?? null,
|
|
71
|
+
) as { id: string } | undefined
|
|
72
|
+
|
|
73
|
+
const agentId = result?.id ?? crypto.randomUUID()
|
|
74
|
+
|
|
75
|
+
emitCanvas("canvas:node_add", {
|
|
76
|
+
node: {
|
|
77
|
+
id: agentId,
|
|
78
|
+
name: params.name,
|
|
79
|
+
description: params.description,
|
|
80
|
+
role: "worker",
|
|
81
|
+
status: "idle",
|
|
82
|
+
type: "agent",
|
|
83
|
+
},
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
log.info(`[create_agent] Created worker '${params.name}' id=${agentId}`)
|
|
87
|
+
return JSON.stringify({
|
|
88
|
+
ok: true,
|
|
89
|
+
agentId,
|
|
90
|
+
name: params.name,
|
|
91
|
+
message: `Worker '${params.name}' creado exitosamente`,
|
|
92
|
+
})
|
|
93
|
+
},
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// ─── save_note ────────────────────────────────────────────────────────────────
|
|
97
|
+
|
|
98
|
+
export const saveNoteNative: Tool = {
|
|
99
|
+
name: "save_note",
|
|
100
|
+
description:
|
|
101
|
+
"Guarda una nota persistente en el scratchpad de la conversación. " +
|
|
102
|
+
"Útil para recordar datos del usuario, preferencias, contexto de tareas. " +
|
|
103
|
+
"Las notas sobreviven a la compresión del historial.",
|
|
104
|
+
parameters: {
|
|
105
|
+
type: "object",
|
|
106
|
+
properties: {
|
|
107
|
+
key: {
|
|
108
|
+
type: "string",
|
|
109
|
+
description: "Etiqueta de la nota, ej: 'user_name', 'task_context', 'preference'"
|
|
110
|
+
},
|
|
111
|
+
value: { type: "string", description: "Contenido de la nota" },
|
|
112
|
+
},
|
|
113
|
+
required: ["key", "value"],
|
|
114
|
+
},
|
|
115
|
+
execute: async (params: Record<string, unknown>, config?: any) => {
|
|
116
|
+
const threadId = config?.configurable?.thread_id || "default"
|
|
117
|
+
const source = config?.configurable?.agent_id || "agent"
|
|
118
|
+
saveScratchpadNote(threadId, params.key as string, params.value as string, source)
|
|
119
|
+
return JSON.stringify({ ok: true, key: params.key })
|
|
120
|
+
},
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// ─── find_agent ───────────────────────────────────────────────────────────────
|
|
124
|
+
|
|
125
|
+
export const findAgentNative: Tool = {
|
|
126
|
+
name: "find_agent",
|
|
127
|
+
description:
|
|
128
|
+
"Busca en la base de datos si ya existe un agente worker con habilidades similares " +
|
|
129
|
+
"a las requeridas. Úsalo ANTES de crear un agente nuevo para evitar duplicados.",
|
|
130
|
+
parameters: {
|
|
131
|
+
type: "object",
|
|
132
|
+
properties: {
|
|
133
|
+
query: {
|
|
134
|
+
type: "string",
|
|
135
|
+
description: "Descripción de las habilidades que necesitas"
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
required: ["query"],
|
|
139
|
+
},
|
|
140
|
+
execute: async (params: Record<string, unknown>) => {
|
|
141
|
+
const db = getDb()
|
|
142
|
+
const agents = db.query<any, []>(
|
|
143
|
+
"SELECT id, name, description, tools_json, skills_json FROM agents WHERE role = 'worker' AND status != 'archived' AND enabled = 1"
|
|
144
|
+
).all()
|
|
145
|
+
|
|
146
|
+
if (agents.length === 0) return JSON.stringify({ agents: [] })
|
|
147
|
+
|
|
148
|
+
// Simple text search — in production the Context Compiler does FTS5
|
|
149
|
+
const q = (params.query as string).toLowerCase()
|
|
150
|
+
const matches = agents.filter((a: any) => {
|
|
151
|
+
const text = `${a.name} ${a.description}`.toLowerCase()
|
|
152
|
+
return q.split(" ").some((w) => text.includes(w))
|
|
153
|
+
})
|
|
154
|
+
|
|
155
|
+
return JSON.stringify({ agents: matches.slice(0, 5) })
|
|
156
|
+
},
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// ─── archive_agent ────────────────────────────────────────────────────────────
|
|
160
|
+
|
|
161
|
+
export const archiveAgentNative: Tool = {
|
|
162
|
+
name: "archive_agent",
|
|
163
|
+
description: "Archiva un agente worker que ya no es necesario.",
|
|
164
|
+
parameters: {
|
|
165
|
+
type: "object",
|
|
166
|
+
properties: {
|
|
167
|
+
agent_id: { type: "string", description: "ID del agente a archivar" },
|
|
168
|
+
reason: { type: "string", description: "Motivo del archivado" },
|
|
169
|
+
},
|
|
170
|
+
required: ["agent_id"],
|
|
171
|
+
},
|
|
172
|
+
execute: async (params: Record<string, unknown>) => {
|
|
173
|
+
const db = getDb()
|
|
174
|
+
db.query(
|
|
175
|
+
"UPDATE agents SET status = 'archived', updated_at = unixepoch() WHERE id = ? AND is_coordinator = 0"
|
|
176
|
+
).run(params.agent_id as string)
|
|
177
|
+
return JSON.stringify({ ok: true, agent_id: params.agent_id })
|
|
178
|
+
},
|
|
179
|
+
}
|