#!/usr/bin/env node var ce=Object.defineProperty;var r=(e,t)=>ce(e,"name",{value:t,configurable:!0});import{createHash as Te}from"crypto";import{chmodSync as ye,closeSync as Ne,lstatSync as Re,mkdirSync as be,openSync as De,readdirSync as Ce,rmSync as Ae,statSync as Le}from"fs";import{tmpdir as xe}from"os";import{join as D}from"path";import{parseArgs as ke}from"util";var N="assistant-first-turn-complete",R=["up","down","mixed"],u=["worked","partial","failed","not_used"];function E(e){return typeof e=="string"&&e.length>0?e:void 0}r(E,"nonEmpty");function h(){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}r(h,"readHostSessionId");function x(e){let t=r(a=>`${a}:${e.trigger}:1`,"key"),n=E(e.sessionId);if(n)return{feedbackId:t(n),feedbackIdSource:"session"};let s=E(e.conversationId);if(s)return{feedbackId:t(s),feedbackIdSource:"conversation"};let i=E(e.toolUseId);if(i)return{feedbackId:t(i),feedbackIdSource:"tool-use"};let o=E(e.fallbackId);if(o)return{feedbackId:t(o),feedbackIdSource:"random"}}r(x,"deriveFeedbackId");import{readFileSync as de,statSync as pe}from"node:fs";import{homedir as ue}from"node:os";import{join as l}from"node:path";var I="shopify-ai-toolkit",S="opt-out",fe="SHOPIFY_AI_TOOLKIT_OPT_OUT_FILE",le=new Set(["false","0","no","off"]);function k(e){return{env:e?.env??process.env,platform:e?.platform??process.platform,homeDir:e&&"homeDir"in e?e.homeDir:me(e?.env??process.env)}}r(k,"resolveContext");function me(e){let t=e.HOME?.trim()||e.USERPROFILE?.trim();if(t)return t;try{return ue()||void 0}catch{return}}r(me,"resolveHomeDir");function ge(e){let{env:t,platform:n,homeDir:s}=k(e),i=[],o=t[fe]?.trim();o&&i.push(o);let a=t.XDG_CONFIG_HOME?.trim();if(a&&i.push(l(a,I,S)),s&&(i.push(l(s,".config",I,S)),n==="darwin"&&i.push(l(s,"Library","Application Support",I,S))),n==="win32"){let d=t.APPDATA?.trim()||(s?l(s,"AppData","Roaming"):void 0);d&&i.push(l(d,I,S))}return[...new Set(i.filter(d=>!!d))]}r(ge,"telemetryOptOutFileCandidates");function _e(e){if(e.OPT_OUT_INSTRUMENTATION?.trim().toLowerCase()==="true")return!0;let t=e.DO_NOT_TRACK?.trim().toLowerCase();return t==="1"||t==="true"}r(_e,"envSaysOptOut");function Ee(e){try{if(!pe(e).isFile())return!1}catch{return!1}try{let t=de(e,"utf8").trim().toLowerCase();return!le.has(t)}catch{return!0}}r(Ee,"fileSaysOptOut");function O(e){try{let t=k(e);return _e(t.env)?!0:ge(t).some(Ee)}catch{return!1}}r(O,"isTelemetryOptedOut");function P(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>{let{description:s,valueName:i,choices:o,...a}=n;return[t,a]}))}r(P,"toParseArgsOptions");var v={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"}},m={"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"}},We={"artifact-id":{type:"string",valueName:"id",description:"Stable artifact identifier"},revision:{type:"string",valueName:"number",description:"Positive artifact revision"},...v,...m,json:{type:"boolean",description:"Emit machine-readable JSON"}},U={help:{type:"boolean",short:"h",description:"Show this help"}};function V(e,t){let n=new Set([...Object.keys(v),...Object.keys(m),"artifact-id","revision"]),s=Object.entries(t).filter(([o])=>!0).map(([o,a])=>{let d=a.type==="string"?a.valueName||a.choices?.join("|")||"value":void 0,p=`--${o}${d?` <${d}>`:""}`;return[a.short?`-${a.short}, ${p}`:p,a.description]}),i=Math.max(...s.map(([o])=>o.length));return["Usage:",...e.map(o=>` ${o}`),"","Options:",...s.map(([o,a])=>` ${o.padEnd(i)} ${a}`)].join(` `)}r(V,"formatCliHelp");var Ie="https://shopify.dev/",Se="https://shopify-dev.shop.dev/";function F(e){return`https://shopify-dev-staging${e}.shopifycloud.com/`}r(F,"stagingHost");function b(e){let t=e?.env??process.env,n=t.SHOPIFY_DEV_STAGING_SERVER_NUMBER?.trim();if(n){if(!/^\d+$/.test(n))throw new Error(`SHOPIFY_DEV_STAGING_SERVER_NUMBER must be a positive integer; got: "${n}"`);let i=Number(n);if(!Number.isSafeInteger(i)||i<=0)throw new Error(`SHOPIFY_DEV_STAGING_SERVER_NUMBER must be a positive integer; got: "${n}"`);let o=t.MINERVA_TOKEN;if(!o){let a=F(i).replace(/\/$/,"");throw new Error(`SHOPIFY_DEV_STAGING_SERVER_NUMBER=${i} 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:F(i),headers:{Cookie:`MINERVA_TOKEN=${o}`}}}let s=t.SHOPIFY_DEV_INSTRUMENTATION_URL?.trim();return s&&e?.uri?.startsWith("/mcp/usage")?{url:s,headers:{}}:t.DEV&&t.DEV!=="false"?{url:Se,headers:{}}:{url:Ie,headers:{}}}r(b,"resolveShopifyDevBaseUrl");async function M(e,t){let n,s={};if(e.startsWith("http://")||e.startsWith("https://"))n=new URL(e);else{let o=b({uri:e});n=new URL(e,o.url),s=o.headers}t?.parameters&&Object.entries(t.parameters).forEach(([o,a])=>{n.searchParams.append(o,a)});let i=await fetch(n.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||"",...s,...t?.headers},...t?.body&&{body:t.body}});if(!i.ok){let o;try{o=await i.text()}catch{}throw new Error(o?`HTTP ${i.status}: ${o}`:`HTTP error! status: ${i.status}`)}return await i.text()}r(M,"shopifyDevFetch");function w(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}}}r(w,"nonEmptyUsageMetadata");function Oe(){return O()}r(Oe,"isInstrumentationDisabled");function $(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}}r($,"decodeUserPrompt");async function H(e,t,n,s){if(!!0||Oe())return;let{model:i,clientName:o,clientVersion:a,user_prompt:d,sessionId:p,toolUseId:_,...ne}=n??{},C=typeof p=="string"&&p.length>0?p:h(),A=typeof d=="string"&&d.length>0?d.slice(0,2e3):void 0;try{let f={"Content-Type":"application/json","X-Shopify-Surface":"skills"};o&&(f["X-Shopify-Client-Name"]=String(o)),a&&(f["X-Shopify-Client-Version"]=String(a)),i&&(f["X-Shopify-Client-Model"]=String(i));let L=JSON.stringify({tool:e,parameters:{skill:"shopify-payments-apps",skillVersion:"1.16.0",...A!==void 0&&{user_prompt:A},...C!==void 0&&{sessionId:C},...typeof _=="string"&&_.length>0&&{toolUseId:_},...ne},result:t,...w(s)});if(process.env.SKILL_TELEMETRY_TEST_MODE==="1"){let{url:oe}=b({uri:"/mcp/usage"}),ie=new URL("/mcp/usage",oe).toString();process.stderr.write([`[TEST_TELEMETRY_ENDPOINT] ${ie}`,...Object.entries(f).map(([se,ae])=>`[TEST_TELEMETRY_HEADER] ${se}: ${ae}`),`[TEST_TELEMETRY_BODY] ${L}`,""].join(` `));return}await M("/mcp/usage",{method:"POST",headers:f,body:L,instrumentation:{packageVersion:"1.16.0",timestamp:new Date().toISOString()}})}catch{}}r(H,"reportValidation");var G=".feedback",Pe=1440*60*1e3;function Ue(){let e=process.getuid?.()??0;return D(xe(),`shopify-ai-toolkit-telemetry-${e}`)}r(Ue,"markerDir");function Ve(e,t){let n=Te("sha256").update(t).digest("hex").slice(0,32);return D(e,`${n}${G}`)}r(Ve,"markerPath");function Fe(e){try{let t=Date.now()-Pe;for(let n of Ce(e)){if(!n.endsWith(G))continue;let s=D(e,n);try{Le(s).mtimeMs0?e:void 0}r(j,"nonEmptyFlag");function T(e){return{type:"string",choices:u,description:e}}r(T,"verdictOption");var Y={overall:{type:"string",choices:R,description:"Overall toolkit verdict for this turn"},"docs-context":T("Verdict for docs/search context"),"schema-validation":T("Verdict for schema/code validation"),"api-version":T("Verdict for API version targeting"),codegen:T("Verdict for generated code"),"comment-base64":{type:"string",valueName:"base64",description:`Base64-encoded rationale, decoded and truncated to ${500} chars (base64 keeps arbitrary text inert in the shell)`},"session-id":m["session-id"],"tool-use-id":m["tool-use-id"],...v,...U},we=[V(["scripts/log_feedback.mjs --overall --docs-context "," --schema-validation --api-version --codegen "," --comment-base64 [--session-id ] [--tool-use-id ]"," [--model ] [--client-name ] [--client-version ]"],Y),"","Each is one of: worked | partial | failed | not_used.","Run once per turn. Without a session id or tool-use id there is no dedupe","key, so nothing is sent."].join(` `);function X(){console.error("Usage: scripts/log_feedback.mjs --overall --docs-context --schema-validation --api-version --codegen --comment-base64 [options] (run with --help for details)"),process.exit(1)}r(X,"exitWithUsageHint");var J=(()=>{try{return ke({options:P(Y),allowPositionals:!0})}catch{return}})();J||X();var{values:c}=J;c.help&&(console.log(we),process.exit(0));O()&&process.exit(0);var W=g(R,c.overall),z=g(u,c["docs-context"]),q=g(u,c["schema-validation"]),Q=g(u,c["api-version"]),Z=g(u,c.codegen),B=c["comment-base64"],$e=B===""?"":$(B),ee=$e?.slice(0,500);(!W||!z||!q||!Q||!Z||ee===void 0)&&X();var te=j(c["session-id"])??h(),re=j(c["tool-use-id"]),y=x({trigger:N,sessionId:te,toolUseId:re});y&&Me(y.feedbackId)&&await H("feedback","ok",{model:c.model,clientName:c["client-name"],clientVersion:c["client-version"],sessionId:te,toolUseId:re,feedbackVersion:1,feedbackId:y.feedbackId,feedbackIdSource:y.feedbackIdSource,trigger:N,overall:W,docsContext:z,schemaValidation:q,apiVersion:Q,codegen:Z,comment:ee});process.exit(0);