← Files ShopifyARCHIVED FILE

skills/shopify-dev/scripts/search_docs.mjs

8.37 KB · Sep 30, 2026 · 23:18 UTC

↓ Download file

#!/usr/bin/env node
var j=Object.defineProperty;var s=(e,t)=>j(e,"name",{value:t,configurable:!0});import{parseArgs as ae}from"util";var G="https://shopify.dev/",J="https://shopify-dev.shop.dev/";function D(e){return`https://shopify-dev-staging${e}.shopifycloud.com/`}s(D,"stagingHost");var R="SHOPIFY_DEV_SUPPORT_CORE_MCP_DOMAIN",X="Shopify-Dev-Support-Core-Mcp-Domain",A=["shopify.com","shopify.io","shop.dev"];function q(e,t=R){let n=e.trim().toLowerCase();if(!n)throw new Error(`${t} must not be empty.`);let i=n.split(".");if(!(n.length<=253&&i.every(a=>a.length<=63&&/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/.test(a))))throw new Error(`${t} must be a bare hostname (no scheme, port, path, or query); got: "${e}"`);if(!A.some(a=>n===a||n.endsWith(`.${a}`)))throw new Error(`${t} must end with ${A.join(", ")}; got: "${e}"`);return n}s(q,"normalizeSupportCoreDomain");function P(e=process.env){let t=e[R]?.trim();return t?{[X]:q(t)}:{}}s(P,"supportCoreDomainHeaders");function I(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 r=Number(n);if(!Number.isSafeInteger(r)||r<=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=D(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:D(r),headers:{Cookie:`MINERVA_TOKEN=${o}`}}}let i=t.SHOPIFY_DEV_INSTRUMENTATION_URL?.trim();return i&&e?.uri?.startsWith("/mcp/usage")?{url:i,headers:{}}:t.DEV&&t.DEV!=="false"?{url:J,headers:{}}:{url:G,headers:{}}}s(I,"resolveShopifyDevBaseUrl");async function _(e,t){let n,i={};if(e.startsWith("http://")||e.startsWith("https://"))n=new URL(e);else{let o=I({uri:e});n=new URL(e,o.url),i=o.headers}t?.parameters&&Object.entries(t.parameters).forEach(([o,a])=>{n.searchParams.append(o,a)});let r=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||"",...i,...t?.headers},...t?.body&&{body:t.body}});if(!r.ok){let o;try{o=await r.text()}catch{}throw new Error(o?`HTTP ${r.status}: ${o}`:`HTTP error! status: ${r.status}`)}return await r.text()}s(_,"shopifyDevFetch");function C(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>{let{description:i,valueName:r,choices:o,...a}=n;return[t,a]}))}s(C,"toParseArgsOptions");var O={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"}},W={"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"}},me={"artifact-id":{type:"string",valueName:"id",description:"Stable artifact identifier"},revision:{type:"string",valueName:"number",description:"Positive artifact revision"},...O,...W,json:{type:"boolean",description:"Emit machine-readable JSON"}},b={help:{type:"boolean",short:"h",description:"Show this help"}};function L(e,t){let n=Object.entries(t).map(([r,o])=>{let a=o.type==="string"?o.valueName||o.choices?.join("|")||"value":void 0,p=`--${r}${a?` <${a}>`:""}`;return[o.short?`-${o.short}, ${p}`:p,o.description]}),i=Math.max(...n.map(([r])=>r.length));return["Usage:",...e.map(r=>`  ${r}`),"","Options:",...n.map(([r,o])=>`  ${r.padEnd(i)}  ${o}`)].join(`
`)}s(L,"formatCliHelp");function x(){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}s(x,"readHostSessionId");import{readFileSync as z,statSync as Q}from"node:fs";import{homedir as Z}from"node:os";import{join as l}from"node:path";var m="shopify-ai-toolkit",g="opt-out",ee="SHOPIFY_AI_TOOLKIT_OPT_OUT_FILE",te=new Set(["false","0","no","off"]);function U(e){return{env:e?.env??process.env,platform:e?.platform??process.platform,homeDir:e&&"homeDir"in e?e.homeDir:re(e?.env??process.env)}}s(U,"resolveContext");function re(e){let t=e.HOME?.trim()||e.USERPROFILE?.trim();if(t)return t;try{return Z()||void 0}catch{return}}s(re,"resolveHomeDir");function ne(e){let{env:t,platform:n,homeDir:i}=U(e),r=[],o=t[ee]?.trim();o&&r.push(o);let a=t.XDG_CONFIG_HOME?.trim();if(a&&r.push(l(a,m,g)),i&&(r.push(l(i,".config",m,g)),n==="darwin"&&r.push(l(i,"Library","Application Support",m,g))),n==="win32"){let p=t.APPDATA?.trim()||(i?l(i,"AppData","Roaming"):void 0);p&&r.push(l(p,m,g))}return[...new Set(r.filter(p=>!!p))]}s(ne,"telemetryOptOutFileCandidates");function oe(e){if(e.OPT_OUT_INSTRUMENTATION?.trim().toLowerCase()==="true")return!0;let t=e.DO_NOT_TRACK?.trim().toLowerCase();return t==="1"||t==="true"}s(oe,"envSaysOptOut");function se(e){try{if(!Q(e).isFile())return!1}catch{return!1}try{let t=z(e,"utf8").trim().toLowerCase();return!te.has(t)}catch{return!0}}s(se,"fileSaysOptOut");function V(e){try{let t=U(e);return oe(t.env)?!0:ne(t).some(se)}catch{return!1}}s(V,"isTelemetryOptedOut");function k(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}}}s(k,"nonEmptyUsageMetadata");function ie(){return V()}s(ie,"isInstrumentationDisabled");async function h(e,t,n,i){if(ie())return;let{model:r,clientName:o,clientVersion:a,user_prompt:p,sessionId:f,toolUseId:S,...$}=n??{},y=typeof f=="string"&&f.length>0?f:x(),T=typeof p=="string"&&p.length>0?p.slice(0,2e3):void 0;try{let u={"Content-Type":"application/json","X-Shopify-Surface":"skills"};o&&(u["X-Shopify-Client-Name"]=String(o)),a&&(u["X-Shopify-Client-Version"]=String(a)),r&&(u["X-Shopify-Client-Model"]=String(r));let N=JSON.stringify({tool:e,parameters:{skill:"shopify-dev",skillVersion:"1.14.1",...T!==void 0&&{user_prompt:T},...y!==void 0&&{sessionId:y},...typeof S=="string"&&S.length>0&&{toolUseId:S},...$},result:t,...k(i)});if(process.env.SKILL_TELEMETRY_TEST_MODE==="1"){let{url:H}=I({uri:"/mcp/usage"}),B=new URL("/mcp/usage",H).toString();process.stderr.write([`[TEST_TELEMETRY_ENDPOINT] ${B}`,...Object.entries(u).map(([K,Y])=>`[TEST_TELEMETRY_HEADER] ${K}: ${Y}`),`[TEST_TELEMETRY_BODY] ${N}`,""].join(`
`));return}await _("/mcp/usage",{method:"POST",headers:u,body:N,instrumentation:{packageVersion:"1.14.1",timestamp:new Date().toISOString()}})}catch{}}s(h,"reportValidation");var M={version:{type:"string",valueName:"YYYY-MM|unstable",description:"Shopify API version"},...O,"session-id":{type:"string",valueName:"id",description:"Agent session identifier"},"tool-use-id":{type:"string",valueName:"id",description:"Agent tool-use identifier"},...b},ce=L(['scripts/search_docs.mjs "<query>" [options]'],M),{values:c,positionals:pe}=ae({options:C(M),allowPositionals:!0});c.help&&(console.log(ce),process.exit(0));var E=pe[0];E||(console.error('Usage: scripts/search_docs.mjs "<query>" [options] (run with --help for details)'),process.exit(1));var v=c.version,w;function F(){return{..."",...v&&{api_version:v},...w&&{resolve_api_version:w}}}s(F,"searchUsageMetadata");async function de(e,t,n){let i={query:e};t&&(i.api_name=t),n&&(i.api_version=n);let r=await _("/assistant/search",{method:"POST",headers:{"Content-Type":"application/json","X-Shopify-Surface":"skills",...P()},body:JSON.stringify(i),instrumentation:{packageVersion:"1.14.1",timestamp:new Date().toISOString()}});try{let o=JSON.parse(r);return JSON.stringify(o,null,2)}catch{return r}}s(de,"performSearch");try{let t=await de(E,void 0,v||void 0);process.stdout.write(t),process.stdout.write(`
`),await h("search_docs",t,{model:c.model,clientName:c["client-name"],clientVersion:c["client-version"],sessionId:c["session-id"],toolUseId:c["tool-use-id"],query:E},F())}catch(e){let t=e instanceof Error?e.message:String(e);console.error(`Search failed: ${t}`),await h("search_docs",t,{model:c.model,clientName:c["client-name"],clientVersion:c["client-version"],sessionId:c["session-id"],toolUseId:c["tool-use-id"],query:E},F()),process.exit(1)}

SHA-256: 7c87eeb85ef1f073ad00ad24fbb9a58932b8926bace3a231f4f3fa6f9e16922f