@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.
- package/README.md +422 -169
- package/convex/_generated/api.d.ts +16 -0
- package/convex/agents.ts +403 -0
- package/convex/billing.ts +651 -216
- package/convex/crons.ts +17 -0
- package/convex/directCall.ts +80 -0
- package/convex/earnProgress.ts +753 -0
- package/convex/email.ts +135 -82
- package/convex/feedback.ts +265 -0
- package/convex/http.ts +80 -4
- package/convex/logs.ts +304 -0
- package/convex/providerKeys.ts +289 -0
- package/convex/providers.ts +18 -0
- package/convex/schema.ts +185 -1
- package/convex/stripeActions.ts +512 -0
- package/convex/webhooks.ts +494 -0
- package/convex/workspaces.ts +158 -3
- package/dist/adapters/base.d.ts +112 -0
- package/dist/adapters/base.d.ts.map +1 -0
- package/dist/adapters/base.js +247 -0
- package/dist/adapters/base.js.map +1 -0
- package/dist/adapters/claude-desktop.d.ts +12 -0
- package/dist/adapters/claude-desktop.d.ts.map +1 -0
- package/dist/adapters/claude-desktop.js +36 -0
- package/dist/adapters/claude-desktop.js.map +1 -0
- package/dist/adapters/cline.d.ts +20 -0
- package/dist/adapters/cline.d.ts.map +1 -0
- package/dist/adapters/cline.js +77 -0
- package/dist/adapters/cline.js.map +1 -0
- package/dist/adapters/continue.d.ts +26 -0
- package/dist/adapters/continue.d.ts.map +1 -0
- package/dist/adapters/continue.js +68 -0
- package/dist/adapters/continue.js.map +1 -0
- package/dist/adapters/cursor.d.ts +12 -0
- package/dist/adapters/cursor.d.ts.map +1 -0
- package/dist/adapters/cursor.js +38 -0
- package/dist/adapters/cursor.js.map +1 -0
- package/dist/adapters/custom.d.ts +47 -0
- package/dist/adapters/custom.d.ts.map +1 -0
- package/dist/adapters/custom.js +146 -0
- package/dist/adapters/custom.js.map +1 -0
- package/dist/adapters/detect.d.ts +69 -0
- package/dist/adapters/detect.d.ts.map +1 -0
- package/dist/adapters/detect.js +158 -0
- package/dist/adapters/detect.js.map +1 -0
- package/dist/adapters/index.d.ts +21 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +23 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/windsurf.d.ts +12 -0
- package/dist/adapters/windsurf.d.ts.map +1 -0
- package/dist/adapters/windsurf.js +39 -0
- package/dist/adapters/windsurf.js.map +1 -0
- package/dist/bin.d.ts +9 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +19 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +34 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +312 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/index.d.ts +9 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +9 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/restore.d.ts +50 -0
- package/dist/cli/commands/restore.d.ts.map +1 -0
- package/dist/cli/commands/restore.js +260 -0
- package/dist/cli/commands/restore.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +19 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +206 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/uninstall.d.ts +37 -0
- package/dist/cli/commands/uninstall.d.ts.map +1 -0
- package/dist/cli/commands/uninstall.js +189 -0
- package/dist/cli/commands/uninstall.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +97 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/discovery.d.ts +6 -2
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +296 -2
- package/dist/discovery.js.map +1 -1
- package/dist/enterprise/env.d.ts +56 -0
- package/dist/enterprise/env.d.ts.map +1 -0
- package/dist/enterprise/env.js +124 -0
- package/dist/enterprise/env.js.map +1 -0
- package/dist/enterprise/index.d.ts +7 -0
- package/dist/enterprise/index.d.ts.map +1 -0
- package/dist/enterprise/index.js +7 -0
- package/dist/enterprise/index.js.map +1 -0
- package/dist/enterprise/script-generator.d.ts +32 -0
- package/dist/enterprise/script-generator.d.ts.map +1 -0
- package/dist/enterprise/script-generator.js +461 -0
- package/dist/enterprise/script-generator.js.map +1 -0
- package/dist/execute.d.ts +21 -0
- package/dist/execute.d.ts.map +1 -1
- package/dist/execute.js +231 -0
- package/dist/execute.js.map +1 -1
- package/dist/index.js +257 -7
- package/dist/index.js.map +1 -1
- package/dist/metered.d.ts +62 -0
- package/dist/metered.d.ts.map +1 -0
- package/dist/metered.js +81 -0
- package/dist/metered.js.map +1 -0
- package/dist/stripe.d.ts +62 -0
- package/dist/stripe.d.ts.map +1 -1
- package/dist/stripe.js +212 -0
- package/dist/stripe.js.map +1 -1
- package/dist/types.d.ts +29 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/colors.d.ts +111 -0
- package/dist/ui/colors.d.ts.map +1 -0
- package/dist/ui/colors.js +185 -0
- package/dist/ui/colors.js.map +1 -0
- package/dist/ui/errors.d.ts +69 -0
- package/dist/ui/errors.d.ts.map +1 -0
- package/dist/ui/errors.js +334 -0
- package/dist/ui/errors.js.map +1 -0
- package/dist/ui/index.d.ts +10 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +14 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/prompts.d.ts +88 -0
- package/dist/ui/prompts.d.ts.map +1 -0
- package/dist/ui/prompts.js +295 -0
- package/dist/ui/prompts.js.map +1 -0
- package/dist/ui/spinner.d.ts +112 -0
- package/dist/ui/spinner.d.ts.map +1 -0
- package/dist/ui/spinner.js +229 -0
- package/dist/ui/spinner.js.map +1 -0
- package/dist/utils/backup.d.ts +48 -0
- package/dist/utils/backup.d.ts.map +1 -0
- package/dist/utils/backup.js +182 -0
- package/dist/utils/backup.js.map +1 -0
- package/dist/utils/config.d.ts +80 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +221 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/os.d.ts +45 -0
- package/dist/utils/os.d.ts.map +1 -0
- package/dist/utils/os.js +106 -0
- package/dist/utils/os.js.map +1 -0
- package/dist/utils/paths.d.ts +38 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +160 -0
- package/dist/utils/paths.js.map +1 -0
- package/docs/PRD-BILLING.md +226 -0
- package/docs/PRD-EARN-SYSTEM.md +261 -0
- package/docs/PRD-MCP-AUTO-SETUP.md +623 -0
- package/docs/PRD-final-polish.md +117 -0
- package/docs/PRD-mobile-responsive.md +56 -0
- package/docs/PRD-navigation-expansion.md +295 -0
- package/docs/PRD-stripe-billing.md +312 -0
- package/docs/PRD-workspace-cleanup.md +200 -0
- package/docs/enterprise-deployment.md +728 -0
- package/landing/next.config.mjs +14 -0
- package/landing/public/stats.json +4 -2
- package/landing/scripts/generate-stats.js +12 -0
- package/landing/src/app/api/billing/checkout/route.ts +109 -0
- package/landing/src/app/api/billing/payment-method/route.ts +118 -0
- package/landing/src/app/api/billing/portal/route.ts +64 -0
- package/landing/src/app/api/workspace-auth/magic-link/route.ts +6 -3
- package/landing/src/app/auth/verify/page.tsx +31 -9
- package/landing/src/app/docs/page.tsx +1 -1
- package/landing/src/app/earn/page.tsx +6 -6
- package/landing/src/app/join/page.tsx +49 -0
- package/landing/src/app/login/page.tsx +8 -2
- package/landing/src/app/page.tsx +81 -96
- package/landing/src/app/providers/dashboard/page.tsx +1 -1
- package/landing/src/app/providers/register/page.tsx +1 -1
- package/landing/src/app/workspace/page.tsx +3269 -534
- package/landing/src/components/CheckoutButton.tsx +188 -0
- package/landing/src/components/EarnCreditsTab.tsx +842 -0
- package/landing/src/components/Toast.tsx +84 -0
- package/landing/src/lib/stats.json +3 -1
- package/package.json +9 -2
- package/src/adapters/base.ts +363 -0
- package/src/adapters/claude-desktop.ts +41 -0
- package/src/adapters/cline.ts +88 -0
- package/src/adapters/continue.ts +91 -0
- package/src/adapters/cursor.ts +43 -0
- package/src/adapters/custom.ts +188 -0
- package/src/adapters/detect.ts +202 -0
- package/src/adapters/index.ts +47 -0
- package/src/adapters/windsurf.ts +44 -0
- package/src/bin.ts +19 -0
- package/src/cli/commands/doctor.ts +367 -0
- package/src/cli/commands/index.ts +9 -0
- package/src/cli/commands/restore.ts +333 -0
- package/src/cli/commands/setup.ts +276 -0
- package/src/cli/commands/uninstall.ts +240 -0
- package/src/cli/index.ts +107 -0
- package/src/discovery.ts +328 -3
- package/src/enterprise/env.ts +156 -0
- package/src/enterprise/index.ts +7 -0
- package/src/enterprise/script-generator.ts +481 -0
- package/src/execute.ts +256 -0
- package/src/index.ts +290 -7
- package/src/metered.ts +149 -0
- package/src/stripe.ts +253 -0
- package/src/types.ts +32 -0
- package/src/ui/colors.ts +219 -0
- package/src/ui/errors.ts +394 -0
- package/src/ui/index.ts +17 -0
- package/src/ui/prompts.ts +390 -0
- package/src/ui/spinner.ts +325 -0
- package/src/utils/backup.ts +224 -0
- package/src/utils/config.ts +315 -0
- package/src/utils/os.ts +124 -0
- package/src/utils/paths.ts +203 -0
- 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.
|