@agent-native/core 0.7.7 → 0.7.11
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/dist/agent/engine/ai-sdk-engine.d.ts +14 -2
- package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.js +70 -54
- package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts +1 -6
- package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
- package/dist/agent/engine/anthropic-engine.js +3 -14
- package/dist/agent/engine/anthropic-engine.js.map +1 -1
- package/dist/agent/engine/builtin.d.ts.map +1 -1
- package/dist/agent/engine/builtin.js +3 -0
- package/dist/agent/engine/builtin.js.map +1 -1
- package/dist/agent/engine/translate-ai-sdk.d.ts +35 -10
- package/dist/agent/engine/translate-ai-sdk.d.ts.map +1 -1
- package/dist/agent/engine/translate-ai-sdk.js +190 -91
- package/dist/agent/engine/translate-ai-sdk.js.map +1 -1
- package/dist/agent/engine/types.d.ts +10 -1
- package/dist/agent/engine/types.d.ts.map +1 -1
- package/dist/agent/production-agent.d.ts +15 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +78 -21
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/thread-data-builder.js +1 -1
- package/dist/agent/thread-data-builder.js.map +1 -1
- package/dist/agent/types.d.ts +4 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/application-state/script-helpers.d.ts +12 -5
- package/dist/application-state/script-helpers.d.ts.map +1 -1
- package/dist/application-state/script-helpers.js +41 -20
- package/dist/application-state/script-helpers.js.map +1 -1
- package/dist/catalog.json +15 -0
- package/dist/chat-threads/store.d.ts.map +1 -1
- package/dist/chat-threads/store.js +7 -5
- package/dist/chat-threads/store.js.map +1 -1
- package/dist/checkpoints/index.d.ts +3 -0
- package/dist/checkpoints/index.d.ts.map +1 -0
- package/dist/checkpoints/index.js +3 -0
- package/dist/checkpoints/index.js.map +1 -0
- package/dist/checkpoints/service.d.ts +6 -0
- package/dist/checkpoints/service.d.ts.map +1 -0
- package/dist/checkpoints/service.js +107 -0
- package/dist/checkpoints/service.js.map +1 -0
- package/dist/checkpoints/store.d.ts +27 -0
- package/dist/checkpoints/store.d.ts.map +1 -0
- package/dist/checkpoints/store.js +92 -0
- package/dist/checkpoints/store.js.map +1 -0
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +85 -1
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/index.js +46 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/templates-meta.d.ts.map +1 -1
- package/dist/cli/templates-meta.js +33 -0
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +3 -1
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +15 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +145 -67
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/CommandMenu.d.ts.map +1 -1
- package/dist/client/CommandMenu.js +9 -5
- package/dist/client/CommandMenu.js.map +1 -1
- package/dist/client/ConnectBuilderCard.js +1 -1
- package/dist/client/ConnectBuilderCard.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +78 -4
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts +6 -0
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +4 -0
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +12 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +71 -3
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/notifications/NotificationsBell.d.ts +23 -0
- package/dist/client/notifications/NotificationsBell.d.ts.map +1 -0
- package/dist/client/notifications/NotificationsBell.js +165 -0
- package/dist/client/notifications/NotificationsBell.js.map +1 -0
- package/dist/client/notifications/index.d.ts +2 -0
- package/dist/client/notifications/index.d.ts.map +1 -0
- package/dist/client/notifications/index.js +2 -0
- package/dist/client/notifications/index.js.map +1 -0
- package/dist/client/onboarding/OnboardingPanel.js +6 -3
- package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
- package/dist/client/progress/RunsTray.d.ts +18 -0
- package/dist/client/progress/RunsTray.d.ts.map +1 -0
- package/dist/client/progress/RunsTray.js +70 -0
- package/dist/client/progress/RunsTray.js.map +1 -0
- package/dist/client/progress/index.d.ts +2 -0
- package/dist/client/progress/index.d.ts.map +1 -0
- package/dist/client/progress/index.js +2 -0
- package/dist/client/progress/index.js.map +1 -0
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +19 -4
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/settings/AutomationsSection.d.ts +2 -0
- package/dist/client/settings/AutomationsSection.d.ts.map +1 -0
- package/dist/client/settings/AutomationsSection.js +214 -0
- package/dist/client/settings/AutomationsSection.js.map +1 -0
- package/dist/client/settings/ComingSoonSection.d.ts.map +1 -1
- package/dist/client/settings/ComingSoonSection.js +2 -1
- package/dist/client/settings/ComingSoonSection.js.map +1 -1
- package/dist/client/settings/LLMSection.d.ts.map +1 -1
- package/dist/client/settings/LLMSection.js +137 -10
- package/dist/client/settings/LLMSection.js.map +1 -1
- package/dist/client/settings/SecretsSection.d.ts.map +1 -1
- package/dist/client/settings/SecretsSection.js +122 -3
- package/dist/client/settings/SecretsSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +140 -11
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.js +2 -2
- package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
- package/dist/client/use-pausing-interval.d.ts +11 -0
- package/dist/client/use-pausing-interval.d.ts.map +1 -0
- package/dist/client/use-pausing-interval.js +49 -0
- package/dist/client/use-pausing-interval.js.map +1 -0
- package/dist/db/client.d.ts +26 -0
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +84 -2
- package/dist/db/client.js.map +1 -1
- package/dist/db/drizzle-config.d.ts +33 -0
- package/dist/db/drizzle-config.d.ts.map +1 -0
- package/dist/db/drizzle-config.js +132 -0
- package/dist/db/drizzle-config.js.map +1 -0
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +11 -6
- package/dist/db/migrations.js.map +1 -1
- package/dist/deploy/build.js +2 -1
- package/dist/deploy/build.js.map +1 -1
- package/dist/event-bus/bus.d.ts +20 -0
- package/dist/event-bus/bus.d.ts.map +1 -0
- package/dist/event-bus/bus.js +108 -0
- package/dist/event-bus/bus.js.map +1 -0
- package/dist/event-bus/index.d.ts +4 -0
- package/dist/event-bus/index.d.ts.map +1 -0
- package/dist/event-bus/index.js +3 -0
- package/dist/event-bus/index.js.map +1 -0
- package/dist/event-bus/registry.d.ts +22 -0
- package/dist/event-bus/registry.d.ts.map +1 -0
- package/dist/event-bus/registry.js +63 -0
- package/dist/event-bus/registry.js.map +1 -0
- package/dist/event-bus/types.d.ts +27 -0
- package/dist/event-bus/types.d.ts.map +1 -0
- package/dist/event-bus/types.js +2 -0
- package/dist/event-bus/types.js.map +1 -0
- package/dist/integrations/config-store.d.ts.map +1 -1
- package/dist/integrations/config-store.js +16 -12
- package/dist/integrations/config-store.js.map +1 -1
- package/dist/integrations/google-docs-poller.d.ts.map +1 -1
- package/dist/integrations/google-docs-poller.js +5 -1
- package/dist/integrations/google-docs-poller.js.map +1 -1
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +7 -3
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/notifications/actions.d.ts +10 -0
- package/dist/notifications/actions.d.ts.map +1 -0
- package/dist/notifications/actions.js +114 -0
- package/dist/notifications/actions.js.map +1 -0
- package/dist/notifications/channels.d.ts +15 -0
- package/dist/notifications/channels.d.ts.map +1 -0
- package/dist/notifications/channels.js +97 -0
- package/dist/notifications/channels.js.map +1 -0
- package/dist/notifications/index.d.ts +4 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +3 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/notifications/registry.d.ts +9 -0
- package/dist/notifications/registry.d.ts.map +1 -0
- package/dist/notifications/registry.js +146 -0
- package/dist/notifications/registry.js.map +1 -0
- package/dist/notifications/routes.d.ts +34 -0
- package/dist/notifications/routes.d.ts.map +1 -0
- package/dist/notifications/routes.js +69 -0
- package/dist/notifications/routes.js.map +1 -0
- package/dist/notifications/store.d.ts +25 -0
- package/dist/notifications/store.d.ts.map +1 -0
- package/dist/notifications/store.js +158 -0
- package/dist/notifications/store.js.map +1 -0
- package/dist/notifications/types.d.ts +43 -0
- package/dist/notifications/types.d.ts.map +1 -0
- package/dist/notifications/types.js +2 -0
- package/dist/notifications/types.js.map +1 -0
- package/dist/org/handlers.d.ts.map +1 -1
- package/dist/org/handlers.js +7 -26
- package/dist/org/handlers.js.map +1 -1
- package/dist/progress/actions.d.ts +8 -0
- package/dist/progress/actions.d.ts.map +1 -0
- package/dist/progress/actions.js +158 -0
- package/dist/progress/actions.js.map +1 -0
- package/dist/progress/index.d.ts +3 -0
- package/dist/progress/index.d.ts.map +1 -0
- package/dist/progress/index.js +2 -0
- package/dist/progress/index.js.map +1 -0
- package/dist/progress/registry.d.ts +22 -0
- package/dist/progress/registry.d.ts.map +1 -0
- package/dist/progress/registry.js +98 -0
- package/dist/progress/registry.js.map +1 -0
- package/dist/progress/routes.d.ts +21 -0
- package/dist/progress/routes.d.ts.map +1 -0
- package/dist/progress/routes.js +59 -0
- package/dist/progress/routes.js.map +1 -0
- package/dist/progress/store.d.ts +7 -0
- package/dist/progress/store.d.ts.map +1 -0
- package/dist/progress/store.js +195 -0
- package/dist/progress/store.js.map +1 -0
- package/dist/progress/types.d.ts +49 -0
- package/dist/progress/types.d.ts.map +1 -0
- package/dist/progress/types.js +7 -0
- package/dist/progress/types.js.map +1 -0
- package/dist/resources/store.d.ts.map +1 -1
- package/dist/resources/store.js +19 -15
- package/dist/resources/store.js.map +1 -1
- package/dist/secrets/index.d.ts +3 -2
- package/dist/secrets/index.d.ts.map +1 -1
- package/dist/secrets/index.js +3 -2
- package/dist/secrets/index.js.map +1 -1
- package/dist/secrets/routes.d.ts +41 -2
- package/dist/secrets/routes.d.ts.map +1 -1
- package/dist/secrets/routes.js +167 -1
- package/dist/secrets/routes.js.map +1 -1
- package/dist/secrets/schema.d.ts +39 -1
- package/dist/secrets/schema.d.ts.map +1 -1
- package/dist/secrets/schema.js +6 -0
- package/dist/secrets/schema.js.map +1 -1
- package/dist/secrets/storage.d.ts +26 -0
- package/dist/secrets/storage.d.ts.map +1 -1
- package/dist/secrets/storage.js +111 -5
- package/dist/secrets/storage.js.map +1 -1
- package/dist/secrets/substitution.d.ts +39 -0
- package/dist/secrets/substitution.d.ts.map +1 -0
- package/dist/secrets/substitution.js +93 -0
- package/dist/secrets/substitution.js.map +1 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +1657 -1410
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/auth.d.ts +11 -0
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +74 -21
- package/dist/server/auth.js.map +1 -1
- package/dist/server/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js +34 -16
- package/dist/server/better-auth-instance.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +115 -1
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/email-templates.d.ts +43 -0
- package/dist/server/email-templates.d.ts.map +1 -0
- package/dist/server/email-templates.js +86 -0
- package/dist/server/email-templates.js.map +1 -0
- package/dist/server/framework-request-handler.d.ts +15 -0
- package/dist/server/framework-request-handler.d.ts.map +1 -1
- package/dist/server/framework-request-handler.js +64 -1
- package/dist/server/framework-request-handler.js.map +1 -1
- package/dist/server/onboarding-html.d.ts +11 -0
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +275 -16
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/schema-prompt.d.ts.map +1 -1
- package/dist/server/schema-prompt.js +5 -0
- package/dist/server/schema-prompt.js.map +1 -1
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +1 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/truncate.d.ts +8 -0
- package/dist/shared/truncate.d.ts.map +1 -0
- package/dist/shared/truncate.js +12 -0
- package/dist/shared/truncate.js.map +1 -0
- package/dist/templates/default/.agents/skills/agent-engines/SKILL.md +60 -4
- package/dist/templates/default/.agents/skills/notifications/SKILL.md +95 -0
- package/dist/templates/default/.agents/skills/progress/SKILL.md +97 -0
- package/dist/templates/default/AGENTS.md +12 -10
- package/dist/templates/default/package.json +10 -10
- package/dist/templates/workspace-core/package.json +5 -5
- package/dist/templates/workspace-root/package.json +1 -1
- package/dist/templates/workspace-root/tsconfig.base.json +1 -2
- package/dist/tools/fetch-tool.d.ts +22 -0
- package/dist/tools/fetch-tool.d.ts.map +1 -0
- package/dist/tools/fetch-tool.js +156 -0
- package/dist/tools/fetch-tool.js.map +1 -0
- package/dist/tracking/index.d.ts +4 -0
- package/dist/tracking/index.d.ts.map +1 -0
- package/dist/tracking/index.js +3 -0
- package/dist/tracking/index.js.map +1 -0
- package/dist/tracking/providers.d.ts +15 -0
- package/dist/tracking/providers.d.ts.map +1 -0
- package/dist/tracking/providers.js +195 -0
- package/dist/tracking/providers.js.map +1 -0
- package/dist/tracking/registry.d.ts +10 -0
- package/dist/tracking/registry.d.ts.map +1 -0
- package/dist/tracking/registry.js +75 -0
- package/dist/tracking/registry.js.map +1 -0
- package/dist/tracking/types.d.ts +13 -0
- package/dist/tracking/types.d.ts.map +1 -0
- package/dist/tracking/types.js +2 -0
- package/dist/tracking/types.js.map +1 -0
- package/dist/triggers/actions.d.ts +10 -0
- package/dist/triggers/actions.d.ts.map +1 -0
- package/dist/triggers/actions.js +277 -0
- package/dist/triggers/actions.js.map +1 -0
- package/dist/triggers/condition-evaluator.d.ts +15 -0
- package/dist/triggers/condition-evaluator.d.ts.map +1 -0
- package/dist/triggers/condition-evaluator.js +107 -0
- package/dist/triggers/condition-evaluator.js.map +1 -0
- package/dist/triggers/dispatcher.d.ts +32 -0
- package/dist/triggers/dispatcher.d.ts.map +1 -0
- package/dist/triggers/dispatcher.js +291 -0
- package/dist/triggers/dispatcher.js.map +1 -0
- package/dist/triggers/index.d.ts +5 -0
- package/dist/triggers/index.d.ts.map +1 -0
- package/dist/triggers/index.js +4 -0
- package/dist/triggers/index.js.map +1 -0
- package/dist/triggers/types.d.ts +35 -0
- package/dist/triggers/types.d.ts.map +1 -0
- package/dist/triggers/types.js +9 -0
- package/dist/triggers/types.js.map +1 -0
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +66 -16
- package/dist/vite/client.js.map +1 -1
- package/docs/content/automations.md +239 -0
- package/docs/content/multi-tenancy.md +88 -0
- package/docs/content/notifications.md +199 -0
- package/docs/content/progress.md +176 -0
- package/docs/content/tracking.md +168 -0
- package/package.json +54 -35
- package/src/templates/default/.agents/skills/agent-engines/SKILL.md +60 -4
- package/src/templates/default/.agents/skills/notifications/SKILL.md +95 -0
- package/src/templates/default/.agents/skills/progress/SKILL.md +97 -0
- package/src/templates/default/AGENTS.md +12 -10
- package/src/templates/default/package.json +10 -10
- package/src/templates/workspace-core/package.json +5 -5
- package/src/templates/workspace-root/package.json +1 -1
- package/src/templates/workspace-root/tsconfig.base.json +1 -2
- package/tsconfig.base.json +1 -1
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Haiku-based natural-language condition evaluator.
|
|
3
|
+
*
|
|
4
|
+
* Given an event payload and a natural-language condition string, asks
|
|
5
|
+
* Haiku whether the condition is satisfied. Results are memoized to
|
|
6
|
+
* avoid redundant API calls for identical (condition, payload) pairs.
|
|
7
|
+
*/
|
|
8
|
+
import { createHash } from "node:crypto";
|
|
9
|
+
// LRU cache: hash → { result: boolean, expiresAt: number }
|
|
10
|
+
const _cache = new Map();
|
|
11
|
+
const CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes
|
|
12
|
+
const MAX_CACHE_SIZE = 500;
|
|
13
|
+
function cacheKey(condition, payload) {
|
|
14
|
+
const raw = JSON.stringify({ condition, payload });
|
|
15
|
+
return createHash("sha256").update(raw).digest("hex").slice(0, 32);
|
|
16
|
+
}
|
|
17
|
+
function pruneCache() {
|
|
18
|
+
if (_cache.size <= MAX_CACHE_SIZE)
|
|
19
|
+
return;
|
|
20
|
+
const now = Date.now();
|
|
21
|
+
for (const [key, entry] of _cache) {
|
|
22
|
+
if (entry.expiresAt < now)
|
|
23
|
+
_cache.delete(key);
|
|
24
|
+
}
|
|
25
|
+
// If still too large, drop oldest entries
|
|
26
|
+
if (_cache.size > MAX_CACHE_SIZE) {
|
|
27
|
+
const excess = _cache.size - MAX_CACHE_SIZE;
|
|
28
|
+
let deleted = 0;
|
|
29
|
+
for (const key of _cache.keys()) {
|
|
30
|
+
if (deleted >= excess)
|
|
31
|
+
break;
|
|
32
|
+
_cache.delete(key);
|
|
33
|
+
deleted++;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Evaluate whether a natural-language condition matches an event payload.
|
|
39
|
+
* Returns true if the condition is empty/undefined (unconditional trigger).
|
|
40
|
+
*/
|
|
41
|
+
export async function evaluateCondition(condition, payload, apiKey) {
|
|
42
|
+
if (!condition || !condition.trim())
|
|
43
|
+
return true;
|
|
44
|
+
const key = cacheKey(condition, payload);
|
|
45
|
+
const cached = _cache.get(key);
|
|
46
|
+
if (cached && cached.expiresAt > Date.now()) {
|
|
47
|
+
return cached.result;
|
|
48
|
+
}
|
|
49
|
+
const result = await callHaikuClassifier(condition, payload, apiKey);
|
|
50
|
+
pruneCache();
|
|
51
|
+
_cache.set(key, { result, expiresAt: Date.now() + CACHE_TTL_MS });
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
async function callHaikuClassifier(condition, payload, apiKey) {
|
|
55
|
+
let payloadStr;
|
|
56
|
+
try {
|
|
57
|
+
payloadStr = JSON.stringify(payload, null, 2);
|
|
58
|
+
if (payloadStr.length > 4000) {
|
|
59
|
+
payloadStr = payloadStr.slice(0, 4000) + "\n... (truncated)";
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
payloadStr = String(payload);
|
|
64
|
+
}
|
|
65
|
+
const prompt = `You are a condition evaluator. Given an event payload and a natural-language condition, determine if the condition is satisfied.
|
|
66
|
+
|
|
67
|
+
Event payload:
|
|
68
|
+
${payloadStr}
|
|
69
|
+
|
|
70
|
+
Condition: "${condition}"
|
|
71
|
+
|
|
72
|
+
Does the event payload satisfy this condition? Respond with ONLY "yes" or "no".`;
|
|
73
|
+
try {
|
|
74
|
+
const res = await fetch("https://api.anthropic.com/v1/messages", {
|
|
75
|
+
method: "POST",
|
|
76
|
+
headers: {
|
|
77
|
+
"Content-Type": "application/json",
|
|
78
|
+
"x-api-key": apiKey,
|
|
79
|
+
"anthropic-version": "2023-06-01",
|
|
80
|
+
},
|
|
81
|
+
body: JSON.stringify({
|
|
82
|
+
model: "claude-haiku-4-5-20251001",
|
|
83
|
+
max_tokens: 10,
|
|
84
|
+
messages: [{ role: "user", content: prompt }],
|
|
85
|
+
}),
|
|
86
|
+
});
|
|
87
|
+
if (!res.ok) {
|
|
88
|
+
console.error(`[triggers] Condition eval failed: ${res.status} ${res.statusText}`);
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
const data = (await res.json());
|
|
92
|
+
const text = data.content
|
|
93
|
+
?.find((b) => b.type === "text")
|
|
94
|
+
?.text?.trim()
|
|
95
|
+
.toLowerCase() ?? "";
|
|
96
|
+
return text.startsWith("yes");
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
console.error("[triggers] Condition eval error:", err);
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/** Clear the condition cache (for testing). */
|
|
104
|
+
export function __clearConditionCache() {
|
|
105
|
+
_cache.clear();
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=condition-evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"condition-evaluator.js","sourceRoot":"","sources":["../../src/triggers/condition-evaluator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,2DAA2D;AAC3D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkD,CAAC;AACzE,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAChD,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,SAAS,QAAQ,CAAC,SAAiB,EAAE,OAAgB;IACnD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IACnD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,MAAM,CAAC,IAAI,IAAI,cAAc;QAAE,OAAO;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,SAAS,GAAG,GAAG;YAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IACD,0CAA0C;IAC1C,IAAI,MAAM,CAAC,IAAI,GAAG,cAAc,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,GAAG,cAAc,CAAC;QAC5C,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAChC,IAAI,OAAO,IAAI,MAAM;gBAAE,MAAM;YAC7B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnB,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAA6B,EAC7B,OAAgB,EAChB,MAAc;IAEd,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IAEjD,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAErE,UAAU,EAAE,CAAC;IACb,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC;IAClE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,SAAiB,EACjB,OAAgB,EAChB,MAAc;IAEd,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QACH,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9C,IAAI,UAAU,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YAC7B,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,mBAAmB,CAAC;QAC/D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,MAAM,GAAG;;;EAGf,UAAU;;cAEE,SAAS;;gFAEyD,CAAC;IAE/E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,uCAAuC,EAAE;YAC/D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,MAAM;gBACnB,mBAAmB,EAAE,YAAY;aAClC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,2BAA2B;gBAClC,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;aAC9C,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CACX,qCAAqC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CACpE,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAE7B,CAAC;QACF,MAAM,IAAI,GACR,IAAI,CAAC,OAAO;YACV,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;YAChC,EAAE,IAAI,EAAE,IAAI,EAAE;aACb,WAAW,EAAE,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,qBAAqB;IACnC,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trigger dispatcher — bridges the event bus to the automation system.
|
|
3
|
+
*
|
|
4
|
+
* On startup, loads all event-triggered jobs from the resources store,
|
|
5
|
+
* subscribes to their events, and dispatches them (condition eval → agent
|
|
6
|
+
* loop) when matching events fire.
|
|
7
|
+
*/
|
|
8
|
+
import { type ActionEntry } from "../agent/production-agent.js";
|
|
9
|
+
import type { TriggerFrontmatter } from "./types.js";
|
|
10
|
+
declare function parseTriggerFrontmatter(content: string): {
|
|
11
|
+
meta: TriggerFrontmatter;
|
|
12
|
+
body: string;
|
|
13
|
+
};
|
|
14
|
+
declare function buildTriggerContent(meta: TriggerFrontmatter, body: string): string;
|
|
15
|
+
export interface TriggerDispatcherDeps {
|
|
16
|
+
getActions: () => Record<string, ActionEntry>;
|
|
17
|
+
getSystemPrompt: (owner: string) => Promise<string>;
|
|
18
|
+
apiKey?: string;
|
|
19
|
+
model: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Initialize the trigger dispatcher. Call once at server startup.
|
|
23
|
+
* Loads all event-triggered jobs and subscribes to their events.
|
|
24
|
+
*/
|
|
25
|
+
export declare function initTriggerDispatcher(deps: TriggerDispatcherDeps): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Refresh event subscriptions from the resource store.
|
|
28
|
+
* Call after creating/updating triggers.
|
|
29
|
+
*/
|
|
30
|
+
export declare function refreshEventSubscriptions(): Promise<void>;
|
|
31
|
+
export { parseTriggerFrontmatter, buildTriggerContent };
|
|
32
|
+
//# sourceMappingURL=dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/triggers/dispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,8BAA8B,CAAC;AAKtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAKrD,iBAAS,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG;IACjD,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd,CAsFA;AAED,iBAAS,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAsB3E;AAID,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC9C,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAMD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAwB/D;AA4KD,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trigger dispatcher — bridges the event bus to the automation system.
|
|
3
|
+
*
|
|
4
|
+
* On startup, loads all event-triggered jobs from the resources store,
|
|
5
|
+
* subscribes to their events, and dispatches them (condition eval → agent
|
|
6
|
+
* loop) when matching events fire.
|
|
7
|
+
*/
|
|
8
|
+
import { subscribe } from "../event-bus/index.js";
|
|
9
|
+
import { resourceListAllOwners, resourcePut } from "../resources/store.js";
|
|
10
|
+
import { runWithRequestContext } from "../server/request-context.js";
|
|
11
|
+
import { runAgentLoop, actionsToEngineTools, getOwnerActiveApiKey, } from "../agent/production-agent.js";
|
|
12
|
+
import { createAnthropicEngine } from "../agent/engine/index.js";
|
|
13
|
+
import { createThread } from "../chat-threads/store.js";
|
|
14
|
+
import { evaluateCondition } from "./condition-evaluator.js";
|
|
15
|
+
// Re-use the job frontmatter parser — triggers extend the same format.
|
|
16
|
+
const FRONTMATTER_RE = /^---\n([\s\S]*?)\n---\n?([\s\S]*)$/;
|
|
17
|
+
function parseTriggerFrontmatter(content) {
|
|
18
|
+
const match = content.match(FRONTMATTER_RE);
|
|
19
|
+
if (!match) {
|
|
20
|
+
return {
|
|
21
|
+
meta: {
|
|
22
|
+
schedule: "",
|
|
23
|
+
enabled: false,
|
|
24
|
+
triggerType: "schedule",
|
|
25
|
+
mode: "agentic",
|
|
26
|
+
},
|
|
27
|
+
body: content,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const yamlBlock = match[1];
|
|
31
|
+
const body = match[2].trim();
|
|
32
|
+
const meta = {
|
|
33
|
+
schedule: "",
|
|
34
|
+
enabled: true,
|
|
35
|
+
triggerType: "schedule",
|
|
36
|
+
mode: "agentic",
|
|
37
|
+
};
|
|
38
|
+
for (const line of yamlBlock.split("\n")) {
|
|
39
|
+
const colonIdx = line.indexOf(":");
|
|
40
|
+
if (colonIdx === -1)
|
|
41
|
+
continue;
|
|
42
|
+
const key = line.slice(0, colonIdx).trim();
|
|
43
|
+
let value = line.slice(colonIdx + 1).trim();
|
|
44
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
45
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
46
|
+
value = value.slice(1, -1);
|
|
47
|
+
}
|
|
48
|
+
switch (key) {
|
|
49
|
+
case "schedule":
|
|
50
|
+
meta.schedule = value;
|
|
51
|
+
break;
|
|
52
|
+
case "enabled":
|
|
53
|
+
meta.enabled = value !== "false";
|
|
54
|
+
break;
|
|
55
|
+
case "triggerType":
|
|
56
|
+
meta.triggerType =
|
|
57
|
+
value === "event" || value === "schedule" ? value : "schedule";
|
|
58
|
+
break;
|
|
59
|
+
case "event":
|
|
60
|
+
meta.event = value;
|
|
61
|
+
break;
|
|
62
|
+
case "condition":
|
|
63
|
+
meta.condition = value;
|
|
64
|
+
break;
|
|
65
|
+
case "mode":
|
|
66
|
+
meta.mode =
|
|
67
|
+
value === "deterministic" || value === "agentic" ? value : "agentic";
|
|
68
|
+
break;
|
|
69
|
+
case "domain":
|
|
70
|
+
meta.domain = value;
|
|
71
|
+
break;
|
|
72
|
+
case "createdBy":
|
|
73
|
+
meta.createdBy = value;
|
|
74
|
+
break;
|
|
75
|
+
case "orgId":
|
|
76
|
+
meta.orgId = value;
|
|
77
|
+
break;
|
|
78
|
+
case "runAs":
|
|
79
|
+
meta.runAs =
|
|
80
|
+
value === "shared" || value === "creator" ? value : undefined;
|
|
81
|
+
break;
|
|
82
|
+
case "lastRun":
|
|
83
|
+
meta.lastRun = value;
|
|
84
|
+
break;
|
|
85
|
+
case "lastStatus":
|
|
86
|
+
meta.lastStatus = value;
|
|
87
|
+
break;
|
|
88
|
+
case "lastError":
|
|
89
|
+
meta.lastError = value;
|
|
90
|
+
break;
|
|
91
|
+
case "nextRun":
|
|
92
|
+
meta.nextRun = value;
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return { meta, body };
|
|
97
|
+
}
|
|
98
|
+
function buildTriggerContent(meta, body) {
|
|
99
|
+
const lines = ["---"];
|
|
100
|
+
lines.push(`schedule: "${meta.schedule}"`);
|
|
101
|
+
lines.push(`enabled: ${meta.enabled}`);
|
|
102
|
+
lines.push(`triggerType: ${meta.triggerType}`);
|
|
103
|
+
if (meta.event)
|
|
104
|
+
lines.push(`event: ${meta.event}`);
|
|
105
|
+
if (meta.condition)
|
|
106
|
+
lines.push(`condition: "${meta.condition.replace(/"/g, '\\"')}"`);
|
|
107
|
+
lines.push(`mode: ${meta.mode}`);
|
|
108
|
+
if (meta.domain)
|
|
109
|
+
lines.push(`domain: ${meta.domain}`);
|
|
110
|
+
if (meta.createdBy)
|
|
111
|
+
lines.push(`createdBy: ${meta.createdBy}`);
|
|
112
|
+
if (meta.orgId)
|
|
113
|
+
lines.push(`orgId: ${meta.orgId}`);
|
|
114
|
+
if (meta.runAs)
|
|
115
|
+
lines.push(`runAs: ${meta.runAs}`);
|
|
116
|
+
if (meta.lastRun)
|
|
117
|
+
lines.push(`lastRun: ${meta.lastRun}`);
|
|
118
|
+
if (meta.lastStatus)
|
|
119
|
+
lines.push(`lastStatus: ${meta.lastStatus}`);
|
|
120
|
+
if (meta.lastError)
|
|
121
|
+
lines.push(`lastError: "${meta.lastError.replace(/"/g, '\\"')}"`);
|
|
122
|
+
if (meta.nextRun)
|
|
123
|
+
lines.push(`nextRun: ${meta.nextRun}`);
|
|
124
|
+
lines.push("---");
|
|
125
|
+
lines.push("");
|
|
126
|
+
lines.push(body);
|
|
127
|
+
return lines.join("\n");
|
|
128
|
+
}
|
|
129
|
+
// Track active subscriptions to avoid double-subscribing
|
|
130
|
+
const _subscribedEvents = new Set();
|
|
131
|
+
let _deps = null;
|
|
132
|
+
/**
|
|
133
|
+
* Initialize the trigger dispatcher. Call once at server startup.
|
|
134
|
+
* Loads all event-triggered jobs and subscribes to their events.
|
|
135
|
+
*/
|
|
136
|
+
export async function initTriggerDispatcher(deps) {
|
|
137
|
+
_deps = deps;
|
|
138
|
+
await refreshEventSubscriptions();
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Refresh event subscriptions from the resource store.
|
|
142
|
+
* Call after creating/updating triggers.
|
|
143
|
+
*/
|
|
144
|
+
export async function refreshEventSubscriptions() {
|
|
145
|
+
try {
|
|
146
|
+
const jobResources = await resourceListAllOwners("jobs/");
|
|
147
|
+
const eventNames = new Set();
|
|
148
|
+
for (const resource of jobResources) {
|
|
149
|
+
if (!resource.path.endsWith(".md"))
|
|
150
|
+
continue;
|
|
151
|
+
const { meta } = parseTriggerFrontmatter(resource.content);
|
|
152
|
+
if (meta.triggerType === "event" && meta.event && meta.enabled) {
|
|
153
|
+
eventNames.add(meta.event);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
for (const eventName of eventNames) {
|
|
157
|
+
if (!_subscribedEvents.has(eventName)) {
|
|
158
|
+
subscribe(eventName, (payload, eventMeta) => handleEvent(eventName, payload, eventMeta));
|
|
159
|
+
_subscribedEvents.add(eventName);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
console.error("[triggers] Failed to refresh event subscriptions:", err);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
async function handleEvent(eventName, payload, eventMeta) {
|
|
168
|
+
if (!_deps)
|
|
169
|
+
return;
|
|
170
|
+
try {
|
|
171
|
+
const jobResources = await resourceListAllOwners("jobs/");
|
|
172
|
+
const matchingTriggers = jobResources.filter((r) => {
|
|
173
|
+
if (!r.path.endsWith(".md"))
|
|
174
|
+
return false;
|
|
175
|
+
const { meta } = parseTriggerFrontmatter(r.content);
|
|
176
|
+
// Scope: only dispatch triggers owned by the event's owner,
|
|
177
|
+
// or shared triggers. Prevents cross-tenant trigger execution.
|
|
178
|
+
if (eventMeta.owner &&
|
|
179
|
+
r.owner !== eventMeta.owner &&
|
|
180
|
+
r.owner !== "__shared__") {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
return (meta.triggerType === "event" &&
|
|
184
|
+
meta.event === eventName &&
|
|
185
|
+
meta.enabled &&
|
|
186
|
+
meta.lastStatus !== "running");
|
|
187
|
+
});
|
|
188
|
+
for (const resource of matchingTriggers) {
|
|
189
|
+
const { meta, body } = parseTriggerFrontmatter(resource.content);
|
|
190
|
+
if (!body.trim())
|
|
191
|
+
continue;
|
|
192
|
+
// Resolve API key for condition evaluation
|
|
193
|
+
const owner = meta.createdBy || resource.owner;
|
|
194
|
+
const userApiKey = await getOwnerActiveApiKey(owner);
|
|
195
|
+
const apiKey = userApiKey || _deps.apiKey || process.env.ANTHROPIC_API_KEY;
|
|
196
|
+
if (!apiKey) {
|
|
197
|
+
console.warn(`[triggers] No API key for trigger "${resource.path}" — skipping`);
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
// Evaluate condition
|
|
201
|
+
const matches = await evaluateCondition(meta.condition, payload, apiKey);
|
|
202
|
+
if (!matches)
|
|
203
|
+
continue;
|
|
204
|
+
// Dispatch
|
|
205
|
+
if (meta.mode === "agentic") {
|
|
206
|
+
await dispatchAgentic(resource, meta, body, payload, eventMeta, apiKey);
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
console.warn(`[triggers] Deterministic mode not yet implemented for "${resource.path}" — skipping`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
catch (err) {
|
|
214
|
+
console.error(`[triggers] Error handling event "${eventName}":`, err);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
async function dispatchAgentic(resource, meta, body, payload, eventMeta, apiKey) {
|
|
218
|
+
if (!_deps)
|
|
219
|
+
return;
|
|
220
|
+
const triggerName = resource.path.replace(/^jobs\//, "").replace(/\.md$/, "");
|
|
221
|
+
const now = new Date();
|
|
222
|
+
// Mark as running
|
|
223
|
+
meta.lastRun = now.toISOString();
|
|
224
|
+
meta.lastStatus = "running";
|
|
225
|
+
meta.lastError = undefined;
|
|
226
|
+
await resourcePut(resource.owner, resource.path, buildTriggerContent(meta, body));
|
|
227
|
+
const jobUserEmail = meta.createdBy || resource.owner;
|
|
228
|
+
const jobOrgId = meta.orgId ?? undefined;
|
|
229
|
+
await runWithRequestContext({ userEmail: jobUserEmail, orgId: jobOrgId }, async () => {
|
|
230
|
+
try {
|
|
231
|
+
const actions = _deps.getActions();
|
|
232
|
+
const systemPrompt = await _deps.getSystemPrompt(resource.owner);
|
|
233
|
+
const tools = actionsToEngineTools(actions);
|
|
234
|
+
const engine = createAnthropicEngine({ apiKey });
|
|
235
|
+
const thread = await createThread(`Trigger: ${triggerName} — ${now.toLocaleDateString()}`);
|
|
236
|
+
let payloadStr;
|
|
237
|
+
try {
|
|
238
|
+
payloadStr = JSON.stringify(payload, null, 2);
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
payloadStr = String(payload);
|
|
242
|
+
}
|
|
243
|
+
const triggerText = `[Automation Trigger: ${triggerName}]
|
|
244
|
+
Event: ${meta.event}
|
|
245
|
+
Event ID: ${eventMeta.eventId}
|
|
246
|
+
Fired at: ${eventMeta.emittedAt}
|
|
247
|
+
|
|
248
|
+
Event payload:
|
|
249
|
+
${payloadStr}
|
|
250
|
+
|
|
251
|
+
Execute the following automation instructions:
|
|
252
|
+
|
|
253
|
+
${body}`;
|
|
254
|
+
const messages = [
|
|
255
|
+
{
|
|
256
|
+
role: "user",
|
|
257
|
+
content: [{ type: "text", text: triggerText }],
|
|
258
|
+
},
|
|
259
|
+
];
|
|
260
|
+
const controller = new AbortController();
|
|
261
|
+
const timeout = setTimeout(() => controller.abort(), 5 * 60 * 1000);
|
|
262
|
+
const events = [];
|
|
263
|
+
try {
|
|
264
|
+
await runAgentLoop({
|
|
265
|
+
engine,
|
|
266
|
+
model: _deps.model,
|
|
267
|
+
systemPrompt,
|
|
268
|
+
tools,
|
|
269
|
+
messages,
|
|
270
|
+
actions,
|
|
271
|
+
send: (event) => events.push(event),
|
|
272
|
+
signal: controller.signal,
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
finally {
|
|
276
|
+
clearTimeout(timeout);
|
|
277
|
+
}
|
|
278
|
+
meta.lastStatus = "success";
|
|
279
|
+
await resourcePut(resource.owner, resource.path, buildTriggerContent(meta, body));
|
|
280
|
+
console.log(`[triggers] "${triggerName}" completed successfully`);
|
|
281
|
+
}
|
|
282
|
+
catch (err) {
|
|
283
|
+
meta.lastStatus = "error";
|
|
284
|
+
meta.lastError = err?.message?.slice(0, 200) || "Unknown error";
|
|
285
|
+
await resourcePut(resource.owner, resource.path, buildTriggerContent(meta, body));
|
|
286
|
+
console.error(`[triggers] "${triggerName}" failed:`, err?.message);
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
export { parseTriggerFrontmatter, buildTriggerContent };
|
|
291
|
+
//# sourceMappingURL=dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/triggers/dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type { TriggerFrontmatter, TriggerDispatchContext } from "./types.js";
|
|
2
|
+
export { initTriggerDispatcher, refreshEventSubscriptions, parseTriggerFrontmatter, buildTriggerContent, type TriggerDispatcherDeps, } from "./dispatcher.js";
|
|
3
|
+
export { evaluateCondition, __clearConditionCache, } from "./condition-evaluator.js";
|
|
4
|
+
export { createAutomationToolEntries } from "./actions.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/triggers/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,mBAAmB,EACnB,KAAK,qBAAqB,GAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { initTriggerDispatcher, refreshEventSubscriptions, parseTriggerFrontmatter, buildTriggerContent, } from "./dispatcher.js";
|
|
2
|
+
export { evaluateCondition, __clearConditionCache, } from "./condition-evaluator.js";
|
|
3
|
+
export { createAutomationToolEntries } from "./actions.js";
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/triggers/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,mBAAmB,GAEpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extended frontmatter for triggers (superset of JobFrontmatter).
|
|
3
|
+
*
|
|
4
|
+
* Stored as markdown resources under `jobs/` — reuses the same storage
|
|
5
|
+
* and scheduler infrastructure. Event-triggered jobs are skipped by the
|
|
6
|
+
* cron scheduler and dispatched by the event bus instead.
|
|
7
|
+
*/
|
|
8
|
+
export interface TriggerFrontmatter {
|
|
9
|
+
schedule: string;
|
|
10
|
+
enabled: boolean;
|
|
11
|
+
/** "schedule" = cron-based (legacy jobs). "event" = fires on bus event. */
|
|
12
|
+
triggerType: "schedule" | "event";
|
|
13
|
+
/** For event triggers: the event name to subscribe to. */
|
|
14
|
+
event?: string;
|
|
15
|
+
/** Natural-language condition evaluated by Haiku before dispatch. */
|
|
16
|
+
condition?: string;
|
|
17
|
+
/** "agentic" = full runAgentLoop. "deterministic" = fixed action set. */
|
|
18
|
+
mode: "agentic" | "deterministic";
|
|
19
|
+
/** Domain tag for filtering in per-template UIs. */
|
|
20
|
+
domain?: string;
|
|
21
|
+
createdBy?: string;
|
|
22
|
+
orgId?: string;
|
|
23
|
+
runAs?: "creator" | "shared";
|
|
24
|
+
lastRun?: string;
|
|
25
|
+
lastStatus?: "success" | "error" | "running" | "skipped";
|
|
26
|
+
lastError?: string;
|
|
27
|
+
nextRun?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface TriggerDispatchContext {
|
|
30
|
+
triggerName: string;
|
|
31
|
+
triggerBody: string;
|
|
32
|
+
meta: TriggerFrontmatter;
|
|
33
|
+
eventPayload?: unknown;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/triggers/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC;IAClC,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,IAAI,EAAE,SAAS,GAAG,eAAe,CAAC;IAClC,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,kBAAkB,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extended frontmatter for triggers (superset of JobFrontmatter).
|
|
3
|
+
*
|
|
4
|
+
* Stored as markdown resources under `jobs/` — reuses the same storage
|
|
5
|
+
* and scheduler infrastructure. Event-triggered jobs are skipped by the
|
|
6
|
+
* cron scheduler and dispatched by the event bus instead.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/triggers/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/vite/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,UAAU,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/vite/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,UAAU,EAAE,MAAM,MAAM,CAAC;AAoK/C,MAAM,WAAW,YAAY;IAC3B,sGAAsG;IACtG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,iDAAiD;IACjD,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,iDAAiD;IACjD,YAAY,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC1D;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjD;AA6UD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,UAAU,CA+J1E"}
|
package/dist/vite/client.js
CHANGED
|
@@ -20,6 +20,60 @@ function hasDep(pkg, cwd) {
|
|
|
20
20
|
return false;
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Build the `resolve.dedupe` list dynamically. Reads core's package.json and
|
|
25
|
+
* collects every peerDependency that the consuming app also declares. This
|
|
26
|
+
* ensures Vite resolves them from the app root, not from core's own
|
|
27
|
+
* node_modules — preventing duplicate React context / singleton issues.
|
|
28
|
+
*/
|
|
29
|
+
function getClientDedupe(cwd) {
|
|
30
|
+
// Always dedupe React internals (sub-path exports aren't in peerDeps)
|
|
31
|
+
const always = new Set(["react", "react-dom", "react-dom/client"]);
|
|
32
|
+
// Server-only packages that never run in the browser — no point deduping.
|
|
33
|
+
const serverOnly = new Set([
|
|
34
|
+
"drizzle-kit",
|
|
35
|
+
"node-pty",
|
|
36
|
+
"postgres",
|
|
37
|
+
"ws",
|
|
38
|
+
"typescript",
|
|
39
|
+
"vite",
|
|
40
|
+
"@vitejs/plugin-react-swc",
|
|
41
|
+
"tailwindcss",
|
|
42
|
+
"@tailwindcss/vite",
|
|
43
|
+
]);
|
|
44
|
+
try {
|
|
45
|
+
const corePkgPath = path.resolve(__dirname, "../../package.json");
|
|
46
|
+
const corePkg = JSON.parse(fs.readFileSync(corePkgPath, "utf-8"));
|
|
47
|
+
// Scan both peerDependencies and dependencies. Direct deps like
|
|
48
|
+
// @radix-ui/* use React internally — they must resolve against the
|
|
49
|
+
// app's React, not a second copy inside core's node_modules.
|
|
50
|
+
const coreDeps = new Set([
|
|
51
|
+
...Object.keys(corePkg.peerDependencies ?? {}),
|
|
52
|
+
...Object.keys(corePkg.dependencies ?? {}),
|
|
53
|
+
]);
|
|
54
|
+
// Read the consuming app's dependencies
|
|
55
|
+
const appPkg = JSON.parse(fs.readFileSync(path.join(cwd, "package.json"), "utf-8"));
|
|
56
|
+
const appDeps = new Set([
|
|
57
|
+
...Object.keys(appPkg.dependencies ?? {}),
|
|
58
|
+
...Object.keys(appPkg.devDependencies ?? {}),
|
|
59
|
+
]);
|
|
60
|
+
for (const dep of coreDeps) {
|
|
61
|
+
if (serverOnly.has(dep))
|
|
62
|
+
continue;
|
|
63
|
+
// Dedupe if the app also declares it, OR if it's a React-based
|
|
64
|
+
// UI library (Radix, Tanstack) that must share the app's React.
|
|
65
|
+
if (appDeps.has(dep) ||
|
|
66
|
+
dep.startsWith("@radix-ui/") ||
|
|
67
|
+
dep.startsWith("@tanstack/")) {
|
|
68
|
+
always.add(dep);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Can't read package.json — fall back to known singletons
|
|
74
|
+
}
|
|
75
|
+
return [...always];
|
|
76
|
+
}
|
|
23
77
|
/**
|
|
24
78
|
* In monorepo dev mode, resolve @agent-native/core imports to source (src/)
|
|
25
79
|
* instead of dist/ so that Vite HMR picks up changes without rebuilding.
|
|
@@ -476,9 +530,12 @@ export function defineConfig(options = {}) {
|
|
|
476
530
|
},
|
|
477
531
|
build: {
|
|
478
532
|
outDir: options.outDir ?? "dist/spa",
|
|
479
|
-
//
|
|
480
|
-
//
|
|
481
|
-
|
|
533
|
+
// Safari 18+ so esbuild's CSS minifier keeps the standard
|
|
534
|
+
// backdrop-filter. Targeting older Safari caused it to drop the
|
|
535
|
+
// unprefixed version (Safari only got unprefixed backdrop-filter in
|
|
536
|
+
// 18.0, Sept 2024) and keep just -webkit-backdrop-filter, which broke
|
|
537
|
+
// the blur in prod where the unprefixed form was expected.
|
|
538
|
+
cssTarget: ["es2020", "safari18"],
|
|
482
539
|
},
|
|
483
540
|
// Bundle all non-Node.js deps into the SSR server build.
|
|
484
541
|
// Edge runtimes (CF Workers, Deno) don't have node_modules at runtime.
|
|
@@ -528,19 +585,12 @@ export function defineConfig(options = {}) {
|
|
|
528
585
|
: {}),
|
|
529
586
|
},
|
|
530
587
|
resolve: {
|
|
531
|
-
// Dedupe
|
|
532
|
-
//
|
|
533
|
-
//
|
|
534
|
-
//
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
"react-dom",
|
|
538
|
-
"react-dom/client",
|
|
539
|
-
"@radix-ui/react-select",
|
|
540
|
-
"@radix-ui/react-popover",
|
|
541
|
-
"@radix-ui/react-tooltip",
|
|
542
|
-
"@radix-ui/react-dialog",
|
|
543
|
-
],
|
|
588
|
+
// Dedupe all client-side packages that core shares with the consuming
|
|
589
|
+
// app. In pnpm monorepos, core's devDependencies can install separate
|
|
590
|
+
// copies (linked to different React versions). Without deduping, each
|
|
591
|
+
// copy creates its own React context — QueryClientProvider, RouterProvider,
|
|
592
|
+
// Radix, etc. — causing "No provider" crashes at runtime.
|
|
593
|
+
dedupe: getClientDedupe(cwd),
|
|
544
594
|
alias: [
|
|
545
595
|
// In monorepo dev: resolve @agent-native/core to source for HMR.
|
|
546
596
|
// Uses regex with $ anchor for exact matching to prevent
|