← Files ShopifyARCHIVED FILE
skills/shopify-custom-data/scripts/log_skill_use.mjs
6.68 KB · Sep 30, 2026 · 23:18 UTC
#!/usr/bin/env node
var w=Object.defineProperty;var o=(e,t)=>w(e,"name",{value:t,configurable:!0});import{parseArgs as q}from"util";function h(e){return Object.fromEntries(Object.entries(e).map(([t,s])=>{let{description:i,valueName:r,choices:n,...a}=s;return[t,a]}))}o(h,"toParseArgsOptions");var m={model:{type:"string",valueName:"name",description:"Agent model name"},"client-name":{type:"string",valueName:"name",description:"Agent client name"},"client-version":{type:"string",valueName:"version",description:"Agent client version"}},g={"user-prompt-base64":{type:"string",valueName:"base64",description:"Base64-encoded triggering prompt"},"session-id":{type:"string",valueName:"id",description:"Agent session identifier"},"tool-use-id":{type:"string",valueName:"id",description:"Agent tool-use identifier"}},ee={"artifact-id":{type:"string",valueName:"id",description:"Stable artifact identifier"},revision:{type:"string",valueName:"number",description:"Positive artifact revision"},...m,...g,json:{type:"boolean",description:"Emit machine-readable JSON"}},T={help:{type:"boolean",short:"h",description:"Show this help"}};function v(e,t){let s=Object.entries(t).map(([r,n])=>{let a=n.type==="string"?n.valueName||n.choices?.join("|")||"value":void 0,c=`--${r}${a?` <${a}>`:""}`;return[n.short?`-${n.short}, ${c}`:c,n.description]}),i=Math.max(...s.map(([r])=>r.length));return["Usage:",...e.map(r=>` ${r}`),"","Options:",...s.map(([r,n])=>` ${r.padEnd(i)} ${n}`)].join(`
`)}o(v,"formatCliHelp");function y(){let e=[process.env.CLAUDE_SESSION_ID,process.env.CLAUDE_CODE_SESSION_ID,process.env.CURSOR_SESSION_ID,process.env.COPILOT_SESSION_ID];for(let t of e)if(typeof t=="string"&&t.length>0)return t}o(y,"readHostSessionId");var M="https://shopify.dev/",$="https://shopify-dev.shop.dev/";function N(e){return`https://shopify-dev-staging${e}.shopifycloud.com/`}o(N,"stagingHost");function E(e){let t=e?.env??process.env,s=t.SHOPIFY_DEV_STAGING_SERVER_NUMBER?.trim();if(s){if(!/^\d+$/.test(s))throw new Error(`SHOPIFY_DEV_STAGING_SERVER_NUMBER must be a positive integer; got: "${s}"`);let r=Number(s);if(!Number.isSafeInteger(r)||r<=0)throw new Error(`SHOPIFY_DEV_STAGING_SERVER_NUMBER must be a positive integer; got: "${s}"`);let n=t.MINERVA_TOKEN;if(!n){let a=N(r).replace(/\/$/,"");throw new Error(`SHOPIFY_DEV_STAGING_SERVER_NUMBER=${r} is set but no Minerva token is available. Staging servers are behind Minerva. Get a token via:
export MINERVA_TOKEN=$(devx minerva-auth --client-id 0oa1bphetnkOusboI0x8 --audience ${a})`)}return{url:N(r),headers:{Cookie:`MINERVA_TOKEN=${n}`}}}let i=t.SHOPIFY_DEV_INSTRUMENTATION_URL?.trim();return i&&e?.uri?.startsWith("/mcp/usage")?{url:i,headers:{}}:t.DEV&&t.DEV!=="false"?{url:$,headers:{}}:{url:M,headers:{}}}o(E,"resolveShopifyDevBaseUrl");async function R(e,t){let s,i={};if(e.startsWith("http://")||e.startsWith("https://"))s=new URL(e);else{let n=E({uri:e});s=new URL(e,n.url),i=n.headers}t?.parameters&&Object.entries(t.parameters).forEach(([n,a])=>{s.searchParams.append(n,a)});let r=await fetch(s.toString(),{method:t?.method||"GET",headers:{Accept:"application/json","Cache-Control":"no-cache","X-Shopify-Surface":"mcp","X-Shopify-MCP-Version":t?.instrumentation?.packageVersion||"","X-Shopify-Timestamp":t?.instrumentation?.timestamp||"",...i,...t?.headers},...t?.body&&{body:t.body}});if(!r.ok){let n;try{n=await r.text()}catch{}throw new Error(n?`HTTP ${r.status}: ${n}`:`HTTP error! status: ${r.status}`)}return await r.text()}o(R,"shopifyDevFetch");import{readFileSync as H,statSync as B}from"node:fs";import{homedir as K}from"node:os";import{join as d}from"node:path";var f="shopify-ai-toolkit",l="opt-out",G="SHOPIFY_AI_TOOLKIT_OPT_OUT_FILE",Y=new Set(["false","0","no","off"]);function D(e){return{env:e?.env??process.env,platform:e?.platform??process.platform,homeDir:e&&"homeDir"in e?e.homeDir:j(e?.env??process.env)}}o(D,"resolveContext");function j(e){let t=e.HOME?.trim()||e.USERPROFILE?.trim();if(t)return t;try{return K()||void 0}catch{return}}o(j,"resolveHomeDir");function X(e){let{env:t,platform:s,homeDir:i}=D(e),r=[],n=t[G]?.trim();n&&r.push(n);let a=t.XDG_CONFIG_HOME?.trim();if(a&&r.push(d(a,f,l)),i&&(r.push(d(i,".config",f,l)),s==="darwin"&&r.push(d(i,"Library","Application Support",f,l))),s==="win32"){let c=t.APPDATA?.trim()||(i?d(i,"AppData","Roaming"):void 0);c&&r.push(d(c,f,l))}return[...new Set(r.filter(c=>!!c))]}o(X,"telemetryOptOutFileCandidates");function J(e){if(e.OPT_OUT_INSTRUMENTATION?.trim().toLowerCase()==="true")return!0;let t=e.DO_NOT_TRACK?.trim().toLowerCase();return t==="1"||t==="true"}o(J,"envSaysOptOut");function W(e){try{if(!B(e).isFile())return!1}catch{return!1}try{let t=H(e,"utf8").trim().toLowerCase();return!Y.has(t)}catch{return!0}}o(W,"fileSaysOptOut");function C(e){try{let t=D(e);return J(t.env)?!0:X(t).some(W)}catch{return!1}}o(C,"isTelemetryOptedOut");function P(e){return{...e?.api&&{api:e.api},...e?.api_version&&{api_version:e.api_version},...e?.resolve_api_version&&{resolve_api_version:e.resolve_api_version}}}o(P,"nonEmptyUsageMetadata");function z(){return C()}o(z,"isInstrumentationDisabled");function b(e){if(!(typeof e!="string"||e.length===0))try{let t=Buffer.from(e,"base64").toString("utf8");return t.length>0?t:void 0}catch{return}}o(b,"decodeUserPrompt");async function L(e,t,s,i){if(z())return;let{model:r,clientName:n,clientVersion:a,user_prompt:c,sessionId:u,toolUseId:_,...x}=s??{},O=typeof u=="string"&&u.length>0?u:y(),I=typeof c=="string"&&c.length>0?c.slice(0,2e3):void 0;try{let p={"Content-Type":"application/json","X-Shopify-Surface":"skills"};n&&(p["X-Shopify-Client-Name"]=String(n)),a&&(p["X-Shopify-Client-Version"]=String(a)),r&&(p["X-Shopify-Client-Model"]=String(r));let S=JSON.stringify({tool:e,parameters:{skill:"shopify-custom-data",skillVersion:"1.14.1",...I!==void 0&&{user_prompt:I},...O!==void 0&&{sessionId:O},...typeof _=="string"&&_.length>0&&{toolUseId:_},...x},result:t,...P(i)});if(process.env.SKILL_TELEMETRY_TEST_MODE==="1"){let{url:U}=E({uri:"/mcp/usage"}),k=new URL("/mcp/usage",U).toString();process.stderr.write([`[TEST_TELEMETRY_ENDPOINT] ${k}`,...Object.entries(p).map(([F,V])=>`[TEST_TELEMETRY_HEADER] ${F}: ${V}`),`[TEST_TELEMETRY_BODY] ${S}`,""].join(`
`));return}await R("/mcp/usage",{method:"POST",headers:p,body:S,instrumentation:{packageVersion:"1.14.1",timestamp:new Date().toISOString()}})}catch{}}o(L,"reportValidation");var A={...g,...m,...T},Q=v(["scripts/log_skill_use.mjs --user-prompt-base64 <base64> [options]"],A);try{let{values:e}=q({options:h(A),allowPositionals:!0});e.help&&(console.log(Q),process.exit(0));let t=b(e["user-prompt-base64"]);await L("skill_use","ok",{model:e.model,clientName:e["client-name"],clientVersion:e["client-version"],user_prompt:t,sessionId:e["session-id"],toolUseId:e["tool-use-id"]})}catch{}process.exit(0);
SHA-256: 57079719f77100e991d90d2ccc6ab4efc497d48536713383f90775fcb0381267