@getverbal/cli 0.4.3 → 0.6.0
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/agent-hooks/claude.d.ts +10 -0
- package/dist/agent-hooks/claude.d.ts.map +1 -0
- package/dist/agent-hooks/claude.js +218 -0
- package/dist/agent-hooks/claude.js.map +1 -0
- package/dist/agent-hooks/cli.d.ts +2 -0
- package/dist/agent-hooks/cli.d.ts.map +1 -0
- package/dist/agent-hooks/cli.js +271 -0
- package/dist/agent-hooks/cli.js.map +1 -0
- package/dist/agent-hooks/codex.d.ts +9 -0
- package/dist/agent-hooks/codex.d.ts.map +1 -0
- package/dist/agent-hooks/codex.js +349 -0
- package/dist/agent-hooks/codex.js.map +1 -0
- package/dist/agent-hooks/config.d.ts +32 -0
- package/dist/agent-hooks/config.d.ts.map +1 -0
- package/dist/agent-hooks/config.js +176 -0
- package/dist/agent-hooks/config.js.map +1 -0
- package/dist/agent-hooks/ingest.d.ts +4 -0
- package/dist/agent-hooks/ingest.d.ts.map +1 -0
- package/dist/agent-hooks/ingest.js +22 -0
- package/dist/agent-hooks/ingest.js.map +1 -0
- package/dist/agent-hooks/launchagent.d.ts +7 -0
- package/dist/agent-hooks/launchagent.d.ts.map +1 -0
- package/dist/agent-hooks/launchagent.js +51 -0
- package/dist/agent-hooks/launchagent.js.map +1 -0
- package/dist/agent-hooks/runtime-context.d.ts +20 -0
- package/dist/agent-hooks/runtime-context.d.ts.map +1 -0
- package/dist/agent-hooks/runtime-context.js +90 -0
- package/dist/agent-hooks/runtime-context.js.map +1 -0
- package/dist/agent-hooks/state.d.ts +26 -0
- package/dist/agent-hooks/state.d.ts.map +1 -0
- package/dist/agent-hooks/state.js +67 -0
- package/dist/agent-hooks/state.js.map +1 -0
- package/dist/agent-hooks/tokscale.d.ts +70 -0
- package/dist/agent-hooks/tokscale.d.ts.map +1 -0
- package/dist/agent-hooks/tokscale.js +142 -0
- package/dist/agent-hooks/tokscale.js.map +1 -0
- package/dist/agent-hooks/tool-extraction.d.ts +7 -0
- package/dist/agent-hooks/tool-extraction.d.ts.map +1 -0
- package/dist/agent-hooks/tool-extraction.js +100 -0
- package/dist/agent-hooks/tool-extraction.js.map +1 -0
- package/dist/agent-hooks/trace.d.ts +17 -0
- package/dist/agent-hooks/trace.d.ts.map +1 -0
- package/dist/agent-hooks/trace.js +25 -0
- package/dist/agent-hooks/trace.js.map +1 -0
- package/dist/auth/browser-auth.d.ts +6 -0
- package/dist/auth/browser-auth.d.ts.map +1 -0
- package/dist/auth/browser-auth.js +202 -0
- package/dist/auth/browser-auth.js.map +1 -0
- package/dist/auth/credentials.d.ts +6 -0
- package/dist/auth/credentials.d.ts.map +1 -0
- package/dist/auth/credentials.js +78 -0
- package/dist/auth/credentials.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1513 -440
- package/dist/cli.js.map +1 -0
- package/dist/commands/dashboard.d.ts +2 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +19 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/hooks.d.ts +2 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +6 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/commands/import.d.ts +2 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +129 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +262 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/logout.d.ts +2 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +17 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/mcp-serve.d.ts +2 -0
- package/dist/commands/mcp-serve.d.ts.map +1 -0
- package/dist/commands/mcp-serve.js +7 -0
- package/dist/commands/mcp-serve.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +43 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/uninstall.d.ts +2 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +43 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +58 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/configure/claude-code.d.ts +7 -0
- package/dist/configure/claude-code.d.ts.map +1 -0
- package/dist/configure/claude-code.js +11 -0
- package/dist/configure/claude-code.js.map +1 -0
- package/dist/configure/claude-desktop.d.ts +8 -0
- package/dist/configure/claude-desktop.d.ts.map +1 -0
- package/dist/configure/claude-desktop.js +28 -0
- package/dist/configure/claude-desktop.js.map +1 -0
- package/dist/configure/codex.d.ts +7 -0
- package/dist/configure/codex.d.ts.map +1 -0
- package/dist/configure/codex.js +12 -0
- package/dist/configure/codex.js.map +1 -0
- package/dist/configure/cursor.d.ts +7 -0
- package/dist/configure/cursor.d.ts.map +1 -0
- package/dist/configure/cursor.js +12 -0
- package/dist/configure/cursor.js.map +1 -0
- package/dist/configure/index.d.ts +34 -0
- package/dist/configure/index.d.ts.map +1 -0
- package/dist/configure/index.js +153 -0
- package/dist/configure/index.js.map +1 -0
- package/dist/detect/claude-code.d.ts +3 -0
- package/dist/detect/claude-code.d.ts.map +1 -0
- package/dist/detect/claude-code.js +82 -0
- package/dist/detect/claude-code.js.map +1 -0
- package/dist/detect/claude-desktop.d.ts +3 -0
- package/dist/detect/claude-desktop.d.ts.map +1 -0
- package/dist/detect/claude-desktop.js +89 -0
- package/dist/detect/claude-desktop.js.map +1 -0
- package/dist/detect/codex.d.ts +3 -0
- package/dist/detect/codex.d.ts.map +1 -0
- package/dist/detect/codex.js +64 -0
- package/dist/detect/codex.js.map +1 -0
- package/dist/detect/cursor.d.ts +3 -0
- package/dist/detect/cursor.d.ts.map +1 -0
- package/dist/detect/cursor.js +81 -0
- package/dist/detect/cursor.js.map +1 -0
- package/dist/detect/index.d.ts +3 -0
- package/dist/detect/index.d.ts.map +1 -0
- package/dist/detect/index.js +28 -0
- package/dist/detect/index.js.map +1 -0
- package/dist/import/file-upload.d.ts +10 -0
- package/dist/import/file-upload.d.ts.map +1 -0
- package/dist/import/file-upload.js +37 -0
- package/dist/import/file-upload.js.map +1 -0
- package/dist/import/index.d.ts +11 -0
- package/dist/import/index.d.ts.map +1 -0
- package/dist/import/index.js +51 -0
- package/dist/import/index.js.map +1 -0
- package/dist/mcp/exports.d.ts +13 -0
- package/dist/mcp/exports.d.ts.map +1 -0
- package/dist/mcp/exports.js +13 -0
- package/dist/mcp/exports.js.map +1 -0
- package/dist/mcp/git-context.d.ts +17 -0
- package/dist/mcp/git-context.d.ts.map +1 -0
- package/dist/mcp/git-context.js +72 -0
- package/dist/mcp/git-context.js.map +1 -0
- package/dist/mcp/hooks/anthropic.d.ts +31 -0
- package/dist/mcp/hooks/anthropic.d.ts.map +1 -0
- package/dist/mcp/hooks/anthropic.js +137 -0
- package/dist/mcp/hooks/anthropic.js.map +1 -0
- package/dist/mcp/hooks/google.d.ts +53 -0
- package/dist/mcp/hooks/google.d.ts.map +1 -0
- package/dist/mcp/hooks/google.js +161 -0
- package/dist/mcp/hooks/google.js.map +1 -0
- package/dist/mcp/hooks/index.d.ts +9 -0
- package/dist/mcp/hooks/index.d.ts.map +1 -0
- package/dist/mcp/hooks/index.js +7 -0
- package/dist/mcp/hooks/index.js.map +1 -0
- package/dist/mcp/hooks/openai.d.ts +59 -0
- package/dist/mcp/hooks/openai.d.ts.map +1 -0
- package/dist/mcp/hooks/openai.js +158 -0
- package/dist/mcp/hooks/openai.js.map +1 -0
- package/dist/mcp/hooks/types.d.ts +8 -0
- package/dist/mcp/hooks/types.d.ts.map +1 -0
- package/dist/mcp/hooks/types.js +5 -0
- package/dist/mcp/hooks/types.js.map +1 -0
- package/dist/mcp/ingestor.d.ts +23 -0
- package/dist/mcp/ingestor.d.ts.map +1 -0
- package/dist/mcp/ingestor.js +310 -0
- package/dist/mcp/ingestor.js.map +1 -0
- package/dist/mcp/pricing.d.ts +19 -0
- package/dist/mcp/pricing.d.ts.map +1 -0
- package/dist/mcp/pricing.js +130 -0
- package/dist/mcp/pricing.js.map +1 -0
- package/dist/mcp/server.d.ts +10 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +689 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/session-tracker.d.ts +52 -0
- package/dist/mcp/session-tracker.d.ts.map +1 -0
- package/dist/mcp/session-tracker.js +186 -0
- package/dist/mcp/session-tracker.js.map +1 -0
- package/dist/mcp/tools/analyze-spending-trend.d.ts +10 -0
- package/dist/mcp/tools/analyze-spending-trend.d.ts.map +1 -0
- package/dist/mcp/tools/analyze-spending-trend.js +126 -0
- package/dist/mcp/tools/analyze-spending-trend.js.map +1 -0
- package/dist/mcp/tools/get-budget-status.d.ts +9 -0
- package/dist/mcp/tools/get-budget-status.d.ts.map +1 -0
- package/dist/mcp/tools/get-budget-status.js +59 -0
- package/dist/mcp/tools/get-budget-status.js.map +1 -0
- package/dist/mcp/tools/get-cost-breakdown.d.ts +10 -0
- package/dist/mcp/tools/get-cost-breakdown.d.ts.map +1 -0
- package/dist/mcp/tools/get-cost-breakdown.js +52 -0
- package/dist/mcp/tools/get-cost-breakdown.js.map +1 -0
- package/dist/mcp/tools/get-model-efficiency.d.ts +9 -0
- package/dist/mcp/tools/get-model-efficiency.d.ts.map +1 -0
- package/dist/mcp/tools/get-model-efficiency.js +137 -0
- package/dist/mcp/tools/get-model-efficiency.js.map +1 -0
- package/dist/mcp/tools/get-recent-prompts.d.ts +13 -0
- package/dist/mcp/tools/get-recent-prompts.d.ts.map +1 -0
- package/dist/mcp/tools/get-recent-prompts.js +56 -0
- package/dist/mcp/tools/get-recent-prompts.js.map +1 -0
- package/dist/mcp/tools/get-roi-metrics.d.ts +9 -0
- package/dist/mcp/tools/get-roi-metrics.d.ts.map +1 -0
- package/dist/mcp/tools/get-roi-metrics.js +84 -0
- package/dist/mcp/tools/get-roi-metrics.js.map +1 -0
- package/dist/mcp/tools/get-usage-summary.d.ts +10 -0
- package/dist/mcp/tools/get-usage-summary.d.ts.map +1 -0
- package/dist/mcp/tools/get-usage-summary.js +47 -0
- package/dist/mcp/tools/get-usage-summary.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +221 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +161 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/list-projects.d.ts +6 -0
- package/dist/mcp/tools/list-projects.d.ts.map +1 -0
- package/dist/mcp/tools/list-projects.js +43 -0
- package/dist/mcp/tools/list-projects.js.map +1 -0
- package/dist/mcp/tools/optimize-prompt.d.ts +44 -0
- package/dist/mcp/tools/optimize-prompt.d.ts.map +1 -0
- package/dist/mcp/tools/optimize-prompt.js +95 -0
- package/dist/mcp/tools/optimize-prompt.js.map +1 -0
- package/dist/mcp/types.d.ts +118 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +5 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/types.d.ts +18 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/update-check/check.d.ts +6 -0
- package/dist/update-check/check.d.ts.map +1 -0
- package/dist/update-check/check.js +64 -0
- package/dist/update-check/check.js.map +1 -0
- package/dist/update-check/notify.d.ts +6 -0
- package/dist/update-check/notify.d.ts.map +1 -0
- package/dist/update-check/notify.js +40 -0
- package/dist/update-check/notify.js.map +1 -0
- package/dist/verify.d.ts +7 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +40 -0
- package/dist/verify.js.map +1 -0
- package/dist/version.d.ts +9 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +21 -0
- package/dist/version.js.map +1 -0
- package/package.json +10 -5
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tools Registry
|
|
3
|
+
* Exports all available tools for Claude Desktop integration
|
|
4
|
+
*/
|
|
5
|
+
// Phase 1 Tools
|
|
6
|
+
export { getUsageSummary } from './get-usage-summary.js';
|
|
7
|
+
export { getBudgetStatus } from './get-budget-status.js';
|
|
8
|
+
export { getRecentPrompts } from './get-recent-prompts.js';
|
|
9
|
+
export { listProjects } from './list-projects.js';
|
|
10
|
+
export { getCostBreakdown } from './get-cost-breakdown.js';
|
|
11
|
+
// Phase 2 Tools - ROI Metrics
|
|
12
|
+
export { getRoiMetrics } from './get-roi-metrics.js';
|
|
13
|
+
export { analyzeSpendingTrend } from './analyze-spending-trend.js';
|
|
14
|
+
export { getModelEfficiency } from './get-model-efficiency.js';
|
|
15
|
+
// Phase 3 Tools - Prompt Optimization
|
|
16
|
+
import { optimizePromptTool, OPTIMIZE_PROMPT_TOOL } from './optimize-prompt.js';
|
|
17
|
+
export { optimizePromptTool, OPTIMIZE_PROMPT_TOOL };
|
|
18
|
+
/**
|
|
19
|
+
* Tool definitions for MCP server registration
|
|
20
|
+
*/
|
|
21
|
+
export const MCP_TOOLS = [
|
|
22
|
+
{
|
|
23
|
+
name: 'get_usage_summary',
|
|
24
|
+
description: 'Get aggregated usage data for your LLM spending with time period filtering',
|
|
25
|
+
inputSchema: {
|
|
26
|
+
type: 'object',
|
|
27
|
+
properties: {
|
|
28
|
+
timeframe: {
|
|
29
|
+
type: 'string',
|
|
30
|
+
enum: ['7d', '30d', '90d'],
|
|
31
|
+
description: 'Time period to analyze (default: 30d)',
|
|
32
|
+
},
|
|
33
|
+
group_by: {
|
|
34
|
+
type: 'string',
|
|
35
|
+
enum: ['provider', 'model', 'project'],
|
|
36
|
+
description: 'How to group the usage data (default: provider)',
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'get_cost_breakdown',
|
|
43
|
+
description: 'Analyze your LLM spending breakdown by category with trends',
|
|
44
|
+
inputSchema: {
|
|
45
|
+
type: 'object',
|
|
46
|
+
properties: {
|
|
47
|
+
timeframe: {
|
|
48
|
+
type: 'string',
|
|
49
|
+
enum: ['7d', '30d', '90d'],
|
|
50
|
+
description: 'Time period to analyze (default: 30d)',
|
|
51
|
+
},
|
|
52
|
+
break_down_by: {
|
|
53
|
+
type: 'string',
|
|
54
|
+
enum: ['provider', 'model', 'project'],
|
|
55
|
+
description: 'How to break down the costs (default: provider)',
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'get_recent_prompts',
|
|
62
|
+
description: 'Retrieve your recent LLM prompts and responses with filtering',
|
|
63
|
+
inputSchema: {
|
|
64
|
+
type: 'object',
|
|
65
|
+
properties: {
|
|
66
|
+
limit: {
|
|
67
|
+
type: 'number',
|
|
68
|
+
description: 'Number of prompts to return (1-100, default: 10)',
|
|
69
|
+
},
|
|
70
|
+
offset: {
|
|
71
|
+
type: 'number',
|
|
72
|
+
description: 'Pagination offset (default: 0)',
|
|
73
|
+
},
|
|
74
|
+
provider: {
|
|
75
|
+
type: 'string',
|
|
76
|
+
description: 'Filter by provider (e.g., anthropic, openai)',
|
|
77
|
+
},
|
|
78
|
+
model: {
|
|
79
|
+
type: 'string',
|
|
80
|
+
description: 'Filter by model (e.g., claude-3-5-sonnet)',
|
|
81
|
+
},
|
|
82
|
+
include_content: {
|
|
83
|
+
type: 'boolean',
|
|
84
|
+
description: 'Include full prompt content (default: false for privacy)',
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: 'get_budget_status',
|
|
91
|
+
description: 'Check your LLM API budget status and spending alerts',
|
|
92
|
+
inputSchema: {
|
|
93
|
+
type: 'object',
|
|
94
|
+
properties: {
|
|
95
|
+
project_id: {
|
|
96
|
+
type: 'string',
|
|
97
|
+
description: 'Check budget for specific project (optional)',
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'list_projects',
|
|
104
|
+
description: 'List available projects for filtering usage data',
|
|
105
|
+
inputSchema: {
|
|
106
|
+
type: 'object',
|
|
107
|
+
properties: {},
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
// Phase 2 Tools
|
|
111
|
+
{
|
|
112
|
+
name: 'get_roi_metrics',
|
|
113
|
+
description: 'Calculate ROI and efficiency metrics with comparison to previous period',
|
|
114
|
+
inputSchema: {
|
|
115
|
+
type: 'object',
|
|
116
|
+
properties: {
|
|
117
|
+
timeframe: {
|
|
118
|
+
type: 'string',
|
|
119
|
+
enum: ['7d', '30d', '90d'],
|
|
120
|
+
description: 'Time period to analyze (default: 30d)',
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
name: 'analyze_spending_trend',
|
|
127
|
+
description: 'Analyze spending trends and forecast future costs with acceleration/deceleration detection',
|
|
128
|
+
inputSchema: {
|
|
129
|
+
type: 'object',
|
|
130
|
+
properties: {
|
|
131
|
+
timeframe: {
|
|
132
|
+
type: 'string',
|
|
133
|
+
enum: ['7d', '30d', '90d'],
|
|
134
|
+
description: 'Time period to analyze (default: 30d)',
|
|
135
|
+
},
|
|
136
|
+
metric: {
|
|
137
|
+
type: 'string',
|
|
138
|
+
enum: ['cost', 'tokens'],
|
|
139
|
+
description: 'Which metric to analyze (default: cost)',
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
name: 'get_model_efficiency',
|
|
146
|
+
description: 'Compare per-model cost efficiency and get recommendations for best models to use',
|
|
147
|
+
inputSchema: {
|
|
148
|
+
type: 'object',
|
|
149
|
+
properties: {
|
|
150
|
+
timeframe: {
|
|
151
|
+
type: 'string',
|
|
152
|
+
enum: ['7d', '30d', '90d'],
|
|
153
|
+
description: 'Time period to analyze (default: 30d)',
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
// Phase 3 Tools
|
|
159
|
+
OPTIMIZE_PROMPT_TOOL,
|
|
160
|
+
];
|
|
161
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-projects.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list-projects.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAwCjB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool: list_projects
|
|
3
|
+
* List available projects for filtering usage data
|
|
4
|
+
*/
|
|
5
|
+
export async function listProjects(apiKey, apiUrl) {
|
|
6
|
+
try {
|
|
7
|
+
const response = await fetch(`${apiUrl}/api/v1/projects/list`, {
|
|
8
|
+
method: 'GET',
|
|
9
|
+
headers: {
|
|
10
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
11
|
+
'Content-Type': 'application/json',
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
if (!response.ok) {
|
|
15
|
+
return `Error: Failed to fetch projects (${response.status})`;
|
|
16
|
+
}
|
|
17
|
+
const data = (await response.json());
|
|
18
|
+
// Format for natural language display
|
|
19
|
+
let output = `📋 Projects (${data.total || 0} total)
|
|
20
|
+
|
|
21
|
+
`;
|
|
22
|
+
if (data.projects && data.projects.length > 0) {
|
|
23
|
+
data.projects.forEach((project, idx) => {
|
|
24
|
+
output += `${idx + 1}. ${project.name}
|
|
25
|
+
`;
|
|
26
|
+
output += ` ID: ${project.id}
|
|
27
|
+
`;
|
|
28
|
+
output += ` Current Month: $${project.current_month_spend?.toFixed(2) || '0.00'}
|
|
29
|
+
|
|
30
|
+
`;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
output += 'No projects found.\n';
|
|
35
|
+
}
|
|
36
|
+
return output;
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
40
|
+
return `Error fetching projects: ${msg}`;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=list-projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-projects.js","sourceRoot":"","sources":["../../../src/mcp/tools/list-projects.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,MAAc;IAEd,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,uBAAuB,EAAE;YAC7D,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,MAAM,EAAE;gBACnC,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,oCAAoC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAQ,CAAC;QAE5C,sCAAsC;QACtC,IAAI,MAAM,GAAG,gBAAgB,IAAI,CAAC,KAAK,IAAI,CAAC;;CAE/C,CAAC;QAEE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAY,EAAE,GAAW,EAAE,EAAE;gBAClD,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI;CAC5C,CAAC;gBACM,MAAM,IAAI,UAAU,OAAO,CAAC,EAAE;CACrC,CAAC;gBACM,MAAM,IAAI,sBAAsB,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM;;CAExF,CAAC;YACI,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,sBAAsB,CAAC;QACnC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnE,OAAO,4BAA4B,GAAG,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool: optimize_prompt
|
|
3
|
+
*
|
|
4
|
+
* Scores the user's prompt and optionally rewrites it using an LLM
|
|
5
|
+
* before complex tasks. Returns the optimized prompt or null if the
|
|
6
|
+
* prompt is already strong. Handles 402 gracefully for free-tier users.
|
|
7
|
+
*/
|
|
8
|
+
import type { OptimizePromptToolInput, OptimizePromptToolResult } from '../types.js';
|
|
9
|
+
export declare const OPTIMIZE_PROMPT_TOOL: {
|
|
10
|
+
name: string;
|
|
11
|
+
description: string;
|
|
12
|
+
inputSchema: {
|
|
13
|
+
type: "object";
|
|
14
|
+
required: string[];
|
|
15
|
+
properties: {
|
|
16
|
+
prompt: {
|
|
17
|
+
type: "string";
|
|
18
|
+
description: string;
|
|
19
|
+
};
|
|
20
|
+
context: {
|
|
21
|
+
type: "string";
|
|
22
|
+
description: string;
|
|
23
|
+
};
|
|
24
|
+
threshold: {
|
|
25
|
+
type: "number";
|
|
26
|
+
description: string;
|
|
27
|
+
minimum: number;
|
|
28
|
+
maximum: number;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Call the Verbal optimize API and return the optimization result.
|
|
35
|
+
*
|
|
36
|
+
* Handles 402 → available: false (free tier, no upgrade nagging).
|
|
37
|
+
* Throws on other non-OK responses so the MCP server can surface the error.
|
|
38
|
+
*
|
|
39
|
+
* @param params Tool input (prompt, context?, threshold?)
|
|
40
|
+
* @param apiKey Verbal API key (Bearer token)
|
|
41
|
+
* @param endpoint Verbal API base URL (e.g. https://verbal.run)
|
|
42
|
+
*/
|
|
43
|
+
export declare function optimizePromptTool(params: OptimizePromptToolInput, apiKey: string, endpoint: string): Promise<OptimizePromptToolResult>;
|
|
44
|
+
//# sourceMappingURL=optimize-prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimize-prompt.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/optimize-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAMrF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;CA4BhC,CAAC;AAMF;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,wBAAwB,CAAC,CAsDnC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool: optimize_prompt
|
|
3
|
+
*
|
|
4
|
+
* Scores the user's prompt and optionally rewrites it using an LLM
|
|
5
|
+
* before complex tasks. Returns the optimized prompt or null if the
|
|
6
|
+
* prompt is already strong. Handles 402 gracefully for free-tier users.
|
|
7
|
+
*/
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Tool definition
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
export const OPTIMIZE_PROMPT_TOOL = {
|
|
12
|
+
name: 'optimize_prompt',
|
|
13
|
+
description: 'Score and optionally rewrite a prompt before complex tasks. ' +
|
|
14
|
+
'Returns an optimized version if the prompt can be improved, or null if it is already strong. ' +
|
|
15
|
+
'Call this before any multi-step, vague, or underspecified request.',
|
|
16
|
+
inputSchema: {
|
|
17
|
+
type: 'object',
|
|
18
|
+
required: ['prompt'],
|
|
19
|
+
properties: {
|
|
20
|
+
prompt: {
|
|
21
|
+
type: 'string',
|
|
22
|
+
description: 'The prompt text to analyze and optionally optimize.',
|
|
23
|
+
},
|
|
24
|
+
context: {
|
|
25
|
+
type: 'string',
|
|
26
|
+
description: 'Optional context about the task (e.g., tech stack, project type) to improve rewrite quality.',
|
|
27
|
+
},
|
|
28
|
+
threshold: {
|
|
29
|
+
type: 'number',
|
|
30
|
+
description: 'Score threshold (0-100) below which LLM rewrite is triggered. Default: 70.',
|
|
31
|
+
minimum: 0,
|
|
32
|
+
maximum: 100,
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// Tool implementation
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
/**
|
|
41
|
+
* Call the Verbal optimize API and return the optimization result.
|
|
42
|
+
*
|
|
43
|
+
* Handles 402 → available: false (free tier, no upgrade nagging).
|
|
44
|
+
* Throws on other non-OK responses so the MCP server can surface the error.
|
|
45
|
+
*
|
|
46
|
+
* @param params Tool input (prompt, context?, threshold?)
|
|
47
|
+
* @param apiKey Verbal API key (Bearer token)
|
|
48
|
+
* @param endpoint Verbal API base URL (e.g. https://verbal.run)
|
|
49
|
+
*/
|
|
50
|
+
export async function optimizePromptTool(params, apiKey, endpoint) {
|
|
51
|
+
const body = { prompt: params.prompt };
|
|
52
|
+
if (params.context !== undefined)
|
|
53
|
+
body.context = params.context;
|
|
54
|
+
if (params.threshold !== undefined)
|
|
55
|
+
body.threshold = params.threshold;
|
|
56
|
+
const response = await fetch(`${endpoint}/api/v1/optimize`, {
|
|
57
|
+
method: 'POST',
|
|
58
|
+
headers: {
|
|
59
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
60
|
+
'Content-Type': 'application/json',
|
|
61
|
+
},
|
|
62
|
+
body: JSON.stringify(body),
|
|
63
|
+
});
|
|
64
|
+
// Tier gate: free plan does not have prompt optimization
|
|
65
|
+
if (response.status === 402) {
|
|
66
|
+
let upgradeUrl = '/pricing';
|
|
67
|
+
try {
|
|
68
|
+
const data = (await response.json());
|
|
69
|
+
if (typeof data.upgradeUrl === 'string') {
|
|
70
|
+
upgradeUrl = data.upgradeUrl;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// ignore parse errors
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
available: false,
|
|
78
|
+
reason: 'Prompt optimization is not available on your current plan.',
|
|
79
|
+
upgrade_url: upgradeUrl,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
if (!response.ok) {
|
|
83
|
+
throw new Error(`optimize_prompt API error: ${response.status} ${response.statusText}`);
|
|
84
|
+
}
|
|
85
|
+
const data = (await response.json());
|
|
86
|
+
return {
|
|
87
|
+
available: true,
|
|
88
|
+
original_score: data.original_score,
|
|
89
|
+
optimized_prompt: data.optimized_prompt,
|
|
90
|
+
improvement_delta: data.improvement_delta,
|
|
91
|
+
issues: data.issues,
|
|
92
|
+
rewrite_triggered: data.rewrite_triggered,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=optimize-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimize-prompt.js","sourceRoot":"","sources":["../../../src/mcp/tools/optimize-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACT,8DAA8D;QAC9D,+FAA+F;QAC/F,oEAAoE;IACtE,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,QAAQ,EAAE,CAAC,QAAQ,CAAC;QACpB,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAiB;gBACvB,WAAW,EAAE,qDAAqD;aACnE;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAiB;gBACvB,WAAW,EACT,8FAA8F;aACjG;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAiB;gBACvB,WAAW,EACT,4EAA4E;gBAC9E,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,GAAG;aACb;SACF;KACF;CACF,CAAC;AAEF,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAA+B,EAC/B,MAAc,EACd,QAAgB;IAEhB,MAAM,IAAI,GAA4B,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAChE,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;QAAE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAChE,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;QAAE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAEtE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,kBAAkB,EAAE;QAC1D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,MAAM,EAAE;YACnC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;IAEH,yDAAyD;IACzD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,IAAI,UAAU,GAAG,UAAU,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;YAChE,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;gBACxC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YAC/B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;QACD,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,4DAA4D;YACpE,WAAW,EAAE,UAAU;SACxB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,8BAA8B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACvE,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAMlC,CAAC;IAEF,OAAO;QACL,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;KAC1C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for Verbal MCP service
|
|
3
|
+
*/
|
|
4
|
+
export interface UsageEvent {
|
|
5
|
+
event_id?: string;
|
|
6
|
+
event_type: 'prompt' | 'usage';
|
|
7
|
+
timestamp?: string;
|
|
8
|
+
source?: string;
|
|
9
|
+
client?: string;
|
|
10
|
+
org_id?: string;
|
|
11
|
+
project?: string;
|
|
12
|
+
user?: string;
|
|
13
|
+
tags?: string[];
|
|
14
|
+
metadata?: Record<string, unknown>;
|
|
15
|
+
prompt?: string;
|
|
16
|
+
response?: string;
|
|
17
|
+
provider?: string;
|
|
18
|
+
model?: string;
|
|
19
|
+
tokens_in?: number;
|
|
20
|
+
tokens_out?: number;
|
|
21
|
+
total_tokens?: number;
|
|
22
|
+
cache_read_tokens?: number;
|
|
23
|
+
cache_write_tokens?: number;
|
|
24
|
+
cost?: number;
|
|
25
|
+
currency?: string;
|
|
26
|
+
/** Whether this usage is API-billed (per-token) or subscription-covered (flat fee). */
|
|
27
|
+
billing_type?: 'api' | 'subscription';
|
|
28
|
+
prompt_name?: string;
|
|
29
|
+
prompt_version?: string;
|
|
30
|
+
session_id?: string;
|
|
31
|
+
request_id?: string;
|
|
32
|
+
response_id?: string;
|
|
33
|
+
duration_ms?: number;
|
|
34
|
+
/** Verbal conversation ID to link this event to. */
|
|
35
|
+
conversation_id?: string;
|
|
36
|
+
conversation_title?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface IngestPayload {
|
|
39
|
+
provider: string;
|
|
40
|
+
model: string;
|
|
41
|
+
prompt_tokens?: number;
|
|
42
|
+
completion_tokens?: number;
|
|
43
|
+
total_tokens?: number;
|
|
44
|
+
cache_read_tokens?: number;
|
|
45
|
+
cache_write_tokens?: number;
|
|
46
|
+
estimated_cost?: number;
|
|
47
|
+
/** Billing type: 'api' for per-token pricing, 'subscription' for flat-rate plans. */
|
|
48
|
+
billing_type?: 'api' | 'subscription';
|
|
49
|
+
request_id?: string;
|
|
50
|
+
user_id?: string;
|
|
51
|
+
tags?: Record<string, string>;
|
|
52
|
+
metadata?: Record<string, unknown>;
|
|
53
|
+
prompt_content?: string;
|
|
54
|
+
response_content?: string;
|
|
55
|
+
/** Optional conversation ID for activity graph linkage. */
|
|
56
|
+
conversation_id?: string;
|
|
57
|
+
/** Optional session ID for grouping events. */
|
|
58
|
+
session_id?: string;
|
|
59
|
+
source?: string;
|
|
60
|
+
client?: string;
|
|
61
|
+
}
|
|
62
|
+
export interface IngestorConfig {
|
|
63
|
+
apiKey: string;
|
|
64
|
+
endpoint: string;
|
|
65
|
+
hmacSecret?: string;
|
|
66
|
+
orgId?: string;
|
|
67
|
+
defaultProject?: string;
|
|
68
|
+
defaultProvider?: string;
|
|
69
|
+
defaultModel?: string;
|
|
70
|
+
source?: string;
|
|
71
|
+
batchSize?: number;
|
|
72
|
+
flushIntervalMs?: number;
|
|
73
|
+
httpTimeoutMs?: number;
|
|
74
|
+
gitContextEnabled?: boolean;
|
|
75
|
+
costCalcEnabled?: boolean;
|
|
76
|
+
/** Default billing type for events captured by this instance. */
|
|
77
|
+
billingType?: 'api' | 'subscription';
|
|
78
|
+
maxRetries?: number;
|
|
79
|
+
retryBaseDelayMs?: number;
|
|
80
|
+
deadLetterPath?: string;
|
|
81
|
+
}
|
|
82
|
+
export interface IngestResult {
|
|
83
|
+
ok: boolean;
|
|
84
|
+
status?: number;
|
|
85
|
+
statusText?: string;
|
|
86
|
+
sent?: number;
|
|
87
|
+
failed?: number;
|
|
88
|
+
}
|
|
89
|
+
export interface ReviewRatings {
|
|
90
|
+
usefulness_rating: number;
|
|
91
|
+
effectiveness_rating: number;
|
|
92
|
+
time_saved_bucket: string;
|
|
93
|
+
improvement_text?: string;
|
|
94
|
+
}
|
|
95
|
+
export interface PendingSession {
|
|
96
|
+
session_id: string;
|
|
97
|
+
session_start: string;
|
|
98
|
+
session_end: string;
|
|
99
|
+
event_count: number;
|
|
100
|
+
}
|
|
101
|
+
export interface OptimizePromptToolInput {
|
|
102
|
+
prompt: string;
|
|
103
|
+
context?: string;
|
|
104
|
+
threshold?: number;
|
|
105
|
+
}
|
|
106
|
+
export type OptimizePromptToolResult = {
|
|
107
|
+
available: true;
|
|
108
|
+
original_score: number;
|
|
109
|
+
optimized_prompt: string | null;
|
|
110
|
+
improvement_delta: number | null;
|
|
111
|
+
issues: string[];
|
|
112
|
+
rewrite_triggered: boolean;
|
|
113
|
+
} | {
|
|
114
|
+
available: false;
|
|
115
|
+
reason: string;
|
|
116
|
+
upgrade_url?: string;
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface Credentials {
|
|
2
|
+
api_key: string;
|
|
3
|
+
org_id: string;
|
|
4
|
+
user_email: string;
|
|
5
|
+
api_url: string;
|
|
6
|
+
ingest_url: string;
|
|
7
|
+
created_at: string;
|
|
8
|
+
}
|
|
9
|
+
export interface DetectionResult {
|
|
10
|
+
tool: 'claude-code' | 'claude-desktop' | 'cursor' | 'codex';
|
|
11
|
+
detected: boolean;
|
|
12
|
+
version?: string;
|
|
13
|
+
configPath: string;
|
|
14
|
+
existingConfig: boolean;
|
|
15
|
+
details: string;
|
|
16
|
+
}
|
|
17
|
+
export type ToolName = DetectionResult['tool'];
|
|
18
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,GAAG,gBAAgB,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC5D,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Non-blocking update check. Fires fetch, writes cache, but does NOT print.
|
|
3
|
+
* Call printUpdateNotice() after your command completes to render the notice.
|
|
4
|
+
*/
|
|
5
|
+
export declare function checkForUpdate(_currentVersion: string): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/update-check/check.ts"],"names":[],"mappings":"AAqCA;;;GAGG;AACH,wBAAsB,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B3E"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { getCredentialsDir, readCredentials } from '../auth/credentials.js';
|
|
4
|
+
const CACHE_FILE = 'update-check.json';
|
|
5
|
+
const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
6
|
+
function getCachePath() {
|
|
7
|
+
return join(getCredentialsDir(), CACHE_FILE);
|
|
8
|
+
}
|
|
9
|
+
function readCache() {
|
|
10
|
+
try {
|
|
11
|
+
const raw = readFileSync(getCachePath(), 'utf-8');
|
|
12
|
+
return JSON.parse(raw);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function writeCache(cache) {
|
|
19
|
+
try {
|
|
20
|
+
const dir = getCredentialsDir();
|
|
21
|
+
mkdirSync(dir, { recursive: true });
|
|
22
|
+
writeFileSync(getCachePath(), JSON.stringify(cache, null, 2));
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// Non-critical — silently ignore write failures
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Non-blocking update check. Fires fetch, writes cache, but does NOT print.
|
|
30
|
+
* Call printUpdateNotice() after your command completes to render the notice.
|
|
31
|
+
*/
|
|
32
|
+
export async function checkForUpdate(_currentVersion) {
|
|
33
|
+
// Skip if user hasn't authenticated yet
|
|
34
|
+
const creds = await readCredentials();
|
|
35
|
+
if (!creds)
|
|
36
|
+
return;
|
|
37
|
+
// Check cache — skip if checked recently
|
|
38
|
+
const cache = readCache();
|
|
39
|
+
if (cache) {
|
|
40
|
+
const elapsed = Date.now() - new Date(cache.checkedAt).getTime();
|
|
41
|
+
if (elapsed < CHECK_INTERVAL_MS)
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
// Fire non-blocking fetch
|
|
45
|
+
try {
|
|
46
|
+
const apiUrl = creds.api_url || 'https://www.getverbal.ai';
|
|
47
|
+
const res = await fetch(`${apiUrl}/api/v1/cli/version`, {
|
|
48
|
+
signal: AbortSignal.timeout(3000), // 3s timeout — don't slow down CLI
|
|
49
|
+
});
|
|
50
|
+
if (!res.ok)
|
|
51
|
+
return;
|
|
52
|
+
const body = (await res.json());
|
|
53
|
+
writeCache({
|
|
54
|
+
checkedAt: new Date().toISOString(),
|
|
55
|
+
latest: body.latest,
|
|
56
|
+
min: body.min,
|
|
57
|
+
message: body.message,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Network error — silently ignore
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/update-check/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAS5E,MAAM,UAAU,GAAG,mBAAmB,CAAC;AACvC,MAAM,iBAAiB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;AAE1D,SAAS,YAAY;IACnB,OAAO,IAAI,CAAC,iBAAiB,EAAE,EAAE,UAAU,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAkB;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;QAChC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,aAAa,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,eAAuB;IAC1D,wCAAwC;IACxC,MAAM,KAAK,GAAG,MAAM,eAAe,EAAE,CAAC;IACtC,IAAI,CAAC,KAAK;QAAE,OAAO;IAEnB,yCAAyC;IACzC,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QACjE,IAAI,OAAO,GAAG,iBAAiB;YAAE,OAAO;IAC1C,CAAC;IAED,0BAA0B;IAC1B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,IAAI,0BAA0B,CAAC;QAC3D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,qBAAqB,EAAE;YACtD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,mCAAmC;SACvE,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO;QAEpB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA4D,CAAC;QAC3F,UAAU,CAAC;YACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../src/update-check/notify.ts"],"names":[],"mappings":"AAaA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CA8B9D"}
|