@dexcost/sdk 0.2.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/LICENSE +21 -0
- package/README.md +210 -0
- package/dist/adapters/_netbytes.d.ts +31 -0
- package/dist/adapters/_netbytes.d.ts.map +1 -0
- package/dist/adapters/_netbytes.js +154 -0
- package/dist/adapters/_netbytes.js.map +1 -0
- package/dist/adapters/aws-lambda.d.ts +41 -0
- package/dist/adapters/aws-lambda.d.ts.map +1 -0
- package/dist/adapters/aws-lambda.js +65 -0
- package/dist/adapters/aws-lambda.js.map +1 -0
- package/dist/adapters/browser.d.ts +52 -0
- package/dist/adapters/browser.d.ts.map +1 -0
- package/dist/adapters/browser.js +127 -0
- package/dist/adapters/browser.js.map +1 -0
- package/dist/adapters/compute-wrap.d.ts +33 -0
- package/dist/adapters/compute-wrap.d.ts.map +1 -0
- package/dist/adapters/compute-wrap.js +188 -0
- package/dist/adapters/compute-wrap.js.map +1 -0
- package/dist/adapters/data/aws_lambda_pricing.json +61 -0
- package/dist/adapters/gpu-wrap.d.ts +31 -0
- package/dist/adapters/gpu-wrap.d.ts.map +1 -0
- package/dist/adapters/gpu-wrap.js +147 -0
- package/dist/adapters/gpu-wrap.js.map +1 -0
- package/dist/adapters/http.d.ts +58 -0
- package/dist/adapters/http.d.ts.map +1 -0
- package/dist/adapters/http.js +769 -0
- package/dist/adapters/http.js.map +1 -0
- package/dist/adapters/index.d.ts +11 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +12 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/network-accountant.d.ts +63 -0
- package/dist/adapters/network-accountant.d.ts.map +1 -0
- package/dist/adapters/network-accountant.js +153 -0
- package/dist/adapters/network-accountant.js.map +1 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +225 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/scanner.d.ts +39 -0
- package/dist/cli/scanner.d.ts.map +1 -0
- package/dist/cli/scanner.js +480 -0
- package/dist/cli/scanner.js.map +1 -0
- package/dist/clients.d.ts +54 -0
- package/dist/clients.d.ts.map +1 -0
- package/dist/clients.js +240 -0
- package/dist/clients.js.map +1 -0
- package/dist/cloud-detect.d.ts +96 -0
- package/dist/cloud-detect.d.ts.map +1 -0
- package/dist/cloud-detect.js +545 -0
- package/dist/cloud-detect.js.map +1 -0
- package/dist/core/auto-task.d.ts +20 -0
- package/dist/core/auto-task.d.ts.map +1 -0
- package/dist/core/auto-task.js +34 -0
- package/dist/core/auto-task.js.map +1 -0
- package/dist/core/cgroup-reader.d.ts +45 -0
- package/dist/core/cgroup-reader.d.ts.map +1 -0
- package/dist/core/cgroup-reader.js +124 -0
- package/dist/core/cgroup-reader.js.map +1 -0
- package/dist/core/cgroup-walker.d.ts +60 -0
- package/dist/core/cgroup-walker.d.ts.map +1 -0
- package/dist/core/cgroup-walker.js +166 -0
- package/dist/core/cgroup-walker.js.map +1 -0
- package/dist/core/compute-accountant.d.ts +51 -0
- package/dist/core/compute-accountant.d.ts.map +1 -0
- package/dist/core/compute-accountant.js +179 -0
- package/dist/core/compute-accountant.js.map +1 -0
- package/dist/core/compute-runtime.d.ts +42 -0
- package/dist/core/compute-runtime.d.ts.map +1 -0
- package/dist/core/compute-runtime.js +80 -0
- package/dist/core/compute-runtime.js.map +1 -0
- package/dist/core/config.d.ts +44 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +66 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/context.d.ts +76 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +91 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/fargate-metadata.d.ts +27 -0
- package/dist/core/fargate-metadata.d.ts.map +1 -0
- package/dist/core/fargate-metadata.js +102 -0
- package/dist/core/fargate-metadata.js.map +1 -0
- package/dist/core/gpu-accountant.d.ts +104 -0
- package/dist/core/gpu-accountant.d.ts.map +1 -0
- package/dist/core/gpu-accountant.js +383 -0
- package/dist/core/gpu-accountant.js.map +1 -0
- package/dist/core/gpu-runtime.d.ts +58 -0
- package/dist/core/gpu-runtime.d.ts.map +1 -0
- package/dist/core/gpu-runtime.js +131 -0
- package/dist/core/gpu-runtime.js.map +1 -0
- package/dist/core/heuristics.d.ts +74 -0
- package/dist/core/heuristics.d.ts.map +1 -0
- package/dist/core/heuristics.js +182 -0
- package/dist/core/heuristics.js.map +1 -0
- package/dist/core/models.d.ts +149 -0
- package/dist/core/models.d.ts.map +1 -0
- package/dist/core/models.js +226 -0
- package/dist/core/models.js.map +1 -0
- package/dist/core/nvml-reader.d.ts +114 -0
- package/dist/core/nvml-reader.d.ts.map +1 -0
- package/dist/core/nvml-reader.js +323 -0
- package/dist/core/nvml-reader.js.map +1 -0
- package/dist/core/session.d.ts +48 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +123 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/tracker.d.ts +364 -0
- package/dist/core/tracker.d.ts.map +1 -0
- package/dist/core/tracker.js +1073 -0
- package/dist/core/tracker.js.map +1 -0
- package/dist/data/compute_prices.json +180 -0
- package/dist/data/egress_prices.json +418 -0
- package/dist/data/gpu_prices.json +412 -0
- package/dist/data/service_prices.json +2595 -0
- package/dist/dev-console.d.ts +12 -0
- package/dist/dev-console.d.ts.map +1 -0
- package/dist/dev-console.js +60 -0
- package/dist/dev-console.js.map +1 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/instruments/anthropic.d.ts +26 -0
- package/dist/instruments/anthropic.d.ts.map +1 -0
- package/dist/instruments/anthropic.js +242 -0
- package/dist/instruments/anthropic.js.map +1 -0
- package/dist/instruments/bedrock.d.ts +29 -0
- package/dist/instruments/bedrock.d.ts.map +1 -0
- package/dist/instruments/bedrock.js +215 -0
- package/dist/instruments/bedrock.js.map +1 -0
- package/dist/instruments/cohere.d.ts +29 -0
- package/dist/instruments/cohere.d.ts.map +1 -0
- package/dist/instruments/cohere.js +237 -0
- package/dist/instruments/cohere.js.map +1 -0
- package/dist/instruments/gemini.d.ts +30 -0
- package/dist/instruments/gemini.d.ts.map +1 -0
- package/dist/instruments/gemini.js +247 -0
- package/dist/instruments/gemini.js.map +1 -0
- package/dist/instruments/index.d.ts +35 -0
- package/dist/instruments/index.d.ts.map +1 -0
- package/dist/instruments/index.js +54 -0
- package/dist/instruments/index.js.map +1 -0
- package/dist/instruments/mcp.d.ts +24 -0
- package/dist/instruments/mcp.d.ts.map +1 -0
- package/dist/instruments/mcp.js +459 -0
- package/dist/instruments/mcp.js.map +1 -0
- package/dist/instruments/openai.d.ts +26 -0
- package/dist/instruments/openai.d.ts.map +1 -0
- package/dist/instruments/openai.js +221 -0
- package/dist/instruments/openai.js.map +1 -0
- package/dist/instruments/vercel-ai.d.ts +28 -0
- package/dist/instruments/vercel-ai.d.ts.map +1 -0
- package/dist/instruments/vercel-ai.js +192 -0
- package/dist/instruments/vercel-ai.js.map +1 -0
- package/dist/integrations/langchain.d.ts +65 -0
- package/dist/integrations/langchain.d.ts.map +1 -0
- package/dist/integrations/langchain.js +165 -0
- package/dist/integrations/langchain.js.map +1 -0
- package/dist/middleware/express.d.ts +55 -0
- package/dist/middleware/express.d.ts.map +1 -0
- package/dist/middleware/express.js +101 -0
- package/dist/middleware/express.js.map +1 -0
- package/dist/middleware/index.d.ts +6 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +5 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/pricing/compute-pricing.d.ts +57 -0
- package/dist/pricing/compute-pricing.d.ts.map +1 -0
- package/dist/pricing/compute-pricing.js +627 -0
- package/dist/pricing/compute-pricing.js.map +1 -0
- package/dist/pricing/cost_map.json +37665 -0
- package/dist/pricing/egress-pricing.d.ts +55 -0
- package/dist/pricing/egress-pricing.d.ts.map +1 -0
- package/dist/pricing/egress-pricing.js +226 -0
- package/dist/pricing/egress-pricing.js.map +1 -0
- package/dist/pricing/engine.d.ts +24 -0
- package/dist/pricing/engine.d.ts.map +1 -0
- package/dist/pricing/engine.js +148 -0
- package/dist/pricing/engine.js.map +1 -0
- package/dist/pricing/gpu-pricing.d.ts +63 -0
- package/dist/pricing/gpu-pricing.d.ts.map +1 -0
- package/dist/pricing/gpu-pricing.js +484 -0
- package/dist/pricing/gpu-pricing.js.map +1 -0
- package/dist/pricing/rates.d.ts +17 -0
- package/dist/pricing/rates.d.ts.map +1 -0
- package/dist/pricing/rates.js +102 -0
- package/dist/pricing/rates.js.map +1 -0
- package/dist/pricing/service-catalog.d.ts +87 -0
- package/dist/pricing/service-catalog.d.ts.map +1 -0
- package/dist/pricing/service-catalog.js +406 -0
- package/dist/pricing/service-catalog.js.map +1 -0
- package/dist/schema/dexcost-event.v1.json +111 -0
- package/dist/schema/dexcost-task.v1.json +160 -0
- package/dist/schema/validate.d.ts +15 -0
- package/dist/schema/validate.d.ts.map +1 -0
- package/dist/schema/validate.js +87 -0
- package/dist/schema/validate.js.map +1 -0
- package/dist/security/redaction.d.ts +55 -0
- package/dist/security/redaction.d.ts.map +1 -0
- package/dist/security/redaction.js +144 -0
- package/dist/security/redaction.js.map +1 -0
- package/dist/transport/buffer.d.ts +117 -0
- package/dist/transport/buffer.d.ts.map +1 -0
- package/dist/transport/buffer.js +759 -0
- package/dist/transport/buffer.js.map +1 -0
- package/dist/transport/pusher.d.ts +89 -0
- package/dist/transport/pusher.d.ts.map +1 -0
- package/dist/transport/pusher.js +323 -0
- package/dist/transport/pusher.js.map +1 -0
- package/package.json +93 -0
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP (Model Context Protocol) auto-instrumentation for dexcost TypeScript SDK.
|
|
3
|
+
*
|
|
4
|
+
* Monkey-patches `Client.prototype.callTool` to automatically record cost
|
|
5
|
+
* events for every MCP tool invocation within an active task context.
|
|
6
|
+
*/
|
|
7
|
+
import { randomUUID } from "node:crypto";
|
|
8
|
+
import { createCostEvent } from "../core/models.js";
|
|
9
|
+
import { getCurrentTask } from "../core/context.js";
|
|
10
|
+
import { createAutoTask } from "../core/auto-task.js";
|
|
11
|
+
import { registerInstrument } from "./index.js";
|
|
12
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
13
|
+
let _patched = false;
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
15
|
+
let _original = null;
|
|
16
|
+
let _clientClass = null;
|
|
17
|
+
let _buffer = null;
|
|
18
|
+
/** Test helper: inject a mock Client class so tests avoid importing @modelcontextprotocol/sdk. */
|
|
19
|
+
export function _setClientClass(cls) {
|
|
20
|
+
_clientClass = cls;
|
|
21
|
+
}
|
|
22
|
+
/** Test helper: reset to real module resolution. */
|
|
23
|
+
export function _resetClientClass() {
|
|
24
|
+
_clientClass = null;
|
|
25
|
+
}
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// MCP tool name → service catalog key mapping
|
|
28
|
+
//
|
|
29
|
+
// Comprehensive mapping covering all 163 services in service_prices.json.
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
const MCP_TOOL_MAP = {
|
|
32
|
+
// Search
|
|
33
|
+
tavily_search: "tavily_search",
|
|
34
|
+
tavily_extract: "tavily_search",
|
|
35
|
+
tavily_crawl: "tavily_search",
|
|
36
|
+
tavily_map: "tavily_search",
|
|
37
|
+
tavily_research: "tavily_search",
|
|
38
|
+
serper_search: "serper_search",
|
|
39
|
+
serper_google_search: "serper_search",
|
|
40
|
+
exa_search: "exa_search",
|
|
41
|
+
exa_find_similar: "exa_search",
|
|
42
|
+
exa_get_contents: "exa_search",
|
|
43
|
+
perplexity_search: "perplexity_search",
|
|
44
|
+
sonar_search: "perplexity_search",
|
|
45
|
+
brave_web_search: "brave_search",
|
|
46
|
+
brave_local_search: "brave_search",
|
|
47
|
+
brave_search: "brave_search",
|
|
48
|
+
bing_search: "bing_search",
|
|
49
|
+
bing_web_search: "bing_search",
|
|
50
|
+
serpapi_search: "serpapi",
|
|
51
|
+
serpapi_google_search: "serpapi",
|
|
52
|
+
// Scraping
|
|
53
|
+
firecrawl_scrape: "firecrawl_scrape",
|
|
54
|
+
firecrawl_crawl: "firecrawl_scrape",
|
|
55
|
+
firecrawl_map: "firecrawl_scrape",
|
|
56
|
+
firecrawl_search: "firecrawl_scrape",
|
|
57
|
+
firecrawl_extract: "firecrawl_scrape",
|
|
58
|
+
browserbase_create_session: "browserbase",
|
|
59
|
+
browserbase_navigate: "browserbase",
|
|
60
|
+
browserbase_screenshot: "browserbase",
|
|
61
|
+
browserbase_get_content: "browserbase",
|
|
62
|
+
scrapingbee_scrape: "scrapingbee",
|
|
63
|
+
apify_run_actor: "apify",
|
|
64
|
+
apify_get_dataset: "apify",
|
|
65
|
+
scrapingdog_scrape: "scrapingdog",
|
|
66
|
+
diffbot_analyze: "diffbot",
|
|
67
|
+
diffbot_extract: "diffbot",
|
|
68
|
+
jina_read: "jina_reader",
|
|
69
|
+
jina_reader: "jina_reader",
|
|
70
|
+
jina_search: "jina_reader",
|
|
71
|
+
// Vector DBs
|
|
72
|
+
pinecone_query: "pinecone_query",
|
|
73
|
+
pinecone_upsert: "pinecone_query",
|
|
74
|
+
pinecone_delete: "pinecone_query",
|
|
75
|
+
pinecone_fetch: "pinecone_query",
|
|
76
|
+
weaviate_query: "weaviate_cloud",
|
|
77
|
+
weaviate_search: "weaviate_cloud",
|
|
78
|
+
qdrant_search: "qdrant_cloud",
|
|
79
|
+
qdrant_query: "qdrant_cloud",
|
|
80
|
+
qdrant_upsert: "qdrant_cloud",
|
|
81
|
+
milvus_search: "milvus_zilliz",
|
|
82
|
+
milvus_query: "milvus_zilliz",
|
|
83
|
+
astra_query: "astra_db",
|
|
84
|
+
astra_search: "astra_db",
|
|
85
|
+
// Compute / Sandbox
|
|
86
|
+
e2b_run_code: "e2b_sandbox",
|
|
87
|
+
e2b_execute: "e2b_sandbox",
|
|
88
|
+
e2b_create_sandbox: "e2b_sandbox",
|
|
89
|
+
code_execute: "e2b_sandbox",
|
|
90
|
+
modal_run: "modal_compute",
|
|
91
|
+
modal_deploy: "modal_compute",
|
|
92
|
+
lambda_invoke: "aws_lambda",
|
|
93
|
+
// Communication
|
|
94
|
+
twilio_send_sms: "twilio_sms",
|
|
95
|
+
twilio_send_message: "twilio_sms",
|
|
96
|
+
sendgrid_send_email: "sendgrid_email",
|
|
97
|
+
send_email: "sendgrid_email",
|
|
98
|
+
resend_send_email: "resend_email",
|
|
99
|
+
mailgun_send: "mailgun",
|
|
100
|
+
postmark_send: "postmark",
|
|
101
|
+
// Maps
|
|
102
|
+
google_maps_geocode: "google_maps_geocode",
|
|
103
|
+
google_maps_search: "google_maps_places",
|
|
104
|
+
google_maps_directions: "google_maps_directions",
|
|
105
|
+
google_maps_places: "google_maps_places",
|
|
106
|
+
mapbox_geocode: "mapbox_geocoding",
|
|
107
|
+
mapbox_directions: "mapbox_geocoding",
|
|
108
|
+
// Data Enrichment
|
|
109
|
+
people_search: "people_data_labs",
|
|
110
|
+
pdl_search: "people_data_labs",
|
|
111
|
+
pdl_enrich: "people_data_labs",
|
|
112
|
+
clearbit_enrich: "clearbit_enrichment",
|
|
113
|
+
clearbit_lookup: "clearbit_enrichment",
|
|
114
|
+
hunter_search: "hunter_io",
|
|
115
|
+
hunter_email_finder: "hunter_io",
|
|
116
|
+
crunchbase_search: "crunchbase",
|
|
117
|
+
crunchbase_lookup: "crunchbase",
|
|
118
|
+
// Payments
|
|
119
|
+
stripe_create_charge: "stripe_payment",
|
|
120
|
+
stripe_create_payment: "stripe_payment",
|
|
121
|
+
stripe_create_payment_link: "stripe_payment",
|
|
122
|
+
stripe_list_charges: "stripe_payment",
|
|
123
|
+
// Speech / Audio
|
|
124
|
+
elevenlabs_tts: "eleven_labs",
|
|
125
|
+
elevenlabs_text_to_speech: "eleven_labs",
|
|
126
|
+
deepgram_transcribe: "deepgram_transcription",
|
|
127
|
+
assemblyai_transcribe: "assemblyai",
|
|
128
|
+
whisper_transcribe: "openai_whisper",
|
|
129
|
+
// Image Generation
|
|
130
|
+
dalle_generate: "openai_dalle",
|
|
131
|
+
openai_generate_image: "openai_dalle",
|
|
132
|
+
stability_generate: "stability_ai",
|
|
133
|
+
replicate_run: "replicate",
|
|
134
|
+
replicate_predict: "replicate",
|
|
135
|
+
// Document Processing
|
|
136
|
+
textract_analyze: "amazon_textract",
|
|
137
|
+
textract_detect: "amazon_textract",
|
|
138
|
+
document_ai_process: "google_document_ai",
|
|
139
|
+
unstructured_parse: "unstructured_io",
|
|
140
|
+
llamaparse_parse: "llamaparse",
|
|
141
|
+
llamaparse_upload: "llamaparse",
|
|
142
|
+
// Financial Data
|
|
143
|
+
twelve_data_quote: "twelve_data",
|
|
144
|
+
twelve_data_time_series: "twelve_data",
|
|
145
|
+
alpha_vantage_quote: "alpha_vantage",
|
|
146
|
+
polygon_quote: "polygon_io",
|
|
147
|
+
polygon_aggs: "polygon_io",
|
|
148
|
+
coinapi_exchange_rate: "coinapi",
|
|
149
|
+
// Cloud Storage
|
|
150
|
+
s3_get_object: "aws_s3",
|
|
151
|
+
s3_put_object: "aws_s3",
|
|
152
|
+
supabase_query: "supabase",
|
|
153
|
+
supabase_insert: "supabase",
|
|
154
|
+
supabase_select: "supabase",
|
|
155
|
+
// Agent Tools
|
|
156
|
+
composio_execute: "composio",
|
|
157
|
+
composio_action: "composio",
|
|
158
|
+
wolfram_query: "wolfram_alpha",
|
|
159
|
+
wolfram_alpha_query: "wolfram_alpha",
|
|
160
|
+
// Embeddings
|
|
161
|
+
openai_embed: "openai_embeddings",
|
|
162
|
+
cohere_embed: "cohere_embed",
|
|
163
|
+
voyage_embed: "voyage_ai",
|
|
164
|
+
jina_embed: "jina_embeddings",
|
|
165
|
+
mixedbread_embed: "mixedbread_embed",
|
|
166
|
+
nomic_embed: "nomic_embed",
|
|
167
|
+
// Translation
|
|
168
|
+
deepl_translate: "deepl_translate",
|
|
169
|
+
translate_text: "deepl_translate",
|
|
170
|
+
google_translate: "google_translate",
|
|
171
|
+
aws_translate: "aws_translate",
|
|
172
|
+
azure_translate: "azure_translator",
|
|
173
|
+
// Vision / OCR
|
|
174
|
+
google_vision_annotate: "google_vision",
|
|
175
|
+
google_vision_ocr: "google_vision",
|
|
176
|
+
azure_vision_analyze: "azure_computer_vision",
|
|
177
|
+
azure_ocr: "azure_computer_vision",
|
|
178
|
+
aws_rekognition_detect: "aws_rekognition",
|
|
179
|
+
aws_rekognition_labels: "aws_rekognition",
|
|
180
|
+
mathpix_process: "mathpix_ocr",
|
|
181
|
+
// Video AI
|
|
182
|
+
runway_generate: "runway_video",
|
|
183
|
+
heygen_create_video: "heygen_video",
|
|
184
|
+
luma_generate: "luma_video",
|
|
185
|
+
mux_upload: "mux_video",
|
|
186
|
+
mux_create_asset: "mux_video",
|
|
187
|
+
// Messaging / Notification
|
|
188
|
+
slack_post_message: "slack_api",
|
|
189
|
+
slack_send_message: "slack_api",
|
|
190
|
+
slack_chat_post: "slack_api",
|
|
191
|
+
discord_send_message: "discord_api",
|
|
192
|
+
discord_create_message: "discord_api",
|
|
193
|
+
telegram_send_message: "telegram_api",
|
|
194
|
+
telegram_send: "telegram_api",
|
|
195
|
+
twilio_call: "twilio_voice",
|
|
196
|
+
twilio_make_call: "twilio_voice",
|
|
197
|
+
onesignal_send: "onesignal",
|
|
198
|
+
pusher_trigger: "pusher",
|
|
199
|
+
novu_trigger: "novu",
|
|
200
|
+
// Database
|
|
201
|
+
neon_query: "neon_postgres",
|
|
202
|
+
neon_sql: "neon_postgres",
|
|
203
|
+
planetscale_query: "planetscale",
|
|
204
|
+
turso_query: "turso_db",
|
|
205
|
+
turso_execute: "turso_db",
|
|
206
|
+
mongodb_find: "mongodb_atlas",
|
|
207
|
+
mongodb_query: "mongodb_atlas",
|
|
208
|
+
mongodb_insert: "mongodb_atlas",
|
|
209
|
+
upstash_redis_get: "upstash_redis",
|
|
210
|
+
upstash_redis_set: "upstash_redis",
|
|
211
|
+
upstash_redis_command: "upstash_redis",
|
|
212
|
+
fauna_query: "fauna_db",
|
|
213
|
+
cockroach_query: "cockroachdb",
|
|
214
|
+
// Project Management
|
|
215
|
+
jira_create_issue: "jira_api",
|
|
216
|
+
jira_search: "jira_api",
|
|
217
|
+
jira_update_issue: "jira_api",
|
|
218
|
+
jira_get_issue: "jira_api",
|
|
219
|
+
linear_create_issue: "linear_api",
|
|
220
|
+
linear_search: "linear_api",
|
|
221
|
+
linear_update_issue: "linear_api",
|
|
222
|
+
asana_create_task: "asana_api",
|
|
223
|
+
asana_search: "asana_api",
|
|
224
|
+
clickup_create_task: "clickup_api",
|
|
225
|
+
clickup_search: "clickup_api",
|
|
226
|
+
notion_query: "notion_api",
|
|
227
|
+
notion_create_page: "notion_api",
|
|
228
|
+
notion_search: "notion_api",
|
|
229
|
+
notion_update_page: "notion_api",
|
|
230
|
+
// CRM
|
|
231
|
+
salesforce_query: "salesforce_api",
|
|
232
|
+
salesforce_create: "salesforce_api",
|
|
233
|
+
salesforce_soql: "salesforce_api",
|
|
234
|
+
hubspot_create_contact: "hubspot_api",
|
|
235
|
+
hubspot_search: "hubspot_api",
|
|
236
|
+
hubspot_get_contacts: "hubspot_api",
|
|
237
|
+
// DevOps / Code
|
|
238
|
+
github_create_issue: "github_api",
|
|
239
|
+
github_search: "github_api",
|
|
240
|
+
github_create_pr: "github_api",
|
|
241
|
+
github_get_file: "github_api",
|
|
242
|
+
github_list_repos: "github_api",
|
|
243
|
+
gitlab_create_issue: "gitlab_api",
|
|
244
|
+
gitlab_search: "gitlab_api",
|
|
245
|
+
vercel_deploy: "vercel_api",
|
|
246
|
+
vercel_list_deployments: "vercel_api",
|
|
247
|
+
// Social Media
|
|
248
|
+
twitter_post: "twitter_api",
|
|
249
|
+
twitter_search: "twitter_api",
|
|
250
|
+
x_post_tweet: "twitter_api",
|
|
251
|
+
linkedin_post: "linkedin_api",
|
|
252
|
+
linkedin_share: "linkedin_api",
|
|
253
|
+
reddit_submit: "reddit_api",
|
|
254
|
+
reddit_search: "reddit_api",
|
|
255
|
+
youtube_search: "youtube_data_api",
|
|
256
|
+
youtube_list_videos: "youtube_data_api",
|
|
257
|
+
// Weather / News / Geo
|
|
258
|
+
openweathermap_current: "openweathermap",
|
|
259
|
+
openweathermap_forecast: "openweathermap",
|
|
260
|
+
get_weather: "openweathermap",
|
|
261
|
+
weather_forecast: "weatherapi",
|
|
262
|
+
get_news: "newsapi",
|
|
263
|
+
news_search: "newsapi",
|
|
264
|
+
ip_lookup: "ipinfo",
|
|
265
|
+
geolocate: "maxmind_geoip",
|
|
266
|
+
// Workflow Automation
|
|
267
|
+
zapier_nla: "zapier",
|
|
268
|
+
zapier_action: "zapier",
|
|
269
|
+
make_webhook: "make_integromat",
|
|
270
|
+
pipedream_trigger: "pipedream",
|
|
271
|
+
// Payment / E-commerce
|
|
272
|
+
paypal_create_payment: "paypal",
|
|
273
|
+
paypal_capture: "paypal",
|
|
274
|
+
razorpay_create_order: "razorpay",
|
|
275
|
+
razorpay_capture_payment: "razorpay",
|
|
276
|
+
shopify_create_product: "shopify_api",
|
|
277
|
+
shopify_get_orders: "shopify_api",
|
|
278
|
+
// Scraping (new)
|
|
279
|
+
scraperapi_scrape: "scraperapi",
|
|
280
|
+
zenrows_scrape: "zenrows",
|
|
281
|
+
oxylabs_scrape: "oxylabs_scraper",
|
|
282
|
+
// AI/ML Platforms
|
|
283
|
+
huggingface_inference: "huggingface_inference",
|
|
284
|
+
hf_generate: "huggingface_inference",
|
|
285
|
+
roboflow_detect: "roboflow",
|
|
286
|
+
scale_create_task: "scale_ai",
|
|
287
|
+
together_generate: "together_ai",
|
|
288
|
+
groq_chat: "groq_inference",
|
|
289
|
+
fireworks_generate: "fireworks_ai",
|
|
290
|
+
cohere_rerank: "cohere_rerank",
|
|
291
|
+
jina_rerank: "jina_reranker",
|
|
292
|
+
rerank: "cohere_rerank",
|
|
293
|
+
// Cloud Storage (new)
|
|
294
|
+
gcs_upload: "gcs",
|
|
295
|
+
gcs_download: "gcs",
|
|
296
|
+
r2_put_object: "r2_cloudflare",
|
|
297
|
+
r2_get_object: "r2_cloudflare",
|
|
298
|
+
azure_blob_upload: "azure_blob",
|
|
299
|
+
// Document (new)
|
|
300
|
+
adobe_pdf_extract: "adobe_pdf_services",
|
|
301
|
+
docraptor_convert: "docraptor",
|
|
302
|
+
// Speech (new)
|
|
303
|
+
openai_tts: "openai_tts",
|
|
304
|
+
openai_text_to_speech: "openai_tts",
|
|
305
|
+
resemble_generate: "resemble_ai",
|
|
306
|
+
playht_generate: "playht",
|
|
307
|
+
// Image (new)
|
|
308
|
+
midjourney_generate: "midjourney_api",
|
|
309
|
+
fal_generate: "flux_fal",
|
|
310
|
+
flux_generate: "flux_fal",
|
|
311
|
+
leonardo_generate: "leonardo_ai",
|
|
312
|
+
// Data Enrichment (new)
|
|
313
|
+
apollo_search: "apollo_io",
|
|
314
|
+
apollo_enrich: "apollo_io",
|
|
315
|
+
zoominfo_search: "zoominfo_api",
|
|
316
|
+
// E-signature / Calendar
|
|
317
|
+
docusign_send: "docusign",
|
|
318
|
+
docusign_create_envelope: "docusign",
|
|
319
|
+
calendly_create_event: "calendly_api",
|
|
320
|
+
// Monitoring
|
|
321
|
+
sentry_capture: "sentry",
|
|
322
|
+
datadog_submit: "datadog",
|
|
323
|
+
posthog_capture: "posthog",
|
|
324
|
+
mixpanel_track: "mixpanel",
|
|
325
|
+
segment_track: "segment",
|
|
326
|
+
// CDN / Media
|
|
327
|
+
cloudinary_upload: "cloudinary",
|
|
328
|
+
cloudinary_transform: "cloudinary",
|
|
329
|
+
// Compute (new)
|
|
330
|
+
fly_machine_run: "fly_machines",
|
|
331
|
+
cloudflare_worker_run: "cloudflare_workers",
|
|
332
|
+
// Vector DB (new)
|
|
333
|
+
chroma_query: "chroma_cloud",
|
|
334
|
+
chroma_add: "chroma_cloud",
|
|
335
|
+
turbopuffer_query: "turbopuffer",
|
|
336
|
+
turbopuffer_upsert: "turbopuffer",
|
|
337
|
+
// Agent Tools (new)
|
|
338
|
+
browserless_navigate: "browserless",
|
|
339
|
+
browserless_screenshot: "browserless",
|
|
340
|
+
browserless_scrape: "browserless",
|
|
341
|
+
};
|
|
342
|
+
// ---------------------------------------------------------------------------
|
|
343
|
+
// Instrument functions
|
|
344
|
+
// ---------------------------------------------------------------------------
|
|
345
|
+
/**
|
|
346
|
+
* Patch `Client.prototype.callTool` to record cost events.
|
|
347
|
+
*
|
|
348
|
+
* If `@modelcontextprotocol/sdk` is not installed and no mock class is
|
|
349
|
+
* injected, the dynamic import will throw and the function will reject.
|
|
350
|
+
*/
|
|
351
|
+
export async function instrumentMcp(_pricing, buffer) {
|
|
352
|
+
if (_patched)
|
|
353
|
+
return;
|
|
354
|
+
let ClientProto;
|
|
355
|
+
if (_clientClass) {
|
|
356
|
+
ClientProto = _clientClass.prototype;
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
// @ts-expect-error -- @modelcontextprotocol/sdk types are not bundled
|
|
360
|
+
const mcpSdk = await import("@modelcontextprotocol/sdk/client/index.js");
|
|
361
|
+
const Client = mcpSdk.Client;
|
|
362
|
+
ClientProto = Client.prototype;
|
|
363
|
+
}
|
|
364
|
+
_original = ClientProto.callTool;
|
|
365
|
+
_buffer = buffer;
|
|
366
|
+
ClientProto.callTool = async function (params, ...rest) {
|
|
367
|
+
let task = getCurrentTask();
|
|
368
|
+
if (!task) {
|
|
369
|
+
task = createAutoTask("mcp.tool_call");
|
|
370
|
+
_buffer?.upsertTask(task);
|
|
371
|
+
}
|
|
372
|
+
const toolName = params?.name ?? "unknown";
|
|
373
|
+
const startTime = performance.now();
|
|
374
|
+
let isError = false;
|
|
375
|
+
try {
|
|
376
|
+
const result = await _original.call(this, params, ...rest);
|
|
377
|
+
const latencyMs = Math.round(performance.now() - startTime);
|
|
378
|
+
// Check if MCP result itself signals an error
|
|
379
|
+
if (result?.isError) {
|
|
380
|
+
isError = true;
|
|
381
|
+
}
|
|
382
|
+
try {
|
|
383
|
+
recordMcpEvent(toolName, task, latencyMs, isError, this);
|
|
384
|
+
}
|
|
385
|
+
catch {
|
|
386
|
+
// dexcost errors must never crash user code
|
|
387
|
+
}
|
|
388
|
+
return result;
|
|
389
|
+
}
|
|
390
|
+
catch (err) {
|
|
391
|
+
isError = true;
|
|
392
|
+
const latencyMs = Math.round(performance.now() - startTime);
|
|
393
|
+
try {
|
|
394
|
+
recordMcpEvent(toolName, task, latencyMs, isError, this);
|
|
395
|
+
}
|
|
396
|
+
catch {
|
|
397
|
+
// dexcost errors must never crash user code
|
|
398
|
+
}
|
|
399
|
+
throw err;
|
|
400
|
+
}
|
|
401
|
+
};
|
|
402
|
+
_patched = true;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Remove the monkey-patch and restore the original `callTool` method.
|
|
406
|
+
*/
|
|
407
|
+
export function uninstrumentMcp() {
|
|
408
|
+
if (!_patched || !_original)
|
|
409
|
+
return;
|
|
410
|
+
if (_clientClass) {
|
|
411
|
+
_clientClass.prototype.callTool = _original;
|
|
412
|
+
}
|
|
413
|
+
_original = null;
|
|
414
|
+
_buffer = null;
|
|
415
|
+
_patched = false;
|
|
416
|
+
}
|
|
417
|
+
// ---------------------------------------------------------------------------
|
|
418
|
+
// Internal helpers
|
|
419
|
+
// ---------------------------------------------------------------------------
|
|
420
|
+
function recordMcpEvent(toolName, task, latencyMs, isError, instance) {
|
|
421
|
+
if (!_buffer)
|
|
422
|
+
return;
|
|
423
|
+
const { costUsd, costConfidence, pricingSource } = resolveCost(toolName);
|
|
424
|
+
const mcpServer = instance?._serverName ?? "unknown";
|
|
425
|
+
const event = createCostEvent({
|
|
426
|
+
eventId: randomUUID(),
|
|
427
|
+
taskId: task.taskId,
|
|
428
|
+
eventType: "external_cost",
|
|
429
|
+
costUsd,
|
|
430
|
+
costConfidence,
|
|
431
|
+
pricingSource,
|
|
432
|
+
serviceName: `mcp:${toolName}`,
|
|
433
|
+
latencyMs,
|
|
434
|
+
isRetry: false,
|
|
435
|
+
details: {
|
|
436
|
+
mcp_tool: toolName,
|
|
437
|
+
mcp_server: mcpServer,
|
|
438
|
+
latency_ms: latencyMs,
|
|
439
|
+
is_error: isError,
|
|
440
|
+
},
|
|
441
|
+
});
|
|
442
|
+
_buffer.addEvent(event);
|
|
443
|
+
task.externalCostUsd += costUsd;
|
|
444
|
+
task.totalCostUsd += costUsd;
|
|
445
|
+
_buffer.upsertTask(task);
|
|
446
|
+
}
|
|
447
|
+
function resolveCost(toolName) {
|
|
448
|
+
// Service catalog mapping — recognised tools get "estimated" confidence
|
|
449
|
+
// since we know the service but not exact usage-based cost from this call.
|
|
450
|
+
const catalogKey = MCP_TOOL_MAP[toolName];
|
|
451
|
+
if (catalogKey) {
|
|
452
|
+
return { costUsd: 0, costConfidence: "estimated", pricingSource: "service_catalog" };
|
|
453
|
+
}
|
|
454
|
+
// Unknown tool
|
|
455
|
+
return { costUsd: 0, costConfidence: "unknown", pricingSource: "unknown" };
|
|
456
|
+
}
|
|
457
|
+
// Self-register so the instrument registry can discover us.
|
|
458
|
+
registerInstrument("mcp", instrumentMcp, uninstrumentMcp);
|
|
459
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/instruments/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI auto-instrumentation for dexcost TypeScript SDK.
|
|
3
|
+
*
|
|
4
|
+
* Monkey-patches `OpenAI.Chat.Completions.prototype.create` to automatically
|
|
5
|
+
* record cost events and aggregate token usage on the active task context.
|
|
6
|
+
*
|
|
7
|
+
* Supports both non-streaming and streaming responses.
|
|
8
|
+
*/
|
|
9
|
+
import type { EventBuffer } from "../transport/buffer.js";
|
|
10
|
+
import type { PricingEngine } from "../pricing/engine.js";
|
|
11
|
+
/** Test helper: inject a mock Completions class so tests avoid importing openai. */
|
|
12
|
+
export declare function _setCompletionsClass(cls: any): void;
|
|
13
|
+
/** Test helper: reset to real module resolution. */
|
|
14
|
+
export declare function _resetCompletionsClass(): void;
|
|
15
|
+
/**
|
|
16
|
+
* Patch `OpenAI.Chat.Completions.prototype.create` to record cost events.
|
|
17
|
+
*
|
|
18
|
+
* If `openai` is not installed and no mock class is injected, the dynamic
|
|
19
|
+
* import will throw and the function will reject.
|
|
20
|
+
*/
|
|
21
|
+
export declare function instrumentOpenai(pricing: PricingEngine, buffer: EventBuffer): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Remove the monkey-patch and restore the original `create` method.
|
|
24
|
+
*/
|
|
25
|
+
export declare function uninstrumentOpenai(): void;
|
|
26
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/instruments/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,sBAAsB,CAAC;AAYtE,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAEnD;AAED,oDAAoD;AACpD,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAmDf;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAWzC"}
|