@nordsym/apiclaw 1.3.6 → 1.3.8

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 (214) hide show
  1. package/README.md +422 -169
  2. package/convex/_generated/api.d.ts +16 -0
  3. package/convex/agents.ts +403 -0
  4. package/convex/billing.ts +651 -216
  5. package/convex/crons.ts +17 -0
  6. package/convex/directCall.ts +80 -0
  7. package/convex/earnProgress.ts +753 -0
  8. package/convex/email.ts +135 -82
  9. package/convex/feedback.ts +265 -0
  10. package/convex/http.ts +80 -4
  11. package/convex/logs.ts +304 -0
  12. package/convex/providerKeys.ts +289 -0
  13. package/convex/providers.ts +18 -0
  14. package/convex/schema.ts +185 -1
  15. package/convex/stripeActions.ts +512 -0
  16. package/convex/webhooks.ts +494 -0
  17. package/convex/workspaces.ts +158 -3
  18. package/dist/adapters/base.d.ts +112 -0
  19. package/dist/adapters/base.d.ts.map +1 -0
  20. package/dist/adapters/base.js +247 -0
  21. package/dist/adapters/base.js.map +1 -0
  22. package/dist/adapters/claude-desktop.d.ts +12 -0
  23. package/dist/adapters/claude-desktop.d.ts.map +1 -0
  24. package/dist/adapters/claude-desktop.js +36 -0
  25. package/dist/adapters/claude-desktop.js.map +1 -0
  26. package/dist/adapters/cline.d.ts +20 -0
  27. package/dist/adapters/cline.d.ts.map +1 -0
  28. package/dist/adapters/cline.js +77 -0
  29. package/dist/adapters/cline.js.map +1 -0
  30. package/dist/adapters/continue.d.ts +26 -0
  31. package/dist/adapters/continue.d.ts.map +1 -0
  32. package/dist/adapters/continue.js +68 -0
  33. package/dist/adapters/continue.js.map +1 -0
  34. package/dist/adapters/cursor.d.ts +12 -0
  35. package/dist/adapters/cursor.d.ts.map +1 -0
  36. package/dist/adapters/cursor.js +38 -0
  37. package/dist/adapters/cursor.js.map +1 -0
  38. package/dist/adapters/custom.d.ts +47 -0
  39. package/dist/adapters/custom.d.ts.map +1 -0
  40. package/dist/adapters/custom.js +146 -0
  41. package/dist/adapters/custom.js.map +1 -0
  42. package/dist/adapters/detect.d.ts +69 -0
  43. package/dist/adapters/detect.d.ts.map +1 -0
  44. package/dist/adapters/detect.js +158 -0
  45. package/dist/adapters/detect.js.map +1 -0
  46. package/dist/adapters/index.d.ts +21 -0
  47. package/dist/adapters/index.d.ts.map +1 -0
  48. package/dist/adapters/index.js +23 -0
  49. package/dist/adapters/index.js.map +1 -0
  50. package/dist/adapters/windsurf.d.ts +12 -0
  51. package/dist/adapters/windsurf.d.ts.map +1 -0
  52. package/dist/adapters/windsurf.js +39 -0
  53. package/dist/adapters/windsurf.js.map +1 -0
  54. package/dist/bin.d.ts +9 -0
  55. package/dist/bin.d.ts.map +1 -0
  56. package/dist/bin.js +19 -0
  57. package/dist/bin.js.map +1 -0
  58. package/dist/cli/commands/doctor.d.ts +34 -0
  59. package/dist/cli/commands/doctor.d.ts.map +1 -0
  60. package/dist/cli/commands/doctor.js +312 -0
  61. package/dist/cli/commands/doctor.js.map +1 -0
  62. package/dist/cli/commands/index.d.ts +9 -0
  63. package/dist/cli/commands/index.d.ts.map +1 -0
  64. package/dist/cli/commands/index.js +9 -0
  65. package/dist/cli/commands/index.js.map +1 -0
  66. package/dist/cli/commands/restore.d.ts +50 -0
  67. package/dist/cli/commands/restore.d.ts.map +1 -0
  68. package/dist/cli/commands/restore.js +260 -0
  69. package/dist/cli/commands/restore.js.map +1 -0
  70. package/dist/cli/commands/setup.d.ts +19 -0
  71. package/dist/cli/commands/setup.d.ts.map +1 -0
  72. package/dist/cli/commands/setup.js +206 -0
  73. package/dist/cli/commands/setup.js.map +1 -0
  74. package/dist/cli/commands/uninstall.d.ts +37 -0
  75. package/dist/cli/commands/uninstall.d.ts.map +1 -0
  76. package/dist/cli/commands/uninstall.js +189 -0
  77. package/dist/cli/commands/uninstall.js.map +1 -0
  78. package/dist/cli/index.d.ts +7 -0
  79. package/dist/cli/index.d.ts.map +1 -0
  80. package/dist/cli/index.js +97 -0
  81. package/dist/cli/index.js.map +1 -0
  82. package/dist/discovery.d.ts +6 -2
  83. package/dist/discovery.d.ts.map +1 -1
  84. package/dist/discovery.js +296 -2
  85. package/dist/discovery.js.map +1 -1
  86. package/dist/enterprise/env.d.ts +56 -0
  87. package/dist/enterprise/env.d.ts.map +1 -0
  88. package/dist/enterprise/env.js +124 -0
  89. package/dist/enterprise/env.js.map +1 -0
  90. package/dist/enterprise/index.d.ts +7 -0
  91. package/dist/enterprise/index.d.ts.map +1 -0
  92. package/dist/enterprise/index.js +7 -0
  93. package/dist/enterprise/index.js.map +1 -0
  94. package/dist/enterprise/script-generator.d.ts +32 -0
  95. package/dist/enterprise/script-generator.d.ts.map +1 -0
  96. package/dist/enterprise/script-generator.js +461 -0
  97. package/dist/enterprise/script-generator.js.map +1 -0
  98. package/dist/execute.d.ts +21 -0
  99. package/dist/execute.d.ts.map +1 -1
  100. package/dist/execute.js +231 -0
  101. package/dist/execute.js.map +1 -1
  102. package/dist/index.js +257 -7
  103. package/dist/index.js.map +1 -1
  104. package/dist/metered.d.ts +62 -0
  105. package/dist/metered.d.ts.map +1 -0
  106. package/dist/metered.js +81 -0
  107. package/dist/metered.js.map +1 -0
  108. package/dist/stripe.d.ts +62 -0
  109. package/dist/stripe.d.ts.map +1 -1
  110. package/dist/stripe.js +212 -0
  111. package/dist/stripe.js.map +1 -1
  112. package/dist/types.d.ts +29 -0
  113. package/dist/types.d.ts.map +1 -1
  114. package/dist/ui/colors.d.ts +111 -0
  115. package/dist/ui/colors.d.ts.map +1 -0
  116. package/dist/ui/colors.js +185 -0
  117. package/dist/ui/colors.js.map +1 -0
  118. package/dist/ui/errors.d.ts +69 -0
  119. package/dist/ui/errors.d.ts.map +1 -0
  120. package/dist/ui/errors.js +334 -0
  121. package/dist/ui/errors.js.map +1 -0
  122. package/dist/ui/index.d.ts +10 -0
  123. package/dist/ui/index.d.ts.map +1 -0
  124. package/dist/ui/index.js +14 -0
  125. package/dist/ui/index.js.map +1 -0
  126. package/dist/ui/prompts.d.ts +88 -0
  127. package/dist/ui/prompts.d.ts.map +1 -0
  128. package/dist/ui/prompts.js +295 -0
  129. package/dist/ui/prompts.js.map +1 -0
  130. package/dist/ui/spinner.d.ts +112 -0
  131. package/dist/ui/spinner.d.ts.map +1 -0
  132. package/dist/ui/spinner.js +229 -0
  133. package/dist/ui/spinner.js.map +1 -0
  134. package/dist/utils/backup.d.ts +48 -0
  135. package/dist/utils/backup.d.ts.map +1 -0
  136. package/dist/utils/backup.js +182 -0
  137. package/dist/utils/backup.js.map +1 -0
  138. package/dist/utils/config.d.ts +80 -0
  139. package/dist/utils/config.d.ts.map +1 -0
  140. package/dist/utils/config.js +221 -0
  141. package/dist/utils/config.js.map +1 -0
  142. package/dist/utils/os.d.ts +45 -0
  143. package/dist/utils/os.d.ts.map +1 -0
  144. package/dist/utils/os.js +106 -0
  145. package/dist/utils/os.js.map +1 -0
  146. package/dist/utils/paths.d.ts +38 -0
  147. package/dist/utils/paths.d.ts.map +1 -0
  148. package/dist/utils/paths.js +160 -0
  149. package/dist/utils/paths.js.map +1 -0
  150. package/docs/PRD-BILLING.md +226 -0
  151. package/docs/PRD-EARN-SYSTEM.md +261 -0
  152. package/docs/PRD-MCP-AUTO-SETUP.md +623 -0
  153. package/docs/PRD-final-polish.md +117 -0
  154. package/docs/PRD-mobile-responsive.md +56 -0
  155. package/docs/PRD-navigation-expansion.md +295 -0
  156. package/docs/PRD-stripe-billing.md +312 -0
  157. package/docs/PRD-workspace-cleanup.md +200 -0
  158. package/docs/enterprise-deployment.md +728 -0
  159. package/landing/next.config.mjs +14 -0
  160. package/landing/public/stats.json +4 -2
  161. package/landing/scripts/generate-stats.js +12 -0
  162. package/landing/src/app/api/billing/checkout/route.ts +109 -0
  163. package/landing/src/app/api/billing/payment-method/route.ts +118 -0
  164. package/landing/src/app/api/billing/portal/route.ts +64 -0
  165. package/landing/src/app/api/workspace-auth/magic-link/route.ts +6 -3
  166. package/landing/src/app/auth/verify/page.tsx +31 -9
  167. package/landing/src/app/docs/page.tsx +1 -1
  168. package/landing/src/app/earn/page.tsx +6 -6
  169. package/landing/src/app/join/page.tsx +49 -0
  170. package/landing/src/app/login/page.tsx +8 -2
  171. package/landing/src/app/page.tsx +81 -96
  172. package/landing/src/app/providers/dashboard/page.tsx +1 -1
  173. package/landing/src/app/providers/register/page.tsx +1 -1
  174. package/landing/src/app/workspace/page.tsx +3269 -534
  175. package/landing/src/components/CheckoutButton.tsx +188 -0
  176. package/landing/src/components/EarnCreditsTab.tsx +842 -0
  177. package/landing/src/components/Toast.tsx +84 -0
  178. package/landing/src/lib/stats.json +3 -1
  179. package/package.json +9 -2
  180. package/src/adapters/base.ts +363 -0
  181. package/src/adapters/claude-desktop.ts +41 -0
  182. package/src/adapters/cline.ts +88 -0
  183. package/src/adapters/continue.ts +91 -0
  184. package/src/adapters/cursor.ts +43 -0
  185. package/src/adapters/custom.ts +188 -0
  186. package/src/adapters/detect.ts +202 -0
  187. package/src/adapters/index.ts +47 -0
  188. package/src/adapters/windsurf.ts +44 -0
  189. package/src/bin.ts +19 -0
  190. package/src/cli/commands/doctor.ts +367 -0
  191. package/src/cli/commands/index.ts +9 -0
  192. package/src/cli/commands/restore.ts +333 -0
  193. package/src/cli/commands/setup.ts +276 -0
  194. package/src/cli/commands/uninstall.ts +240 -0
  195. package/src/cli/index.ts +107 -0
  196. package/src/discovery.ts +328 -3
  197. package/src/enterprise/env.ts +156 -0
  198. package/src/enterprise/index.ts +7 -0
  199. package/src/enterprise/script-generator.ts +481 -0
  200. package/src/execute.ts +256 -0
  201. package/src/index.ts +290 -7
  202. package/src/metered.ts +149 -0
  203. package/src/stripe.ts +253 -0
  204. package/src/types.ts +32 -0
  205. package/src/ui/colors.ts +219 -0
  206. package/src/ui/errors.ts +394 -0
  207. package/src/ui/index.ts +17 -0
  208. package/src/ui/prompts.ts +390 -0
  209. package/src/ui/spinner.ts +325 -0
  210. package/src/utils/backup.ts +224 -0
  211. package/src/utils/config.ts +315 -0
  212. package/src/utils/os.ts +124 -0
  213. package/src/utils/paths.ts +203 -0
  214. package/landing/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,117 @@
1
+ # PRD: APIClaw Final Polish
2
+
3
+ Samlar alla återstående issues för en sista polish-runda.
4
+
5
+ ---
6
+
7
+ ## Issues
8
+
9
+ ### 1. 🔴 "Available APIs: 10" Kort Förvirrar
10
+
11
+ **Problem:**
12
+ - Kortet visar "Available APIs: 10"
13
+ - User tror det är en personlig begränsning
14
+ - User tänker "kan jag köpa fler?"
15
+ - Verkligheten: 10 Direct Call + 22k+ via MCP
16
+
17
+ **Lösning:**
18
+ - Ta bort "Available APIs" kortet helt
19
+ - Behåll: API Calls, My Agents, My APIs
20
+ - Direct Call-sektionen visar redan de 10 APIs
21
+
22
+ **Scope:** Ändra OverviewTab, ta bort första stat-kortet
23
+
24
+ ---
25
+
26
+ ### 2. 🔴 Stripe Environment Variables
27
+
28
+ **Problem:**
29
+ - Stripe-koden finns men env vars saknas
30
+ - Betalning fungerar inte förrän keys är satta
31
+
32
+ **Variabler som behövs:**
33
+ ```
34
+ STRIPE_SECRET_KEY=sk_live_...
35
+ STRIPE_WEBHOOK_SECRET=whsec_...
36
+ STRIPE_PRICE_ID_USAGE=price_...
37
+ ```
38
+
39
+ **Lösning:**
40
+ - Gustav hämtar keys från Stripe dashboard
41
+ - Lägg in i Convex environment variables
42
+ - Testa checkout flow
43
+
44
+ **Scope:** Config only (ingen kod)
45
+
46
+ ---
47
+
48
+ ### 3. 🟡 Logging Hook → Execute.ts
49
+
50
+ **Problem:**
51
+ - Logs UI finns och visar data
52
+ - Men logs kopplas inte automatiskt till faktiska API-anrop
53
+ - `logs:createLog` mutation finns men anropas inte från execute
54
+
55
+ **Lösning:**
56
+ - Hitta execute-funktionen i MCP-servern
57
+ - Efter varje Direct Call, anropa createLog
58
+ - Logga: provider, action, status, latency, workspaceId
59
+
60
+ **Filer:**
61
+ - `src/execute.ts` (eller liknande i MCP-servern)
62
+ - Anropa Convex mutation efter varje call
63
+
64
+ **Scope:** 1 agent
65
+
66
+ ---
67
+
68
+ ### 4. 🟢 Auto-Configure Feature
69
+
70
+ **Problem:**
71
+ - Användare måste manuellt konfigurera MCP config
72
+ - Friktion i onboarding
73
+
74
+ **Vision:**
75
+ - Klicka "Auto-Configure" i workspace
76
+ - Permission dialog (File System Access API)
77
+ - AI lokaliserar och modifierar MCP config
78
+ - Visuell bekräftelse
79
+
80
+ **Tekniska alternativ:**
81
+ 1. File System Access API (Chrome/Edge)
82
+ 2. Browser extension
83
+ 3. Local daemon
84
+ 4. CLI command + copy-paste
85
+
86
+ **Scope:** Egen mini-PRD, 2-3 agenter
87
+
88
+ ---
89
+
90
+ ## Agenter
91
+
92
+ | # | Agent | Scope | Prio |
93
+ |---|-------|-------|------|
94
+ | 1 | `overview-cleanup` | Ta bort "Available APIs" kort | 🔴 |
95
+ | 2 | `stripe-config` | Dokumentera env var setup | 🔴 |
96
+ | 3 | `logging-hook` | Koppla execute → logs | 🟡 |
97
+ | 4 | `auto-configure-prd` | Skriv detaljerad PRD | 🟢 |
98
+
99
+ **Total: 4 agenter**
100
+
101
+ ---
102
+
103
+ ## Acceptanskriterier
104
+
105
+ - [ ] Overview visar 3 kort (inte 4)
106
+ - [ ] Stripe checkout fungerar live
107
+ - [ ] API-anrop loggas automatiskt
108
+ - [ ] Auto-Configure PRD dokumenterad
109
+
110
+ ---
111
+
112
+ ## Prioritetsordning
113
+
114
+ 1. **Overview cleanup** — Snabb fix, tar bort förvirring
115
+ 2. **Stripe config** — Gustav gör manuellt med guide
116
+ 3. **Logging hook** — Kräver research i MCP-servern
117
+ 4. **Auto-Configure** — Future feature, PRD först
@@ -0,0 +1,56 @@
1
+ # PRD: APIClaw Mobile Responsiveness
2
+
3
+ ## Scope
4
+ Göra workspace och landing page mobile-friendly.
5
+
6
+ ## Arbete (1 agent, ingen spawn)
7
+
8
+ Jag gör allt själv — inga subagenter. Estimat: ~20 min.
9
+
10
+ ---
11
+
12
+ ## Del 1: Workspace Mobile (workspace/page.tsx)
13
+
14
+ ### Ändringar:
15
+ 1. **Sidebar** → Dold på mobil, visa via hamburger-meny
16
+ 2. **Tabs** → Horisontell scroll eller dropdown på mobil
17
+ 3. **Cards/Tables** → Stack vertically på små skärmar
18
+ 4. **Agent-kort** → Responsiv layout, knappar under content
19
+ 5. **Input-fält** → Full width på mobil
20
+
21
+ ### Tekniskt:
22
+ - Tailwind breakpoints: `sm:`, `md:`, `lg:`
23
+ - Befintlig `Menu`/`X` icons redan importerade
24
+ - Mobil sidebar state: `sidebarOpen` finns redan
25
+
26
+ ---
27
+
28
+ ## Del 2: Landing Page Header (page.tsx)
29
+
30
+ ### Ändringar:
31
+ 1. **Desktop nav** → Dölj på mobil (`hidden lg:flex`)
32
+ 2. **Hamburger** → Visa på mobil (`lg:hidden`)
33
+ 3. **Mobile menu** → Slide-in eller dropdown
34
+ 4. **CTA-knappar** → Stack på mobil
35
+
36
+ ### Tekniskt:
37
+ - Lägg till mobile menu state
38
+ - Animera med Tailwind transitions
39
+
40
+ ---
41
+
42
+ ## Filer som ändras:
43
+ 1. `landing/src/app/workspace/page.tsx`
44
+ 2. `landing/src/app/page.tsx`
45
+
46
+ ## Inga nya dependencies
47
+
48
+ ## Teststrategi:
49
+ - Chrome DevTools mobile view
50
+ - Breakpoints: 375px (iPhone), 768px (tablet)
51
+
52
+ ---
53
+
54
+ ## Attestera?
55
+
56
+ Svara **"kör"** för att starta.
@@ -0,0 +1,295 @@
1
+ # PRD: APIClaw Navigation & Feature Expansion
2
+
3
+ ## Vision
4
+
5
+ APIClaw är **räls för AI-agenter**. Workspace-dashboarden ska kännas som n8n/Vercel/GitHub — professionell, komplett, skalbar.
6
+
7
+ ---
8
+
9
+ ## Ny Sidebar-struktur
10
+
11
+ ```
12
+ ┌─────────────────────┐
13
+ │ APIClaw │
14
+ │ user@email.com │
15
+ │ Free · 50/50 calls │
16
+ ├─────────────────────┤
17
+ │ Overview │
18
+ │ APIs │
19
+ │ Agents │
20
+ │ Logs │ ← NY
21
+ │ Analytics ▼ │
22
+ │ Usage │
23
+ │ Webhooks │ ← NY
24
+ ├─────────────────────┤
25
+ │ API Keys │ ← NY (BYOK)
26
+ │ Earn Credits │
27
+ │ Docs │
28
+ │ Feedback │ ← NY
29
+ ├─────────────────────┤
30
+ │ ⚙ Settings │ ← NY
31
+ │ ☀ Theme │
32
+ │ → Sign Out │
33
+ └─────────────────────┘
34
+ ```
35
+
36
+ Ikoner: Lucide React (redan installerat)
37
+
38
+ ---
39
+
40
+ ## NYA TABS
41
+
42
+ ### 1. Logs
43
+ **Syfte:** Visa alla API-anrop, fel, debug-info.
44
+
45
+ **Innehåll:**
46
+ - Tabell: timestamp, provider, action, status, latency
47
+ - Filter: provider, status (success/error), datum
48
+ - Expandera rad → visa request/response
49
+ - Export som JSON/CSV
50
+
51
+ **Data:** Ny `apiLogs` tabell i Convex
52
+
53
+ ---
54
+
55
+ ### 2. Webhooks
56
+ **Syfte:** Reagera på events (usage alerts, errors, etc.)
57
+
58
+ **Innehåll:**
59
+ - Lista webhooks: URL, events, status
60
+ - Skapa ny: URL + välj events
61
+ - Test-knapp
62
+ - Logs per webhook
63
+
64
+ **Events:**
65
+ - `usage.threshold` (80%, 100%)
66
+ - `api.error`
67
+ - `agent.connected`
68
+ - `agent.revoked`
69
+
70
+ ---
71
+
72
+ ### 3. Feedback
73
+ **Syfte:** Samla feedback från användare.
74
+
75
+ **Innehåll:**
76
+ - Fritext-formulär
77
+ - Quick reactions: 👍/👎 på specifika features
78
+ - Feature requests lista (up/downvote)
79
+ - Status: "Under review" / "Planned" / "Shipped"
80
+
81
+ **Data:** Ny `feedback` tabell
82
+
83
+ ---
84
+
85
+ ### 4. Settings
86
+ **Syfte:** Konto- och workspace-inställningar.
87
+
88
+ **Sektioner:**
89
+ - **Profile:** Namn, email
90
+ - **Security:** Lösenord, sessions, 2FA (future)
91
+ - **Notifications:** Email-preferenser
92
+ - **Workspace:** Namn, delete workspace
93
+ - **API Tokens:** Generera tokens för extern access
94
+
95
+ ---
96
+
97
+ ## BYOK (Bring Your Own Key)
98
+
99
+ ### Positionering — KRITISKT
100
+
101
+ **APIClaw's kärnvärde:** "Direct Call — ingen API-nyckel behövs"
102
+
103
+ **BYOK är INTE huvudfeature.** Det är en power-user-option.
104
+
105
+ ### Varför BYOK?
106
+
107
+ | Usecase | Förklaring |
108
+ |---------|------------|
109
+ | **Obegränsade anrop** | Dina nycklar = räknas inte mot free tier |
110
+ | **Privacy** | Requests går direkt till provider, ej via NordSym |
111
+ | **Egna modeller** | Fine-tuned models, custom endpoints |
112
+ | **Enterprise compliance** | Vissa företag MÅSTE äga sina credentials |
113
+ | **Providers vi ej stödjer** | Lägg till vilken REST API som helst |
114
+
115
+ ### UX-princip
116
+
117
+ ```
118
+ ┌─────────────────────────────────────────────────────┐
119
+ │ Brave Search │
120
+ │ ────────────────────────────────────────────────── │
121
+ │ ✓ Direct Call (NordSym) ○ Use your own key │
122
+ │ │
123
+ │ Using Direct Call: No setup needed. │
124
+ │ 50 free calls/month included. │
125
+ │ │
126
+ │ [Switch to your own key →] │
127
+ └─────────────────────────────────────────────────────┘
128
+ ```
129
+
130
+ **Default = Direct Call.** BYOK är opt-in, aldrig påtvingat.
131
+
132
+ ### API Keys Tab
133
+
134
+ **Struktur:**
135
+
136
+ ```
137
+ ┌─────────────────────────────────────────────────────┐
138
+ │ API Keys │
139
+ │ ───────────────────────────────────────────────── │
140
+ │ │
141
+ │ Your keys are encrypted and stored securely. │
142
+ │ Using your own keys = unlimited calls, no proxy. │
143
+ │ │
144
+ │ ┌───────────────────────────────────────────────┐ │
145
+ │ │ Provider │ Status │ Actions │ │
146
+ │ ├───────────────────────────────────────────────┤ │
147
+ │ │ Brave Search │ Direct Call │ [Add Key] │ │
148
+ │ │ OpenRouter │ Direct Call │ [Add Key] │ │
149
+ │ │ ElevenLabs │ Your Key ✓ │ [Edit][Remove]│ │
150
+ │ │ + Add Custom │ │ [Configure] │ │
151
+ │ └───────────────────────────────────────────────┘ │
152
+ │ │
153
+ └─────────────────────────────────────────────────────┘
154
+ ```
155
+
156
+ ### Custom Provider (Add Any API)
157
+
158
+ **Flow:**
159
+ 1. Klicka "+ Add Custom"
160
+ 2. Ange: Namn, Base URL, Auth type, Headers
161
+ 3. Definiera actions (endpoints)
162
+ 4. Test connection
163
+ 5. Spara
164
+
165
+ **Detta gör APIClaw till en universal API gateway** — inte bara våra providers.
166
+
167
+ ---
168
+
169
+ ## Datamodell (Convex)
170
+
171
+ ### Nya tabeller:
172
+
173
+ ```typescript
174
+ // apiLogs
175
+ {
176
+ workspaceId: Id<"workspaces">,
177
+ provider: string,
178
+ action: string,
179
+ status: "success" | "error",
180
+ latencyMs: number,
181
+ requestSize: number,
182
+ responseSize: number,
183
+ error?: string,
184
+ createdAt: number,
185
+ }
186
+
187
+ // webhooks
188
+ {
189
+ workspaceId: Id<"workspaces">,
190
+ url: string,
191
+ events: string[],
192
+ secret: string,
193
+ enabled: boolean,
194
+ lastTriggeredAt?: number,
195
+ createdAt: number,
196
+ }
197
+
198
+ // feedback
199
+ {
200
+ workspaceId: Id<"workspaces">,
201
+ type: "bug" | "feature" | "general",
202
+ content: string,
203
+ votes: number,
204
+ status: "new" | "reviewing" | "planned" | "shipped",
205
+ createdAt: number,
206
+ }
207
+
208
+ // providerKeys (BYOK)
209
+ {
210
+ workspaceId: Id<"workspaces">,
211
+ provider: string,
212
+ encryptedKey: string,
213
+ isCustom: boolean,
214
+ customConfig?: {
215
+ baseUrl: string,
216
+ authType: string,
217
+ headers: Record<string, string>,
218
+ },
219
+ createdAt: number,
220
+ }
221
+ ```
222
+
223
+ ---
224
+
225
+ ## Implementation Plan
226
+
227
+ ### Fas 1: Core Navigation
228
+ **Agent:** 1 (frontend)
229
+ - Lägg till nya tabs i sidebar
230
+ - Settings-sida med sektioner
231
+ - Feedback-formulär (basic)
232
+ - Placeholder för Logs, Webhooks, API Keys
233
+
234
+ ### Fas 2: Logs
235
+ **Agent:** 1 (backend + frontend)
236
+ - Convex schema för apiLogs
237
+ - Logga alla Direct Call requests
238
+ - Frontend: tabell med filter
239
+
240
+ ### Fas 3: BYOK
241
+ **Agent:** 1 (backend + frontend + crypto)
242
+ - Convex schema för providerKeys
243
+ - Encrypt/decrypt keys
244
+ - UI för add/edit/remove keys
245
+ - Modify executeAPICall to use user keys
246
+
247
+ ### Fas 4: Webhooks
248
+ **Agent:** 1 (backend)
249
+ - Convex schema
250
+ - Webhook delivery system
251
+ - UI för manage webhooks
252
+
253
+ ### Fas 5: Feedback System
254
+ **Agent:** 1 (full-stack)
255
+ - Voting system
256
+ - Admin view för triage
257
+
258
+ ---
259
+
260
+ ## Agenter
261
+
262
+ | Fas | Agent | Scope |
263
+ |-----|-------|-------|
264
+ | 1 | `nav-expansion` | Sidebar, Settings, Feedback placeholder |
265
+ | 2 | `logs-system` | apiLogs backend + frontend |
266
+ | 3 | `byok-system` | providerKeys + UI + execution |
267
+ | 4 | `webhooks` | Webhook delivery |
268
+ | 5 | `feedback-full` | Voting + admin |
269
+
270
+ **Total: 5 agenter, sekventiellt**
271
+
272
+ ---
273
+
274
+ ## Framtidssäkring
275
+
276
+ ### BYOK som competitive moat:
277
+
278
+ 1. **Lock-in prevention:** Användare kan alltid ta med sina nycklar
279
+ 2. **Enterprise-ready:** Compliance teams älskar BYOK
280
+ 3. **Extensibility:** Custom providers = infinite APIs
281
+ 4. **Hybrid model:** Börja med Direct Call, migrera till BYOK när de växer
282
+
283
+ ### Monetization alignment:
284
+
285
+ - **Free:** Direct Call (50 calls)
286
+ - **Pro:** Direct Call (10k calls) + BYOK
287
+ - **Enterprise:** BYOK only, self-hosted option
288
+
289
+ ---
290
+
291
+ ## Attestering
292
+
293
+ Svara **"kör fas 1"** för att starta med navigation expansion.
294
+
295
+ Eller **"kör alla"** för att köra fas 1-5 sekventiellt.