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.
Files changed (102) hide show
  1. package/dist/ActivityPage.c48n83h2.js +3 -0
  2. package/dist/ApiDocsPage.yzcxx5ax.js +4 -0
  3. package/dist/App.09yb8t0b.js +1 -0
  4. package/dist/App.152mbs1r.js +4 -0
  5. package/dist/App.3a67nx9w.js +4 -0
  6. package/dist/App.9epx6785.js +4 -0
  7. package/dist/App.d8955awp.js +4 -0
  8. package/dist/App.drwb57jq.js +4 -0
  9. package/dist/App.gssbmajb.js +4 -0
  10. package/dist/App.qw70pc29.js +53 -0
  11. package/dist/{App.7fb3e7mp.js → App.qzbx5wtj.js} +1 -1
  12. package/dist/App.r5serxkt.js +8 -0
  13. package/dist/App.tpmp9020.js +20 -0
  14. package/dist/App.v2wb4d7d.js +61 -0
  15. package/dist/App.vxmaaj0m.js +13 -0
  16. package/dist/App.w4p2tda9.js +4 -0
  17. package/dist/App.wv2ng55q.js +221 -0
  18. package/dist/App.yncnrn0f.js +4 -0
  19. package/dist/ConnectionsPage.k6cspyqq.js +3 -0
  20. package/dist/McpPage.cdxm48xj.js +3 -0
  21. package/dist/SettingsPage.evpv7c2y.js +3 -0
  22. package/dist/SkillsPage.pvzp6c1a.js +3 -0
  23. package/dist/TasksPage.6jnvbpsy.js +3 -0
  24. package/dist/TelemetryPage.t7vk24zc.js +3 -0
  25. package/dist/TestsPage.5x6658aa.js +3 -0
  26. package/dist/ThreadsPage.3fvhtevh.js +3 -0
  27. package/dist/apteva-kit.css +1 -1
  28. package/dist/index.html +1 -1
  29. package/dist/styles.css +1 -1
  30. package/package.json +8 -8
  31. package/src/db.ts +19 -9
  32. package/src/integrations/agentdojo.ts +1 -0
  33. package/src/mcp-platform.ts +418 -63
  34. package/src/openapi.ts +96 -0
  35. package/src/providers.ts +50 -24
  36. package/src/routes/api/agent-utils.ts +0 -1
  37. package/src/routes/api/agents.ts +19 -1
  38. package/src/routes/api/meta-agent.ts +2 -0
  39. package/src/routes/api/system.ts +90 -1
  40. package/src/routes/api/telemetry.ts +19 -1
  41. package/src/routes/share.ts +85 -0
  42. package/src/server.ts +12 -0
  43. package/src/web/App.tsx +89 -11
  44. package/src/web/components/activity/ActivityPage.tsx +14 -14
  45. package/src/web/components/agents/AgentCard.tsx +14 -14
  46. package/src/web/components/agents/AgentPanel.tsx +358 -198
  47. package/src/web/components/agents/AgentsView.tsx +4 -4
  48. package/src/web/components/agents/CreateAgentModal.tsx +21 -79
  49. package/src/web/components/api/ApiDocsPage.tsx +66 -66
  50. package/src/web/components/auth/CreateAccountStep.tsx +16 -16
  51. package/src/web/components/auth/LoginPage.tsx +10 -10
  52. package/src/web/components/common/LoadingSpinner.tsx +2 -2
  53. package/src/web/components/common/Modal.tsx +8 -8
  54. package/src/web/components/common/Select.tsx +9 -9
  55. package/src/web/components/connections/ConnectionsPage.tsx +4 -4
  56. package/src/web/components/connections/IntegrationsTab.tsx +18 -18
  57. package/src/web/components/connections/OverviewTab.tsx +13 -13
  58. package/src/web/components/connections/TriggersTab.tsx +99 -99
  59. package/src/web/components/dashboard/Dashboard.tsx +32 -32
  60. package/src/web/components/layout/Header.tsx +50 -34
  61. package/src/web/components/layout/Sidebar.tsx +34 -15
  62. package/src/web/components/mcp/IntegrationsPanel.tsx +40 -40
  63. package/src/web/components/mcp/McpPage.tsx +208 -208
  64. package/src/web/components/meta-agent/MetaAgent.tsx +12 -10
  65. package/src/web/components/onboarding/OnboardingWizard.tsx +25 -25
  66. package/src/web/components/settings/SettingsPage.tsx +258 -175
  67. package/src/web/components/skills/SkillsPage.tsx +88 -88
  68. package/src/web/components/tasks/TasksPage.tsx +339 -54
  69. package/src/web/components/telemetry/TelemetryPage.tsx +135 -64
  70. package/src/web/components/tests/TestsPage.tsx +50 -50
  71. package/src/web/components/threads/ThreadsPage.tsx +23 -21
  72. package/src/web/context/ProjectContext.tsx +6 -1
  73. package/src/web/context/ThemeContext.tsx +69 -0
  74. package/src/web/context/index.ts +2 -0
  75. package/src/web/styles.css +5 -3
  76. package/src/web/themes.ts +99 -0
  77. package/src/web/types.ts +0 -4
  78. package/dist/ActivityPage.7907h64p.js +0 -3
  79. package/dist/ApiDocsPage.k3jjenpq.js +0 -4
  80. package/dist/App.01nq20st.js +0 -4
  81. package/dist/App.1maqvamf.js +0 -4
  82. package/dist/App.2yjrh32f.js +0 -4
  83. package/dist/App.3qw8nben.js +0 -20
  84. package/dist/App.7sy3wq8c.js +0 -4
  85. package/dist/App.apjrmctz.js +0 -57
  86. package/dist/App.av6t2yhe.js +0 -4
  87. package/dist/App.jqj5a094.js +0 -46
  88. package/dist/App.mc7xf85h.js +0 -4
  89. package/dist/App.myxqcj9x.js +0 -4
  90. package/dist/App.nm91r1mp.js +0 -13
  91. package/dist/App.p02f4ret.js +0 -1
  92. package/dist/App.qcknavjz.js +0 -221
  93. package/dist/App.vc7vfhg4.js +0 -4
  94. package/dist/App.z4s9zkw5.js +0 -4
  95. package/dist/ConnectionsPage.z1pw5xe2.js +0 -3
  96. package/dist/McpPage.8vc97z0b.js +0 -3
  97. package/dist/SettingsPage.p61bz8kd.js +0 -3
  98. package/dist/SkillsPage.r9x43g3g.js +0 -3
  99. package/dist/TasksPage.1e0zkye4.js +0 -3
  100. package/dist/TelemetryPage.p9vbe4gf.js +0 -3
  101. package/dist/TestsPage.d4xy504e.js +0 -3
  102. 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-[#111] border border-[#1a1a1a] rounded-lg p-8 text-center">
598
- <p className="text-[#666]">No trigger providers configured.</p>
599
- <p className="text-sm text-[#555] mt-1">Add API keys for Composio or AgentDojo in Settings to enable triggers.</p>
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-[#666]">Provider:</span>
618
- <div className="flex gap-1 bg-[#111] border border-[#1a1a1a] rounded-lg p-0.5">
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-[#1a1a1a] text-white"
631
- : "text-[#666] hover:text-[#888]"
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-[#888]">
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-[#1a1a1a] hover:bg-[#222] border border-[#333] hover:border-[#f97316] px-3 py-1.5 rounded transition"
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-[#111] border border-[#1a1a1a] rounded-lg p-6 text-center text-[#666] text-sm">
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-[#111] border border-[#1a1a1a] 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-[#666]"}`} />
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-[#555] mx-1.5">&rarr;</span>
671
- <span className="text-[#f97316]">{agent?.name || "Unknown Agent"}</span>
670
+ <span className="text-[var(--color-text-faint)] mx-1.5">&rarr;</span>
671
+ <span className="text-[var(--color-accent)]">{agent?.name || "Unknown Agent"}</span>
672
672
  </div>
673
- <div className="text-xs text-[#666]">
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-[#666] hover:text-red-400 transition px-2"
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-[#888] mb-3">
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-[#666] text-sm">Loading triggers...</div>
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-[#111] border border-[#1a1a1a] rounded-lg p-6 text-center text-[#666] text-sm">
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-[#111] border border-[#1a1a1a] 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-[#666]"}`} />
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-[#666]">
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-[#666] hover:text-red-400 transition px-2"
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-[#888]">
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-[#1a1a1a] hover:bg-[#222] border border-[#333] hover:border-[#f97316] px-3 py-1.5 rounded transition"
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-[#666] text-sm">Loading subscriptions...</div>
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-[#111] border border-[#1a1a1a] rounded-lg p-6 text-center text-[#666] text-sm">
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-[#111] border border-[#1a1a1a] 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-[#666]"}`} />
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-[#555] mx-1.5">&rarr;</span>
790
- <span className="text-[#f97316]">{agent.name}</span>
789
+ <span className="text-[var(--color-text-faint)] mx-1.5">&rarr;</span>
790
+ <span className="text-[var(--color-accent)]">{agent.name}</span>
791
791
  </>
792
792
  )}
793
793
  </div>
794
- <div className="text-xs text-[#666]">
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-[#666] hover:text-red-400 transition px-2"
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-[#888] mb-3">Browse Trigger Types</h3>
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-[#111] border border-[#333] rounded px-3 py-2 text-sm focus:outline-none focus:border-[#f97316]"
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-[#1a1a1a] hover:bg-[#222] border border-[#333] hover:border-[#f97316] px-4 py-2 rounded transition disabled:opacity-50"
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-[#111] border border-[#333] rounded px-3 py-2 text-sm mb-3 focus:outline-none focus:border-[#f97316]"
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-[#111] border border-[#1a1a1a] hover:border-[#333] rounded-lg p-3 transition">
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-[#1a1a1a] flex items-center justify-center text-xs flex-shrink-0">
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-[#666]">{tt.toolkit_name}</div>
868
- <div className="text-xs text-[#555] mt-1 line-clamp-2">{tt.description}</div>
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-[#1a1a1a] hover:bg-[#222] border border-[#333] hover:border-[#f97316] px-3 py-1.5 rounded transition"
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-[#555] mt-3 text-center">
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-[#111] border border-[#333] rounded-lg p-6 w-full max-w-md mx-4">
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-[#666] mb-4">
896
+ <p className="text-xs text-[var(--color-text-muted)] mb-4">
897
897
  {selectedType.name}
898
- {selectedType.toolkit_name && <span className="text-[#555]"> ({selectedType.toolkit_name})</span>}
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-[#888] mb-1.5">Connected Account</label>
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-[#666] bg-[#0a0a0a] rounded p-3">
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-[#888] mb-1.5">Route to Agent</label>
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-[#666] bg-[#0a0a0a] rounded p-3">
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-[#888] mb-1.5">Connected Account</label>
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-[#888] mb-1.5">Configuration</label>
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-[#888] mb-1">
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-[#0a0a0a] border border-[#333] rounded px-3 py-2 text-sm focus:outline-none focus:border-[#f97316]"
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-[#1a1a1a] hover:bg-[#222] border border-[#333] px-4 py-2 rounded transition"
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-[#f97316] hover:bg-[#ea580c] text-white px-4 py-2 rounded transition disabled:opacity-50"
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-[#111] border border-[#333] rounded-lg p-6 w-full max-w-md mx-4">
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-[#666] mb-4">
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-[#888] mb-1.5">Trigger Instance</label>
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-[#555] mt-1 font-mono">
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-[#888] mb-1.5">Target Agent</label>
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-[#1a1a1a] hover:bg-[#222] border border-[#333] px-4 py-2 rounded transition"
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-[#f97316] hover:bg-[#ea580c] text-white px-4 py-2 rounded transition disabled:opacity-50"
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-[#1a1a1a] hover:bg-[#222] border border-[#333] px-4 py-2 rounded transition"
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-[#111] border border-[#333] rounded-lg p-6 w-full max-w-lg mx-4">
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-[#666] mb-4">
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-[#666] text-sm">Loading...</div>
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-[#666] text-sm">
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-[#888] mb-1.5">App</label>
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-[#0a0a0a] border border-[#333] rounded px-3 py-2 text-sm text-left hover:border-[#555] transition"
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-[#1a1a1a] flex items-center justify-center text-[10px] flex-shrink-0">
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-[#666]">{dojoSelectedToolkitInfo.count} triggers</span>
1122
+ <span className="text-[10px] text-[var(--color-text-muted)]">{dojoSelectedToolkitInfo.count} triggers</span>
1123
1123
  </>
1124
1124
  ) : (
1125
- <span className="text-[#666] flex-1">Select app...</span>
1125
+ <span className="text-[var(--color-text-muted)] flex-1">Select app...</span>
1126
1126
  )}
1127
- <span className="text-[#666] text-xs ml-1">&#9662;</span>
1127
+ <span className="text-[var(--color-text-muted)] text-xs ml-1">&#9662;</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-[#0a0a0a] border border-[#333] rounded-lg shadow-xl z-20 max-h-64 flex flex-col">
1133
- <div className="p-2 border-b border-[#1a1a1a] flex-shrink-0">
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-[#111] border border-[#333] rounded px-2 py-1.5 text-sm focus:outline-none focus:border-[#f97316]"
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-[#1a1a1a] ${
1160
- dojoSelectedToolkit === tk.slug ? "bg-[#1a1a1a] text-[#f97316]" : ""
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-[#1a1a1a] flex items-center justify-center text-[10px] flex-shrink-0">
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-[#666]">{tk.count}</span>
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-[#888] mb-1.5">Trigger</label>
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-[#0a0a0a] border border-[#333] rounded px-3 py-2 text-sm text-left hover:border-[#555] transition"
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-[#666] flex-1">Select trigger...</span>
1200
+ <span className="text-[var(--color-text-muted)] flex-1">Select trigger...</span>
1201
1201
  )}
1202
- <span className="text-[#666] text-xs ml-1">&#9662;</span>
1202
+ <span className="text-[var(--color-text-muted)] text-xs ml-1">&#9662;</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-[#0a0a0a] border border-[#333] rounded-lg shadow-xl z-20 max-h-64 flex flex-col">
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-[#1a1a1a] flex-shrink-0">
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-[#111] border border-[#333] rounded px-2 py-1.5 text-sm focus:outline-none focus:border-[#f97316]"
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-[#1a1a1a] ${
1236
- dojoSelectedType === t.slug ? "bg-[#1a1a1a] text-[#f97316]" : ""
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-[#666] truncate">{t.description}</div>
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-[#888] mb-1.5">Connected Account</label>
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-[#888] mb-1.5">Configuration</label>
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-[#888] mb-1">
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-[#0a0a0a] border border-[#333] rounded px-3 py-2 text-sm focus:outline-none focus:border-[#f97316]"
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-[#888] mb-1.5">Target Agent</label>
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-[#666] bg-[#0a0a0a] rounded p-3">
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-[#1a1a1a] hover:bg-[#222] border border-[#333] px-4 py-2 rounded transition"
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-[#f97316] hover:bg-[#ea580c] text-white px-4 py-2 rounded transition disabled:opacity-50"
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>