daemora 1.0.3 → 1.0.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/LICENSE +663 -0
- package/README.md +69 -19
- package/SOUL.md +25 -24
- package/daemora-ui/README.md +11 -0
- package/package.json +12 -2
- package/skills/api-development.md +35 -0
- package/skills/artifacts-builder/SKILL.md +74 -0
- package/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
- package/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/skills/brand-guidelines.md +73 -0
- package/skills/browser.md +77 -0
- package/skills/changelog-generator.md +104 -0
- package/skills/coding.md +26 -10
- package/skills/content-research-writer.md +538 -0
- package/skills/data-analysis.md +27 -0
- package/skills/debugging.md +33 -0
- package/skills/devops.md +37 -0
- package/skills/document-docx.md +197 -0
- package/skills/document-pdf.md +294 -0
- package/skills/document-pptx.md +484 -0
- package/skills/document-xlsx.md +289 -0
- package/skills/domain-name-brainstormer.md +212 -0
- package/skills/file-organizer.md +433 -0
- package/skills/frontend-design.md +42 -0
- package/skills/image-enhancer.md +99 -0
- package/skills/invoice-organizer.md +446 -0
- package/skills/lead-research-assistant.md +199 -0
- package/skills/mcp-builder/SKILL.md +328 -0
- package/skills/mcp-builder/reference/evaluation.md +602 -0
- package/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
- package/skills/mcp-builder/reference/node_mcp_server.md +916 -0
- package/skills/mcp-builder/reference/python_mcp_server.md +752 -0
- package/skills/mcp-builder/scripts/connections.py +151 -0
- package/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/skills/meeting-insights-analyzer.md +327 -0
- package/skills/orchestration.md +93 -0
- package/skills/raffle-winner-picker.md +159 -0
- package/skills/slack-gif-creator/SKILL.md +646 -0
- package/skills/slack-gif-creator/core/color_palettes.py +302 -0
- package/skills/slack-gif-creator/core/easing.py +230 -0
- package/skills/slack-gif-creator/core/frame_composer.py +469 -0
- package/skills/slack-gif-creator/core/gif_builder.py +246 -0
- package/skills/slack-gif-creator/core/typography.py +357 -0
- package/skills/slack-gif-creator/core/validators.py +264 -0
- package/skills/slack-gif-creator/core/visual_effects.py +494 -0
- package/skills/slack-gif-creator/requirements.txt +4 -0
- package/skills/slack-gif-creator/templates/bounce.py +106 -0
- package/skills/slack-gif-creator/templates/explode.py +331 -0
- package/skills/slack-gif-creator/templates/fade.py +329 -0
- package/skills/slack-gif-creator/templates/flip.py +291 -0
- package/skills/slack-gif-creator/templates/kaleidoscope.py +211 -0
- package/skills/slack-gif-creator/templates/morph.py +329 -0
- package/skills/slack-gif-creator/templates/move.py +293 -0
- package/skills/slack-gif-creator/templates/pulse.py +268 -0
- package/skills/slack-gif-creator/templates/shake.py +127 -0
- package/skills/slack-gif-creator/templates/slide.py +291 -0
- package/skills/slack-gif-creator/templates/spin.py +269 -0
- package/skills/slack-gif-creator/templates/wiggle.py +300 -0
- package/skills/slack-gif-creator/templates/zoom.py +312 -0
- package/skills/system-admin.md +44 -0
- package/skills/tailored-resume-generator.md +345 -0
- package/skills/theme-factory/SKILL.md +59 -0
- package/skills/theme-factory/theme-showcase.pdf +0 -0
- package/skills/theme-factory/themes/arctic-frost.md +19 -0
- package/skills/theme-factory/themes/botanical-garden.md +19 -0
- package/skills/theme-factory/themes/desert-rose.md +19 -0
- package/skills/theme-factory/themes/forest-canopy.md +19 -0
- package/skills/theme-factory/themes/golden-hour.md +19 -0
- package/skills/theme-factory/themes/midnight-galaxy.md +19 -0
- package/skills/theme-factory/themes/modern-minimalist.md +19 -0
- package/skills/theme-factory/themes/ocean-depths.md +19 -0
- package/skills/theme-factory/themes/sunset-boulevard.md +19 -0
- package/skills/theme-factory/themes/tech-innovation.md +19 -0
- package/skills/video-downloader.md +99 -0
- package/skills/web-development.md +32 -0
- package/skills/webapp-testing/SKILL.md +96 -0
- package/skills/webapp-testing/examples/console_logging.py +35 -0
- package/skills/webapp-testing/examples/element_discovery.py +40 -0
- package/skills/webapp-testing/examples/static_html_automation.py +33 -0
- package/skills/webapp-testing/scripts/with_server.py +106 -0
- package/src/agents/SubAgentManager.js +57 -12
- package/src/api/openai-compat.js +212 -0
- package/src/channels/TelegramChannel.js +5 -2
- package/src/channels/index.js +7 -10
- package/src/cli.js +129 -50
- package/src/config/agentProfiles.js +1 -0
- package/src/config/default.js +10 -0
- package/src/config/models.js +317 -71
- package/src/config/permissions.js +12 -0
- package/src/core/AgentLoop.js +70 -50
- package/src/core/Compaction.js +84 -2
- package/src/core/MessageQueue.js +90 -0
- package/src/core/Task.js +13 -0
- package/src/core/TaskQueue.js +1 -1
- package/src/core/TaskRunner.js +80 -5
- package/src/index.js +328 -48
- package/src/mcp/MCPAgentRunner.js +48 -11
- package/src/mcp/MCPManager.js +40 -2
- package/src/models/ModelRouter.js +67 -1
- package/src/safety/DockerSandbox.js +212 -0
- package/src/safety/ExecApproval.js +118 -0
- package/src/scheduler/Heartbeat.js +56 -21
- package/src/services/cleanup.js +106 -0
- package/src/services/sessions.js +39 -1
- package/src/setup/wizard.js +75 -4
- package/src/skills/SkillLoader.js +104 -17
- package/src/storage/TaskStore.js +19 -1
- package/src/systemPrompt.js +171 -328
- package/src/tools/browserAutomation.js +615 -104
- package/src/tools/executeCommand.js +19 -1
- package/src/tools/index.js +6 -0
- package/src/tools/manageAgents.js +55 -4
- package/src/tools/replyWithFile.js +62 -0
- package/src/tools/screenCapture.js +12 -1
- package/src/tools/taskManager.js +164 -0
- package/src/tools/useMCP.js +3 -1
- package/src/utils/Embeddings.js +157 -10
- package/src/webhooks/WebhookHandler.js +107 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Webhook Handler — trigger agent runs via HTTP.
|
|
3
|
+
*
|
|
4
|
+
* POST /hooks/agent — full agent run (queued, returns taskId)
|
|
5
|
+
* POST /hooks/wake — lightweight heartbeat-style trigger
|
|
6
|
+
*
|
|
7
|
+
* Auth: Bearer token from WEBHOOK_TOKEN env var. Rejects if not set.
|
|
8
|
+
* Rate limit: 30 requests/minute per token.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { Router } from "express";
|
|
12
|
+
import taskQueue from "../core/TaskQueue.js";
|
|
13
|
+
|
|
14
|
+
const router = Router();
|
|
15
|
+
|
|
16
|
+
// Rate limiting state
|
|
17
|
+
const _rateLimits = new Map(); // token → { count, resetAt }
|
|
18
|
+
const RATE_LIMIT = 30;
|
|
19
|
+
const RATE_WINDOW = 60_000; // 1 minute
|
|
20
|
+
|
|
21
|
+
function checkAuth(req, res) {
|
|
22
|
+
const token = process.env.WEBHOOK_TOKEN;
|
|
23
|
+
if (!token) {
|
|
24
|
+
res.status(503).json({ error: "Webhooks not configured. Set WEBHOOK_TOKEN env var." });
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const authHeader = req.headers.authorization;
|
|
29
|
+
if (!authHeader || !authHeader.startsWith("Bearer ") || authHeader.slice(7) !== token) {
|
|
30
|
+
res.status(401).json({ error: "Invalid or missing Bearer token." });
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Rate limit check
|
|
35
|
+
const now = Date.now();
|
|
36
|
+
let bucket = _rateLimits.get(token);
|
|
37
|
+
if (!bucket || now > bucket.resetAt) {
|
|
38
|
+
bucket = { count: 0, resetAt: now + RATE_WINDOW };
|
|
39
|
+
_rateLimits.set(token, bucket);
|
|
40
|
+
}
|
|
41
|
+
bucket.count++;
|
|
42
|
+
if (bucket.count > RATE_LIMIT) {
|
|
43
|
+
res.status(429).json({ error: `Rate limit exceeded (${RATE_LIMIT}/min). Try again later.` });
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* POST /hooks/agent — trigger a full agent run.
|
|
52
|
+
* Body: { message: string, sessionId?: string, model?: string, timeoutSeconds?: number }
|
|
53
|
+
* Returns: { taskId, status: "queued" }
|
|
54
|
+
*/
|
|
55
|
+
router.post("/agent", (req, res) => {
|
|
56
|
+
if (!checkAuth(req, res)) return;
|
|
57
|
+
|
|
58
|
+
const { message, sessionId, model, timeoutSeconds } = req.body || {};
|
|
59
|
+
if (!message) {
|
|
60
|
+
return res.status(400).json({ error: "message is required" });
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const task = taskQueue.enqueue({
|
|
64
|
+
input: message,
|
|
65
|
+
channel: "webhook",
|
|
66
|
+
sessionId: sessionId || `webhook-${Date.now()}`,
|
|
67
|
+
model: model || null,
|
|
68
|
+
priority: 5,
|
|
69
|
+
type: "task",
|
|
70
|
+
timeout: timeoutSeconds ? timeoutSeconds * 1000 : undefined,
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
res.status(202).json({
|
|
74
|
+
taskId: task.id,
|
|
75
|
+
status: "queued",
|
|
76
|
+
sessionId: task.sessionId,
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* POST /hooks/wake — lightweight trigger (heartbeat-style).
|
|
82
|
+
* Body: { text: string }
|
|
83
|
+
* Returns: { taskId, status: "queued" }
|
|
84
|
+
*/
|
|
85
|
+
router.post("/wake", (req, res) => {
|
|
86
|
+
if (!checkAuth(req, res)) return;
|
|
87
|
+
|
|
88
|
+
const { text } = req.body || {};
|
|
89
|
+
if (!text) {
|
|
90
|
+
return res.status(400).json({ error: "text is required" });
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const task = taskQueue.enqueue({
|
|
94
|
+
input: `[Webhook wake event]: ${text}`,
|
|
95
|
+
channel: "webhook",
|
|
96
|
+
sessionId: `webhook-wake-${Date.now()}`,
|
|
97
|
+
priority: 3,
|
|
98
|
+
type: "task",
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
res.status(202).json({
|
|
102
|
+
taskId: task.id,
|
|
103
|
+
status: "queued",
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
export default router;
|