apteva 0.4.41 → 0.4.44
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/ActivityPage.c48n83h2.js +3 -0
- package/dist/ApiDocsPage.yzcxx5ax.js +4 -0
- package/dist/App.09yb8t0b.js +1 -0
- package/dist/App.152mbs1r.js +4 -0
- package/dist/App.3a67nx9w.js +4 -0
- package/dist/App.9epx6785.js +4 -0
- package/dist/App.d8955awp.js +4 -0
- package/dist/App.drwb57jq.js +4 -0
- package/dist/App.gssbmajb.js +4 -0
- package/dist/App.qw70pc29.js +53 -0
- package/dist/{App.7fb3e7mp.js → App.qzbx5wtj.js} +1 -1
- package/dist/App.r5serxkt.js +8 -0
- package/dist/App.tpmp9020.js +20 -0
- package/dist/App.v2wb4d7d.js +61 -0
- package/dist/App.vxmaaj0m.js +13 -0
- package/dist/App.w4p2tda9.js +4 -0
- package/dist/App.wv2ng55q.js +221 -0
- package/dist/App.yncnrn0f.js +4 -0
- package/dist/ConnectionsPage.k6cspyqq.js +3 -0
- package/dist/McpPage.cdxm48xj.js +3 -0
- package/dist/SettingsPage.evpv7c2y.js +3 -0
- package/dist/SkillsPage.pvzp6c1a.js +3 -0
- package/dist/TasksPage.6jnvbpsy.js +3 -0
- package/dist/TelemetryPage.t7vk24zc.js +3 -0
- package/dist/TestsPage.5x6658aa.js +3 -0
- package/dist/ThreadsPage.3fvhtevh.js +3 -0
- package/dist/apteva-kit.css +1 -1
- package/dist/index.html +1 -1
- package/dist/styles.css +1 -1
- package/package.json +8 -8
- package/src/db.ts +19 -9
- package/src/integrations/agentdojo.ts +1 -0
- package/src/mcp-platform.ts +418 -63
- package/src/openapi.ts +96 -0
- package/src/providers.ts +50 -24
- package/src/routes/api/agent-utils.ts +0 -1
- package/src/routes/api/agents.ts +19 -1
- package/src/routes/api/meta-agent.ts +2 -0
- package/src/routes/api/system.ts +90 -1
- package/src/routes/api/telemetry.ts +19 -1
- package/src/routes/share.ts +85 -0
- package/src/server.ts +12 -0
- package/src/web/App.tsx +89 -11
- package/src/web/components/activity/ActivityPage.tsx +14 -14
- package/src/web/components/agents/AgentCard.tsx +14 -14
- package/src/web/components/agents/AgentPanel.tsx +358 -198
- package/src/web/components/agents/AgentsView.tsx +4 -4
- package/src/web/components/agents/CreateAgentModal.tsx +21 -79
- package/src/web/components/api/ApiDocsPage.tsx +66 -66
- package/src/web/components/auth/CreateAccountStep.tsx +16 -16
- package/src/web/components/auth/LoginPage.tsx +10 -10
- package/src/web/components/common/LoadingSpinner.tsx +2 -2
- package/src/web/components/common/Modal.tsx +8 -8
- package/src/web/components/common/Select.tsx +9 -9
- package/src/web/components/connections/ConnectionsPage.tsx +4 -4
- package/src/web/components/connections/IntegrationsTab.tsx +18 -18
- package/src/web/components/connections/OverviewTab.tsx +13 -13
- package/src/web/components/connections/TriggersTab.tsx +99 -99
- package/src/web/components/dashboard/Dashboard.tsx +32 -32
- package/src/web/components/layout/Header.tsx +50 -34
- package/src/web/components/layout/Sidebar.tsx +34 -15
- package/src/web/components/mcp/IntegrationsPanel.tsx +40 -40
- package/src/web/components/mcp/McpPage.tsx +208 -208
- package/src/web/components/meta-agent/MetaAgent.tsx +12 -10
- package/src/web/components/onboarding/OnboardingWizard.tsx +25 -25
- package/src/web/components/settings/SettingsPage.tsx +258 -175
- package/src/web/components/skills/SkillsPage.tsx +88 -88
- package/src/web/components/tasks/TasksPage.tsx +339 -54
- package/src/web/components/telemetry/TelemetryPage.tsx +135 -64
- package/src/web/components/tests/TestsPage.tsx +50 -50
- package/src/web/components/threads/ThreadsPage.tsx +23 -21
- package/src/web/context/ProjectContext.tsx +6 -1
- package/src/web/context/ThemeContext.tsx +69 -0
- package/src/web/context/index.ts +2 -0
- package/src/web/styles.css +5 -3
- package/src/web/themes.ts +99 -0
- package/src/web/types.ts +0 -4
- package/dist/ActivityPage.7907h64p.js +0 -3
- package/dist/ApiDocsPage.k3jjenpq.js +0 -4
- package/dist/App.01nq20st.js +0 -4
- package/dist/App.1maqvamf.js +0 -4
- package/dist/App.2yjrh32f.js +0 -4
- package/dist/App.3qw8nben.js +0 -20
- package/dist/App.7sy3wq8c.js +0 -4
- package/dist/App.apjrmctz.js +0 -57
- package/dist/App.av6t2yhe.js +0 -4
- package/dist/App.jqj5a094.js +0 -46
- package/dist/App.mc7xf85h.js +0 -4
- package/dist/App.myxqcj9x.js +0 -4
- package/dist/App.nm91r1mp.js +0 -13
- package/dist/App.p02f4ret.js +0 -1
- package/dist/App.qcknavjz.js +0 -221
- package/dist/App.vc7vfhg4.js +0 -4
- package/dist/App.z4s9zkw5.js +0 -4
- package/dist/ConnectionsPage.z1pw5xe2.js +0 -3
- package/dist/McpPage.8vc97z0b.js +0 -3
- package/dist/SettingsPage.p61bz8kd.js +0 -3
- package/dist/SkillsPage.r9x43g3g.js +0 -3
- package/dist/TasksPage.1e0zkye4.js +0 -3
- package/dist/TelemetryPage.p9vbe4gf.js +0 -3
- package/dist/TestsPage.d4xy504e.js +0 -3
- package/dist/ThreadsPage.m016am3x.js +0 -3
|
@@ -594,9 +594,9 @@ export function TriggersTab() {
|
|
|
594
594
|
|
|
595
595
|
if (providers.length === 0 && !triggersLoading) {
|
|
596
596
|
return (
|
|
597
|
-
<div className="bg-[
|
|
598
|
-
<p className="text-[
|
|
599
|
-
<p className="text-sm text-[
|
|
597
|
+
<div className="bg-[var(--color-surface)] border border-[var(--color-border)] rounded-lg p-8 text-center">
|
|
598
|
+
<p className="text-[var(--color-text-muted)]">No trigger providers configured.</p>
|
|
599
|
+
<p className="text-sm text-[var(--color-text-faint)] mt-1">Add API keys for Composio or AgentDojo in Settings to enable triggers.</p>
|
|
600
600
|
</div>
|
|
601
601
|
);
|
|
602
602
|
}
|
|
@@ -614,8 +614,8 @@ export function TriggersTab() {
|
|
|
614
614
|
{/* Provider Selector — only show if multiple configured */}
|
|
615
615
|
{providers.length > 1 && (
|
|
616
616
|
<div className="flex items-center gap-2">
|
|
617
|
-
<span className="text-xs text-[
|
|
618
|
-
<div className="flex gap-1 bg-[
|
|
617
|
+
<span className="text-xs text-[var(--color-text-muted)]">Provider:</span>
|
|
618
|
+
<div className="flex gap-1 bg-[var(--color-surface)] border border-[var(--color-border)] rounded-lg p-0.5">
|
|
619
619
|
{providers.map(p => (
|
|
620
620
|
<button
|
|
621
621
|
key={p.id}
|
|
@@ -627,8 +627,8 @@ export function TriggersTab() {
|
|
|
627
627
|
}}
|
|
628
628
|
className={`px-3 py-1 rounded text-xs font-medium transition ${
|
|
629
629
|
selectedProvider === p.id
|
|
630
|
-
? "bg-[
|
|
631
|
-
: "text-[
|
|
630
|
+
? "bg-[var(--color-surface-raised)] text-white"
|
|
631
|
+
: "text-[var(--color-text-muted)] hover:text-[var(--color-text-secondary)]"
|
|
632
632
|
}`}
|
|
633
633
|
>
|
|
634
634
|
{p.name}
|
|
@@ -642,19 +642,19 @@ export function TriggersTab() {
|
|
|
642
642
|
{!isAgentDojo && (
|
|
643
643
|
<section>
|
|
644
644
|
<div className="flex items-center justify-between mb-3">
|
|
645
|
-
<h3 className="text-sm font-medium text-[
|
|
645
|
+
<h3 className="text-sm font-medium text-[var(--color-text-secondary)]">
|
|
646
646
|
Subscriptions ({subscriptions.length})
|
|
647
647
|
</h3>
|
|
648
648
|
<button
|
|
649
649
|
onClick={() => setShowAddSub(true)}
|
|
650
|
-
className="text-xs bg-[
|
|
650
|
+
className="text-xs bg-[var(--color-surface-raised)] hover:bg-[var(--color-surface-raised)] border border-[var(--color-border-light)] hover:border-[var(--color-accent)] px-3 py-1.5 rounded transition"
|
|
651
651
|
>
|
|
652
652
|
+ Add Subscription
|
|
653
653
|
</button>
|
|
654
654
|
</div>
|
|
655
655
|
|
|
656
656
|
{subscriptions.length === 0 ? (
|
|
657
|
-
<div className="bg-[
|
|
657
|
+
<div className="bg-[var(--color-surface)] border border-[var(--color-border)] rounded-lg p-6 text-center text-[var(--color-text-muted)] text-sm">
|
|
658
658
|
No subscriptions yet. Add one to route trigger events to an agent.
|
|
659
659
|
</div>
|
|
660
660
|
) : (
|
|
@@ -662,15 +662,15 @@ export function TriggersTab() {
|
|
|
662
662
|
{subscriptions.map(sub => {
|
|
663
663
|
const agent = agentMap.get(sub.agent_id);
|
|
664
664
|
return (
|
|
665
|
-
<div key={sub.id} className="bg-[
|
|
666
|
-
<div className={`w-2 h-2 rounded-full flex-shrink-0 ${sub.enabled ? "bg-green-400" : "bg-[
|
|
665
|
+
<div key={sub.id} className="bg-[var(--color-surface)] border border-[var(--color-border)] rounded-lg p-3 flex items-center gap-3">
|
|
666
|
+
<div className={`w-2 h-2 rounded-full flex-shrink-0 ${sub.enabled ? "bg-green-400" : "bg-[var(--color-text-muted)]"}`} />
|
|
667
667
|
<div className="flex-1 min-w-0">
|
|
668
668
|
<div className="text-sm font-medium truncate">
|
|
669
669
|
{sub.trigger_slug.replace(/_/g, " ")}
|
|
670
|
-
<span className="text-[
|
|
671
|
-
<span className="text-[
|
|
670
|
+
<span className="text-[var(--color-text-faint)] mx-1.5">→</span>
|
|
671
|
+
<span className="text-[var(--color-accent)]">{agent?.name || "Unknown Agent"}</span>
|
|
672
672
|
</div>
|
|
673
|
-
<div className="text-xs text-[
|
|
673
|
+
<div className="text-xs text-[var(--color-text-muted)]">
|
|
674
674
|
{sub.trigger_instance_id
|
|
675
675
|
? `Instance: ${sub.trigger_instance_id.slice(0, 12)}...`
|
|
676
676
|
: "All instances"
|
|
@@ -690,7 +690,7 @@ export function TriggersTab() {
|
|
|
690
690
|
</button>
|
|
691
691
|
<button
|
|
692
692
|
onClick={() => deleteSubscription(sub.id)}
|
|
693
|
-
className="text-xs text-[
|
|
693
|
+
className="text-xs text-[var(--color-text-muted)] hover:text-red-400 transition px-2"
|
|
694
694
|
>
|
|
695
695
|
Delete
|
|
696
696
|
</button>
|
|
@@ -706,25 +706,25 @@ export function TriggersTab() {
|
|
|
706
706
|
{/* Trigger Instances — only show for providers that have them (not AgentDojo) */}
|
|
707
707
|
{!isAgentDojo && (
|
|
708
708
|
<section>
|
|
709
|
-
<h3 className="text-sm font-medium text-[
|
|
709
|
+
<h3 className="text-sm font-medium text-[var(--color-text-secondary)] mb-3">
|
|
710
710
|
Trigger Instances ({triggers.length})
|
|
711
711
|
</h3>
|
|
712
712
|
{triggersLoading ? (
|
|
713
|
-
<div className="text-center py-6 text-[
|
|
713
|
+
<div className="text-center py-6 text-[var(--color-text-muted)] text-sm">Loading triggers...</div>
|
|
714
714
|
) : triggers.length === 0 ? (
|
|
715
|
-
<div className="bg-[
|
|
715
|
+
<div className="bg-[var(--color-surface)] border border-[var(--color-border)] rounded-lg p-6 text-center text-[var(--color-text-muted)] text-sm">
|
|
716
716
|
No trigger instances. Browse trigger types below to create one.
|
|
717
717
|
</div>
|
|
718
718
|
) : (
|
|
719
719
|
<div className="space-y-2">
|
|
720
720
|
{triggers.map(trigger => (
|
|
721
|
-
<div key={trigger.id} className="bg-[
|
|
722
|
-
<div className={`w-2 h-2 rounded-full flex-shrink-0 ${trigger.status === "active" ? "bg-green-400" : "bg-[
|
|
721
|
+
<div key={trigger.id} className="bg-[var(--color-surface)] border border-[var(--color-border)] rounded-lg p-3 flex items-center gap-3">
|
|
722
|
+
<div className={`w-2 h-2 rounded-full flex-shrink-0 ${trigger.status === "active" ? "bg-green-400" : "bg-[var(--color-text-muted)]"}`} />
|
|
723
723
|
<div className="flex-1 min-w-0">
|
|
724
724
|
<div className="text-sm font-medium truncate">
|
|
725
725
|
{trigger.trigger_slug.replace(/_/g, " ")}
|
|
726
726
|
</div>
|
|
727
|
-
<div className="text-xs text-[
|
|
727
|
+
<div className="text-xs text-[var(--color-text-muted)]">
|
|
728
728
|
ID: {trigger.id.slice(0, 12)}... | Created: {new Date(trigger.created_at).toLocaleDateString()}
|
|
729
729
|
</div>
|
|
730
730
|
</div>
|
|
@@ -741,7 +741,7 @@ export function TriggersTab() {
|
|
|
741
741
|
</button>
|
|
742
742
|
<button
|
|
743
743
|
onClick={() => deleteTrigger(trigger.id)}
|
|
744
|
-
className="text-xs text-[
|
|
744
|
+
className="text-xs text-[var(--color-text-muted)] hover:text-red-400 transition px-2"
|
|
745
745
|
>
|
|
746
746
|
Delete
|
|
747
747
|
</button>
|
|
@@ -757,20 +757,20 @@ export function TriggersTab() {
|
|
|
757
757
|
{isAgentDojo && (
|
|
758
758
|
<section>
|
|
759
759
|
<div className="flex items-center justify-between mb-3">
|
|
760
|
-
<h3 className="text-sm font-medium text-[
|
|
760
|
+
<h3 className="text-sm font-medium text-[var(--color-text-secondary)]">
|
|
761
761
|
Active Subscriptions ({triggers.length})
|
|
762
762
|
</h3>
|
|
763
763
|
<button
|
|
764
764
|
onClick={openAddDojoSub}
|
|
765
|
-
className="text-xs bg-[
|
|
765
|
+
className="text-xs bg-[var(--color-surface-raised)] hover:bg-[var(--color-surface-raised)] border border-[var(--color-border-light)] hover:border-[var(--color-accent)] px-3 py-1.5 rounded transition"
|
|
766
766
|
>
|
|
767
767
|
+ Add Subscription
|
|
768
768
|
</button>
|
|
769
769
|
</div>
|
|
770
770
|
{triggersLoading ? (
|
|
771
|
-
<div className="text-center py-6 text-[
|
|
771
|
+
<div className="text-center py-6 text-[var(--color-text-muted)] text-sm">Loading subscriptions...</div>
|
|
772
772
|
) : triggers.length === 0 ? (
|
|
773
|
-
<div className="bg-[
|
|
773
|
+
<div className="bg-[var(--color-surface)] border border-[var(--color-border)] rounded-lg p-6 text-center text-[var(--color-text-muted)] text-sm">
|
|
774
774
|
No active subscriptions. Browse trigger types below to create one.
|
|
775
775
|
</div>
|
|
776
776
|
) : (
|
|
@@ -779,19 +779,19 @@ export function TriggersTab() {
|
|
|
779
779
|
const localSub = subscriptions.find(s => s.trigger_instance_id === trigger.id);
|
|
780
780
|
const agent = localSub ? agentMap.get(localSub.agent_id) : null;
|
|
781
781
|
return (
|
|
782
|
-
<div key={trigger.id} className="bg-[
|
|
783
|
-
<div className={`w-2 h-2 rounded-full flex-shrink-0 ${trigger.status === "active" ? "bg-green-400" : "bg-[
|
|
782
|
+
<div key={trigger.id} className="bg-[var(--color-surface)] border border-[var(--color-border)] rounded-lg p-3 flex items-center gap-3">
|
|
783
|
+
<div className={`w-2 h-2 rounded-full flex-shrink-0 ${trigger.status === "active" ? "bg-green-400" : "bg-[var(--color-text-muted)]"}`} />
|
|
784
784
|
<div className="flex-1 min-w-0">
|
|
785
785
|
<div className="text-sm font-medium truncate">
|
|
786
786
|
{(trigger.config?.title as string) || trigger.trigger_slug.replace(/_/g, " ")}
|
|
787
787
|
{agent && (
|
|
788
788
|
<>
|
|
789
|
-
<span className="text-[
|
|
790
|
-
<span className="text-[
|
|
789
|
+
<span className="text-[var(--color-text-faint)] mx-1.5">→</span>
|
|
790
|
+
<span className="text-[var(--color-accent)]">{agent.name}</span>
|
|
791
791
|
</>
|
|
792
792
|
)}
|
|
793
793
|
</div>
|
|
794
|
-
<div className="text-xs text-[
|
|
794
|
+
<div className="text-xs text-[var(--color-text-muted)]">
|
|
795
795
|
{trigger.config?.server && <span>{String(trigger.config.server)} | </span>}
|
|
796
796
|
ID: {String(trigger.id).slice(0, 8)} | Created: {new Date(trigger.created_at).toLocaleDateString()}
|
|
797
797
|
</div>
|
|
@@ -809,7 +809,7 @@ export function TriggersTab() {
|
|
|
809
809
|
</button>
|
|
810
810
|
<button
|
|
811
811
|
onClick={() => deleteTrigger(trigger.id)}
|
|
812
|
-
className="text-xs text-[
|
|
812
|
+
className="text-xs text-[var(--color-text-muted)] hover:text-red-400 transition px-2"
|
|
813
813
|
>
|
|
814
814
|
Delete
|
|
815
815
|
</button>
|
|
@@ -824,19 +824,19 @@ export function TriggersTab() {
|
|
|
824
824
|
|
|
825
825
|
{/* Browse Trigger Types */}
|
|
826
826
|
<section>
|
|
827
|
-
<h3 className="text-sm font-medium text-[
|
|
827
|
+
<h3 className="text-sm font-medium text-[var(--color-text-secondary)] mb-3">Browse Trigger Types</h3>
|
|
828
828
|
<div className="flex gap-2 mb-3">
|
|
829
829
|
<input
|
|
830
830
|
type="text"
|
|
831
831
|
value={toolkitFilter}
|
|
832
832
|
onChange={(e) => setToolkitFilter(e.target.value)}
|
|
833
833
|
placeholder="Toolkit filter (e.g. github, gmail, slack)"
|
|
834
|
-
className="flex-1 bg-[
|
|
834
|
+
className="flex-1 bg-[var(--color-surface)] border border-[var(--color-border-light)] rounded px-3 py-2 text-sm focus:outline-none focus:border-[var(--color-accent)]"
|
|
835
835
|
/>
|
|
836
836
|
<button
|
|
837
837
|
onClick={() => browseTriggerTypes(toolkitFilter || undefined)}
|
|
838
838
|
disabled={typesLoading}
|
|
839
|
-
className="text-sm bg-[
|
|
839
|
+
className="text-sm bg-[var(--color-surface-raised)] hover:bg-[var(--color-surface-raised)] border border-[var(--color-border-light)] hover:border-[var(--color-accent)] px-4 py-2 rounded transition disabled:opacity-50"
|
|
840
840
|
>
|
|
841
841
|
{typesLoading ? "Loading..." : "Browse"}
|
|
842
842
|
</button>
|
|
@@ -849,28 +849,28 @@ export function TriggersTab() {
|
|
|
849
849
|
value={typeSearch}
|
|
850
850
|
onChange={(e) => setTypeSearch(e.target.value)}
|
|
851
851
|
placeholder="Search trigger types..."
|
|
852
|
-
className="w-full bg-[
|
|
852
|
+
className="w-full bg-[var(--color-surface)] border border-[var(--color-border-light)] rounded px-3 py-2 text-sm mb-3 focus:outline-none focus:border-[var(--color-accent)]"
|
|
853
853
|
/>
|
|
854
854
|
<div className="grid gap-3 sm:grid-cols-2 lg:grid-cols-3">
|
|
855
855
|
{filteredTypes.slice(0, 30).map(tt => (
|
|
856
|
-
<div key={tt.slug} className="bg-[
|
|
856
|
+
<div key={tt.slug} className="bg-[var(--color-surface)] border border-[var(--color-border)] hover:border-[var(--color-border-light)] rounded-lg p-3 transition">
|
|
857
857
|
<div className="flex items-start gap-3">
|
|
858
858
|
{tt.logo ? (
|
|
859
859
|
<img src={tt.logo} alt={tt.toolkit_name} className="w-8 h-8 rounded object-contain flex-shrink-0" />
|
|
860
860
|
) : (
|
|
861
|
-
<div className="w-8 h-8 rounded bg-[
|
|
861
|
+
<div className="w-8 h-8 rounded bg-[var(--color-surface-raised)] flex items-center justify-center text-xs flex-shrink-0">
|
|
862
862
|
{tt.toolkit_name?.[0]?.toUpperCase() || "?"}
|
|
863
863
|
</div>
|
|
864
864
|
)}
|
|
865
865
|
<div className="flex-1 min-w-0">
|
|
866
866
|
<div className="text-sm font-medium truncate">{tt.name}</div>
|
|
867
|
-
<div className="text-xs text-[
|
|
868
|
-
<div className="text-xs text-[
|
|
867
|
+
<div className="text-xs text-[var(--color-text-muted)]">{tt.toolkit_name}</div>
|
|
868
|
+
<div className="text-xs text-[var(--color-text-faint)] mt-1 line-clamp-2">{tt.description}</div>
|
|
869
869
|
</div>
|
|
870
870
|
</div>
|
|
871
871
|
<button
|
|
872
872
|
onClick={() => startCreate(tt)}
|
|
873
|
-
className="w-full mt-3 text-xs bg-[
|
|
873
|
+
className="w-full mt-3 text-xs bg-[var(--color-surface-raised)] hover:bg-[var(--color-surface-raised)] border border-[var(--color-border-light)] hover:border-[var(--color-accent)] px-3 py-1.5 rounded transition"
|
|
874
874
|
>
|
|
875
875
|
{isAgentDojo ? "Subscribe" : "Create Trigger"}
|
|
876
876
|
</button>
|
|
@@ -878,7 +878,7 @@ export function TriggersTab() {
|
|
|
878
878
|
))}
|
|
879
879
|
</div>
|
|
880
880
|
{filteredTypes.length > 30 && (
|
|
881
|
-
<p className="text-xs text-[
|
|
881
|
+
<p className="text-xs text-[var(--color-text-faint)] mt-3 text-center">
|
|
882
882
|
Showing first 30 of {filteredTypes.length} types. Use search to filter.
|
|
883
883
|
</p>
|
|
884
884
|
)}
|
|
@@ -889,22 +889,22 @@ export function TriggersTab() {
|
|
|
889
889
|
{/* Create Trigger Modal */}
|
|
890
890
|
{showCreate && selectedType && (
|
|
891
891
|
<div className="fixed inset-0 bg-black/50 flex items-center justify-center z-50">
|
|
892
|
-
<div className="bg-[
|
|
892
|
+
<div className="bg-[var(--color-surface)] border border-[var(--color-border-light)] rounded-lg p-6 w-full max-w-md mx-4">
|
|
893
893
|
<h3 className="font-medium mb-1">
|
|
894
894
|
{isAgentDojo ? "Create Subscription" : "Create Trigger"}
|
|
895
895
|
</h3>
|
|
896
|
-
<p className="text-xs text-[
|
|
896
|
+
<p className="text-xs text-[var(--color-text-muted)] mb-4">
|
|
897
897
|
{selectedType.name}
|
|
898
|
-
{selectedType.toolkit_name && <span className="text-[
|
|
898
|
+
{selectedType.toolkit_name && <span className="text-[var(--color-text-faint)]"> ({selectedType.toolkit_name})</span>}
|
|
899
899
|
</p>
|
|
900
900
|
|
|
901
901
|
<div className="space-y-4">
|
|
902
902
|
{/* Connected Account — only for Composio */}
|
|
903
903
|
{!isAgentDojo && (
|
|
904
904
|
<div>
|
|
905
|
-
<label className="block text-xs text-[
|
|
905
|
+
<label className="block text-xs text-[var(--color-text-secondary)] mb-1.5">Connected Account</label>
|
|
906
906
|
{connectedAccounts.length === 0 ? (
|
|
907
|
-
<div className="text-xs text-[
|
|
907
|
+
<div className="text-xs text-[var(--color-text-muted)] bg-[var(--color-bg)] rounded p-3">
|
|
908
908
|
No connected accounts available. Connect an app first in the Integrations tab.
|
|
909
909
|
</div>
|
|
910
910
|
) : (
|
|
@@ -924,9 +924,9 @@ export function TriggersTab() {
|
|
|
924
924
|
{/* Agent selection — for AgentDojo direct subscription */}
|
|
925
925
|
{isAgentDojo && (
|
|
926
926
|
<div>
|
|
927
|
-
<label className="block text-xs text-[
|
|
927
|
+
<label className="block text-xs text-[var(--color-text-secondary)] mb-1.5">Route to Agent</label>
|
|
928
928
|
{agents.length === 0 ? (
|
|
929
|
-
<div className="text-xs text-[
|
|
929
|
+
<div className="text-xs text-[var(--color-text-muted)] bg-[var(--color-bg)] rounded p-3">
|
|
930
930
|
No agents available. Create an agent first.
|
|
931
931
|
</div>
|
|
932
932
|
) : (
|
|
@@ -943,7 +943,7 @@ export function TriggersTab() {
|
|
|
943
943
|
|
|
944
944
|
{/* Connected account — auto-matched from toolkit */}
|
|
945
945
|
<div className="mt-3">
|
|
946
|
-
<label className="block text-xs text-[
|
|
946
|
+
<label className="block text-xs text-[var(--color-text-secondary)] mb-1.5">Connected Account</label>
|
|
947
947
|
{browseMatchedAccount ? (
|
|
948
948
|
<div className="text-xs text-green-400 bg-green-500/10 border border-green-500/20 rounded p-3">
|
|
949
949
|
Connected: {browseMatchedAccount.appName}
|
|
@@ -958,13 +958,13 @@ export function TriggersTab() {
|
|
|
958
958
|
{/* Dynamic config fields from config_schema */}
|
|
959
959
|
{selectedType.config_schema && Object.keys((selectedType.config_schema as any).properties || {}).length > 0 && (
|
|
960
960
|
<div className="mt-3">
|
|
961
|
-
<label className="block text-xs text-[
|
|
961
|
+
<label className="block text-xs text-[var(--color-text-secondary)] mb-1.5">Configuration</label>
|
|
962
962
|
<div className="space-y-2">
|
|
963
963
|
{Object.entries((selectedType.config_schema as any).properties || {}).map(([key, schema]: [string, any]) => {
|
|
964
964
|
const required = ((selectedType.config_schema as any).required || []).includes(key);
|
|
965
965
|
return (
|
|
966
966
|
<div key={key}>
|
|
967
|
-
<label className="block text-[11px] text-[
|
|
967
|
+
<label className="block text-[11px] text-[var(--color-text-secondary)] mb-1">
|
|
968
968
|
{schema.title || key}
|
|
969
969
|
{required && <span className="text-red-400 ml-0.5">*</span>}
|
|
970
970
|
</label>
|
|
@@ -973,7 +973,7 @@ export function TriggersTab() {
|
|
|
973
973
|
value={browseConfig[key] || ""}
|
|
974
974
|
onChange={(e) => setBrowseConfig(prev => ({ ...prev, [key]: e.target.value }))}
|
|
975
975
|
placeholder={schema.description || `Enter ${schema.title || key}...`}
|
|
976
|
-
className="w-full bg-[
|
|
976
|
+
className="w-full bg-[var(--color-bg)] border border-[var(--color-border-light)] rounded px-3 py-2 text-sm focus:outline-none focus:border-[var(--color-accent)]"
|
|
977
977
|
/>
|
|
978
978
|
</div>
|
|
979
979
|
);
|
|
@@ -988,7 +988,7 @@ export function TriggersTab() {
|
|
|
988
988
|
<div className="flex gap-2 mt-4">
|
|
989
989
|
<button
|
|
990
990
|
onClick={() => { setShowCreate(false); setSelectedType(null); }}
|
|
991
|
-
className="flex-1 text-sm bg-[
|
|
991
|
+
className="flex-1 text-sm bg-[var(--color-surface-raised)] hover:bg-[var(--color-surface-raised)] border border-[var(--color-border-light)] px-4 py-2 rounded transition"
|
|
992
992
|
>
|
|
993
993
|
Cancel
|
|
994
994
|
</button>
|
|
@@ -998,7 +998,7 @@ export function TriggersTab() {
|
|
|
998
998
|
!createAgentId || !browseMatchedAccount || creating ||
|
|
999
999
|
(selectedType?.config_schema && ((selectedType.config_schema as any).required || []).some((key: string) => !browseConfig[key]?.trim()))
|
|
1000
1000
|
) : (!selectedAccountId || creating)}
|
|
1001
|
-
className="flex-1 text-sm bg-[
|
|
1001
|
+
className="flex-1 text-sm bg-[var(--color-accent)] hover:bg-[var(--color-accent-hover)] text-white px-4 py-2 rounded transition disabled:opacity-50"
|
|
1002
1002
|
>
|
|
1003
1003
|
{creating ? "Creating..." : isAgentDojo ? "Subscribe" : "Create"}
|
|
1004
1004
|
</button>
|
|
@@ -1010,9 +1010,9 @@ export function TriggersTab() {
|
|
|
1010
1010
|
{/* Add Subscription Modal */}
|
|
1011
1011
|
{showAddSub && (
|
|
1012
1012
|
<div className="fixed inset-0 bg-black/50 flex items-center justify-center z-50">
|
|
1013
|
-
<div className="bg-[
|
|
1013
|
+
<div className="bg-[var(--color-surface)] border border-[var(--color-border-light)] rounded-lg p-6 w-full max-w-md mx-4">
|
|
1014
1014
|
<h3 className="font-medium mb-1">Route Trigger to Agent</h3>
|
|
1015
|
-
<p className="text-xs text-[
|
|
1015
|
+
<p className="text-xs text-[var(--color-text-muted)] mb-4">
|
|
1016
1016
|
{triggers.length === 0
|
|
1017
1017
|
? "No trigger instances yet. Create one first from the Browse section below."
|
|
1018
1018
|
: "Select a trigger instance and the agent that should handle its events."
|
|
@@ -1023,7 +1023,7 @@ export function TriggersTab() {
|
|
|
1023
1023
|
<>
|
|
1024
1024
|
<div className="space-y-4">
|
|
1025
1025
|
<div>
|
|
1026
|
-
<label className="block text-xs text-[
|
|
1026
|
+
<label className="block text-xs text-[var(--color-text-secondary)] mb-1.5">Trigger Instance</label>
|
|
1027
1027
|
<Select
|
|
1028
1028
|
value={subTriggerId}
|
|
1029
1029
|
onChange={setSubTriggerId}
|
|
@@ -1034,14 +1034,14 @@ export function TriggersTab() {
|
|
|
1034
1034
|
}))}
|
|
1035
1035
|
/>
|
|
1036
1036
|
{subTriggerId && (
|
|
1037
|
-
<div className="text-xs text-[
|
|
1037
|
+
<div className="text-xs text-[var(--color-text-faint)] mt-1 font-mono">
|
|
1038
1038
|
ID: {subTriggerId.slice(0, 16)}...
|
|
1039
1039
|
</div>
|
|
1040
1040
|
)}
|
|
1041
1041
|
</div>
|
|
1042
1042
|
|
|
1043
1043
|
<div>
|
|
1044
|
-
<label className="block text-xs text-[
|
|
1044
|
+
<label className="block text-xs text-[var(--color-text-secondary)] mb-1.5">Target Agent</label>
|
|
1045
1045
|
<Select
|
|
1046
1046
|
value={subAgentId}
|
|
1047
1047
|
onChange={setSubAgentId}
|
|
@@ -1057,14 +1057,14 @@ export function TriggersTab() {
|
|
|
1057
1057
|
<div className="flex gap-2 mt-5">
|
|
1058
1058
|
<button
|
|
1059
1059
|
onClick={() => { setShowAddSub(false); setSubTriggerId(""); setSubAgentId(""); }}
|
|
1060
|
-
className="flex-1 text-sm bg-[
|
|
1060
|
+
className="flex-1 text-sm bg-[var(--color-surface-raised)] hover:bg-[var(--color-surface-raised)] border border-[var(--color-border-light)] px-4 py-2 rounded transition"
|
|
1061
1061
|
>
|
|
1062
1062
|
Cancel
|
|
1063
1063
|
</button>
|
|
1064
1064
|
<button
|
|
1065
1065
|
onClick={handleAddSubscription}
|
|
1066
1066
|
disabled={!subTriggerId || !subAgentId || addingSub}
|
|
1067
|
-
className="flex-1 text-sm bg-[
|
|
1067
|
+
className="flex-1 text-sm bg-[var(--color-accent)] hover:bg-[var(--color-accent-hover)] text-white px-4 py-2 rounded transition disabled:opacity-50"
|
|
1068
1068
|
>
|
|
1069
1069
|
{addingSub ? "Adding..." : "Add"}
|
|
1070
1070
|
</button>
|
|
@@ -1074,7 +1074,7 @@ export function TriggersTab() {
|
|
|
1074
1074
|
<div className="flex gap-2 mt-4">
|
|
1075
1075
|
<button
|
|
1076
1076
|
onClick={() => setShowAddSub(false)}
|
|
1077
|
-
className="flex-1 text-sm bg-[
|
|
1077
|
+
className="flex-1 text-sm bg-[var(--color-surface-raised)] hover:bg-[var(--color-surface-raised)] border border-[var(--color-border-light)] px-4 py-2 rounded transition"
|
|
1078
1078
|
>
|
|
1079
1079
|
Close
|
|
1080
1080
|
</button>
|
|
@@ -1087,56 +1087,56 @@ export function TriggersTab() {
|
|
|
1087
1087
|
{/* AgentDojo Add Subscription Modal */}
|
|
1088
1088
|
{showAddDojo && (
|
|
1089
1089
|
<div className="fixed inset-0 bg-black/50 flex items-center justify-center z-50">
|
|
1090
|
-
<div className="bg-[
|
|
1090
|
+
<div className="bg-[var(--color-surface)] border border-[var(--color-border-light)] rounded-lg p-6 w-full max-w-lg mx-4">
|
|
1091
1091
|
<h3 className="font-medium mb-1">Add Subscription</h3>
|
|
1092
|
-
<p className="text-xs text-[
|
|
1092
|
+
<p className="text-xs text-[var(--color-text-muted)] mb-4">
|
|
1093
1093
|
Select an app and trigger, then route it to an agent.
|
|
1094
1094
|
</p>
|
|
1095
1095
|
|
|
1096
1096
|
{dojoTypesLoading ? (
|
|
1097
|
-
<div className="text-center py-8 text-[
|
|
1097
|
+
<div className="text-center py-8 text-[var(--color-text-muted)] text-sm">Loading...</div>
|
|
1098
1098
|
) : dojoTriggerTypes.length === 0 ? (
|
|
1099
|
-
<div className="text-center py-8 text-[
|
|
1099
|
+
<div className="text-center py-8 text-[var(--color-text-muted)] text-sm">
|
|
1100
1100
|
No triggers available. Connect an app first in the Integrations tab.
|
|
1101
1101
|
</div>
|
|
1102
1102
|
) : (
|
|
1103
1103
|
<div className="space-y-4">
|
|
1104
1104
|
{/* App selector — custom dropdown with logos */}
|
|
1105
1105
|
<div>
|
|
1106
|
-
<label className="block text-xs text-[
|
|
1106
|
+
<label className="block text-xs text-[var(--color-text-secondary)] mb-1.5">App</label>
|
|
1107
1107
|
<div className="relative">
|
|
1108
1108
|
<button
|
|
1109
1109
|
onClick={() => { setDojoAppDropdownOpen(!dojoAppDropdownOpen); setDojoTriggerDropdownOpen(false); setDojoAppSearch(""); }}
|
|
1110
|
-
className="w-full flex items-center gap-2 bg-[
|
|
1110
|
+
className="w-full flex items-center gap-2 bg-[var(--color-bg)] border border-[var(--color-border-light)] rounded px-3 py-2 text-sm text-left hover:border-[var(--color-text-faint)] transition"
|
|
1111
1111
|
>
|
|
1112
1112
|
{dojoSelectedToolkitInfo ? (
|
|
1113
1113
|
<>
|
|
1114
1114
|
{dojoSelectedToolkitInfo.logo ? (
|
|
1115
1115
|
<img src={dojoSelectedToolkitInfo.logo} alt="" className="w-5 h-5 rounded object-contain flex-shrink-0" />
|
|
1116
1116
|
) : (
|
|
1117
|
-
<div className="w-5 h-5 rounded bg-[
|
|
1117
|
+
<div className="w-5 h-5 rounded bg-[var(--color-surface-raised)] flex items-center justify-center text-[10px] flex-shrink-0">
|
|
1118
1118
|
{dojoSelectedToolkitInfo.name?.[0]?.toUpperCase() || "?"}
|
|
1119
1119
|
</div>
|
|
1120
1120
|
)}
|
|
1121
1121
|
<span className="flex-1 truncate">{dojoSelectedToolkitInfo.name}</span>
|
|
1122
|
-
<span className="text-[10px] text-[
|
|
1122
|
+
<span className="text-[10px] text-[var(--color-text-muted)]">{dojoSelectedToolkitInfo.count} triggers</span>
|
|
1123
1123
|
</>
|
|
1124
1124
|
) : (
|
|
1125
|
-
<span className="text-[
|
|
1125
|
+
<span className="text-[var(--color-text-muted)] flex-1">Select app...</span>
|
|
1126
1126
|
)}
|
|
1127
|
-
<span className="text-[
|
|
1127
|
+
<span className="text-[var(--color-text-muted)] text-xs ml-1">▾</span>
|
|
1128
1128
|
</button>
|
|
1129
1129
|
{dojoAppDropdownOpen && (
|
|
1130
1130
|
<>
|
|
1131
1131
|
<div className="fixed inset-0 z-10" onClick={() => setDojoAppDropdownOpen(false)} />
|
|
1132
|
-
<div className="absolute left-0 right-0 top-full mt-1 bg-[
|
|
1133
|
-
<div className="p-2 border-b border-[
|
|
1132
|
+
<div className="absolute left-0 right-0 top-full mt-1 bg-[var(--color-bg)] border border-[var(--color-border-light)] rounded-lg shadow-xl z-20 max-h-64 flex flex-col">
|
|
1133
|
+
<div className="p-2 border-b border-[var(--color-border)] flex-shrink-0">
|
|
1134
1134
|
<input
|
|
1135
1135
|
type="text"
|
|
1136
1136
|
value={dojoAppSearch}
|
|
1137
1137
|
onChange={(e) => setDojoAppSearch(e.target.value)}
|
|
1138
1138
|
placeholder="Search apps..."
|
|
1139
|
-
className="w-full bg-[
|
|
1139
|
+
className="w-full bg-[var(--color-surface)] border border-[var(--color-border-light)] rounded px-2 py-1.5 text-sm focus:outline-none focus:border-[var(--color-accent)]"
|
|
1140
1140
|
autoFocus
|
|
1141
1141
|
/>
|
|
1142
1142
|
</div>
|
|
@@ -1156,19 +1156,19 @@ export function TriggersTab() {
|
|
|
1156
1156
|
setDojoConfig({});
|
|
1157
1157
|
setDojoAppDropdownOpen(false);
|
|
1158
1158
|
}}
|
|
1159
|
-
className={`w-full flex items-center gap-2 px-3 py-2 text-sm text-left transition hover:bg-[
|
|
1160
|
-
dojoSelectedToolkit === tk.slug ? "bg-[
|
|
1159
|
+
className={`w-full flex items-center gap-2 px-3 py-2 text-sm text-left transition hover:bg-[var(--color-surface-raised)] ${
|
|
1160
|
+
dojoSelectedToolkit === tk.slug ? "bg-[var(--color-surface-raised)] text-[var(--color-accent)]" : ""
|
|
1161
1161
|
}`}
|
|
1162
1162
|
>
|
|
1163
1163
|
{tk.logo ? (
|
|
1164
1164
|
<img src={tk.logo} alt="" className="w-5 h-5 rounded object-contain flex-shrink-0" />
|
|
1165
1165
|
) : (
|
|
1166
|
-
<div className="w-5 h-5 rounded bg-[
|
|
1166
|
+
<div className="w-5 h-5 rounded bg-[var(--color-surface-raised)] flex items-center justify-center text-[10px] flex-shrink-0">
|
|
1167
1167
|
{tk.name?.[0]?.toUpperCase() || "?"}
|
|
1168
1168
|
</div>
|
|
1169
1169
|
)}
|
|
1170
1170
|
<span className="flex-1 truncate">{tk.name}</span>
|
|
1171
|
-
<span className="text-[10px] text-[
|
|
1171
|
+
<span className="text-[10px] text-[var(--color-text-muted)]">{tk.count}</span>
|
|
1172
1172
|
</button>
|
|
1173
1173
|
))}
|
|
1174
1174
|
</div>
|
|
@@ -1181,11 +1181,11 @@ export function TriggersTab() {
|
|
|
1181
1181
|
{/* Trigger selector — only shown when app is selected */}
|
|
1182
1182
|
{dojoSelectedToolkit && (
|
|
1183
1183
|
<div>
|
|
1184
|
-
<label className="block text-xs text-[
|
|
1184
|
+
<label className="block text-xs text-[var(--color-text-secondary)] mb-1.5">Trigger</label>
|
|
1185
1185
|
<div className="relative">
|
|
1186
1186
|
<button
|
|
1187
1187
|
onClick={() => { setDojoTriggerDropdownOpen(!dojoTriggerDropdownOpen); setDojoAppDropdownOpen(false); setDojoTriggerSearch(""); }}
|
|
1188
|
-
className="w-full flex items-center gap-2 bg-[
|
|
1188
|
+
className="w-full flex items-center gap-2 bg-[var(--color-bg)] border border-[var(--color-border-light)] rounded px-3 py-2 text-sm text-left hover:border-[var(--color-text-faint)] transition"
|
|
1189
1189
|
>
|
|
1190
1190
|
{dojoSelectedTriggerType ? (
|
|
1191
1191
|
<>
|
|
@@ -1197,22 +1197,22 @@ export function TriggersTab() {
|
|
|
1197
1197
|
</span>
|
|
1198
1198
|
</>
|
|
1199
1199
|
) : (
|
|
1200
|
-
<span className="text-[
|
|
1200
|
+
<span className="text-[var(--color-text-muted)] flex-1">Select trigger...</span>
|
|
1201
1201
|
)}
|
|
1202
|
-
<span className="text-[
|
|
1202
|
+
<span className="text-[var(--color-text-muted)] text-xs ml-1">▾</span>
|
|
1203
1203
|
</button>
|
|
1204
1204
|
{dojoTriggerDropdownOpen && (
|
|
1205
1205
|
<>
|
|
1206
1206
|
<div className="fixed inset-0 z-10" onClick={() => setDojoTriggerDropdownOpen(false)} />
|
|
1207
|
-
<div className="absolute left-0 right-0 top-full mt-1 bg-[
|
|
1207
|
+
<div className="absolute left-0 right-0 top-full mt-1 bg-[var(--color-bg)] border border-[var(--color-border-light)] rounded-lg shadow-xl z-20 max-h-64 flex flex-col">
|
|
1208
1208
|
{dojoToolkitTriggers.length > 3 && (
|
|
1209
|
-
<div className="p-2 border-b border-[
|
|
1209
|
+
<div className="p-2 border-b border-[var(--color-border)] flex-shrink-0">
|
|
1210
1210
|
<input
|
|
1211
1211
|
type="text"
|
|
1212
1212
|
value={dojoTriggerSearch}
|
|
1213
1213
|
onChange={(e) => setDojoTriggerSearch(e.target.value)}
|
|
1214
1214
|
placeholder="Search triggers..."
|
|
1215
|
-
className="w-full bg-[
|
|
1215
|
+
className="w-full bg-[var(--color-surface)] border border-[var(--color-border-light)] rounded px-2 py-1.5 text-sm focus:outline-none focus:border-[var(--color-accent)]"
|
|
1216
1216
|
autoFocus
|
|
1217
1217
|
/>
|
|
1218
1218
|
</div>
|
|
@@ -1232,13 +1232,13 @@ export function TriggersTab() {
|
|
|
1232
1232
|
setDojoConfig({});
|
|
1233
1233
|
setDojoTriggerDropdownOpen(false);
|
|
1234
1234
|
}}
|
|
1235
|
-
className={`w-full flex items-center gap-2 px-3 py-2 text-sm text-left transition hover:bg-[
|
|
1236
|
-
dojoSelectedType === t.slug ? "bg-[
|
|
1235
|
+
className={`w-full flex items-center gap-2 px-3 py-2 text-sm text-left transition hover:bg-[var(--color-surface-raised)] ${
|
|
1236
|
+
dojoSelectedType === t.slug ? "bg-[var(--color-surface-raised)] text-[var(--color-accent)]" : ""
|
|
1237
1237
|
}`}
|
|
1238
1238
|
>
|
|
1239
1239
|
<div className="flex-1 min-w-0">
|
|
1240
1240
|
<div className="truncate">{t.name}</div>
|
|
1241
|
-
<div className="text-[10px] text-[
|
|
1241
|
+
<div className="text-[10px] text-[var(--color-text-muted)] truncate">{t.description}</div>
|
|
1242
1242
|
</div>
|
|
1243
1243
|
<span className={`text-[10px] px-1.5 py-0.5 rounded flex-shrink-0 ${
|
|
1244
1244
|
t.type === "webhook" ? "bg-blue-500/10 text-blue-400" : "bg-yellow-500/10 text-yellow-400"
|
|
@@ -1258,7 +1258,7 @@ export function TriggersTab() {
|
|
|
1258
1258
|
{/* Connected account — auto-matched */}
|
|
1259
1259
|
{dojoSelectedType && (
|
|
1260
1260
|
<div>
|
|
1261
|
-
<label className="block text-xs text-[
|
|
1261
|
+
<label className="block text-xs text-[var(--color-text-secondary)] mb-1.5">Connected Account</label>
|
|
1262
1262
|
{dojoMatchedAccount ? (
|
|
1263
1263
|
<div className="text-xs text-green-400 bg-green-500/10 border border-green-500/20 rounded p-3">
|
|
1264
1264
|
Connected: {dojoMatchedAccount.appName}
|
|
@@ -1274,13 +1274,13 @@ export function TriggersTab() {
|
|
|
1274
1274
|
{/* Dynamic config fields from config_schema */}
|
|
1275
1275
|
{dojoSelectedTriggerType && dojoSelectedTriggerType.config_schema && Object.keys(dojoSelectedTriggerType.config_schema.properties || {}).length > 0 && (
|
|
1276
1276
|
<div>
|
|
1277
|
-
<label className="block text-xs text-[
|
|
1277
|
+
<label className="block text-xs text-[var(--color-text-secondary)] mb-1.5">Configuration</label>
|
|
1278
1278
|
<div className="space-y-2">
|
|
1279
1279
|
{Object.entries((dojoSelectedTriggerType.config_schema as any).properties || {}).map(([key, schema]: [string, any]) => {
|
|
1280
1280
|
const required = ((dojoSelectedTriggerType.config_schema as any).required || []).includes(key);
|
|
1281
1281
|
return (
|
|
1282
1282
|
<div key={key}>
|
|
1283
|
-
<label className="block text-[11px] text-[
|
|
1283
|
+
<label className="block text-[11px] text-[var(--color-text-secondary)] mb-1">
|
|
1284
1284
|
{schema.title || key}
|
|
1285
1285
|
{required && <span className="text-red-400 ml-0.5">*</span>}
|
|
1286
1286
|
</label>
|
|
@@ -1289,7 +1289,7 @@ export function TriggersTab() {
|
|
|
1289
1289
|
value={dojoConfig[key] || ""}
|
|
1290
1290
|
onChange={(e) => setDojoConfig(prev => ({ ...prev, [key]: e.target.value }))}
|
|
1291
1291
|
placeholder={schema.description || `Enter ${schema.title || key}...`}
|
|
1292
|
-
className="w-full bg-[
|
|
1292
|
+
className="w-full bg-[var(--color-bg)] border border-[var(--color-border-light)] rounded px-3 py-2 text-sm focus:outline-none focus:border-[var(--color-accent)]"
|
|
1293
1293
|
/>
|
|
1294
1294
|
</div>
|
|
1295
1295
|
);
|
|
@@ -1300,9 +1300,9 @@ export function TriggersTab() {
|
|
|
1300
1300
|
|
|
1301
1301
|
{/* Agent selection */}
|
|
1302
1302
|
<div>
|
|
1303
|
-
<label className="block text-xs text-[
|
|
1303
|
+
<label className="block text-xs text-[var(--color-text-secondary)] mb-1.5">Target Agent</label>
|
|
1304
1304
|
{agents.length === 0 ? (
|
|
1305
|
-
<div className="text-xs text-[
|
|
1305
|
+
<div className="text-xs text-[var(--color-text-muted)] bg-[var(--color-bg)] rounded p-3">
|
|
1306
1306
|
No agents available. Create an agent first.
|
|
1307
1307
|
</div>
|
|
1308
1308
|
) : (
|
|
@@ -1323,7 +1323,7 @@ export function TriggersTab() {
|
|
|
1323
1323
|
<div className="flex gap-2 mt-5">
|
|
1324
1324
|
<button
|
|
1325
1325
|
onClick={() => setShowAddDojo(false)}
|
|
1326
|
-
className="flex-1 text-sm bg-[
|
|
1326
|
+
className="flex-1 text-sm bg-[var(--color-surface-raised)] hover:bg-[var(--color-surface-raised)] border border-[var(--color-border-light)] px-4 py-2 rounded transition"
|
|
1327
1327
|
>
|
|
1328
1328
|
Cancel
|
|
1329
1329
|
</button>
|
|
@@ -1333,7 +1333,7 @@ export function TriggersTab() {
|
|
|
1333
1333
|
dojoSelectedTriggerType?.config_schema &&
|
|
1334
1334
|
((dojoSelectedTriggerType.config_schema as any).required || []).some((key: string) => !dojoConfig[key]?.trim())
|
|
1335
1335
|
)}
|
|
1336
|
-
className="flex-1 text-sm bg-[
|
|
1336
|
+
className="flex-1 text-sm bg-[var(--color-accent)] hover:bg-[var(--color-accent-hover)] text-white px-4 py-2 rounded transition disabled:opacity-50"
|
|
1337
1337
|
>
|
|
1338
1338
|
{dojoCreating ? "Creating..." : "Subscribe"}
|
|
1339
1339
|
</button>
|