@nordsym/apiclaw 1.3.7 → 1.3.9
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 +436 -200
- package/convex/_generated/api.d.ts +4 -0
- package/convex/agents.ts +403 -0
- package/convex/directCall.ts +80 -0
- package/convex/earnProgress.ts +753 -0
- package/convex/logs.ts +17 -0
- package/convex/providerKeys.ts +82 -2
- package/convex/schema.ts +71 -2
- package/convex/workspaces.ts +84 -2
- 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/mcp-install.d.ts +14 -0
- package/dist/cli/commands/mcp-install.d.ts.map +1 -0
- package/dist/cli/commands/mcp-install.js +246 -0
- package/dist/cli/commands/mcp-install.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 +105 -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 +79 -7
- package/dist/index.js.map +1 -1
- package/dist/stripe.d.ts +1 -1
- package/dist/stripe.js +1 -1
- 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/enterprise-deployment.md +728 -0
- package/landing/next.config.mjs +14 -0
- package/landing/public/book/index.html +24 -5
- package/landing/public/demo-product.jpg +0 -0
- package/landing/public/stats.json +4 -2
- package/landing/scripts/generate-stats.js +13 -0
- package/landing/src/app/api/og/route.tsx +1 -3
- package/landing/src/app/api/workspace-auth/magic-link/route.ts +6 -3
- package/landing/src/app/auth/verify/page.tsx +11 -4
- package/landing/src/app/docs/page.tsx +1 -1
- package/landing/src/app/join/page.tsx +49 -0
- package/landing/src/app/layout.tsx +1 -1
- package/landing/src/app/login/page.tsx +7 -1
- package/landing/src/app/page.tsx +50 -38
- package/landing/src/app/providers/register/page.tsx +1 -1
- package/landing/src/app/workspace/page.tsx +484 -806
- package/landing/src/components/CheckoutButton.tsx +1 -1
- package/landing/src/components/EarnCreditsTab.tsx +842 -0
- package/landing/src/components/HeroTabs.tsx +2 -2
- package/landing/src/components/demo/PhoneDemo.tsx +423 -0
- package/landing/src/components/demo/index.ts +1 -0
- package/landing/src/lib/stats.json +3 -1
- package/landing/tailwind.config.ts +10 -0
- 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/mcp-install.ts +291 -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 +116 -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 +85 -7
- package/src/stripe.ts +1 -1
- 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/STATUS.md +0 -160
- package/landing/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# PRD: APIClaw Earn System
|
|
2
|
+
|
|
3
|
+
**Status:** Draft
|
|
4
|
+
**Datum:** 2026-02-28
|
|
5
|
+
**Författare:** Symbot + Gustav
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Sammanfattning
|
|
10
|
+
|
|
11
|
+
Gamifierat earn-system där användare tjänar API calls genom att slutföra tasks. Två kategorier: **Usage tasks** (driver aha-moment) och **Growth tasks** (driver tillväxt).
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Earn Tasks
|
|
16
|
+
|
|
17
|
+
### Usage Tasks (driver aha-moment)
|
|
18
|
+
|
|
19
|
+
| Task | Calls | Trigger |
|
|
20
|
+
|------|-------|---------|
|
|
21
|
+
| Gör första Direct Call | +15 | API-anrop loggas i system |
|
|
22
|
+
| Testa 3 olika APIs | +10 | 3 unika API endpoints anropade |
|
|
23
|
+
| Lista din Agent | +10 | Agent publicerad i marketplace |
|
|
24
|
+
| Lista ditt API | +10 | API publicerad som provider |
|
|
25
|
+
| Sätt upp Direct Call (BYOK) | +5 | Minst 1 API key sparad |
|
|
26
|
+
|
|
27
|
+
### Growth Tasks (driver tillväxt)
|
|
28
|
+
|
|
29
|
+
| Task | Calls | Trigger |
|
|
30
|
+
|------|-------|---------|
|
|
31
|
+
| Star on GitHub | +10 | OAuth-verifierad eller manuell claim |
|
|
32
|
+
| Follow @NordSym | +5 | OAuth-verifierad eller manuell claim |
|
|
33
|
+
| Invite Friends | +10/referral | Referral-kod använd vid signup |
|
|
34
|
+
|
|
35
|
+
### Totalt
|
|
36
|
+
|
|
37
|
+
- **One-time max:** 65 calls (exkl. referrals)
|
|
38
|
+
- **Referrals:** Obegränsat (+10 per signup)
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## UX Specification
|
|
43
|
+
|
|
44
|
+
### Progress Section (top of Earn tab)
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
48
|
+
│ │
|
|
49
|
+
│ [Target icon] Earn Progress │
|
|
50
|
+
│ │
|
|
51
|
+
│ [████████████░░░░░░░░░░░░] 35/65 calls earned │
|
|
52
|
+
│ │
|
|
53
|
+
│ USAGE │
|
|
54
|
+
│ ┌─────────────────────────────────────────────────────┐ │
|
|
55
|
+
│ │ [Check icon] First Direct Call +15 CLAIMED │ │
|
|
56
|
+
│ │ [Circle icon] Test 3 APIs +10 1/3 │ │
|
|
57
|
+
│ │ [Circle icon] List your Agent +10 [DO IT] │ │
|
|
58
|
+
│ │ [Circle icon] List your API +10 [DO IT] │ │
|
|
59
|
+
│ │ [Circle icon] Set up Direct Call +5 [DO IT] │ │
|
|
60
|
+
│ └─────────────────────────────────────────────────────┘ │
|
|
61
|
+
│ │
|
|
62
|
+
│ GROWTH │
|
|
63
|
+
│ ┌─────────────────────────────────────────────────────┐ │
|
|
64
|
+
│ │ [Check icon] Star on GitHub +10 CLAIMED │ │
|
|
65
|
+
│ │ [Circle icon] Follow @NordSym +5 [DO IT] │ │
|
|
66
|
+
│ │ [Users icon] Invite Friends +10 [COPY] │ │
|
|
67
|
+
│ │ 3 friends joined │ │
|
|
68
|
+
│ └─────────────────────────────────────────────────────┘ │
|
|
69
|
+
│ │
|
|
70
|
+
└─────────────────────────────────────────────────────────────┘
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Visual States
|
|
74
|
+
|
|
75
|
+
| State | Icon | Style |
|
|
76
|
+
|-------|------|-------|
|
|
77
|
+
| Not started | Circle (outline) | Gray text |
|
|
78
|
+
| In progress | Circle with partial fill | Blue text, "1/3" counter |
|
|
79
|
+
| Completed | CheckCircle (filled) | Green, "CLAIMED" badge |
|
|
80
|
+
| Action available | Button | Red accent, "[DO IT]" |
|
|
81
|
+
|
|
82
|
+
### Icons (Lucide)
|
|
83
|
+
|
|
84
|
+
| Element | Icon |
|
|
85
|
+
|---------|------|
|
|
86
|
+
| Progress header | Target |
|
|
87
|
+
| Completed task | CheckCircle |
|
|
88
|
+
| Open task | Circle |
|
|
89
|
+
| Referral | Users |
|
|
90
|
+
| Direct Call | Zap |
|
|
91
|
+
| Agent | Bot |
|
|
92
|
+
| API | Code |
|
|
93
|
+
| GitHub | Github |
|
|
94
|
+
| Twitter/X | Twitter |
|
|
95
|
+
|
|
96
|
+
### Animations
|
|
97
|
+
|
|
98
|
+
1. **On claim:** Checkmark animation (scale in + color change)
|
|
99
|
+
2. **Progress bar:** Smooth fill animation on update
|
|
100
|
+
3. **Confetti:** Optional, on major milestone (50%, 100%)
|
|
101
|
+
|
|
102
|
+
### Toast Notifications
|
|
103
|
+
|
|
104
|
+
| Event | Message |
|
|
105
|
+
|-------|---------|
|
|
106
|
+
| Task completed | "+15 calls earned! First Direct Call complete." |
|
|
107
|
+
| Milestone | "Halfway there! 32/65 calls earned." |
|
|
108
|
+
| Referral | "+10 calls! [Name] joined with your link." |
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Data Model
|
|
113
|
+
|
|
114
|
+
### Convex Schema
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
// earnProgress table
|
|
118
|
+
{
|
|
119
|
+
userId: Id<"users">,
|
|
120
|
+
|
|
121
|
+
// Usage tasks
|
|
122
|
+
firstDirectCall: boolean,
|
|
123
|
+
firstDirectCallAt: number | null,
|
|
124
|
+
|
|
125
|
+
apisUsed: string[], // Track unique APIs
|
|
126
|
+
apisUsedComplete: boolean,
|
|
127
|
+
|
|
128
|
+
agentListed: boolean,
|
|
129
|
+
agentListedAt: number | null,
|
|
130
|
+
|
|
131
|
+
apiListed: boolean,
|
|
132
|
+
apiListedAt: number | null,
|
|
133
|
+
|
|
134
|
+
byokSetup: boolean,
|
|
135
|
+
byokSetupAt: number | null,
|
|
136
|
+
|
|
137
|
+
// Growth tasks
|
|
138
|
+
githubStarred: boolean,
|
|
139
|
+
githubStarredAt: number | null,
|
|
140
|
+
|
|
141
|
+
twitterFollowed: boolean,
|
|
142
|
+
twitterFollowedAt: number | null,
|
|
143
|
+
|
|
144
|
+
// Referrals (tracked separately)
|
|
145
|
+
referralCount: number,
|
|
146
|
+
|
|
147
|
+
// Calculated
|
|
148
|
+
totalEarned: number,
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### API Endpoints
|
|
153
|
+
|
|
154
|
+
| Endpoint | Purpose |
|
|
155
|
+
|----------|---------|
|
|
156
|
+
| `earnProgress:get` | Get user's earn progress |
|
|
157
|
+
| `earnProgress:claimGithub` | Mark GitHub star as claimed |
|
|
158
|
+
| `earnProgress:claimTwitter` | Mark Twitter follow as claimed |
|
|
159
|
+
| `earnProgress:checkProgress` | Recalculate based on actual usage |
|
|
160
|
+
|
|
161
|
+
### Automatic Triggers
|
|
162
|
+
|
|
163
|
+
| Action | Updates |
|
|
164
|
+
|--------|---------|
|
|
165
|
+
| API call logged | Check firstDirectCall, apisUsed |
|
|
166
|
+
| Agent published | Set agentListed |
|
|
167
|
+
| API published | Set apiListed |
|
|
168
|
+
| BYOK key saved | Set byokSetup |
|
|
169
|
+
| Referral signup | Increment referralCount |
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Integration Points
|
|
174
|
+
|
|
175
|
+
### execute.ts
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
// After successful API call
|
|
179
|
+
if (!user.earnProgress.firstDirectCall) {
|
|
180
|
+
await ctx.runMutation(api.earnProgress.markFirstDirectCall, { userId });
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Track unique APIs
|
|
184
|
+
await ctx.runMutation(api.earnProgress.trackApiUsed, {
|
|
185
|
+
userId,
|
|
186
|
+
apiId: request.apiId
|
|
187
|
+
});
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Agent/API Publish Flow
|
|
191
|
+
|
|
192
|
+
```typescript
|
|
193
|
+
// On agent publish
|
|
194
|
+
await ctx.runMutation(api.earnProgress.markAgentListed, { userId });
|
|
195
|
+
|
|
196
|
+
// On API publish
|
|
197
|
+
await ctx.runMutation(api.earnProgress.markApiListed, { userId });
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### BYOK Settings
|
|
201
|
+
|
|
202
|
+
```typescript
|
|
203
|
+
// On first API key saved
|
|
204
|
+
await ctx.runMutation(api.earnProgress.markByokSetup, { userId });
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Free Tier Interaction
|
|
210
|
+
|
|
211
|
+
| Source | Calls |
|
|
212
|
+
|--------|-------|
|
|
213
|
+
| Monthly free | 50 |
|
|
214
|
+
| Earn bonus (max) | 65 |
|
|
215
|
+
| Referrals | Unlimited |
|
|
216
|
+
| **Total potential** | 115+ first month |
|
|
217
|
+
|
|
218
|
+
Earn bonus is **one-time**. Monthly free refreshes.
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Implementation Plan
|
|
223
|
+
|
|
224
|
+
### Agents Required: 3
|
|
225
|
+
|
|
226
|
+
**Agent 1: Backend (Convex)**
|
|
227
|
+
- Create earnProgress table
|
|
228
|
+
- Mutations: markFirstDirectCall, trackApiUsed, markAgentListed, markApiListed, markByokSetup, claimGithub, claimTwitter
|
|
229
|
+
- Query: getEarnProgress
|
|
230
|
+
- Integration hooks in execute.ts, agent publish, API publish, BYOK save
|
|
231
|
+
|
|
232
|
+
**Agent 2: Frontend (Earn Tab)**
|
|
233
|
+
- Redesign Earn Credits tab with progress bar
|
|
234
|
+
- Task cards with states (open, in-progress, claimed)
|
|
235
|
+
- Toast notifications on completion
|
|
236
|
+
- Animations (checkmark, progress fill)
|
|
237
|
+
- Replace current earn/page.tsx content
|
|
238
|
+
|
|
239
|
+
**Agent 3: Referral System**
|
|
240
|
+
- Generate unique referral codes
|
|
241
|
+
- Track referral signups
|
|
242
|
+
- Credit referrer on successful signup
|
|
243
|
+
- Referral leaderboard (optional)
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Success Metrics
|
|
248
|
+
|
|
249
|
+
- Earn completion rate (% users completing all tasks)
|
|
250
|
+
- First Direct Call within 24h of signup
|
|
251
|
+
- Referral conversion rate
|
|
252
|
+
- Correlation: earn completion vs. paid conversion
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Open Questions
|
|
257
|
+
|
|
258
|
+
1. **Manual claim vs. auto-detect:** GitHub/Twitter require OAuth or trust user?
|
|
259
|
+
2. **Referral cap:** Unlimited or max 50 referrals?
|
|
260
|
+
3. **Expiration:** Do earned calls expire or persist?
|
|
261
|
+
4. **Existing users:** Retroactive credit for already-completed actions?
|