@perceptdot/vercel 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ import { CallToolRequestSchema, ListToolsRequestSchema, McpError, ErrorCode, } f
8
8
  const TOKENS_SAVED_PER_CALL = 200;
9
9
  const TOKEN_PRICE_PER_MILLION = 3.0;
10
10
  const metrics = {
11
- tool_name: "@percept/vercel",
11
+ tool_name: "@perceptdot/vercel",
12
12
  tokens_saved_estimate: 0,
13
13
  time_saved_ms: 0,
14
14
  calls_count: 0,
@@ -18,10 +18,63 @@ function trackCall(duration_ms) {
18
18
  metrics.tokens_saved_estimate += TOKENS_SAVED_PER_CALL;
19
19
  metrics.time_saved_ms += duration_ms;
20
20
  }
21
+ // ─── 플랜 검증 ────────────────────────────────────────────────────────────────
22
+ const PERCEPT_API_KEY = process.env.PERCEPT_API_KEY;
23
+ const PERCEPT_API_BASE = "https://perceptdot-api.perceptdot.workers.dev";
24
+ const SESSION_FREE_LIMIT = 10;
25
+ let planCache = null;
26
+ async function checkAndUse() {
27
+ if (!PERCEPT_API_KEY) {
28
+ if (metrics.calls_count >= SESSION_FREE_LIMIT) {
29
+ return { allowed: false, needs_feedback: false, message: "PERCEPT FREE LIMIT REACHED (10 calls/session).\nGet a free key for 200 calls → https://perceptdot.com" };
30
+ }
31
+ return { allowed: true, needs_feedback: false };
32
+ }
33
+ if (PERCEPT_API_KEY.startsWith("pd_free_")) {
34
+ try {
35
+ const res = await fetch(`${PERCEPT_API_BASE}/v1/use`, {
36
+ method: "POST",
37
+ headers: { "Content-Type": "application/json" },
38
+ body: JSON.stringify({ key: PERCEPT_API_KEY }),
39
+ });
40
+ if (res.ok) {
41
+ const data = await res.json();
42
+ if (!data.allowed)
43
+ return { allowed: false, needs_feedback: data.needs_feedback ?? false, message: data.message };
44
+ return { allowed: true, needs_feedback: false };
45
+ }
46
+ }
47
+ catch { }
48
+ return { allowed: true, needs_feedback: false };
49
+ }
50
+ if (planCache && Date.now() < planCache.expires)
51
+ return { allowed: true, needs_feedback: false };
52
+ try {
53
+ const res = await fetch(`${PERCEPT_API_BASE}/v1/validate?key=${PERCEPT_API_KEY}`);
54
+ if (res.ok) {
55
+ const data = await res.json();
56
+ planCache = { plan: (data.valid ? data.plan : "free"), expires: Date.now() + 5 * 60 * 1000 };
57
+ if (!data.valid)
58
+ return { allowed: false, needs_feedback: false, message: "Invalid PERCEPT_API_KEY. Check your key at perceptdot.com" };
59
+ }
60
+ }
61
+ catch { }
62
+ return { allowed: true, needs_feedback: false };
63
+ }
64
+ function makeFeedbackRequestMessage() {
65
+ const usd = (metrics.tokens_saved_estimate / 1_000_000) * 3.0;
66
+ return [
67
+ "PERCEPT FREE QUOTA REACHED (100 calls).",
68
+ `This session: ${metrics.calls_count} calls, ~${metrics.tokens_saved_estimate} tokens saved ($${usd.toFixed(4)}).`,
69
+ "",
70
+ "Submit feedback to unlock 100 more calls → use `percept_feedback` tool with rating (1-5) and comment (max 150 chars).",
71
+ "Or upgrade to Pro ($19/mo) → https://perceptdot.com",
72
+ ].join("\n");
73
+ }
21
74
  function getRoiSummary() {
22
75
  const usd_saved = (metrics.tokens_saved_estimate / 1_000_000) * TOKEN_PRICE_PER_MILLION;
23
76
  return [
24
- `[percept ROI — @percept/vercel]`,
77
+ `[perceptdot ROI — @perceptdot/vercel]`,
25
78
  `calls: ${metrics.calls_count}`,
26
79
  `tokens saved: ${metrics.tokens_saved_estimate.toLocaleString()}`,
27
80
  `cost saved: $${usd_saved.toFixed(4)}`,
@@ -33,7 +86,7 @@ function getRoiSummary() {
33
86
  // ─── 환경 변수 검증 ────────────────────────────────────────────────────────────
34
87
  const VERCEL_TOKEN = process.env.VERCEL_TOKEN;
35
88
  if (!VERCEL_TOKEN) {
36
- process.stderr.write("[percept/vercel] ERROR: VERCEL_TOKEN 환경 변수가 필요합니다.\n" +
89
+ process.stderr.write("[perceptdot/vercel] ERROR: VERCEL_TOKEN 환경 변수가 필요합니다.\n" +
37
90
  "발급 방법: vercel.com/account/tokens\n");
38
91
  process.exit(1);
39
92
  }
@@ -55,7 +108,7 @@ async function vercelFetch(path) {
55
108
  return response.json();
56
109
  }
57
110
  // ─── MCP 서버 ─────────────────────────────────────────────────────────────────
58
- const server = new Server({ name: "@percept/vercel", version: "0.1.0" }, { capabilities: { tools: {} } });
111
+ const server = new Server({ name: "@perceptdot/vercel", version: "0.1.3" }, { capabilities: { tools: {} } });
59
112
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
60
113
  tools: [
61
114
  {
@@ -110,22 +163,67 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
110
163
  },
111
164
  {
112
165
  name: "percept_roi_summary",
113
- description: "이 세션에서 @percept/vercel이 절감한 토큰·비용을 보고합니다.",
166
+ description: "이 세션에서 @perceptdot/vercel이 절감한 토큰·비용을 보고합니다.",
114
167
  inputSchema: {
115
168
  type: "object",
116
169
  properties: {},
117
170
  required: [],
118
171
  },
119
172
  },
173
+ {
174
+ name: "percept_feedback",
175
+ description: "무료 플랜 100콜 도달 시 피드백을 제출하여 100콜을 추가로 잠금 해제합니다. " +
176
+ "rating(1~5)과 comment(최대 150자)를 입력하세요.",
177
+ inputSchema: {
178
+ type: "object",
179
+ properties: {
180
+ rating: { type: "number", description: "별점 1~5", minimum: 1, maximum: 5 },
181
+ comment: { type: "string", description: "사용 후기 (최대 150자). 솔직하게 작성.", maxLength: 150 },
182
+ },
183
+ required: ["rating", "comment"],
184
+ },
185
+ },
120
186
  ],
121
187
  }));
122
188
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
123
189
  const { name, arguments: args } = request.params;
124
190
  const startTime = Date.now();
125
191
  try {
192
+ // 플랜 체크 (percept_roi_summary, percept_feedback는 항상 허용)
193
+ if (name !== "percept_roi_summary" && name !== "percept_feedback") {
194
+ const usage = await checkAndUse();
195
+ if (!usage.allowed) {
196
+ const msg = usage.needs_feedback ? makeFeedbackRequestMessage() : (usage.message ?? "Call limit reached → https://perceptdot.com");
197
+ return { content: [{ type: "text", text: msg }] };
198
+ }
199
+ }
126
200
  if (name === "percept_roi_summary") {
127
201
  return { content: [{ type: "text", text: getRoiSummary() }] };
128
202
  }
203
+ if (name === "percept_feedback") {
204
+ if (!PERCEPT_API_KEY || !PERCEPT_API_KEY.startsWith("pd_free_")) {
205
+ return { content: [{ type: "text", text: "percept_feedback is for free plan only. You have unlimited calls." }] };
206
+ }
207
+ const a = args;
208
+ if (!a.rating || a.rating < 1 || a.rating > 5)
209
+ return { content: [{ type: "text", text: "rating must be 1-5." }] };
210
+ if (!a.comment || a.comment.trim().length === 0)
211
+ return { content: [{ type: "text", text: "comment is required (max 150 chars)." }] };
212
+ try {
213
+ const res = await fetch(`${PERCEPT_API_BASE}/v1/feedback`, {
214
+ method: "POST",
215
+ headers: { "Content-Type": "application/json" },
216
+ body: JSON.stringify({ key: PERCEPT_API_KEY, rating: Math.round(a.rating), comment: a.comment.trim().slice(0, 150) }),
217
+ });
218
+ const data = await res.json();
219
+ if (data.ok)
220
+ return { content: [{ type: "text", text: `Feedback submitted! ${data.message ?? ""}\nCalls remaining: ${data.calls_remaining ?? "unknown"}` }] };
221
+ return { content: [{ type: "text", text: `Feedback error: ${data.error ?? "unknown"}` }] };
222
+ }
223
+ catch (e) {
224
+ return { content: [{ type: "text", text: `Failed to submit feedback: ${e}` }] };
225
+ }
226
+ }
129
227
  // 배포 목록
130
228
  if (name === "vercel_deployments") {
131
229
  const a = args;
@@ -240,5 +338,5 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
240
338
  });
241
339
  const transport = new StdioServerTransport();
242
340
  await server.connect(transport);
243
- process.stderr.write("[percept/vercel] v0.1.0 실행 중 — perceptdot.com\n");
341
+ process.stderr.write("[perceptdot/vercel] v0.1.3 실행 중 — perceptdot.com\n");
244
342
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@perceptdot/vercel",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "AI agent vision for Vercel deployments — with ROI measurement. perceptdot.com",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/src/index.ts CHANGED
@@ -22,7 +22,7 @@ interface PerceptMetrics {
22
22
  }
23
23
 
24
24
  const metrics: PerceptMetrics = {
25
- tool_name: "@percept/vercel",
25
+ tool_name: "@perceptdot/vercel",
26
26
  tokens_saved_estimate: 0,
27
27
  time_saved_ms: 0,
28
28
  calls_count: 0,
@@ -34,11 +34,65 @@ function trackCall(duration_ms: number): void {
34
34
  metrics.time_saved_ms += duration_ms;
35
35
  }
36
36
 
37
+ // ─── 플랜 검증 ────────────────────────────────────────────────────────────────
38
+ const PERCEPT_API_KEY = process.env.PERCEPT_API_KEY;
39
+ const PERCEPT_API_BASE = "https://perceptdot-api.perceptdot.workers.dev";
40
+ const SESSION_FREE_LIMIT = 10;
41
+
42
+ let planCache: { plan: "free" | "pro" | "team"; expires: number } | null = null;
43
+
44
+ interface UseResult { allowed: boolean; needs_feedback: boolean; message?: string; }
45
+
46
+ async function checkAndUse(): Promise<UseResult> {
47
+ if (!PERCEPT_API_KEY) {
48
+ if (metrics.calls_count >= SESSION_FREE_LIMIT) {
49
+ return { allowed: false, needs_feedback: false, message: "PERCEPT FREE LIMIT REACHED (10 calls/session).\nGet a free key for 200 calls → https://perceptdot.com" };
50
+ }
51
+ return { allowed: true, needs_feedback: false };
52
+ }
53
+ if (PERCEPT_API_KEY.startsWith("pd_free_")) {
54
+ try {
55
+ const res = await fetch(`${PERCEPT_API_BASE}/v1/use`, {
56
+ method: "POST",
57
+ headers: { "Content-Type": "application/json" },
58
+ body: JSON.stringify({ key: PERCEPT_API_KEY }),
59
+ });
60
+ if (res.ok) {
61
+ const data = await res.json() as { allowed: boolean; needs_feedback?: boolean; message?: string };
62
+ if (!data.allowed) return { allowed: false, needs_feedback: data.needs_feedback ?? false, message: data.message };
63
+ return { allowed: true, needs_feedback: false };
64
+ }
65
+ } catch {}
66
+ return { allowed: true, needs_feedback: false };
67
+ }
68
+ if (planCache && Date.now() < planCache.expires) return { allowed: true, needs_feedback: false };
69
+ try {
70
+ const res = await fetch(`${PERCEPT_API_BASE}/v1/validate?key=${PERCEPT_API_KEY}`);
71
+ if (res.ok) {
72
+ const data = await res.json() as { valid: boolean; plan: string };
73
+ planCache = { plan: (data.valid ? data.plan : "free") as "free" | "pro" | "team", expires: Date.now() + 5 * 60 * 1000 };
74
+ if (!data.valid) return { allowed: false, needs_feedback: false, message: "Invalid PERCEPT_API_KEY. Check your key at perceptdot.com" };
75
+ }
76
+ } catch {}
77
+ return { allowed: true, needs_feedback: false };
78
+ }
79
+
80
+ function makeFeedbackRequestMessage(): string {
81
+ const usd = (metrics.tokens_saved_estimate / 1_000_000) * 3.0;
82
+ return [
83
+ "PERCEPT FREE QUOTA REACHED (100 calls).",
84
+ `This session: ${metrics.calls_count} calls, ~${metrics.tokens_saved_estimate} tokens saved ($${usd.toFixed(4)}).`,
85
+ "",
86
+ "Submit feedback to unlock 100 more calls → use `percept_feedback` tool with rating (1-5) and comment (max 150 chars).",
87
+ "Or upgrade to Pro ($19/mo) → https://perceptdot.com",
88
+ ].join("\n");
89
+ }
90
+
37
91
  function getRoiSummary(): string {
38
92
  const usd_saved =
39
93
  (metrics.tokens_saved_estimate / 1_000_000) * TOKEN_PRICE_PER_MILLION;
40
94
  return [
41
- `[percept ROI — @percept/vercel]`,
95
+ `[perceptdot ROI — @perceptdot/vercel]`,
42
96
  `calls: ${metrics.calls_count}`,
43
97
  `tokens saved: ${metrics.tokens_saved_estimate.toLocaleString()}`,
44
98
  `cost saved: $${usd_saved.toFixed(4)}`,
@@ -52,7 +106,7 @@ function getRoiSummary(): string {
52
106
  const VERCEL_TOKEN = process.env.VERCEL_TOKEN;
53
107
  if (!VERCEL_TOKEN) {
54
108
  process.stderr.write(
55
- "[percept/vercel] ERROR: VERCEL_TOKEN 환경 변수가 필요합니다.\n" +
109
+ "[perceptdot/vercel] ERROR: VERCEL_TOKEN 환경 변수가 필요합니다.\n" +
56
110
  "발급 방법: vercel.com/account/tokens\n"
57
111
  );
58
112
  process.exit(1);
@@ -104,7 +158,7 @@ interface VercelProject {
104
158
 
105
159
  // ─── MCP 서버 ─────────────────────────────────────────────────────────────────
106
160
  const server = new Server(
107
- { name: "@percept/vercel", version: "0.1.0" },
161
+ { name: "@perceptdot/vercel", version: "0.1.3" },
108
162
  { capabilities: { tools: {} } }
109
163
  );
110
164
 
@@ -166,13 +220,27 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
166
220
  {
167
221
  name: "percept_roi_summary",
168
222
  description:
169
- "이 세션에서 @percept/vercel이 절감한 토큰·비용을 보고합니다.",
223
+ "이 세션에서 @perceptdot/vercel이 절감한 토큰·비용을 보고합니다.",
170
224
  inputSchema: {
171
225
  type: "object",
172
226
  properties: {},
173
227
  required: [],
174
228
  },
175
229
  },
230
+ {
231
+ name: "percept_feedback",
232
+ description:
233
+ "무료 플랜 100콜 도달 시 피드백을 제출하여 100콜을 추가로 잠금 해제합니다. " +
234
+ "rating(1~5)과 comment(최대 150자)를 입력하세요.",
235
+ inputSchema: {
236
+ type: "object",
237
+ properties: {
238
+ rating: { type: "number", description: "별점 1~5", minimum: 1, maximum: 5 },
239
+ comment: { type: "string", description: "사용 후기 (최대 150자). 솔직하게 작성.", maxLength: 150 },
240
+ },
241
+ required: ["rating", "comment"],
242
+ },
243
+ },
176
244
  ],
177
245
  }));
178
246
 
@@ -181,10 +249,40 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
181
249
  const startTime = Date.now();
182
250
 
183
251
  try {
252
+ // 플랜 체크 (percept_roi_summary, percept_feedback는 항상 허용)
253
+ if (name !== "percept_roi_summary" && name !== "percept_feedback") {
254
+ const usage = await checkAndUse();
255
+ if (!usage.allowed) {
256
+ const msg = usage.needs_feedback ? makeFeedbackRequestMessage() : (usage.message ?? "Call limit reached → https://perceptdot.com");
257
+ return { content: [{ type: "text", text: msg }] };
258
+ }
259
+ }
260
+
184
261
  if (name === "percept_roi_summary") {
185
262
  return { content: [{ type: "text", text: getRoiSummary() }] };
186
263
  }
187
264
 
265
+ if (name === "percept_feedback") {
266
+ if (!PERCEPT_API_KEY || !PERCEPT_API_KEY.startsWith("pd_free_")) {
267
+ return { content: [{ type: "text", text: "percept_feedback is for free plan only. You have unlimited calls." }] };
268
+ }
269
+ const a = args as { rating?: number; comment?: string };
270
+ if (!a.rating || a.rating < 1 || a.rating > 5) return { content: [{ type: "text", text: "rating must be 1-5." }] };
271
+ if (!a.comment || a.comment.trim().length === 0) return { content: [{ type: "text", text: "comment is required (max 150 chars)." }] };
272
+ try {
273
+ const res = await fetch(`${PERCEPT_API_BASE}/v1/feedback`, {
274
+ method: "POST",
275
+ headers: { "Content-Type": "application/json" },
276
+ body: JSON.stringify({ key: PERCEPT_API_KEY, rating: Math.round(a.rating), comment: a.comment.trim().slice(0, 150) }),
277
+ });
278
+ const data = await res.json() as { ok?: boolean; message?: string; error?: string; calls_remaining?: number };
279
+ if (data.ok) return { content: [{ type: "text", text: `Feedback submitted! ${data.message ?? ""}\nCalls remaining: ${data.calls_remaining ?? "unknown"}` }] };
280
+ return { content: [{ type: "text", text: `Feedback error: ${data.error ?? "unknown"}` }] };
281
+ } catch (e) {
282
+ return { content: [{ type: "text", text: `Failed to submit feedback: ${e}` }] };
283
+ }
284
+ }
285
+
188
286
  // 배포 목록
189
287
  if (name === "vercel_deployments") {
190
288
  const a = args as Record<string, unknown>;
@@ -323,4 +421,4 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
323
421
 
324
422
  const transport = new StdioServerTransport();
325
423
  await server.connect(transport);
326
- process.stderr.write("[percept/vercel] v0.1.0 실행 중 — perceptdot.com\n");
424
+ process.stderr.write("[perceptdot/vercel] v0.1.3 실행 중 — perceptdot.com\n");