linear-grab 0.17.2 → 0.17.3
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/README.md +1 -1
- package/dist/index.global.js +3 -2
- package/dist/linear-grab.js +3 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@ export default function RootLayout({ children }) {
|
|
|
26
26
|
{children}
|
|
27
27
|
{process.env.NODE_ENV === "development" && (
|
|
28
28
|
<Script
|
|
29
|
-
src="https://cdn.jsdelivr.net/gh/ahmedbanihanibh/linear-grab@v0.17.
|
|
29
|
+
src="https://cdn.jsdelivr.net/gh/ahmedbanihanibh/linear-grab@v0.17.3/dist/index.global.js"
|
|
30
30
|
crossOrigin="anonymous"
|
|
31
31
|
strategy="afterInteractive"
|
|
32
32
|
/>
|
package/dist/index.global.js
CHANGED
|
@@ -83,8 +83,9 @@ Learn more: \x1B[34m${n}\x1B[0m
|
|
|
83
83
|
`),{name:`GatewayAuthenticationError`})}function Uw(e){return{inputTokens:e.inputTokens.total,inputTokenDetails:{noCacheTokens:e.inputTokens.noCache,cacheReadTokens:e.inputTokens.cacheRead,cacheWriteTokens:e.inputTokens.cacheWrite},outputTokens:e.outputTokens.total,outputTokenDetails:{textTokens:e.outputTokens.text,reasoningTokens:e.outputTokens.reasoning},totalTokens:Gw(e.inputTokens.total,e.outputTokens.total),raw:e.raw}}function Ww(){return{inputTokens:void 0,inputTokenDetails:{noCacheTokens:void 0,cacheReadTokens:void 0,cacheWriteTokens:void 0},outputTokens:void 0,outputTokenDetails:{textTokens:void 0,reasoningTokens:void 0},totalTokens:void 0,raw:void 0}}function Gw(e,t){return e==null&&t==null?void 0:(e??0)+(t??0)}function Kw(){return(globalThis==null?void 0:globalThis.performance)?.now()??Date.now()}async function qw(e){await Promise.all(Wp(e.callbacks).map(async t=>{try{await t?.(e.event)}catch{}}))}function Jw({error:e,exponentialBackoffDelay:t}){let n=ti.isInstance(e)?e.responseHeaders:ti.isInstance(e.cause)?e.cause.responseHeaders:void 0;if(!n)return t;let r,i=n[`retry-after-ms`];if(i){let e=parseFloat(i);Number.isNaN(e)||(r=e)}let a=n[`retry-after`];if(a&&r===void 0){let e=parseFloat(a);r=Number.isNaN(e)?Date.parse(a)-Date.now():e*1e3}return r!=null&&!Number.isNaN(r)&&0<=r&&(r<60*1e3||r<t)?r:t}function Yw({maxRetries:e,abortSignal:t}){if(e!=null){if(!Number.isInteger(e))throw new DT({parameter:`maxRetries`,value:e,message:`maxRetries must be an integer`});if(e<0)throw new DT({parameter:`maxRetries`,value:e,message:`maxRetries must be >= 0`})}let n=e??2;return{maxRetries:n,retry:UE({maxRetries:n,abortSignal:t})}}function Xw(e){let t=[`ROOT`],n=-1,r=null,i=0;function a(e){return e>=`0`&&e<=`9`||e>=`A`&&e<=`F`||e>=`a`&&e<=`f`}function o(e,i,a){switch(e){case`"`:n=i,t.pop(),t.push(a),t.push(`INSIDE_STRING`);break;case`f`:case`t`:case`n`:n=i,r=i,t.pop(),t.push(a),t.push(`INSIDE_LITERAL`);break;case`-`:t.pop(),t.push(a),t.push(`INSIDE_NUMBER`);break;case`0`:case`1`:case`2`:case`3`:case`4`:case`5`:case`6`:case`7`:case`8`:case`9`:n=i,t.pop(),t.push(a),t.push(`INSIDE_NUMBER`);break;case`{`:n=i,t.pop(),t.push(a),t.push(`INSIDE_OBJECT_START`);break;case`[`:n=i,t.pop(),t.push(a),t.push(`INSIDE_ARRAY_START`);break}}function s(e,r){switch(e){case`,`:t.pop(),t.push(`INSIDE_OBJECT_AFTER_COMMA`);break;case`}`:n=r,t.pop();break}}function c(e,r){switch(e){case`,`:t.pop(),t.push(`INSIDE_ARRAY_AFTER_COMMA`);break;case`]`:n=r,t.pop();break}}for(let l=0;l<e.length;l++){let u=e[l];switch(t[t.length-1]){case`ROOT`:o(u,l,`FINISH`);break;case`INSIDE_OBJECT_START`:switch(u){case`"`:t.pop(),t.push(`INSIDE_OBJECT_KEY`);break;case`}`:n=l,t.pop();break}break;case`INSIDE_OBJECT_AFTER_COMMA`:switch(u){case`"`:t.pop(),t.push(`INSIDE_OBJECT_KEY`);break}break;case`INSIDE_OBJECT_KEY`:switch(u){case`"`:t.pop(),t.push(`INSIDE_OBJECT_AFTER_KEY`);break}break;case`INSIDE_OBJECT_AFTER_KEY`:switch(u){case`:`:t.pop(),t.push(`INSIDE_OBJECT_BEFORE_VALUE`);break}break;case`INSIDE_OBJECT_BEFORE_VALUE`:o(u,l,`INSIDE_OBJECT_AFTER_VALUE`);break;case`INSIDE_OBJECT_AFTER_VALUE`:s(u,l);break;case`INSIDE_STRING`:switch(u){case`"`:t.pop(),n=l;break;case`\\`:t.push(`INSIDE_STRING_ESCAPE`);break;default:n=l}break;case`INSIDE_ARRAY_START`:switch(u){case`]`:n=l,t.pop();break;default:n=l,o(u,l,`INSIDE_ARRAY_AFTER_VALUE`);break}break;case`INSIDE_ARRAY_AFTER_VALUE`:switch(u){case`,`:t.pop(),t.push(`INSIDE_ARRAY_AFTER_COMMA`);break;case`]`:n=l,t.pop();break;default:n=l;break}break;case`INSIDE_ARRAY_AFTER_COMMA`:o(u,l,`INSIDE_ARRAY_AFTER_VALUE`);break;case`INSIDE_STRING_ESCAPE`:t.pop(),u===`u`?(i=0,t.push(`INSIDE_STRING_UNICODE_ESCAPE`)):n=l;break;case`INSIDE_STRING_UNICODE_ESCAPE`:a(u)&&(i++,i===4&&(t.pop(),n=l));break;case`INSIDE_NUMBER`:switch(u){case`0`:case`1`:case`2`:case`3`:case`4`:case`5`:case`6`:case`7`:case`8`:case`9`:n=l;break;case`e`:case`E`:case`-`:case`.`:break;case`,`:t.pop(),t[t.length-1]===`INSIDE_ARRAY_AFTER_VALUE`&&c(u,l),t[t.length-1]===`INSIDE_OBJECT_AFTER_VALUE`&&s(u,l);break;case`}`:t.pop(),t[t.length-1]===`INSIDE_OBJECT_AFTER_VALUE`&&s(u,l);break;case`]`:t.pop(),t[t.length-1]===`INSIDE_ARRAY_AFTER_VALUE`&&c(u,l);break;default:t.pop();break}break;case`INSIDE_LITERAL`:{let i=e.substring(r,l+1);!`false`.startsWith(i)&&!`true`.startsWith(i)&&!`null`.startsWith(i)?(t.pop(),t[t.length-1]===`INSIDE_OBJECT_AFTER_VALUE`?s(u,l):t[t.length-1]===`INSIDE_ARRAY_AFTER_VALUE`&&c(u,l)):n=l;break}}}let l=e.slice(0,n+1);for(let n=t.length-1;n>=0;n--)switch(t[n]){case`INSIDE_STRING`:l+=`"`;break;case`INSIDE_OBJECT_KEY`:case`INSIDE_OBJECT_AFTER_KEY`:case`INSIDE_OBJECT_AFTER_COMMA`:case`INSIDE_OBJECT_START`:case`INSIDE_OBJECT_BEFORE_VALUE`:case`INSIDE_OBJECT_AFTER_VALUE`:l+=`}`;break;case`INSIDE_ARRAY_START`:case`INSIDE_ARRAY_AFTER_COMMA`:case`INSIDE_ARRAY_AFTER_VALUE`:l+=`]`;break;case`INSIDE_LITERAL`:{let t=e.substring(r,e.length);`true`.startsWith(t)?l+=`true`.slice(t.length):`false`.startsWith(t)?l+=`false`.slice(t.length):`null`.startsWith(t)&&(l+=`null`.slice(t.length))}}return l}async function Zw(e){if(e===void 0)return{value:void 0,state:`undefined-input`};let t=await Dh({text:e});return t.success?{value:t.value,state:`successful-parse`}:(t=await Dh({text:Xw(e)}),t.success?{value:t.value,state:`repaired-parse`}:{value:void 0,state:`failed-parse`})}function Qw(...e){return async t=>{await Promise.allSettled(e.map(async e=>{await e?.(t)}))}}function $w(){return typeof process<`u`&&process.release?.name===`node`}async function eT(){if($w())return ZE??=Promise.resolve(tT(`node:diagnostics_channel`)),ZE}function tT(e){let t=globalThis.process;try{return(t?.getBuiltinModule)?.call(t,e)}catch{return}}async function nT(e,t){let n=await eT(),r=(n?.tracingChannel)?.call(n,XE);if(r==null||r.hasSubscribers===!1)return await t();let i,a,o,s=!1,c=!1,l=()=>{try{i=Promise.resolve(t())}catch(e){i=Promise.reject(e)}return i=i.then(e=>(a=e,s=!0,e),e=>{throw o=e,c=!0,e}),i};try{return await r.tracePromise(l,e)}catch{if(c)throw o;return s?a:i==null?await t():await i}}function rT({message:e,completion:t}){if(!$w())return;let n=tT(`node:diagnostics_channel`),r=tT(`node:async_hooks`),i=(n?.tracingChannel)?.call(n,XE);if(i==null||i.hasSubscribers===!1||r==null){Promise.resolve(t).catch(()=>{});return}let a=e,o,s=!1,c=e=>{try{e()}catch{}},l=({result:e,error:t})=>{s||(s=!0,t!==void 0&&(a.error=t,c(()=>i.error.publish(a))),e!==void 0&&(a.result=e),c(()=>i.asyncEnd.publish(a)))};return c(()=>{i.start.runStores(a,()=>{o=new r.AsyncResource(`ai.telemetry`)})}),c(()=>i.end.publish(a)),Promise.resolve(t).then(e=>l({result:e}),e=>l({error:e})),{run:e=>o==null?e():o.runInAsyncScope(e)}}function iT(){return globalThis.AI_SDK_TELEMETRY_INTEGRATIONS??[]}function aT(e,t){return Object.assign(Object.create(Object.getPrototypeOf(e)),e,t)}function oT({telemetry:e}){if(e?.isEnabled===!1)return{};let t=e?.integrations,n=t==null?iT():Wp(t),r={recordInputs:e?.recordInputs,recordOutputs:e?.recordOutputs,functionId:e?.functionId},i=e=>{let t=Qw(...n.map(t=>t[e]?.bind(t)).filter(Boolean).map(e=>t=>e(aT(t,r))));return async e=>{await t(e)}},a=n.map(e=>e.executeLanguageModelCall?.bind(e)).filter(Boolean),o=n.map(e=>e.executeTool?.bind(e)).filter(Boolean);return{runInTracingChannelSpan:async({type:e,event:t,execute:n})=>await nT({type:e,event:aT(t,r)},n),startTracingChannelContext:({type:e,event:t,completion:n})=>rT({message:{type:e,event:aT(t,r)},completion:n}),onStart:i(`onStart`),onStepStart:i(`onStepStart`),onLanguageModelCallStart:i(`onLanguageModelCallStart`),onLanguageModelCallEnd:i(`onLanguageModelCallEnd`),onToolExecutionStart:i(`onToolExecutionStart`),onToolExecutionEnd:i(`onToolExecutionEnd`),onStepEnd:Qw(i(`onStepEnd`),i(`onStepFinish`)),onObjectStepStart:i(`onObjectStepStart`),onObjectStepEnd:i(`onObjectStepEnd`),onEmbedStart:i(`onEmbedStart`),onEmbedEnd:i(`onEmbedEnd`),onRerankStart:i(`onRerankStart`),onRerankEnd:i(`onRerankEnd`),onEnd:i(`onEnd`),onAbort:i(`onAbort`),onError:i(`onError`),executeLanguageModelCall:async({execute:e,...t})=>{let n=aT(t,r),i=e;for(let e of a){let t=i;i=()=>e({...n,execute:t})}return await nT({type:`languageModelCall`,event:n},i)},executeTool:async({execute:e,...t})=>{let n=aT(t,r),i=e;for(let e of o){let t=i;i=()=>e({...n,execute:t})}return await i()}}}function sT(e,t){let n=new Headers(e??{});for(let[e,r]of Object.entries(t))n.has(e)||n.set(e,r);return n}function cT({status:e,statusText:t,headers:n,stream:r}){return new Response(r.pipeThrough(new TextEncoderStream),{status:e??200,statusText:t,headers:sT(n,{"content-type":`text/plain; charset=utf-8`})})}function lT({response:e,status:t,statusText:n,headers:r,stream:i}){let a=t??200;n===void 0?e.writeHead(a,r):e.writeHead(a,n,r);let o=i.getReader();(async()=>{try{for(;;){let{done:t,value:n}=await o.read();if(t)break;let r=e.write(n),i=e.flush;typeof i==`function`&&i.call(e),r||await new Promise(t=>{e.once(`drain`,t)})}}catch(e){throw e}finally{e.end()}})()}function uT({response:e,status:t,statusText:n,headers:r,stream:i}){lT({response:e,status:t,statusText:n,headers:Object.fromEntries(sT(r,{"content-type":`text/plain; charset=utf-8`}).entries()),stream:i.pipeThrough(new TextEncoderStream)})}function dT(e){return fT(e.pipeThrough(new TransformStream))}function fT(e){return e[Symbol.asyncIterator]=function(){let e=this.getReader(),t=!1;async function n(n){if(!t){t=!0;try{n&&await e.cancel?.call(e)}finally{try{e.releaseLock()}catch{}}}}return{async next(){if(t)return{done:!0,value:void 0};let{done:r,value:i}=await e.read();return r?(await n(!0),{done:!0,value:void 0}):{done:!1,value:i}},async return(){return await n(!0),{done:!0,value:void 0}},async throw(e){throw await n(!0),e}}},e}function pT(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function mT(){let e=[],t=null,n=!1,r=pT(),i=()=>{n=!0,r.resolve(),e.forEach(e=>e.cancel()),e=[],t?.close()},a=async()=>{if(n&&e.length===0){t?.close();return}if(e.length===0)return r=pT(),await r.promise,await a();try{let{value:r,done:i}=await e[0].read();i?(e.shift(),e.length===0&&n?t?.close():await a()):t?.enqueue(r)}catch(n){t?.error(n),e.shift(),i()}};return{stream:new ReadableStream({start(e){t=e},pull:a,async cancel(){for(let t of e)await t.cancel();e=[],n=!0}}),addStream:t=>{if(n)throw Error(`Cannot add inner stream: outer stream is closed`);e.push(t.getReader()),r.resolve()},close:()=>{n=!0,r.resolve(),e.length===0&&t?.close()},terminate:i}}function hT({output:e,schema:t,enumValues:n}){switch(e){case`object`:return $E(yh(t));case`array`:return eD(yh(t));case`enum`:return tD(n);case`no-schema`:return QE;default:throw Error(`Unsupported output: ${e}`)}}async function gT(e,t,n){let r=await Dh({text:e});if(!r.success)throw new UT({message:`No object generated: could not parse the response.`,cause:r.error,text:e,response:n.response,usage:n.usage,finishReason:n.finishReason});let i=await t.validateFinalResult(r.value,{text:e,response:n.response,usage:n.usage});if(!i.success)throw new UT({message:`No object generated: response did not match schema.`,cause:i.error,text:e,response:n.response,usage:n.usage,finishReason:n.finishReason});return i.value}async function _T(e,t,n,r){try{return await gT(e,t,r)}catch(i){if(n!=null&&UT.isInstance(i)&&(ji.isInstance(i.cause)||la.isInstance(i.cause))){let a=await n({text:e,error:i.cause});if(a===null)throw i;return await gT(a,t,r)}throw i}}function vT({output:e,schema:t,schemaName:n,schemaDescription:r,enumValues:i}){if(e!=null&&e!==`object`&&e!==`array`&&e!==`enum`&&e!==`no-schema`)throw new DT({parameter:`output`,value:e,message:`Invalid output type.`});if(e===`no-schema`){if(t!=null)throw new DT({parameter:`schema`,value:t,message:`Schema is not supported for no-schema output.`});if(r!=null)throw new DT({parameter:`schemaDescription`,value:r,message:`Schema description is not supported for no-schema output.`});if(n!=null)throw new DT({parameter:`schemaName`,value:n,message:`Schema name is not supported for no-schema output.`});if(i!=null)throw new DT({parameter:`enumValues`,value:i,message:`Enum values are not supported for no-schema output.`})}if(e===`object`){if(t==null)throw new DT({parameter:`schema`,value:t,message:`Schema is required for object output.`});if(i!=null)throw new DT({parameter:`enumValues`,value:i,message:`Enum values are not supported for object output.`})}if(e===`array`){if(t==null)throw new DT({parameter:`schema`,value:t,message:`Element schema is required for array output.`});if(i!=null)throw new DT({parameter:`enumValues`,value:i,message:`Enum values are not supported for array output.`})}if(e===`enum`){if(t!=null)throw new DT({parameter:`schema`,value:t,message:`Schema is not supported for enum output.`});if(r!=null)throw new DT({parameter:`schemaDescription`,value:r,message:`Schema description is not supported for enum output.`});if(n!=null)throw new DT({parameter:`schemaName`,value:n,message:`Schema name is not supported for enum output.`});if(i==null)throw new DT({parameter:`enumValues`,value:i,message:`Enum values are required for enum output.`});for(let e of i)if(typeof e!=`string`)throw new DT({parameter:`enumValues`,value:e,message:`Enum values must be strings.`})}}function yT(e,t){if(e===t)return!0;if(e==null||t==null)return!1;if(typeof e!=`object`&&typeof t!=`object`)return e===t;if(e.constructor!==t.constructor)return!1;if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(Array.isArray(e)){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!yT(e[n],t[n]))return!1;return!0}let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let i of n)if(!r.includes(i)||!yT(e[i],t[i]))return!1;return!0}function bT(e){let{model:t,output:n=`object`,instructions:r,system:i,prompt:a,messages:o,allowSystemInMessages:s,maxRetries:c,abortSignal:l,headers:u,experimental_repairText:d,experimental_telemetry:f,telemetry:p=f,experimental_download:m,providerOptions:h,onStart:g,experimental_onStart:_,onStepStart:v,experimental_onStepStart:y,onStepEnd:b,onStepFinish:x,onError:S=({error:e})=>{console.error(e)},onFinish:C,_internal:{generateId:w=nD,currentDate:T=()=>new Date,now:E=Kw}={},...D}=e,O=`enum`in e&&e.enum?e.enum:void 0,{schema:k,schemaDescription:ee,schemaName:te}=`schema`in e?e:{};return vT({output:n,schema:k,schemaName:te,schemaDescription:ee,enumValues:O}),new rD({model:t,telemetry:p,headers:u,settings:D,maxRetries:c,abortSignal:l,outputStrategy:hT({output:n,schema:k,enumValues:O}),instructions:r,system:i,prompt:a,messages:o,allowSystemInMessages:s,schemaName:te,schemaDescription:ee,providerOptions:h,repairText:d,onStart:g??_,onStepStart:v??y,onStepFinish:b??x,onError:S,onFinish:C,download:m,generateId:w,currentDate:T,now:E})}var xT,ST,CT,wT,TT,ET,DT,OT,kT,AT,jT,MT,NT,PT,FT,IT,LT,RT,zT,BT,VT,HT,UT,WT,GT,KT,qT,JT,YT,XT,ZT,QT,$T,eE,tE,nE,rE,iE,aE,oE,sE,cE,lE,uE,dE,fE,pE,mE,hE,gE,_E,vE,yE,bE,xE,SE,CE,wE,TE,EE,DE,OE,kE,AE,jE,ME,NE,PE,FE,IE,LE,RE,zE,BE,VE,HE,UE,WE,GE,KE,qE,JE,YE,XE,ZE,QE,$E,eD,tD,nD,rD,iD,aD=t((()=>{Qg(),ga(),ow(),Fd(),xT=Object.defineProperty,ST=(e,t)=>{for(var n in t)xT(e,n,{get:t[n],enumerable:!0})},CT=`AI_InvalidArgumentError`,wT=`vercel.ai.error.${CT}`,TT=Symbol.for(wT),DT=class extends Yr{constructor({parameter:e,value:t,message:n}){super({name:CT,message:`Invalid argument for parameter ${e}: ${n}`}),this[ET]=!0,this.parameter=e,this.value=t}static isInstance(e){return Yr.hasMarker(e,wT)}},ET=TT,OT=`AI_InvalidStreamPartError`,`${OT}`,kT=`AI_InvalidToolApprovalError`,`${kT}`,AT=`AI_InvalidToolApprovalSignatureError`,`${AT}`,jT=`AI_InvalidToolInputError`,`${jT}`,MT=`AI_ToolCallNotFoundForApprovalError`,`${MT}`,NT=`AI_MissingToolResultsError`,PT=`vercel.ai.error.${NT}`,FT=Symbol.for(PT),LT=class extends Yr{constructor({toolCallIds:e}){super({name:NT,message:`Tool result${e.length>1?`s are`:` is`} missing for tool call${e.length>1?`s`:``} ${e.join(`, `)}.`}),this[IT]=!0,this.toolCallIds=e}static isInstance(e){return Yr.hasMarker(e,PT)}},IT=FT,RT=`AI_NoImageGeneratedError`,`${RT}`,zT=`AI_NoObjectGeneratedError`,BT=`vercel.ai.error.${zT}`,VT=Symbol.for(BT),UT=class extends Yr{constructor({message:e=`No object generated.`,cause:t,text:n,response:r,usage:i,finishReason:a}){super({name:zT,message:e,cause:t}),this[HT]=!0,this.text=n,this.response=r,this.usage=i,this.finishReason=a}static isInstance(e){return Yr.hasMarker(e,BT)}},HT=VT,WT=`AI_NoOutputGeneratedError`,`${WT}`,GT=`AI_NoSpeechGeneratedError`,`${GT}`,KT=`AI_NoTranscriptGeneratedError`,`${KT}`,qT=`AI_NoVideoGeneratedError`,`${qT}`,JT=`AI_NoSuchToolError`,`${JT}`,YT=`AI_ToolCallRepairError`,`${YT}`,XT=class extends Yr{constructor(e){super({name:`AI_UnsupportedModelVersionError`,message:`Unsupported model version ${e.version} for provider "${e.provider}" and model "${e.modelId}". AI SDK 5 only supports models that implement specification version "v2".`}),this.version=e.version,this.provider=e.provider,this.modelId=e.modelId}},ZT=`AI_UIMessageStreamError`,`${ZT}`,QT=`AI_InvalidDataContentError`,$T=`vercel.ai.error.${QT}`,eE=Symbol.for($T),nE=class extends Yr{constructor({content:e,cause:t,message:n=`Invalid data content. Expected a base64 string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof e}.`}){super({name:QT,message:n,cause:t}),this[tE]=!0,this.content=e}static isInstance(e){return Yr.hasMarker(e,$T)}},tE=eE,rE=`AI_InvalidMessageRoleError`,iE=`vercel.ai.error.${rE}`,aE=Symbol.for(iE),sE=class extends Yr{constructor({role:e,message:t=`Invalid message role: '${e}'. Must be one of: "system", "user", "assistant", "tool".`}){super({name:rE,message:t}),this[oE]=!0,this.role=e}static isInstance(e){return Yr.hasMarker(e,iE)}},oE=aE,cE=`AI_MessageConversionError`,`${cE}`,lE=`AI_RetryError`,uE=`vercel.ai.error.${lE}`,dE=Symbol.for(uE),pE=class extends Yr{constructor({message:e,reason:t,errors:n}){super({name:lE,message:e}),this[fE]=!0,this.reason=t,this.errors=n,this.lastError=n[n.length-1]}static isInstance(e){return Yr.hasMarker(e,uE)}},fE=dE,mE=`AI SDK Warning System: To turn off warning logging, set the AI_SDK_LOG_WARNINGS global to false.`,hE=!1,gE=e=>{if(e.warnings.length===0)return;let t=globalThis.AI_SDK_LOG_WARNINGS;if(t!==!1){if(typeof t==`function`){t(e);return}hE||(hE=!0,console.info(mE));for(let t of e.warnings){let n=sw({warning:t,provider:e.provider,model:e.model});typeof process<`u`&&typeof process.emitWarning==`function`?process.emitWarning(n,{type:t.type===`deprecated`?`DeprecationWarning`:`Warning`}):console.warn(n)}}},_E=`7.0.22`,vE=async({url:e,maxBytes:t,abortSignal:n})=>{let r=e.toString();try{let e=await fm({url:r,headers:xm({},`ai-sdk/${_E}`,ym()),abortSignal:n});if(!e.ok)throw await am(e),new og({url:r,statusCode:e.status,statusText:e.statusText});return{data:await pm({response:e,url:r,maxBytes:t??cg}),mediaType:e.headers.get(`content-type`)??void 0}}catch(e){throw og.isInstance(e)?e:new og({url:r,cause:e})}},yE=(e=vE)=>t=>Promise.all(t.map(async t=>t.isUrlSupportedByModel?null:await e(t))),bE={jpg:`image/jpeg`,jpeg:`image/jpeg`,png:`image/png`,gif:`image/gif`,webp:`image/webp`,svg:`image/svg+xml`,avif:`image/avif`,heic:`image/heic`,bmp:`image/bmp`,tiff:`image/tiff`,tif:`image/tiff`,pdf:`application/pdf`,mp4:`video/mp4`,webm:`video/webm`,mp3:`audio/mpeg`,wav:`audio/wav`,ogg:`audio/ogg`},xE=Du(()=>B([lu(),I(),L(),cu(),_u(I(),xE.optional()),R(xE)])),SE=_u(I(),_u(I(),xE.optional())),CE=B([I(),Mu(Uint8Array),Mu(ArrayBuffer),ku(Sm,{message:`Must be a Buffer`})]),wE=_u(I(),I()),TE=z({type:H(`text`),text:I(),providerOptions:SE.optional()}),EE=z({type:H(`image`),image:B([CE,Mu(URL),wE]),mediaType:I().optional(),providerOptions:SE.optional()}),DE=mu(`type`,[z({type:H(`data`),data:CE}),z({type:H(`url`),url:Mu(URL)}),z({type:H(`reference`),reference:wE}),z({type:H(`text`),text:I()})]),OE=mu(`type`,[z({type:H(`data`),data:CE}),z({type:H(`url`),url:Mu(URL)})]),kE=z({type:H(`file`),data:B([DE,CE,Mu(URL),wE]),filename:I().optional(),mediaType:I(),providerOptions:SE.optional()}),AE=z({type:H(`reasoning`),text:I(),providerOptions:SE.optional()}),jE=z({type:H(`custom`),kind:I().transform(e=>e),providerOptions:SE.optional()}),ME=z({type:H(`reasoning-file`),data:B([OE,CE,Mu(URL)]),mediaType:I(),providerOptions:SE.optional()}),NE=z({type:H(`tool-call`),toolCallId:I(),toolName:I(),input:du(),providerOptions:SE.optional(),providerExecuted:cu().optional()}),PE=mu(`type`,[z({type:H(`text`),value:I(),providerOptions:SE.optional()}),z({type:H(`json`),value:xE,providerOptions:SE.optional()}),z({type:H(`execution-denied`),reason:I().optional(),providerOptions:SE.optional()}),z({type:H(`error-text`),value:I(),providerOptions:SE.optional()}),z({type:H(`error-json`),value:xE,providerOptions:SE.optional()}),z({type:H(`content`),value:R(B([z({type:H(`text`),text:I(),providerOptions:SE.optional()}),z({type:H(`file`),data:DE,mediaType:I(),filename:I().optional(),providerOptions:SE.optional()}),z({type:H(`file-data`),data:I(),mediaType:I(),filename:I().optional(),providerOptions:SE.optional()}),z({type:H(`file-url`),url:I(),mediaType:I().optional(),providerOptions:SE.optional()}),z({type:H(`file-id`),fileId:B([I(),_u(I(),I())]),providerOptions:SE.optional()}),z({type:H(`file-reference`),providerReference:_u(I(),I()),providerOptions:SE.optional()}),z({type:H(`image-data`),data:I(),mediaType:I(),providerOptions:SE.optional()}),z({type:H(`image-url`),url:I(),providerOptions:SE.optional()}),z({type:H(`image-file-id`),fileId:B([I(),_u(I(),I())]),providerOptions:SE.optional()}),z({type:H(`image-file-reference`),providerReference:_u(I(),I()),providerOptions:SE.optional()}),z({type:H(`custom`),providerOptions:SE.optional()})]))})]),FE=z({type:H(`tool-result`),toolCallId:I(),toolName:I(),output:PE,providerOptions:SE.optional()}),IE=z({type:H(`tool-approval-request`),approvalId:I(),toolCallId:I()}),LE=z({type:H(`tool-approval-response`),approvalId:I(),approved:cu(),reason:I().optional()}),RE=z({role:H(`system`),content:I(),providerOptions:SE.optional()}),zE=z({role:H(`user`),content:B([I(),R(B([TE,EE,kE]))]),providerOptions:SE.optional()}),BE=z({role:H(`assistant`),content:B([I(),R(B([TE,jE,kE,AE,ME,NE,FE,IE]))]),providerOptions:SE.optional()}),VE=z({role:H(`tool`),content:R(B([FE,LE])),providerOptions:SE.optional()}),HE=B([RE,zE,BE,VE]),UE=({maxRetries:e=2,initialDelayInMs:t=2e3,backoffFactor:n=2,abortSignal:r}={})=>Wg({maxRetries:e,initialDelayInMs:t,backoffFactor:n,abortSignal:r,shouldRetry:e=>e instanceof Error&&(ti.isInstance(e)&&e.isRetryable===!0||cS.isInstance(e)&&e.isRetryable===!0),getDelayInMs:({error:e,exponentialBackoffDelay:t})=>Jw({error:e,exponentialBackoffDelay:t}),createRetryError:({message:e,reason:t,errors:n})=>new pE({message:e,reason:t,errors:n})}),WE={},ST(WE,{array:()=>qE,choice:()=>JE,json:()=>YE,object:()=>KE,text:()=>GE}),GE=()=>({name:`text`,responseFormat:Promise.resolve({type:`text`}),async parseCompleteOutput({text:e}){return e},async parsePartialOutput({text:e}){return{partial:e}},createElementStreamTransform(){}}),KE=({schema:e,name:t,description:n})=>{let r=yh(e);return{name:`object`,responseFormat:Ph(r.jsonSchema).then(e=>({type:`json`,schema:e,...t!=null&&{name:t},...n!=null&&{description:n}})),async parseCompleteOutput({text:e},t){let n=await Dh({text:e});if(!n.success)throw new UT({message:`No object generated: could not parse the response.`,cause:n.error,text:e,response:t.response,usage:t.usage,finishReason:t.finishReason});let i=await Th({value:n.value,schema:r});if(!i.success)throw new UT({message:`No object generated: response did not match schema.`,cause:i.error,text:e,response:t.response,usage:t.usage,finishReason:t.finishReason});return i.value},async parsePartialOutput({text:e}){let t=await Zw(e);switch(t.state){case`failed-parse`:case`undefined-input`:return;case`repaired-parse`:case`successful-parse`:return{partial:t.value}}},createElementStreamTransform(){}}},qE=({element:e,name:t,description:n})=>{let r=yh(e);return{name:`array`,responseFormat:Ph(r.jsonSchema).then(e=>{let{$schema:r,...i}=e;return{type:`json`,schema:{$schema:`http://json-schema.org/draft-07/schema#`,type:`object`,properties:{elements:{type:`array`,items:i}},required:[`elements`],additionalProperties:!1},...t!=null&&{name:t},...n!=null&&{description:n}}}),async parseCompleteOutput({text:e},t){let n=await Dh({text:e});if(!n.success)throw new UT({message:`No object generated: could not parse the response.`,cause:n.error,text:e,response:t.response,usage:t.usage,finishReason:t.finishReason});let i=n.value;if(typeof i!=`object`||!i||!(`elements`in i)||!Array.isArray(i.elements))throw new UT({message:`No object generated: response did not match schema.`,cause:new la({value:i,cause:`response must be an object with an elements array`}),text:e,response:t.response,usage:t.usage,finishReason:t.finishReason});let a=[];for(let n of i.elements){let i=await Th({value:n,schema:r});if(!i.success)throw new UT({message:`No object generated: response did not match schema.`,cause:i.error,text:e,response:t.response,usage:t.usage,finishReason:t.finishReason});a.push(i.value)}return a},async parsePartialOutput({text:e}){let t=await Zw(e);switch(t.state){case`failed-parse`:case`undefined-input`:return;case`repaired-parse`:case`successful-parse`:{let e=t.value;if(typeof e!=`object`||!e||!(`elements`in e)||!Array.isArray(e.elements))return;let n=t.state===`repaired-parse`&&e.elements.length>0?e.elements.slice(0,-1):e.elements,i=[];for(let e of n){let t=await Th({value:e,schema:r});t.success&&i.push(t.value)}return{partial:i}}}},createElementStreamTransform(){let e=0;return new TransformStream({transform({partialOutput:t},n){if(t!=null)for(;e<t.length;e++)n.enqueue(t[e])}})}}},JE=({options:e,name:t,description:n})=>({name:`choice`,responseFormat:Promise.resolve({type:`json`,schema:{$schema:`http://json-schema.org/draft-07/schema#`,type:`object`,properties:{result:{type:`string`,enum:e}},required:[`result`],additionalProperties:!1},...t!=null&&{name:t},...n!=null&&{description:n}}),async parseCompleteOutput({text:t},n){let r=await Dh({text:t});if(!r.success)throw new UT({message:`No object generated: could not parse the response.`,cause:r.error,text:t,response:n.response,usage:n.usage,finishReason:n.finishReason});let i=r.value;if(typeof i!=`object`||!i||!(`result`in i)||typeof i.result!=`string`||!e.includes(i.result))throw new UT({message:`No object generated: response did not match schema.`,cause:new la({value:i,cause:`response must be an object that contains a choice value.`}),text:t,response:n.response,usage:n.usage,finishReason:n.finishReason});return i.result},async parsePartialOutput({text:t}){let n=await Zw(t);switch(n.state){case`failed-parse`:case`undefined-input`:return;case`repaired-parse`:case`successful-parse`:{let t=n.value;if(typeof t!=`object`||!t||!(`result`in t)||typeof t.result!=`string`)return;let r=e.filter(e=>e.startsWith(t.result));return n.state===`successful-parse`?r.includes(t.result)?{partial:t.result}:void 0:r.length===1?{partial:r[0]}:void 0}}},createElementStreamTransform(){}}),YE=({name:e,description:t}={})=>({name:`json`,responseFormat:Promise.resolve({type:`json`,...e!=null&&{name:e},...t!=null&&{description:t}}),async parseCompleteOutput({text:e},t){let n=await Dh({text:e});if(!n.success)throw new UT({message:`No object generated: could not parse the response.`,cause:n.error,text:e,response:t.response,usage:t.usage,finishReason:t.finishReason});return n.value},async parsePartialOutput({text:e}){let t=await Zw(e);switch(t.state){case`failed-parse`:case`undefined-input`:return;case`repaired-parse`:case`successful-parse`:return t.value===void 0?void 0:{partial:t.value}}},createElementStreamTransform(){}}),XE=`ai:telemetry`,new TextEncoder,new TextEncoder,lg({prefix:`aitxt`,size:24}),lg({prefix:`call`,size:24}),TransformStream,_u(I(),xE.optional()),lg({prefix:`aitxt`,size:24}),lg({prefix:`call`,size:24}),lg({prefix:`aitxt`,size:24}),lg({prefix:`call`,size:24}),_u(I(),xE.optional()),_u(I(),I()),lg({prefix:`call`,size:24}),lg({prefix:`call`,size:24}),QE={type:`no-schema`,jsonSchema:async()=>void 0,async validatePartialResult({value:e,textDelta:t}){return{success:!0,value:{partial:e,textDelta:t}}},async validateFinalResult(e,t){return e===void 0?{success:!1,error:new UT({message:`No object generated: response did not match schema.`,text:t.text,response:t.response,usage:t.usage,finishReason:t.finishReason})}:{success:!0,value:e}},createElementStream(){throw new ha({functionality:`element streams in no-schema mode`})}},$E=e=>({type:`object`,jsonSchema:async()=>await e.jsonSchema,async validatePartialResult({value:e,textDelta:t}){return{success:!0,value:{partial:e,textDelta:t}}},async validateFinalResult(t){return Th({value:t,schema:e})},createElementStream(){throw new ha({functionality:`element streams in object mode`})}}),eD=e=>({type:`array`,jsonSchema:async()=>{let{$schema:t,...n}=await e.jsonSchema;return{$schema:`http://json-schema.org/draft-07/schema#`,type:`object`,properties:{elements:{type:`array`,items:n}},required:[`elements`],additionalProperties:!1}},async validatePartialResult({value:t,latestObject:n,isFirstDelta:r,isFinalDelta:i}){if(!Wr(t)||!Ur(t.elements))return{success:!1,error:new la({value:t,cause:`value must be an object that contains an array of elements`})};let a=t.elements,o=[];for(let t=0;t<a.length;t++){let n=a[t],r=await Th({value:n,schema:e});if(!(t===a.length-1&&!i)){if(!r.success)return r;o.push(r.value)}}let s=n?.length??0,c=``;return r&&(c+=`[`),s>0&&(c+=`,`),c+=o.slice(s).map(e=>JSON.stringify(e)).join(`,`),i&&(c+=`]`),{success:!0,value:{partial:o,textDelta:c}}},async validateFinalResult(t){if(!Wr(t)||!Ur(t.elements))return{success:!1,error:new la({value:t,cause:`value must be an object that contains an array of elements`})};let n=t.elements,r=[];for(let t of n){let n=await Th({value:t,schema:e});if(!n.success)return n;r.push(n.value)}return{success:!0,value:r}},createElementStream(e){let t=0;return dT(e.pipeThrough(new TransformStream({transform(e,n){switch(e.type){case`object`:{let r=e.object;for(;t<r.length;t++)n.enqueue(r[t]);break}case`text-delta`:case`finish`:case`error`:break;default:throw Error(`Unsupported chunk type: ${e}`)}}})))}}),tD=e=>({type:`enum`,jsonSchema:async()=>({$schema:`http://json-schema.org/draft-07/schema#`,type:`object`,properties:{result:{type:`string`,enum:e}},required:[`result`],additionalProperties:!1}),async validateFinalResult(t){if(!Wr(t)||typeof t.result!=`string`)return{success:!1,error:new la({value:t,cause:`value must be an object that contains a string in the "result" property.`})};let n=t.result;return e.includes(n)?{success:!0,value:n}:{success:!1,error:new la({value:t,cause:`value must be a string in the enum`})}},async validatePartialResult({value:t,textDelta:n}){if(!Wr(t)||typeof t.result!=`string`)return{success:!1,error:new la({value:t,cause:`value must be an object that contains a string in the "result" property.`})};let r=t.result,i=e.filter(e=>e.startsWith(r));return t.result.length===0||i.length===0?{success:!1,error:new la({value:t,cause:`value must be a string in the enum`})}:{success:!0,value:{partial:i.length>1?r:i[0],textDelta:n}}},createElementStream(){throw new ha({functionality:`element streams in enum mode`})}}),lg({prefix:`aiobj`,size:24}),nD=lg({prefix:`aiobj`,size:24}),rD=class{constructor({model:e,headers:t,telemetry:n,settings:r,maxRetries:i,abortSignal:a,outputStrategy:o,instructions:s,system:c,prompt:l,messages:u,allowSystemInMessages:d,schemaName:f,schemaDescription:p,providerOptions:m,repairText:h,onStart:g,onStepStart:_,onStepFinish:v,onError:y,onFinish:b,download:x,generateId:S,currentDate:C,now:w}){this._object=new Jh,this._usage=new Jh,this._providerMetadata=new Jh,this._warnings=new Jh,this._request=new Jh,this._response=new Jh,this._finishReason=new Jh;let T=Tw(e),{maxRetries:E,retry:D}=Yw({maxRetries:i,abortSignal:a}),O=Bw(r),k=oT({telemetry:n}),ee=this,te=mT(),A=new TransformStream({transform(e,t){t.enqueue(e),e.type===`error`&&y({error:Hw(e.error)})}});this.baseStream=te.stream.pipeThrough(A);let ne=S();(async()=>{let e=await o.jsonSchema();await qw({event:{callId:ne,operationId:`ai.streamObject`,provider:T.provider,modelId:T.modelId,system:s??c,prompt:l,messages:u,maxOutputTokens:O.maxOutputTokens,temperature:O.temperature,topP:O.topP,topK:O.topK,presencePenalty:O.presencePenalty,frequencyPenalty:O.frequencyPenalty,seed:O.seed,maxRetries:E,headers:t,providerOptions:m,output:o.type,schema:e,schemaName:f,schemaDescription:p},callbacks:[g,k.onStart]});let n=await Vw({instructions:s,system:c,prompt:l,messages:u,allowSystemInMessages:d}),i={responseFormat:{type:`json`,schema:e,name:f,description:p},...Bw(r),prompt:await Mw({prompt:n,supportedUrls:await T.supportedUrls,download:x,provider:T.provider.split(`.`)[0]}),providerOptions:m,abortSignal:a,headers:t,includeRawChunks:!1};await qw({event:{callId:ne,stepNumber:0,provider:T.provider,modelId:T.modelId,providerOptions:m,headers:t,promptMessages:i.prompt},callbacks:[_,k.onObjectStepStart]});let y={transform:(e,t)=>{switch(e.type){case`text-delta`:t.enqueue(e.delta);break;case`response-metadata`:case`finish`:case`error`:case`stream-start`:t.enqueue(e);break}}},A=w(),{stream:re,response:ie,request:ae}=await D(()=>T.doStream(i));ee._request.resolve(ae??{});let oe,se=Ww(),ce,le,ue,de,fe,pe=``,me=``,he={id:S(),timestamp:C(),modelId:T.modelId},ge,_e,ve=!0,ye=!0,be=re.pipeThrough(new TransformStream(y)).pipeThrough(new TransformStream({async transform(e,t){if(typeof e==`object`&&e.type===`stream-start`){oe=e.warnings;return}if(ve&&=(fe=w()-A,!1),typeof e==`string`){pe+=e,me+=e;let{value:n,state:r}=await Zw(pe);if(n!==void 0&&!yT(ge,n)){let e=await o.validatePartialResult({value:n,textDelta:me,latestObject:_e,isFirstDelta:ye,isFinalDelta:r===`successful-parse`});e.success&&!yT(_e,e.value.partial)&&(ge=n,_e=e.value.partial,t.enqueue({type:`object`,object:_e}),t.enqueue({type:`text-delta`,textDelta:e.value.textDelta}),me=``,ye=!1)}return}switch(e.type){case`response-metadata`:he={id:e.id??he.id,timestamp:e.timestamp??he.timestamp,modelId:e.modelId??he.modelId};break;case`finish`:me!==``&&t.enqueue({type:`text-delta`,textDelta:me}),ce=e.finishReason.unified,se=Uw(e.usage),le=e.providerMetadata,t.enqueue({...e,finishReason:e.finishReason.unified,usage:se,response:he}),gE({warnings:oe??[],provider:T.provider,model:T.modelId}),ee._usage.resolve(se),ee._providerMetadata.resolve(le),ee._warnings.resolve(oe),ee._response.resolve({...he,headers:ie?.headers}),ee._finishReason.resolve(ce??`other`);try{ue=await _T(pe,o,h,{response:he,usage:se,finishReason:ce}),ee._object.resolve(ue)}catch(e){de=e,ee._object.reject(e)}break;default:t.enqueue(e);break}},async flush(e){try{let e=se??{promptTokens:NaN,completionTokens:NaN,totalTokens:NaN};await qw({event:{callId:ne,stepNumber:0,provider:T.provider,modelId:T.modelId,finishReason:ce??`other`,usage:e,objectText:pe,msToFirstChunk:fe,reasoning:void 0,warnings:oe,request:ae??{},response:{...he,headers:ie?.headers},providerMetadata:le},callbacks:[v,k.onObjectStepEnd]}),await qw({event:{callId:ne,object:ue,error:de,reasoning:void 0,finishReason:ce??`other`,usage:e,warnings:oe,request:ae??{},response:{...he,headers:ie?.headers},providerMetadata:le},callbacks:[b,k.onEnd]})}catch(t){e.enqueue({type:`error`,error:t})}}}));te.addStream(be)})().catch(async e=>{await k.onError?.call(k,{callId:ne,error:e}),te.addStream(new ReadableStream({start(t){t.enqueue({type:`error`,error:e}),t.close()}}))}).finally(()=>{te.close()}),this.outputStrategy=o}get object(){return this._object.promise}get usage(){return this._usage.promise}get providerMetadata(){return this._providerMetadata.promise}get warnings(){return this._warnings.promise}get request(){return this._request.promise}get response(){return this._response.promise}get finishReason(){return this._finishReason.promise}get partialObjectStream(){return dT(this.baseStream.pipeThrough(new TransformStream({transform(e,t){switch(e.type){case`object`:t.enqueue(e.object);break;case`text-delta`:case`finish`:case`error`:break;default:throw Error(`Unsupported chunk type: ${e}`)}}})))}get elementStream(){return this.outputStrategy.createElementStream(this.baseStream)}get textStream(){return dT(this.baseStream.pipeThrough(new TransformStream({transform(e,t){switch(e.type){case`text-delta`:t.enqueue(e.textDelta);break;case`object`:case`finish`:case`error`:break;default:throw Error(`Unsupported chunk type: ${e}`)}}})))}get fullStream(){return dT(this.baseStream)}pipeTextStreamToResponse(e,t){uT({response:e,stream:this.textStream,...t})}toTextStreamResponse(e){return cT({stream:this.textStream,...e})}},iD=`AI_NoSuchProviderError`,`${iD}`,lg({prefix:`call`,size:24})})),oD=t((()=>{Op(),Op()})),sD,cD=t((()=>{oD(),sD=Ep({title:Cp().describe(`Concise, specific issue title. Imperative or descriptive, no trailing period.`),description:Cp().describe(`Issue body in Linear markdown: a short problem summary and relevant context. Do NOT include repro steps, expected/actual, or source location — those are separate fields.`),reproSteps:Tp(Cp()).describe(`Ordered reproduction steps, each a single action.`),expected:Cp().describe(`Expected behavior, one or two sentences.`),actual:Cp().describe(`Actual (buggy) behavior, one or two sentences.`),impact:Cp().describe(`Who/what is affected and how badly, 1-2 sentences (e.g. "Cosmetic/UX polish issue — doesn't block anything but feels glitchy.").`),analysisNotes:Cp().describe(`Markdown bullet list ("- …") of likely root-cause analysis based on the source context. Empty string when there is nothing substantive to say.`),suggestedNextSteps:Cp().describe(`Markdown bullet list of concrete, actionable fix suggestions the coding agent should consider first.`),priority:wp().int().min(0).max(4).describe(`Linear priority: 0 none, 1 urgent, 2 high, 3 medium, 4 low.`),suggestedLabels:Tp(Cp()).describe(`0-3 suggested label names, e.g. "Bug", "UI".`)})}));function lD(e){let t=[e.issueTemplate?.trim()||hD],n=(e.skillPaths??``).split(`
|
|
84
84
|
`).map(e=>e.trim()).filter(Boolean);n.length&&t.push(`**Project skills & memory — MANDATORY reading before implementing.** This repo ships maintained skills/memory files. Read each of these paths in your checkout and treat their guidance as authoritative for design, style, and architectural decisions:\n${n.map(e=>`- \`${e}\``).join(`
|
|
85
85
|
`)}`),e.githubAssetsRepo?.trim()&&t.push(`**Demo media hosting:** commit demo GIFs/videos to the PUBLIC assets repo \`${e.githubAssetsRepo.trim()}\` under \`linear-grab/\` (clone it or use \`gh api\`), and embed the raw.githubusercontent.com URL in BOTH the Linear comment and the PR body. Prefer GIF for short demos — it renders inline everywhere (Linear, GitHub, the panel); Linear-hosted uploads do NOT render on GitHub.`);let r=[];e.testUsername?.trim()&&r.push(`- Username / email: \`${e.testUsername.trim()}\``),e.testPassword?.trim()&&r.push(`- Password: \`${e.testPassword.trim()}\``),r.length&&t.push(`**Test account — log into the app with this while testing:**\n${r.join(`
|
|
86
|
-
`)}`);let i=[];
|
|
87
|
-
`)}\n\nMessage format — keep it short: what was broken → what you changed (one-line fix summary) → links to the Linear issue, the PR, and your agent run → attach/upload the demo video → end with the CTA "👉 Review the PR". You may also use these tokens to send yourself intermediate test notifications while verifying the integration works.`),t.join(`
|
|
86
|
+
`)}`);let i=[];e.slackToken&&e.slackChannelId&&i.push(`- Slack: bot token \`${e.slackToken}\`, channel \`${e.slackChannelId}\`${e.slackChannelName?` (#${e.slackChannelName})`:``}. Use \`chat.postMessage\` for the message and \`files.uploadV2\` (or getUploadURLExternal + completeUploadExternal) to upload the demo video into the channel.`),e.telegramToken&&e.telegramChatId&&i.push(`- Telegram: bot token \`${e.telegramToken}\`, chat id \`${e.telegramChatId}\`. Use \`sendMessage\` and \`sendVideo\` (multipart upload of the demo file).`),i.length&&t.push(`**When the fix is complete and the PR is open, announce it yourself:**\n${i.join(`
|
|
87
|
+
`)}\n\nMessage format — keep it short: what was broken → what you changed (one-line fix summary) → links to the Linear issue, the PR, and your agent run → attach/upload the demo video → end with the CTA "👉 Review the PR". You may also use these tokens to send yourself intermediate test notifications while verifying the integration works.`);let a=[`- [ ] Tested the change hands-on in the RUNNING app (state what you exercised)`,`- [ ] Demo media captured — GIF/video preferred; if recording is impossible in your environment, before/after screenshots + the stated reason`];return e.githubAssetsRepo?.trim()&&a.push(`- [ ] Demo media committed to \`${e.githubAssetsRepo.trim()}\` and embedded via raw.githubusercontent.com URL in the Linear comment AND the PR body`),a.push(`- [ ] Demo media attached to the Linear ISSUE itself (not only the PR)`,`- [ ] PR opened and linked here`,`- [ ] Issue moved to its review/done state`),i.length&&a.push(`- [ ] Announcement posted to the configured channel(s) with the demo attached`),t.push(`**DEFINITION OF DONE — acceptance checklist.** Copy this checklist VERBATIM into your Linear closeout comment and tick each box (\`- [x]\`) with a link or one-line evidence next to it. Any unchecked box means the work is NOT ACCEPTED — leave it unchecked and explain the blocker rather than omitting it:\n${a.join(`
|
|
88
|
+
`)}`),t.join(`
|
|
88
89
|
|
|
89
90
|
`)}function uD(e){let t=[];if(e.componentName&&t.push(`Component: <${e.componentName}>`),e.tagName&&t.push(`DOM element: <${e.tagName}>`),e.source?.filePath){let n=e.source.lineNumber==null?``:`:${e.source.lineNumber}`;t.push(`Source: ${e.source.filePath}${n}`)}return e.stackContext&&t.push(`Component stack:\n${e.stackContext}`),e.content&&t.push(`Element context:\n${e.content}`),t.push(`Page URL: ${e.pageUrl}`),t.join(`
|
|
90
91
|
`)}function dD(e){let t=[];t.push(`Reporter note:\n${e.note.trim()||`(none — infer from the element context)`}`);let n=e.grabbedList?.length?e.grabbedList:e.grabbed?[e.grabbed]:[];return n.slice(0,3).forEach((e,r)=>{t.push(`Captured element ${n.length>1?`${r+1}/${Math.min(n.length,3)} `:``}(via the Linear Grab picker):\n${uD(e)}`)}),e.teamName&&t.push(`Target team: ${e.teamName}`),e.template?.trim()&&t.push(`Standing agent instructions the team appends to every issue (context only — do NOT repeat them in your description, they are added automatically):\n${e.template.trim()}`),e.logs?.trim()&&t.push(`Recent dev server logs (tail — use for Analysis/Notes when relevant, do not paste wholesale):\n\`\`\`\n${e.logs.trim()}\n\`\`\``),t.push(`Draft the issue now.`),t.join(`
|
package/dist/linear-grab.js
CHANGED
|
@@ -25697,7 +25697,9 @@ function lD(e) {
|
|
|
25697
25697
|
let r = [];
|
|
25698
25698
|
e.testUsername?.trim() && r.push(`- Username / email: \`${e.testUsername.trim()}\``), e.testPassword?.trim() && r.push(`- Password: \`${e.testPassword.trim()}\``), r.length && t.push(`**Test account — log into the app with this while testing:**\n${r.join("\n")}`);
|
|
25699
25699
|
let i = [];
|
|
25700
|
-
|
|
25700
|
+
e.slackToken && e.slackChannelId && i.push(`- Slack: bot token \`${e.slackToken}\`, channel \`${e.slackChannelId}\`${e.slackChannelName ? ` (#${e.slackChannelName})` : ""}. Use \`chat.postMessage\` for the message and \`files.uploadV2\` (or getUploadURLExternal + completeUploadExternal) to upload the demo video into the channel.`), e.telegramToken && e.telegramChatId && i.push(`- Telegram: bot token \`${e.telegramToken}\`, chat id \`${e.telegramChatId}\`. Use \`sendMessage\` and \`sendVideo\` (multipart upload of the demo file).`), i.length && t.push(`**When the fix is complete and the PR is open, announce it yourself:**\n${i.join("\n")}\n\nMessage format — keep it short: what was broken → what you changed (one-line fix summary) → links to the Linear issue, the PR, and your agent run → attach/upload the demo video → end with the CTA "👉 Review the PR". You may also use these tokens to send yourself intermediate test notifications while verifying the integration works.`);
|
|
25701
|
+
let a = ["- [ ] Tested the change hands-on in the RUNNING app (state what you exercised)", "- [ ] Demo media captured — GIF/video preferred; if recording is impossible in your environment, before/after screenshots + the stated reason"];
|
|
25702
|
+
return e.githubAssetsRepo?.trim() && a.push(`- [ ] Demo media committed to \`${e.githubAssetsRepo.trim()}\` and embedded via raw.githubusercontent.com URL in the Linear comment AND the PR body`), a.push("- [ ] Demo media attached to the Linear ISSUE itself (not only the PR)", "- [ ] PR opened and linked here", "- [ ] Issue moved to its review/done state"), i.length && a.push("- [ ] Announcement posted to the configured channel(s) with the demo attached"), t.push(`**DEFINITION OF DONE — acceptance checklist.** Copy this checklist VERBATIM into your Linear closeout comment and tick each box (\`- [x]\`) with a link or one-line evidence next to it. Any unchecked box means the work is NOT ACCEPTED — leave it unchecked and explain the blocker rather than omitting it:\n${a.join("\n")}`), t.join("\n\n");
|
|
25701
25703
|
}
|
|
25702
25704
|
function uD(e) {
|
|
25703
25705
|
let t = [];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "linear-grab",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Point at any React element in your dev app, draft a Linear issue with AI, delegate it to the Cursor agent, and track it live — in any browser.",
|
|
6
6
|
"exports": {
|