} must be a bare hostname (no scheme, port, path, or query); got: "${
t
}"`
);
if
(
!
j.
some
(
a
=>
n
===
a
||
n.
endsWith
(
`.${
a
}`
)))
throw
new
Error
(
`${
e
} must end with ${
j
.
join
(
", "
)
}; got: "${
t
}"`
);
return
n}
r
(Re,
"normalizeSupportCoreDomain"
);
function
K
(
t
=
process.env){
let
e
=
t[w]?.
trim
();
return
e
?
{[ye]:
Re
(e)}
:
{}}
r
(
K
,
"supportCoreDomainHeaders"
);
function
Ae
(
t
){
let
e;
try
{e
=new
URL
(t)}
catch
{
throw
new
Error
(
`${
R
} must identify a local Shopify.dev origin`
)}
let
n
=
e.hostname
===
"localhost"
||
e.hostname
===
"[::1]"
||
ve
(e.hostname)
===
4
&&
e.hostname.
startsWith
(
"127."
),s
=
/
^
shopify-dev-
[a-z0-9]
(?:
[a-z0-9-]
*
[a-z0-9]
)
?
\.
shop
\.
dev
$
/
u
.
test
(e.hostname);
if
(
!
n
&&!
s
||
n
&&!
e.port
||
s
&&
e.protocol
!==
"https:"
||
n
&&
e.protocol
!==
"http:"
&&
e.protocol
!==
"https:"
||
e.username
||
e.password
||
e.pathname
!==
""
&&
e.pathname
!==
"/"
||
e.search
||
e.hash)
throw
new
Error
(
`${
R
} must identify a local Shopify.dev origin`
);
return
`${
e
.
origin
}/`
}
r
(Ae,
"normalizeLocalShopifyDevUrl"
);
function
O
(
t
){
let
e
=
t?.env
??
process.env,n
=
e.
SHOPIFY_DEV_STAGING_SERVER_NUMBER
?.
trim
(),s
=
e[
R
]?.
trim
();
if
(s
&&
t?.allowLocalServer){
if
(n
||
e.
DEV
&&
e.
DEV
!==
"false"
||
e[w]?.
trim
())
throw
new
Error
(
`${
R
} cannot be combined with staging, DEV, or Support Core routing overrides`
);
return
{url:
Ae
(s),headers:{}}}
if
(n){
if
(
!
/
^
\d
+$
/
.
test
(n))
throw
new
Error
(
`SHOPIFY_DEV_STAGING_SERVER_NUMBER must be a positive integer; got: "${
n
}"`
);
let
o
=
Number
(n);
if
(
!
Number.
isSafeInteger
(o)
||
o
<=
0
)
throw
new
Error
(
`SHOPIFY_DEV_STAGING_SERVER_NUMBER must be a positive integer; got: "${
n
}"`
);
let
a
=
e.
MINERVA_TOKEN
;
if
(
!
a){
let
p
=
B
(o).
replace
(
/
\/
$
/
,
""
);
throw
new
Error
(
`SHOPIFY_DEV_STAGING_SERVER_NUMBER=${
o
} is set but no Minerva token is available. Staging servers are behind Minerva. Get a token via:
3 export MINERVA_TOKEN=$(devx minerva-auth --client-id 0oa1bphetnkOusboI0x8 --audience ${p})`)}return{url:B(o),headers:{Cookie:`MINERVA_TOKEN=${a}`}}}let i=e.SHOPIFY_DEV_INSTRUMENTATION_URL?.trim();return i&&t?.uri?.startsWith("/mcp/usage")?{url:i,headers:{}}:e.DEV&&e.DEV!=="false"?{url:Ie,headers:{}}:{url:Oe,headers:{}}}r(O,"resolveShopifyDevBaseUrl");async function A(t,e){let n,s={};if(t.startsWith("http://")||t.startsWith("https://"))n=new URL(t);else{let o=O({uri:t,allowLocalServer:e?.allowLocalServer});n=new URL(t,o.url),s=o.headers}e?.parameters&&Object.entries(e.parameters).forEach(([o,a])=>{n.searchParams.append(o,a)});let i=await fetch(n.toString(),{method:e?.method||"GET",...e?.redirect&&{redirect:e.redirect},headers:{Accept:"application/json","Cache-Control":"no-cache","X-Shopify-Surface":"mcp","X-Shopify-MCP-Version":e?.instrumentation?.packageVersion||"","X-Shopify-Timestamp":e?.instrumentation?.timestamp||"",...s,...e?.headers},...e?.body&&{body:e.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(A,"shopifyDevFetch");function Y(t,e=process.env){if(!e.SHOPIFY_DEV_LOCAL_SERVER_URL?.trim())return null;if(!t)throw new Error("SHOPIFY_DEV_LOCAL_SERVER_URL requires source-built Dev MCP or private eval Skills");let{url:n}=O({env:e,uri:"/assistant/search",allowLocalServer:!0});return{baseUrl:n,fetchOptions:{allowLocalServer:!0,redirect:"error",headers:{"Shopify-Dev-Local-Search-Smoke":"1"}}}}r(Y,"resolveLocalAuthoringSearch");var G={shopifyql:[{name:"2027-01",releaseCandidate:!0},{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"}],admin:[{name:"unstable"},{name:"2027-01",releaseCandidate:!0},{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"}],"storefront-graphql":[{name:"unstable"},{name:"2027-01",releaseCandidate:!0},{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"}],partner:[{name:"unstable"},{name:"2027-01",releaseCandidate:!0},{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"}],customer:[{name:"unstable"},{name:"2027-01",releaseCandidate:!0},{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"}],"payments-apps":[{name:"unstable"},{name:"2027-01",releaseCandidate:!0},{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"}],"polaris-app-home":[{name:"v2.0",latestVersion:!0},{name:"v1.1"},{name:"v1.0"}],"polaris-admin-extensions":[{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"},{name:"2025-07"}],"polaris-checkout-extensions":[{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"},{name:"2025-07"}],"polaris-customer-account-extensions":[{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"},{name:"2025-07"}],"pos-ui":[{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"},{name:"2025-07"}],hydrogen:[{name:"2026-10",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"},{name:"2025-07"}],"storefront-web-components":[],functions_cart_checkout_validation:[{name:"unstable"},{name:"2027-01",releaseCandidate:!0},{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"}],functions_cart_transform:[{name:"unstable"},{name:"2027-01",releaseCandidate:!0},{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"}],functions_delivery_customization:[{name:"unstable"},{name:"2027-01",releaseCandidate:!0},{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"}],functions_discount:[{name:"unstable"},{name:"2027-01",releaseCandidate:!0},{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"}],functions_fulfillment_constraints:[{name:"unstable"},{name:"2027-01",releaseCandidate:!0},{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"}],functions_local_pickup_delivery_option_generator:[{name:"unstable",latestVersion:!0}],functions_order_discounts:[{name:"unstable"},{name:"2027-01",releaseCandidate:!0},{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"}],functions_order_routing_location_rule:[{name:"unstable"},{name:"2027-01",releaseCandidate:!0},{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"}],functions_payment_customization:[{name:"unstable"},{name:"2027-01",releaseCandidate:!0},{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"}],functions_pickup_point_delivery_option_generator:[{name:"unstable",latestVersion:!0}],functions_product_discounts:[{name:"unstable"},{name:"2027-01",releaseCandidate:!0},{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"}],functions_shipping_discounts:[{name:"unstable"},{name:"2027-01",releaseCandidate:!0},{name:"2026-10",latestVersion:!0},{name:"2026-07"},{name:"2026-04"},{name:"2026-01"}]};var x=G,q=Object.fromEntries(Object.entries(x).filter(([t,e])=>e.length>0).map(([t,e])=>[t,e.map(n=>n.name)]));function T(t){return Object.prototype.hasOwnProperty.call(q,t)}r(T,"hasSupportedVersions");function J(t){return T(t)?q[t]:[]}r(J,"getSupportedVersions");function Le(t){let e=x[t];if(e)return e.find(n=>n.latestVersion)?.name??e[0]?.name}r(Le,"getLatestVersion");function W(t,e){if(!T(t))throw new Error(`API "${t}" is not in the supported versions catalog. Only call resolveVersion for APIs with entries in SUPPORTED_API_VERSIONS.`);let n=J(t);if(n.length===0)return{ok:!1,reason:"no_versions",supportedVersions:n};let s=Ne(t,e);if(s)return n.includes(s)?{ok:!0,version:s,source:"explicit",supportedVersions:n}:{ok:!1,reason:"unsupported_version",supportedVersions:n};let i=Le(t);return i?{ok:!0,version:i,source:"default",supportedVersions:n}:{ok:!1,reason:"no_versions",supportedVersions:n}}r(W,"resolveVersion");function Ne(t,e){if(!e||t!=="polaris-app-home")return e;let n=e.replace(/^v/,""),s=/^(\d+)$/.exec(n)?.[1];if(s){let p=x[t]?.filter(_=>!_.releaseCandidate&&new RegExp("^v?"+s+"\\.\\d+$").test(_.name)).sort((_,S)=>{let v=Number(_.name.replace(/^v/,"").split(".")[1]),P=Number(S.name.replace(/^v/,"").split(".")[1]);return v-P}).at(-1)?.name;if(p)return p}let i=n.replace(/-rc$/,""),o=[e,n,"v"+i,i],a=J(t);return o.find(p=>a.includes(p))??e}r(Ne,"normalizeRequestedVersion");function X(t){return Object.fromEntries(Object.entries(t).map(([e,n])=>{let{description:s,valueName:i,choices:o,...a}=n;return[e,a]}))}r(X,"toParseArgsOptions");var L={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"}},z={"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"}},It={"artifact-id":{type:"string",valueName:"id",description:"Stable artifact identifier"},revision:{type:"string",valueName:"number",description:"Positive artifact revision"},...L,...z,json:{type:"boolean",description:"Emit machine-readable JSON"}},Q={help:{type:"boolean",short:"h",description:"Show this help"}};function Z(t,e){let n=new Set([...Object.keys(L),...Object.keys(z),"artifact-id","revision"]),s=Object.entries(e).filter(([o])=>!0).map(([o,a])=>{let p=a.type==="string"?a.valueName||a.choices?.join("|")||"value":void 0,_=`--${o}${p?` <${p}>`:""}`;return[a.short?`-${a.short}, ${_}`:_,a.description]}),i=Math.max(...s.map(([o])=>o.length));return["Usage:",...t.map(o=>` ${o}`),"","Options:",...s.map(([o,a])=>` ${o.padEnd(i)} ${a}`)].join(`
4`)}r(Z,"formatCliHelp");function ee(){let t=[process.env.CLAUDE_SESSION_ID,process.env.CLAUDE_CODE_SESSION_ID,process.env.CURSOR_SESSION_ID,process.env.COPILOT_SESSION_ID];for(let e of t)if(typeof e=="string"&&e.length>0)return e}r(ee,"readHostSessionId");import{readFileSync as be,statSync as Ve}from"node:fs";import{homedir as Pe}from"node:os";import{join as I}from"node:path";var N="shopify-ai-toolkit",C="opt-out",De="SHOPIFY_AI_TOOLKIT_OPT_OUT_FILE",we=new Set(["false","0","no","off"]);function te(t){return{env:t?.env??process.env,platform:t?.platform??process.platform,homeDir:t&&"homeDir"in t?t.homeDir:xe(t?.env??process.env)}}r(te,"resolveContext");function xe(t){let e=t.HOME?.trim()||t.USERPROFILE?.trim();if(e)return e;try{return Pe()||void 0}catch{return}}r(xe,"resolveHomeDir");function ke(t){let{env:e,platform:n,homeDir:s}=te(t),i=[],o=e[De]?.trim();o&&i.push(o);let a=e.XDG_CONFIG_HOME?.trim();if(a&&i.push(I(a,N,C)),s&&(i.push(I(s,".config",N,C)),n==="darwin"&&i.push(I(s,"Library","Application Support",N,C))),n==="win32"){let p=e.APPDATA?.trim()||(s?I(s,"AppData","Roaming"):void 0);p&&i.push(I(p,N,C))}return[...new Set(i.filter(p=>!!p))]}r(ke,"telemetryOptOutFileCandidates");function Ue(t){if(t.OPT_OUT_INSTRUMENTATION?.trim().toLowerCase()==="true")return!0;let e=t.DO_NOT_TRACK?.trim().toLowerCase();return e==="1"||e==="true"}r(Ue,"envSaysOptOut");function $e(t){try{if(!Ve(t).isFile())return!1}catch{return!1}try{let e=be(t,"utf8").trim().toLowerCase();return!we.has(e)}catch{return!0}}r($e,"fileSaysOptOut");function ne(t){try{let e=te(t);return Ue(e.env)?!0:ke(e).some($e)}catch{return!1}}r(ne,"isTelemetryOptedOut");function re(t){return{...t?.api&&{api:t.api},...t?.api_version&&{api_version:t.api_version},...t?.resolve_api_version&&{resolve_api_version:t.resolve_api_version}}}r(re,"nonEmptyUsageMetadata");var Fe={ucp:"ucp"},Me="functions_",He="shopify-";function oe(t){if(t)return t.startsWith(Me)?"shopify-functions":Fe[t]??`${He}${t}`}r(oe,"legacySkillName");function Be(){return ne()}r(Be,"isInstrumentationDisabled");async function k(t,e,n,s){if(!!0||Be())return;let{model:i,clientName:o,clientVersion:a,user_prompt:p,sessionId:_,toolUseId:S,topic:v,...P}=n??{},D=typeof v=="string"&&v.length>0?v:void 0,pe=r((...h)=>{for(let E of h)if(typeof E=="string"&&E.length>0)return E},"firstApi")(s?.api,(n??{}).api),de=oe(D??pe??"")??"shopify",M=typeof _=="string"&&_.length>0?_:ee(),H=typeof p=="string"&&p.length>0?p.slice(0,2e3):void 0;try{let h={"Content-Type":"application/json","X-Shopify-Surface":"skills"};o&&(h["X-Shopify-Client-Name"]=String(o)),a&&(h["X-Shopify-Client-Version"]=String(a)),i&&(h["X-Shopify-Client-Model"]=String(i));let E=JSON.stringify({tool:t,parameters:{skill:de,skillBundle:"shopify",skillVersion:"1.19.0",...D!==void 0&&{topic:D},...H!==void 0&&{user_prompt:H},...M!==void 0&&{sessionId:M},...typeof S=="string"&&S.length>0&&{toolUseId:S},...P},result:e,...re(s)});if(process.env.SKILL_TELEMETRY_TEST_MODE==="1"){let{url:ue}=O({uri:"/mcp/usage"}),le=new URL("/mcp/usage",ue).toString();process.stderr.write([`[TEST_TELEMETRY_ENDPOINT] ${le}`,...Object.entries(h).map(([me,fe])=>`[TEST_TELEMETRY_HEADER] ${me}: ${fe}`),`[TEST_TELEMETRY_BODY] ${E}`,""].join(`
5`));return}await A("/mcp/usage",{method:"POST",headers:h,body:E,instrumentation:{packageVersion:"1.19.0",timestamp:new Date().toISOString()}})}catch{}}r(k,"reportValidation");var ce={api:{type:"string",short:"a",description:"Shopify topic to scope results to"},topic:{type:"string",valueName:"name",description:"Routing-table topic this search belongs to"},version:{type:"string",valueName:"YYYY-MM|unstable",description:"Shopify API version"},...L,"session-id":{type:"string",valueName:"id",description:"Agent session identifier"},"tool-use-id":{type:"string",valueName:"id",description:"Agent tool-use identifier"},...Q},Ke=Z(['scripts/search_docs.mjs "<query>" [options]'],ce),{values:c,positionals:Ye}=je({options:X(ce),allowPositionals:!0});c.help&&(console.log(Ke),process.exit(0));var V=Ye[0];V||(console.error('Usage: scripts/search_docs.mjs "<query>" [options] (run with --help for details)'),process.exit(1));var y=c.version,F,Ge=typeof __API_NAME__<"u"?__API_NAME__:void 0,g=c.api||Ge||void 0,b=typeof u<"u"?u:void 0,se=typeof m<"u"?m:void 0,U=typeof l<"u"?l:void 0;c.api&&b&&!b.includes(c.api)&&(se?.includes(c.api)?process.stderr.write(`search_docs: --api "${c.api}" has no reference section of its own.
6Its routing-table search cell is "(no --api)": retry the same query with no --api flag \u2014 an unscoped search across shopify.dev is what finds the right pages.
7`):!U||U.includes(c.api)?process.stderr.write(`search_docs: unknown or unindexed --api "${c.api}".
8Topics with a documentation section: ${b.join(", ")}.
9A topic whose routing-table search cell is "\u2014" has no section of its own \u2014 read its guide instead:
10 cat references/${c.api}.md
11`):process.stderr.write(`search_docs: no topic named "${c.api}".
12Pick the topic id from the routing table \u2014 one of: ${[...b,...se??[],...U].sort().join(", ")}.
13`),process.exit(1));var $=typeof d<"u"?d:void 0,f=c.topic;f&&$&&!$.includes(f)&&(process.stderr.write(`search_docs: unknown --topic "${f}" \u2014 pass the routing-table topic id you picked, one of: ${$.join(", ")}.
14`),f=void 0);g&&(f&&f!==g&&process.stderr.write(`search_docs: --topic "${f}" does not match --api "${g}"; attributing this search to "${g}", which is what it searched.