blink 0.1.106 → 0.1.108
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/dist/cli/{auth-DjAEZyZZ.js → auth-B_s9F0vP.js} +1 -1
- package/dist/cli/{chat-DX_V608z.js → chat-CLFi7jlw.js} +1 -1
- package/dist/cli/{chat-manager-r6Y3l4iZ.js → chat-manager-BL3XfguD.js} +1 -1
- package/dist/cli/{dev-D_0M2SCQ.js → dev-Dyzr8QSB.js} +60 -60
- package/dist/cli/ignore-NA4V6Pjc.js +1 -0
- package/dist/cli/index.js +3 -3
- package/dist/cli/{init-iySs9KUe.js → init-m-BdPD26.js} +1 -1
- package/dist/cli/login-DC5VCVrz.js +1 -0
- package/dist/cli/run-D80Y5w3r.js +1 -0
- package/dist/cli/{main-BdSSlDIs.js → util-BLUkU26y.js} +32 -5
- package/dist/node/react/index.node.cjs +3 -3
- package/dist/node/react/index.node.js +3 -3
- package/package.json +1 -1
- package/dist/cli/ignore-6Nkv6BEs.js +0 -28
- package/dist/cli/login-DTwQcbaT.js +0 -1
- package/dist/cli/run-CfFYxCDt.js +0 -1
- /package/dist/cli/{dist-BNbSDxaw.js → dist-wyfWuz5A.js} +0 -0
- /package/dist/cli/{open-DCYivxgo.js → open-S_jcQ0nw.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{__commonJSMin as e}from"./chunk-D9KrCrVq.js";var t=e(((e,t)=>{function n(e){return Array.isArray(e)?e:[e]}let r=/^\s+$/,i=/(?:[^\\]|^)\\$/,a=/^\\!/,o=/^\\#/,s=/\r?\n/g,c=/^\.{0,2}\/|^\.{1,2}$/,l=/\/$/,u=`node-ignore`;typeof Symbol<`u`&&(u=Symbol.for(`node-ignore`));let d=u,f=(e,t,n)=>(Object.defineProperty(e,t,{value:n}),n),p=/([0-z])-([0-z])/g,m=()=>!1,h=e=>e.replace(p,(e,t,n)=>t.charCodeAt(0)<=n.charCodeAt(0)?e:``),g=e=>{let{length:t}=e;return e.slice(0,t-t%2)},_=[[/^\uFEFF/,()=>``],[/((?:\\\\)*?)(\\?\s+)$/,(e,t,n)=>t+(n.indexOf(`\\`)===0?` `:``)],[/(\\+?)\s/g,(e,t)=>{let{length:n}=t;return t.slice(0,n-n%2)+` `}],[/[\\$.|*+(){^]/g,e=>`\\${e}`],[/(?!\\)\?/g,()=>`[^/]`],[/^\//,()=>`^`],[/\//g,()=>`\\/`],[/^\^*\\\*\\\*\\\//,()=>`^(?:.*\\/)?`],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?`^`:`(?:^|\\/)`}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(e,t,n)=>t+6<n.length?`(?:\\/[^\\/]+)*`:`\\/.+`],[/(^|[^\\]+)(\\\*)+(?=.+)/g,(e,t,n)=>{let r=n.replace(/\\\*/g,`[^\\/]*`);return t+r}],[/\\\\\\(?=[$.|*+(){^])/g,()=>`\\`],[/\\\\/g,()=>`\\`],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(e,t,n,r,i)=>t===`\\`?`\\[${n}${g(r)}${i}`:i===`]`&&r.length%2==0?`[${h(n)}${r}]`:`[]`],[/(?:[^*])$/,e=>/\/$/.test(e)?`${e}$`:`${e}(?=$|\\/$)`]],v=/(^|\\\/)?\\\*$/,y=`regex`,b=`checkRegex`,x={[y](e,t){return`${t?`${t}[^/]+`:`[^/]*`}(?=$|\\/$)`},[b](e,t){return`${t?`${t}[^/]*`:`[^/]*`}(?=$|\\/$)`}},S=e=>_.reduce((t,[n,r])=>t.replace(n,r.bind(e)),e),C=e=>typeof e==`string`,w=e=>e&&C(e)&&!r.test(e)&&!i.test(e)&&e.indexOf(`#`)!==0,T=e=>e.split(s).filter(Boolean);var E=class{constructor(e,t,n,r,i,a){this.pattern=e,this.mark=t,this.negative=i,f(this,`body`,n),f(this,`ignoreCase`,r),f(this,`regexPrefix`,a)}get regex(){let e=`_`+y;return this[e]?this[e]:this._make(y,e)}get checkRegex(){let e=`_`+b;return this[e]?this[e]:this._make(b,e)}_make(e,t){let n=this.regexPrefix.replace(v,x[e]),r=this.ignoreCase?new RegExp(n,`i`):new RegExp(n);return f(this,t,r)}};let D=({pattern:e,mark:t},n)=>{let r=!1,i=e;i.indexOf(`!`)===0&&(r=!0,i=i.substr(1)),i=i.replace(a,`!`).replace(o,`#`);let s=S(i);return new E(e,t,i,n,r,s)};var O=class{constructor(e){this._ignoreCase=e,this._rules=[]}_add(e){if(e&&e[d]){this._rules=this._rules.concat(e._rules._rules),this._added=!0;return}if(C(e)&&(e={pattern:e}),w(e.pattern)){let t=D(e,this._ignoreCase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,n(C(e)?T(e):e).forEach(this._add,this),this._added}test(e,t,n){let r=!1,i=!1,a;this._rules.forEach(o=>{let{negative:s}=o;i===s&&r!==i||s&&!r&&!i&&!t||o[n].test(e)&&(r=!s,i=s,a=s?void 0:o)});let o={ignored:r,unignored:i};return a&&(o.rule=a),o}};let k=(e,t)=>{throw new t(e)},A=(e,t,n)=>C(e)?e?A.isNotRelative(e)?n(`path should be a \`path.relative()\`d string, but got "${t}"`,RangeError):!0:n(`path must not be empty`,TypeError):n(`path must be a string, but got \`${t}\``,TypeError),j=e=>c.test(e);A.isNotRelative=j,A.convert=e=>e;var M=class{constructor({ignorecase:e=!0,ignoreCase:t=e,allowRelativePaths:n=!1}={}){f(this,d,!0),this._rules=new O(t),this._strictPathCheck=!n,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}add(e){return this._rules.add(e)&&this._initCache(),this}addPattern(e){return this.add(e)}_test(e,t,n,r){let i=e&&A.convert(e);return A(i,e,this._strictPathCheck?k:m),this._t(i,t,n,r)}checkIgnore(e){if(!l.test(e))return this.test(e);let t=e.split(`/`).filter(Boolean);if(t.pop(),t.length){let e=this._t(t.join(`/`)+`/`,this._testCache,!0,t);if(e.ignored)return e}return this._rules.test(e,!1,b)}_t(e,t,n,r){if(e in t)return t[e];if(r||=e.split(`/`).filter(Boolean),r.pop(),!r.length)return t[e]=this._rules.test(e,n,y);let i=this._t(r.join(`/`)+`/`,t,n,r);return t[e]=i.ignored?i:this._rules.test(e,n,y)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return n(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}};let N=e=>new M(e),P=e=>A(e&&A.convert(e),e,m),F=()=>{A.convert=e=>/^\\\\\?\\/.test(e)||/["<>|\u0000-\u001F]+/u.test(e)?e:e.replace(/\\/g,`/`);let e=/^[a-z]:\//i;A.isNotRelative=t=>e.test(t)||j(t)};typeof process<`u`&&process.platform===`win32`&&F(),t.exports=N,N.default=N,t.exports.isPathValid=P,f(t.exports,Symbol.for(`setupWindows`),F)}));export{t as require_ignore};
|
package/dist/cli/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{__commonJSMin as e,__require as t,__toESM as n}from"./chunk-D9KrCrVq.js";import{import_websocket as r}from"./wrapper-B0SBsJWP.js";import{findNearestEntry as i,
|
|
2
|
+
import{__commonJSMin as e,__require as t,__toESM as n}from"./chunk-D9KrCrVq.js";import{import_websocket as r}from"./wrapper-B0SBsJWP.js";import{findNearestEntry as i,migrateBlinkToData as a,require_main as o,resolveConfig as s}from"./util-BLUkU26y.js";import{Client as c,loginIfNeeded as l,require_source as u}from"./auth-B_s9F0vP.js";import{Y as d,pD as f,ve as p,ye as m}from"./dist-wyfWuz5A.js";import"./open-S_jcQ0nw.js";import{require_ignore as h}from"./ignore-NA4V6Pjc.js";import{randomUUID as g}from"crypto";import{basename as _,dirname as v,join as y,relative as ee}from"node:path";import{existsSync as te}from"node:fs";import{mkdir as ne,readdir as b,writeFile as re}from"fs/promises";import{readFile as x,stat as S}from"node:fs/promises";var C=e((e=>{var t=class extends Error{constructor(e,t,n){super(n),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}},n=class extends t{constructor(e){super(1,`commander.invalidArgument`,e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};e.CommanderError=t,e.InvalidArgumentError=n})),w=e((e=>{let{InvalidArgumentError:t}=C();var n=class{constructor(e,t){switch(this.description=t||``,this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,e[0]){case`<`:this.required=!0,this._name=e.slice(1,-1);break;case`[`:this.required=!1,this._name=e.slice(1,-1);break;default:this.required=!0,this._name=e;break}this._name.endsWith(`...`)&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_collectValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:(t.push(e),t)}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(e,n)=>{if(!this.argChoices.includes(e))throw new t(`Allowed choices are ${this.argChoices.join(`, `)}.`);return this.variadic?this._collectValue(e,n):e},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function r(e){let t=e.name()+(e.variadic===!0?`...`:``);return e.required?`<`+t+`>`:`[`+t+`]`}e.Argument=n,e.humanReadableArgName=r})),T=e((e=>{let{humanReadableArgName:t}=w();var n=class{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(e){this.helpWidth=this.helpWidth??e.helpWidth??80}visibleCommands(e){let t=e.commands.filter(e=>!e._hidden),n=e._getHelpCommand();return n&&!n._hidden&&t.push(n),this.sortSubcommands&&t.sort((e,t)=>e.name().localeCompare(t.name())),t}compareOptions(e,t){let n=e=>e.short?e.short.replace(/^-/,``):e.long.replace(/^--/,``);return n(e).localeCompare(n(t))}visibleOptions(e){let t=e.options.filter(e=>!e.hidden),n=e._getHelpOption();if(n&&!n.hidden){let r=n.short&&e._findOption(n.short),i=n.long&&e._findOption(n.long);!r&&!i?t.push(n):n.long&&!i?t.push(e.createOption(n.long,n.description)):n.short&&!r&&t.push(e.createOption(n.short,n.description))}return this.sortOptions&&t.sort(this.compareOptions),t}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let t=[];for(let n=e.parent;n;n=n.parent){let e=n.options.filter(e=>!e.hidden);t.push(...e)}return this.sortOptions&&t.sort(this.compareOptions),t}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(t=>{t.description=t.description||e._argsDescription[t.name()]||``}),e.registeredArguments.find(e=>e.description)?e.registeredArguments:[]}subcommandTerm(e){let n=e.registeredArguments.map(e=>t(e)).join(` `);return e._name+(e._aliases[0]?`|`+e._aliases[0]:``)+(e.options.length?` [options]`:``)+(n?` `+n:``)}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,t){return t.visibleCommands(e).reduce((e,n)=>Math.max(e,this.displayWidth(t.styleSubcommandTerm(t.subcommandTerm(n)))),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((e,n)=>Math.max(e,this.displayWidth(t.styleOptionTerm(t.optionTerm(n)))),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((e,n)=>Math.max(e,this.displayWidth(t.styleOptionTerm(t.optionTerm(n)))),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((e,n)=>Math.max(e,this.displayWidth(t.styleArgumentTerm(t.argumentTerm(n)))),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+`|`+e._aliases[0]);let n=``;for(let t=e.parent;t;t=t.parent)n=t.name()+` `+n;return n+t+` `+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(e=>JSON.stringify(e)).join(`, `)}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue==`boolean`)&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&t.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&t.push(`env: ${e.envVar}`),t.length>0){let n=`(${t.join(`, `)})`;return e.description?`${e.description} ${n}`:n}return e.description}argumentDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(e=>JSON.stringify(e)).join(`, `)}`),e.defaultValue!==void 0&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),t.length>0){let n=`(${t.join(`, `)})`;return e.description?`${e.description} ${n}`:n}return e.description}formatItemList(e,t,n){return t.length===0?[]:[n.styleTitle(e),...t,``]}groupItems(e,t,n){let r=new Map;return e.forEach(e=>{let t=n(e);r.has(t)||r.set(t,[])}),t.forEach(e=>{let t=n(e);r.has(t)||r.set(t,[]),r.get(t).push(e)}),r}formatHelp(e,t){let n=t.padWidth(e,t),r=t.helpWidth??80;function i(e,r){return t.formatItem(e,n,r,t)}let a=[`${t.styleTitle(`Usage:`)} ${t.styleUsage(t.commandUsage(e))}`,``],o=t.commandDescription(e);o.length>0&&(a=a.concat([t.boxWrap(t.styleCommandDescription(o),r),``]));let s=t.visibleArguments(e).map(e=>i(t.styleArgumentTerm(t.argumentTerm(e)),t.styleArgumentDescription(t.argumentDescription(e))));if(a=a.concat(this.formatItemList(`Arguments:`,s,t)),this.groupItems(e.options,t.visibleOptions(e),e=>e.helpGroupHeading??`Options:`).forEach((e,n)=>{let r=e.map(e=>i(t.styleOptionTerm(t.optionTerm(e)),t.styleOptionDescription(t.optionDescription(e))));a=a.concat(this.formatItemList(n,r,t))}),t.showGlobalOptions){let n=t.visibleGlobalOptions(e).map(e=>i(t.styleOptionTerm(t.optionTerm(e)),t.styleOptionDescription(t.optionDescription(e))));a=a.concat(this.formatItemList(`Global Options:`,n,t))}return this.groupItems(e.commands,t.visibleCommands(e),e=>e.helpGroup()||`Commands:`).forEach((e,n)=>{let r=e.map(e=>i(t.styleSubcommandTerm(t.subcommandTerm(e)),t.styleSubcommandDescription(t.subcommandDescription(e))));a=a.concat(this.formatItemList(n,r,t))}),a.join(`
|
|
3
3
|
`)}displayWidth(e){return r(e).length}styleTitle(e){return e}styleUsage(e){return e.split(` `).map(e=>e===`[options]`?this.styleOptionText(e):e===`[command]`?this.styleSubcommandText(e):e[0]===`[`||e[0]===`<`?this.styleArgumentText(e):this.styleCommandText(e)).join(` `)}styleCommandDescription(e){return this.styleDescriptionText(e)}styleOptionDescription(e){return this.styleDescriptionText(e)}styleSubcommandDescription(e){return this.styleDescriptionText(e)}styleArgumentDescription(e){return this.styleDescriptionText(e)}styleDescriptionText(e){return e}styleOptionTerm(e){return this.styleOptionText(e)}styleSubcommandTerm(e){return e.split(` `).map(e=>e===`[options]`?this.styleOptionText(e):e[0]===`[`||e[0]===`<`?this.styleArgumentText(e):this.styleSubcommandText(e)).join(` `)}styleArgumentTerm(e){return this.styleArgumentText(e)}styleOptionText(e){return e}styleArgumentText(e){return e}styleSubcommandText(e){return e}styleCommandText(e){return e}padWidth(e,t){return Math.max(t.longestOptionTermLength(e,t),t.longestGlobalOptionTermLength(e,t),t.longestSubcommandTermLength(e,t),t.longestArgumentTermLength(e,t))}preformatted(e){return/\n[^\S\r\n]/.test(e)}formatItem(e,t,n,r){let i=` `.repeat(2);if(!n)return i+e;let a=e.padEnd(t+e.length-r.displayWidth(e)),o=(this.helpWidth??80)-t-2-2,s;return s=o<this.minWidthToWrap||r.preformatted(n)?n:r.boxWrap(n,o).replace(/\n/g,`
|
|
4
4
|
`+` `.repeat(t+2)),i+a+` `.repeat(2)+s.replace(/\n/g,`\n${i}`)}boxWrap(e,t){if(t<this.minWidthToWrap)return e;let n=e.split(/\r\n|\n/),r=/[\s]*[^\s]+/g,i=[];return n.forEach(e=>{let n=e.match(r);if(n===null){i.push(``);return}let a=[n.shift()],o=this.displayWidth(a[0]);n.forEach(e=>{let n=this.displayWidth(e);if(o+n<=t){a.push(e),o+=n;return}i.push(a.join(``));let r=e.trimStart();a=[r],o=this.displayWidth(r)}),i.push(a.join(``))}),i.join(`
|
|
5
5
|
`)}};function r(e){return e.replace(/\x1b\[\d*(;\d*)*m/g,``)}e.Help=n,e.stripColor=r})),E=e((e=>{let{InvalidArgumentError:t}=C();var n=class{constructor(e,t){this.flags=e,this.description=t||``,this.required=e.includes(`<`),this.optional=e.includes(`[`),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let n=a(e);this.short=n.shortFlag,this.long=n.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith(`--no-`)),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0,this.helpGroupHeading=void 0}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let t=e;return typeof e==`string`&&(t={[e]:!0}),this.implied=Object.assign(this.implied||{},t),this}env(e){return this.envVar=e,this}argParser(e){return this.parseArg=e,this}makeOptionMandatory(e=!0){return this.mandatory=!!e,this}hideHelp(e=!0){return this.hidden=!!e,this}_collectValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:(t.push(e),t)}choices(e){return this.argChoices=e.slice(),this.parseArg=(e,n)=>{if(!this.argChoices.includes(e))throw new t(`Allowed choices are ${this.argChoices.join(`, `)}.`);return this.variadic?this._collectValue(e,n):e},this}name(){return this.long?this.long.replace(/^--/,``):this.short.replace(/^-/,``)}attributeName(){return this.negate?i(this.name().replace(/^no-/,``)):i(this.name())}helpGroup(e){return this.helpGroupHeading=e,this}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},r=class{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach(e=>{e.negate?this.negativeOptions.set(e.attributeName(),e):this.positiveOptions.set(e.attributeName(),e)}),this.negativeOptions.forEach((e,t)=>{this.positiveOptions.has(t)&&this.dualOptions.add(t)})}valueFromOption(e,t){let n=t.attributeName();if(!this.dualOptions.has(n))return!0;let r=this.negativeOptions.get(n).presetArg,i=r===void 0?!1:r;return t.negate===(i===e)}};function i(e){return e.split(`-`).reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function a(e){let t,n,r=/^-[^-]$/,i=/^--[^-]/,a=e.split(/[ |,]+/).concat(`guard`);if(r.test(a[0])&&(t=a.shift()),i.test(a[0])&&(n=a.shift()),!t&&r.test(a[0])&&(t=a.shift()),!t&&i.test(a[0])&&(t=n,n=a.shift()),a[0].startsWith(`-`)){let t=a[0],n=`option creation failed due to '${t}' in option flags '${e}'`;throw/^-[^-][^-]/.test(t)?Error(`${n}
|
|
@@ -17,6 +17,6 @@ Expecting one of '${n.join(`', '`)}'`);return this._lifeCycleHooks[e]?this._life
|
|
|
17
17
|
- if the default executable name is not suitable, use the executableFile option to supply a custom name or path
|
|
18
18
|
- ${r}`;throw Error(i)}_executeSubCommand(e,t){t=t.slice();let n=!1,s=[`.js`,`.ts`,`.tsx`,`.mjs`,`.cjs`];function c(e,t){let n=i.resolve(e,t);if(a.existsSync(n))return n;if(s.includes(i.extname(t)))return;let r=s.find(e=>a.existsSync(`${n}${e}`));if(r)return`${n}${r}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let u=e._executableFile||`${this._name}-${e._name}`,d=this._executableDir||``;if(this._scriptPath){let e;try{e=a.realpathSync(this._scriptPath)}catch{e=this._scriptPath}d=i.resolve(i.dirname(e),d)}if(d){let t=c(d,u);if(!t&&!e._executableFile&&this._scriptPath){let n=i.basename(this._scriptPath,i.extname(this._scriptPath));n!==this._name&&(t=c(d,`${n}-${e._name}`))}u=t||u}n=s.includes(i.extname(u));let f;o.platform===`win32`?(this._checkForMissingExecutable(u,d,e._name),t.unshift(u),t=g(o.execArgv).concat(t),f=r.spawn(o.execPath,t,{stdio:`inherit`})):n?(t.unshift(u),t=g(o.execArgv).concat(t),f=r.spawn(o.argv[0],t,{stdio:`inherit`})):f=r.spawn(u,t,{stdio:`inherit`}),f.killed||[`SIGUSR1`,`SIGUSR2`,`SIGTERM`,`SIGINT`,`SIGHUP`].forEach(e=>{o.on(e,()=>{f.killed===!1&&f.exitCode===null&&f.kill(e)})});let p=this._exitCallback;f.on(`close`,e=>{e??=1,p?p(new l(e,`commander.executeSubCommandAsync`,`(close)`)):o.exit(e)}),f.on(`error`,t=>{if(t.code===`ENOENT`)this._checkForMissingExecutable(u,d,e._name);else if(t.code===`EACCES`)throw Error(`'${u}' not executable`);if(!p)o.exit(1);else{let e=new l(1,`commander.executeSubCommandAsync`,`(error)`);e.nestedError=t,p(e)}}),this.runningCommand=f}_dispatchSubcommand(e,t,n){let r=this._findCommand(e);r||this.help({error:!0}),r._prepareForParse();let i;return i=this._chainOrCallSubCommandHook(i,r,`preSubcommand`),i=this._chainOrCall(i,()=>{if(r._executableHandler)this._executeSubCommand(r,t.concat(n));else return r._parseCommand(t,n)}),i}_dispatchHelpCommand(e){e||this.help();let t=this._findCommand(e);return t&&!t._executableHandler&&t.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??`--help`])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,t)=>{e.required&&this.args[t]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(e,t,n)=>{let r=t;if(t!==null&&e.parseArg){let i=`error: command-argument value '${t}' is invalid for argument '${e.name()}'.`;r=this._callParseArg(e,t,n,i)}return r};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((n,r)=>{let i=n.defaultValue;n.variadic?r<this.args.length?(i=this.args.slice(r),n.parseArg&&(i=i.reduce((t,r)=>e(n,r,t),n.defaultValue))):i===void 0&&(i=[]):r<this.args.length&&(i=this.args[r],n.parseArg&&(i=e(n,i,n.defaultValue))),t[r]=i}),this.processedArgs=t}_chainOrCall(e,t){return e?.then&&typeof e.then==`function`?e.then(()=>t()):t()}_chainOrCallHooks(e,t){let n=e,r=[];return this._getCommandAndAncestors().reverse().filter(e=>e._lifeCycleHooks[t]!==void 0).forEach(e=>{e._lifeCycleHooks[t].forEach(t=>{r.push({hookedCommand:e,callback:t})})}),t===`postAction`&&r.reverse(),r.forEach(e=>{n=this._chainOrCall(n,()=>e.callback(e.hookedCommand,this))}),n}_chainOrCallSubCommandHook(e,t,n){let r=e;return this._lifeCycleHooks[n]!==void 0&&this._lifeCycleHooks[n].forEach(e=>{r=this._chainOrCall(r,()=>e(this,t))}),r}_parseCommand(e,t){let n=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(n.operands),t=n.unknown,this.args=e.concat(t),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),t);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(t),this._dispatchSubcommand(this._defaultCommandName,e,t);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(n.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let r=()=>{n.unknown.length>0&&this.unknownOption(n.unknown[0])},i=`command:${this.name()}`;if(this._actionHandler){r(),this._processArguments();let n;return n=this._chainOrCallHooks(n,`preAction`),n=this._chainOrCall(n,()=>this._actionHandler(this.processedArgs)),this.parent&&(n=this._chainOrCall(n,()=>{this.parent.emit(i,e,t)})),n=this._chainOrCallHooks(n,`postAction`),n}if(this.parent?.listenerCount(i))r(),this._processArguments(),this.parent.emit(i,e,t);else if(e.length){if(this._findCommand(`*`))return this._dispatchSubcommand(`*`,e,t);this.listenerCount(`command:*`)?this.emit(`command:*`,e,t):this.commands.length?this.unknownCommand():(r(),this._processArguments())}else this.commands.length?(r(),this.help({error:!0})):(r(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(t=>t._name===e||t._aliases.includes(e))}_findOption(e){return this.options.find(t=>t.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(t=>{t.mandatory&&e.getOptionValue(t.attributeName())===void 0&&e.missingMandatoryOptionValue(t)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(e=>{let t=e.attributeName();return this.getOptionValue(t)===void 0?!1:this.getOptionValueSource(t)!==`default`});e.filter(e=>e.conflictsWith.length>0).forEach(t=>{let n=e.find(e=>t.conflictsWith.includes(e.attributeName()));n&&this._conflictingOption(t,n)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],n=[],r=t;function i(e){return e.length>1&&e[0]===`-`}let a=e=>/^-\d*\.?\d+(e[+-]?\d+)?$/.test(e)?!this._getCommandAndAncestors().some(e=>e.options.map(e=>e.short).some(e=>/^-\d$/.test(e))):!1,o=null,s=null,c=0;for(;c<e.length||s;){let l=s??e[c++];if(s=null,l===`--`){r===n&&r.push(l),r.push(...e.slice(c));break}if(o&&(!i(l)||a(l))){this.emit(`option:${o.name()}`,l);continue}if(o=null,i(l)){let t=this._findOption(l);if(t){if(t.required){let n=e[c++];n===void 0&&this.optionMissingArgument(t),this.emit(`option:${t.name()}`,n)}else if(t.optional){let n=null;c<e.length&&(!i(e[c])||a(e[c]))&&(n=e[c++]),this.emit(`option:${t.name()}`,n)}else this.emit(`option:${t.name()}`);o=t.variadic?t:null;continue}}if(l.length>2&&l[0]===`-`&&l[1]!==`-`){let e=this._findOption(`-${l[1]}`);if(e){e.required||e.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${e.name()}`,l.slice(2)):(this.emit(`option:${e.name()}`),s=`-${l.slice(2)}`);continue}}if(/^--[^=]+=/.test(l)){let e=l.indexOf(`=`),t=this._findOption(l.slice(0,e));if(t&&(t.required||t.optional)){this.emit(`option:${t.name()}`,l.slice(e+1));continue}}if(r===t&&i(l)&&!(this.commands.length===0&&a(l))&&(r=n),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&n.length===0){if(this._findCommand(l)){t.push(l),n.push(...e.slice(c));break}else if(this._getHelpCommand()&&l===this._getHelpCommand().name()){t.push(l,...e.slice(c));break}else if(this._defaultCommandName){n.push(l,...e.slice(c));break}}if(this._passThroughOptions){r.push(l,...e.slice(c));break}r.push(l)}return{operands:t,unknown:n}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let n=0;n<t;n++){let t=this.options[n].attributeName();e[t]=t===this._versionOptionName?this._version:this[t]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){this._outputConfiguration.outputError(`${e}\n`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError==`string`?this._outputConfiguration.writeErr(`${this._showHelpAfterError}\n`):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
|
|
19
19
|
`),this.outputHelp({error:!0}));let n=t||{},r=n.exitCode||1,i=n.code||`commander.error`;this._exit(r,i,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in o.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||[`default`,`config`,`env`].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,o.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new p(this.options),t=e=>this.getOptionValue(e)!==void 0&&![`default`,`implied`].includes(this.getOptionValueSource(e));this.options.filter(n=>n.implied!==void 0&&t(n.attributeName())&&e.valueFromOption(this.getOptionValue(n.attributeName()),n)).forEach(e=>{Object.keys(e.implied).filter(e=>!t(e)).forEach(t=>{this.setOptionValueWithSource(t,e.implied[t],`implied`)})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:`commander.missingArgument`})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:`commander.optionMissingArgument`})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:`commander.missingMandatoryOptionValue`})}_conflictingOption(e,t){let n=e=>{let t=e.attributeName(),n=this.getOptionValue(t),r=this.options.find(e=>e.negate&&t===e.attributeName()),i=this.options.find(e=>!e.negate&&t===e.attributeName());return r&&(r.presetArg===void 0&&n===!1||r.presetArg!==void 0&&n===r.presetArg)?r:i||e},r=e=>{let t=n(e),r=t.attributeName();return this.getOptionValueSource(r)===`env`?`environment variable '${t.envVar}'`:`option '${t.flags}'`},i=`error: ${r(e)} cannot be used with ${r(t)}`;this.error(i,{code:`commander.conflictingOption`})}unknownOption(e){if(this._allowUnknownOption)return;let t=``;if(e.startsWith(`--`)&&this._showSuggestionAfterError){let n=[],r=this;do{let e=r.createHelp().visibleOptions(r).filter(e=>e.long).map(e=>e.long);n=n.concat(e),r=r.parent}while(r&&!r._enablePositionalOptions);t=m(e,n)}let n=`error: unknown option '${e}'${t}`;this.error(n,{code:`commander.unknownOption`})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,n=t===1?``:`s`,r=`error: too many arguments${this.parent?` for '${this.name()}'`:``}. Expected ${t} argument${n} but got ${e.length}.`;this.error(r,{code:`commander.excessArguments`})}unknownCommand(){let e=this.args[0],t=``;if(this._showSuggestionAfterError){let n=[];this.createHelp().visibleCommands(this).forEach(e=>{n.push(e.name()),e.alias()&&n.push(e.alias())}),t=m(e,n)}let n=`error: unknown command '${e}'${t}`;this.error(n,{code:`commander.unknownCommand`})}version(e,t,n){if(e===void 0)return this._version;this._version=e,t||=`-V, --version`,n||=`output the version number`;let r=this.createOption(t,n);return this._versionOptionName=r.attributeName(),this._registerOption(r),this.on(`option:`+r.name(),()=>{this._outputConfiguration.writeOut(`${e}\n`),this._exit(0,`commander.version`,e)}),this}description(e,t){return e===void 0&&t===void 0?this._description:(this._description=e,t&&(this._argsDescription=t),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw Error(`Command alias can't be the same as its name`);let n=this.parent?._findCommand(e);if(n){let t=[n.name()].concat(n.aliases()).join(`|`);throw Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${t}'`)}return t._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(e=>this.alias(e)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let e=this.registeredArguments.map(e=>c(e));return[].concat(this.options.length||this._helpOption!==null?`[options]`:[],this.commands.length?`[command]`:[],this.registeredArguments.length?e:[]).join(` `)}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}helpGroup(e){return e===void 0?this._helpGroupHeading??``:(this._helpGroupHeading=e,this)}commandsGroup(e){return e===void 0?this._defaultCommandGroup??``:(this._defaultCommandGroup=e,this)}optionsGroup(e){return e===void 0?this._defaultOptionGroup??``:(this._defaultOptionGroup=e,this)}_initOptionGroup(e){this._defaultOptionGroup&&!e.helpGroupHeading&&e.helpGroup(this._defaultOptionGroup)}_initCommandGroup(e){this._defaultCommandGroup&&!e.helpGroup()&&e.helpGroup(this._defaultCommandGroup)}nameFromFilename(e){return this._name=i.basename(e,i.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let t=this.createHelp(),n=this._getOutputContext(e);t.prepareContext({error:n.error,helpWidth:n.helpWidth,outputHasColors:n.hasColors});let r=t.formatHelp(this,t);return n.hasColors?r:this._outputConfiguration.stripColor(r)}_getOutputContext(e){e||={};let t=!!e.error,n,r,i;return t?(n=e=>this._outputConfiguration.writeErr(e),r=this._outputConfiguration.getErrHasColors(),i=this._outputConfiguration.getErrHelpWidth()):(n=e=>this._outputConfiguration.writeOut(e),r=this._outputConfiguration.getOutHasColors(),i=this._outputConfiguration.getOutHelpWidth()),{error:t,write:e=>(r||(e=this._outputConfiguration.stripColor(e)),n(e)),hasColors:r,helpWidth:i}}outputHelp(e){let t;typeof e==`function`&&(t=e,e=void 0);let n=this._getOutputContext(e),r={error:n.error,write:n.write,command:this};this._getCommandAndAncestors().reverse().forEach(e=>e.emit(`beforeAllHelp`,r)),this.emit(`beforeHelp`,r);let i=this.helpInformation({error:n.error});if(t&&(i=t(i),typeof i!=`string`&&!Buffer.isBuffer(i)))throw Error(`outputHelp callback must return a string or a Buffer`);n.write(i),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit(`afterHelp`,r),this._getCommandAndAncestors().forEach(e=>e.emit(`afterAllHelp`,r))}helpOption(e,t){return typeof e==`boolean`?(e?(this._helpOption===null&&(this._helpOption=void 0),this._defaultOptionGroup&&this._initOptionGroup(this._getHelpOption())):this._helpOption=null,this):(this._helpOption=this.createOption(e??`-h, --help`,t??`display help for command`),(e||t)&&this._initOptionGroup(this._helpOption),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this._initOptionGroup(e),this}help(e){this.outputHelp(e);let t=Number(o.exitCode??0);t===0&&e&&typeof e!=`function`&&e.error&&(t=1),this._exit(t,`commander.help`,`(outputHelp)`)}addHelpText(e,t){let n=[`beforeAll`,`before`,`after`,`afterAll`];if(!n.includes(e))throw Error(`Unexpected value for position to addHelpText.
|
|
20
|
-
Expecting one of '${n.join(`', '`)}'`);let r=`${e}Help`;return this.on(r,e=>{let n;n=typeof t==`function`?t({error:e.error,command:e.command}):t,n&&e.write(`${n}\n`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(e=>t.is(e))&&(this.outputHelp(),this._exit(0,`commander.helpDisplayed`,`(outputHelp)`))}};function g(e){return e.map(e=>{if(!e.startsWith(`--inspect`))return e;let t,n=`127.0.0.1`,r=`9229`,i;return(i=e.match(/^(--inspect(-brk)?)$/))===null?(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))===null?(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],n=i[3],r=i[4]):(t=i[1],/^\d+$/.test(i[3])?r=i[3]:n=i[3]):t=i[1],t&&r!==`0`?`${t}=${n}:${parseInt(r)+1}`:e})}function _(){if(o.env.NO_COLOR||o.env.FORCE_COLOR===`0`||o.env.FORCE_COLOR===`false`)return!1;if(o.env.FORCE_COLOR||o.env.CLICOLOR_FORCE!==void 0)return!0}e.Command=h,e.useColor=_}));const{program:k,createCommand:ie,createArgument:A,createOption:j,CommanderError:ae,InvalidArgumentError:M,InvalidOptionArgumentError:oe,Command:N,Argument:P,Option:se,Help:F}=n(e((e=>{let{Argument:t}=w(),{Command:n}=O(),{CommanderError:r,InvalidArgumentError:i}=C(),{Help:a}=T(),{Option:o}=E();e.program=new n,e.createCommand=e=>new n(e),e.createOption=(e,t)=>new o(e,t),e.createArgument=(e,n)=>new t(e,n),e.Command=n,e.Option=o,e.Argument=t,e.Help=a,e.CommanderError=r,e.InvalidArgumentError=i,e.InvalidOptionArgumentError=i}))(),1).default;var I=`0.1.
|
|
20
|
+
Expecting one of '${n.join(`', '`)}'`);let r=`${e}Help`;return this.on(r,e=>{let n;n=typeof t==`function`?t({error:e.error,command:e.command}):t,n&&e.write(`${n}\n`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(e=>t.is(e))&&(this.outputHelp(),this._exit(0,`commander.helpDisplayed`,`(outputHelp)`))}};function g(e){return e.map(e=>{if(!e.startsWith(`--inspect`))return e;let t,n=`127.0.0.1`,r=`9229`,i;return(i=e.match(/^(--inspect(-brk)?)$/))===null?(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))===null?(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],n=i[3],r=i[4]):(t=i[1],/^\d+$/.test(i[3])?r=i[3]:n=i[3]):t=i[1],t&&r!==`0`?`${t}=${n}:${parseInt(r)+1}`:e})}function _(){if(o.env.NO_COLOR||o.env.FORCE_COLOR===`0`||o.env.FORCE_COLOR===`false`)return!1;if(o.env.FORCE_COLOR||o.env.CLICOLOR_FORCE!==void 0)return!0}e.Command=h,e.useColor=_}));const{program:k,createCommand:ie,createArgument:A,createOption:j,CommanderError:ae,InvalidArgumentError:M,InvalidOptionArgumentError:oe,Command:N,Argument:P,Option:se,Help:F}=n(e((e=>{let{Argument:t}=w(),{Command:n}=O(),{CommanderError:r,InvalidArgumentError:i}=C(),{Help:a}=T(),{Option:o}=E();e.program=new n,e.createCommand=e=>new n(e),e.createOption=(e,t)=>new o(e,t),e.createArgument=(e,n)=>new t(e,n),e.Command=n,e.Option=o,e.Argument=t,e.Help=a,e.CommanderError=r,e.InvalidArgumentError=i,e.InvalidOptionArgumentError=i}))(),1).default;var I=`0.1.108`;async function L(e){e||=process.cwd();let t=s(e);await t.build({cwd:e,entry:t.entry,outdir:t.outdir,watch:!1,onStart:()=>{console.log(`Building agent...`)},onResult:e=>{`error`in e&&(console.error(e.error),process.exit(1));for(let t of e.warnings)console.warn(t.message);console.log(`Built agent to ${e.entry}`)}})}var R=n(o(),1),z=n(u(),1),B=n(h(),1);async function V(e,t){e||=process.cwd(),await a(e);let n=await l(),r=new c({authToken:n,fetch:(e,t)=>{let n=new Headers(t?.headers);return n.set(`x-blink-cli-version`,I),fetch(e,{...t,headers:n})}}),o=await i(e,`package.json`);if(!o)throw Error(`package.json not found`);let u=await x(o,`utf-8`),h=JSON.parse(u),g=v(o),C=y(g,`data`,`config.json`),w={};if(te(C)){let e=await x(C,`utf-8`);w=JSON.parse(e)}let T;if(w?.organizationId)try{T=(await r.organizations.get(w.organizationId)).name}catch{w.organizationId=void 0}if(!w?.organizationId){let e=await r.organizations.list();if(e.length===1){let t=e[0];w.organizationId=t.id,T=t.name}else{let t=await p({message:`Which organization should contain this agent?`,options:e.map(e=>({value:e.id,label:e.name}))});if(f(t))return;w.organizationId=t,T=e.find(e=>e.id===t).name}}if(!w.organizationId)throw Error(`Developer error: No organization ID found.`);let E;if(w?.agentId)try{E=(await r.agents.get(w.agentId)).name}catch{w.agentId=void 0}if(!w?.agentId)try{let e=await r.organizations.agents.get({organization_id:w.organizationId,agent_name:h.name});w.agentId=e.id,E=e.name}catch{let e=await r.agents.create({name:h.name,organization_id:w.organizationId});w.agentId=e.id,E=e.name}if(!w.agentId)throw Error(`Developer error: No agent ID found.`);await ne(v(C),{recursive:!0}),await re(C,JSON.stringify({_:`This file can be source controlled. It contains no secrets.`,...w},null,2),`utf-8`);let D=s(g),O=await new Promise((e,t)=>{D.build({cwd:g,entry:D.entry,outdir:D.outdir,watch:!1,onStart:()=>{},onResult:t=>{e(t)}}).catch(t)});if(!O)throw Error(`Failed to build agent`);if(`error`in O)throw Error(O.error.message);let k={},ie=await b(O.outdir);for(let e of ie)k[y(O.outdir,e)]=e;let A=y(e,`README.md`);await H(A)&&(k[A]=`README.md`);let j={},ae=await le(g);for(let e of ae)j[e]=ee(g,e);let M=Object.entries(k),oe=Object.entries(j),N=[...M,...oe],P=N.length,se=0,F=0,L=0,B=Array(P);await ce(N,10,async([e,t],n)=>{let i=(await S(e)).size,a=++se;W(`${z.default.dim(`[${a}/${P}]`)} Uploading ${t} (${U(i)})...`);let o=await x(e),s=await r.files.upload(new File([Buffer.from(o)],t));B[n]={path:t,id:s.id},F+=1,L+=i}),W(`${z.default.dim(`[${F}/${P}]`)} Uploaded files (${U(L)}).`),process.stdout.write(`
|
|
21
21
|
`);let V=B.filter(Boolean),G=V.slice(0,M.length),ue=V.slice(M.length),K=y(e,`.env.local`),q=[];if(await H(K)){let e=(0,R.parse)(await x(K,`utf-8`));q=Object.keys(e)}let J=[];J=(await r.agents.env.list({agent_id:w.agentId})).map(e=>e.key);let Y=y(e,`.env.production`);if(await H(Y)){let e=(0,R.parse)(await x(Y,`utf-8`)),t=Object.entries(e),n=t.length,i=0;for(let[e,a]of t){let t=await r.agents.env.create({agent_id:w.agentId,key:e,value:a,target:[`production`,`preview`],secret:!0,upsert:!0});J.push(t.key),i+=1,W(`${z.default.dim(`[${i}/${n}]`)} Updating environment variable: ${e} ${z.default.dim(`(.env.production)`)}`)}W(`${z.default.dim(`[${i}/${n}]`)} Updated environment variables! ${z.default.dim(`(.env.production)`)}`),process.stdout.write(`
|
|
22
|
-
`)}let X=q.filter(e=>!J.includes(e));if(X.length>0){console.log(`Warning: The following environment variables are set in .env.local but not in .env.production:`);for(let e of X)console.log(`- ${e}`);let e=await
|
|
22
|
+
`)}let X=q.filter(e=>!J.includes(e));if(X.length>0){console.log(`Warning: The following environment variables are set in .env.local but not in .env.production:`);for(let e of X)console.log(`- ${e}`);let e=await m({message:`Do you want to deploy anyway?`});if(e===!1||f(e))return}let Z=await r.agents.deployments.create({agent_id:w.agentId,target:`production`,entrypoint:_(O.entry),output_files:G,source_files:ue,message:t?.message}),Q=`https://blink.so/${T}/${E}/deployments/${Z.number}`;console.log(`Deployed:`,Q);let $=d();$.start(`Waiting for deployment to be live...`);try{for(;;){let e=await r.agents.deployments.get({agent_id:w.agentId,deployment_id:Z.id});if(e.status===`success`){let t=`Deployment successful.`;e.target===`production`&&(t+=` All chats will use this deployment!`),$.stop(t);let n=await r.agents.get(w.agentId);n.request_url&&console.log(`\nSend webhooks from anywhere: ${n.request_url}`);break}if(e.status===`failed`){let t=`Deployment failed.`;e.error_message&&(t+=` ${e.error_message}`),$.stop(t),console.log(`Read logs for details:`,Q);return}await new Promise(e=>setTimeout(e,500))}}catch{$.stop(`Failed to poll for deployment status.`),console.log(`Read logs for details:`,Q);return}}const H=async e=>{try{return await S(e),!0}catch{return!1}};async function ce(e,t,n){let r=Array(e.length),i=0,a=Array(Math.min(t,e.length)).fill(0).map(async()=>{for(;;){let t=i++;if(t>=e.length)break;r[t]=await n(e[t],t)}});return await Promise.all(a),r}function U(e){if(e===0)return`0B`;let t=1024,n=[`B`,`KB`,`MB`,`GB`,`TB`],r=Math.floor(Math.log(e)/Math.log(t)),i=e/t**+r;return`${i.toFixed(i>=100?0:i>=10?1:2)}${n[r]}`}function W(e){if(process.stdout.isTTY)try{process.stdout.clearLine(0),process.stdout.cursorTo(0),process.stdout.write(e);return}catch{}console.log(e)}async function le(e){let t=[],n=(0,B.default)().add([`.git`,`node_modules`,`data`,`.env`,`.env.*`]),r=y(e,`.gitignore`);if(await H(r)){let e=await x(r,`utf-8`);n.add(e)}async function i(r,a=e){let o=await b(r,{withFileTypes:!0});for(let e of o){let o=y(r,e.name),s=ee(a,o);n.ignores(s)||(e.isDirectory()?await i(o,a):e.isFile()&&t.push(o))}}return await i(e),t}if(globalThis.WebSocket||(globalThis.WebSocket=r.default),globalThis.Bun!==void 0){let e=t(`perf_hooks`);e.monitorEventLoopDelay=()=>({enable:()=>{}})}globalThis.crypto||(globalThis.crypto={}),globalThis.crypto.randomUUID||(globalThis.crypto.randomUUID=()=>g()),k.name(`blink`).description(`Blink is a runtime for building and deploying AI agents.`).version(I).action(()=>{k.outputHelp()});const G=e=>async(...t)=>{let{default:n}=await e();return n(...t)};k.command(`init [directory]`).description(`Initialize a new Blink agent.`).action(G(()=>import(`./init-m-BdPD26.js`))),k.command(`dev [directory] [options]`).description(`Start a development server for your agent.`).action(G(()=>import(`./dev-Dyzr8QSB.js`))),k.command(`deploy [directory]`).description(`Deploy your agent to the Blink Cloud.`).option(`-m, --message <message>`,`Message for this deployment`).action(V),k.command(`build [directory]`).description(`Build your agent for production.`).action(L),k.command(`telemetry [boolean]`).description(`Enable or disable telemetry.`),k.command(`start [directory]`).description("Starts the Blink runtime in production mode. The agent must be compiled with `blink build` first."),k.command(`run <message...>`).description(`Run your agent programmatically and get the response.`).option(`-d, --directory <directory>`,`Directory to run the agent from (default: current directory)`).option(`-c, --chat <chat>`,`Chat key to use (default: 'default')`).action(G(()=>import(`./run-D80Y5w3r.js`))),k.command(`connect`,{hidden:!0}).description(`Connect compute to the Blink Cloud.`).action(G(()=>import(`./connect-D8dpOtYY.js`))),k.command(`chat`,{hidden:!0}).description(`Start a Blink chat connected to your machine.`).action(G(()=>import(`./chat-CLFi7jlw.js`))),k.command(`login`,{hidden:!0}).description(`Log in to the Blink Cloud.`).action(G(()=>import(`./login-DC5VCVrz.js`))),k.parse(process.argv);export{};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{Ie as e,M as t,Se as n,pD as r,ve as i,xe as a,ye as o}from"./dist-
|
|
1
|
+
import{Ie as e,M as t,Se as n,pD as r,ve as i,xe as a,ye as o}from"./dist-wyfWuz5A.js";import{basename as s,join as c}from"path";import{mkdir as l,readdir as u,writeFile as d}from"fs/promises";import{spawn as f}from"child_process";async function p(p){if(p||=process.cwd(),e(`Initializing a new Blink Agent`),(await u(p)).length>0){let e=await o({message:`Directory is not empty. Create agent in ".blink" instead? Blink looks for the nearest ".blink" directory for agents.`});if(r(e)&&(a(`Initialization cancelled.`),process.exit(1)),e)p=c(p,`.blink`),await l(p,{recursive:!0}),t.info(`Creating project in ${p}`);else{let e=await o({message:`Initialize in non-empty directory anyway?`});(e===!1||r(e))&&(a(`Initialization cancelled.`),process.exit(1))}}let m=s(p).replace(/[^a-zA-Z0-9]/g,`-`),h;if(process.env.npm_config_user_agent?.includes(`bun/`)?h=`bun`:process.env.npm_config_user_agent?.includes(`pnpm/`)?h=`pnpm`:process.env.npm_config_user_agent?.includes(`yarn/`)?h=`yarn`:process.env.npm_config_user_agent?.includes(`npm/`)&&(h=`npm`),!h){let e=await i({options:[{label:`Bun`,value:`bun`},{label:`NPM`,value:`npm`},{label:`PNPM`,value:`pnpm`},{label:`Yarn`,value:`yarn`}],message:`What package manager do you want to use?`});r(e)&&process.exit(0),h=e}t.info(`Using ${h} as the package manager.`);let g={"package.json":JSON.stringify({name:m,main:`agent.ts`,type:`module`,private:!0}),"agent.ts":`import { convertToModelMessages, streamText, tool } from "ai";
|
|
2
2
|
import * as blink from "blink";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{login as e}from"./auth-B_s9F0vP.js";import"./dist-wyfWuz5A.js";import"./open-S_jcQ0nw.js";async function t(){await e()}export{t as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{__toESM as e}from"./chunk-D9KrCrVq.js";import{findNearestEntry as t,migrateBlinkToData as n,require_main as r,resolveConfig as i}from"./util-BLUkU26y.js";import{getAuthToken as a}from"./auth-B_s9F0vP.js";import"./dist-wyfWuz5A.js";import"./open-S_jcQ0nw.js";import{ChatManager as o,Client as s}from"./chat-manager-BL3XfguD.js";import{spawn as c}from"node:child_process";import{join as l,resolve as u}from"node:path";import{existsSync as d}from"node:fs";import{readFile as f}from"node:fs/promises";import{createServer as p}from"node:net";async function m(e){let t=e.env?.PORT??await h(),n=e.env?.HOST??`127.0.0.1`,r=`http://${n}:${t}`,i={...e.env??process.env,PORT:t.toString(),HOST:n},a=c(e.command,e.args,{stdio:`pipe`,env:i});e.signal?.addEventListener(`abort`,()=>{try{a.kill()}catch{}},{once:!0});let o=new AbortController,l=[o.signal];e.signal&&l.push(e.signal);let u=AbortSignal.any(l);a.stdout.on(`data`,t=>{e.onStdout?.(Buffer.from(t).toString(`utf-8`))});let d=``;a.stderr.on(`data`,t=>{o.signal.aborted||(d+=Buffer.from(t).toString(`utf-8`)),e.onStderr?.(Buffer.from(t).toString(`utf-8`))}),a.on(`error`,e=>{o.abort(e)}),a.on(`exit`,(t,n)=>{o.signal.aborted?e.onExit?.(t,n):o.abort()});let f=new s({baseUrl:r}),p=0;for(;!u.aborted;){try{await f.health();break}catch{}if(await new Promise(e=>setTimeout(e,p*5)),p++,p>100)throw Error(`Health endpoint timed out`)}if(u.aborted)throw u.reason;return o.abort(),{client:f,dispose:()=>{a.kill()}}}async function h(){let e=p();return new Promise((t,n)=>{e.listen(0,()=>{let n=e.address().port;t(n)}).on(`error`,e=>{n(e)})}).finally(()=>{e.close()})}var g=e(r(),1);async function _(e,r={}){if(!r.directory){let e=process.cwd();try{i(e),r.directory=e}catch{let n=await t(e,`.blink`);n&&d(l(n,`build`))&&(n=void 0),n?r.directory=n:r.directory=e}}await n(r.directory);let s=i(r.directory),c={};try{c=(0,g.parse)(await f(l(r.directory,`.env.local`),`utf-8`))}catch{}let p=await a(),h=await m({command:`node`,args:[`--experimental-strip-types`,`--no-deprecation`,s.entry],env:{...process.env,...c,BLINK_TOKEN:p}});console.log(`Agent spawned`);let _=u(r?.directory??process.cwd(),`data`,`chats`),v=r?.chat??`default`,y=new o({chatId:v,chatsDirectory:_});y.setAgent(h.client);try{let t=new Promise(e=>{let t=y.subscribe(n=>{(n.status===`idle`||n.status===`error`)&&(t(),e())})});await y.sendMessage({id:crypto.randomUUID(),created_at:new Date().toISOString(),metadata:void 0,parts:[{type:`text`,text:e.join(` `)}],role:`user`,mode:`run`}),await t;let n=y.getState();n.error&&console.error(`Error:`,n.error),console.log(`Final state:`,n.messages.pop())}finally{y.dispose(),h.dispose()}}export{_ as default};
|
|
@@ -1,6 +1,33 @@
|
|
|
1
|
-
import{__commonJSMin as e,__require as t,__toESM as n}from"./chunk-D9KrCrVq.js";import{require_source as r}from"./auth-
|
|
1
|
+
import{__commonJSMin as e,__require as t,__toESM as n}from"./chunk-D9KrCrVq.js";import{require_source as r}from"./auth-B_s9F0vP.js";import i,{dirname as a,join as o}from"path";import{existsSync as s,readFileSync as c,readdirSync as l,writeFileSync as u}from"fs";import{builtinModules as d}from"module";import{mkdir as f,rename as p,rm as m,stat as h,writeFile as g}from"fs/promises";const _=`ai-telemetry-wrapper`;function v(e={}){let{functions:t=[`streamText`,`generateText`,`generateObject`,`streamObject`,`embed`,`embedMany`],telemetryConfig:n={isEnabled:!0}}=e;return{name:`ai-telemetry`,setup(e){e.onResolve({filter:/^ai$/},e=>{if(e.namespace!==_)return{path:`ai`,namespace:_,pluginData:{resolveDir:e.resolveDir}}}),e.onLoad({filter:/^ai$/,namespace:_},e=>{let r=JSON.stringify(n),i=e.pluginData;return{contents:`
|
|
2
|
+
// Import everything from the original 'ai' package
|
|
3
|
+
import * as aiOriginal from 'ai';
|
|
4
|
+
|
|
5
|
+
// Re-export everything from 'ai'
|
|
6
|
+
export * from 'ai';
|
|
7
|
+
|
|
8
|
+
// Create wrapped versions that inject telemetry by default
|
|
9
|
+
${t.map(e=>`
|
|
10
|
+
export function ${e}(options) {
|
|
11
|
+
// If experimental_telemetry is not provided, inject the default
|
|
12
|
+
if (!options || !options.experimental_telemetry) {
|
|
13
|
+
return aiOriginal.${e}({
|
|
14
|
+
...options,
|
|
15
|
+
experimental_telemetry: ${r}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
// If it's already provided, use the original function as-is
|
|
19
|
+
return aiOriginal.${e}(options);
|
|
20
|
+
}
|
|
21
|
+
`).join(``)}
|
|
22
|
+
`,loader:`js`,resolveDir:i?.resolveDir}})}}}function y(e){return async t=>{let n=await(await import(`esbuild`)).context({entryPoints:[t.entry],outdir:t.outdir,bundle:!0,write:!1,logLevel:`silent`,format:`esm`,platform:`node`,target:`node22`,sourcemap:!1,mainFields:[`module`,`main`],conditions:[`import`,`module`],plugins:[{name:`blink-esm-require-to-import`,setup(e){e.onEnd(t=>{e.initialOptions.format!==`esm`||e.initialOptions.platform!==`node`||t.outputFiles?.forEach(e=>{if(e.path.endsWith(`.js`)||e.path.endsWith(`.mjs`)){let t=Buffer.from(e.contents).toString(`utf-8`),n=new Map,r=RegExp(`\\b__require\\("(node:)?(${d.join(`|`)})(/[^"]+)?"\\)`,`gm`);t=t.replace(r,(e,t,r,i=``)=>{let a=r+i,o=`__import_${a.toUpperCase().replace(/[/-]/g,`_`)}`,s=`node:${a}`;return n.set(o,s),o}),n.size>0&&(t=Array.from(n.entries()).map(([e,t])=>`import ${e} from "${t}";`).join(`
|
|
23
|
+
`)+`
|
|
24
|
+
|
|
25
|
+
`+t),e.contents=Buffer.from(t,`utf-8`)}})})}},{name:`blink-dev-server`,setup(e){let r;e.onStart(()=>{t.onStart(),r=performance.now()}),e.onEnd(async e=>{await m(t.outdir,{recursive:!0,force:!0}),await f(t.outdir,{recursive:!0});let a=e.outputFiles?.map(e=>({path:e.path,contents:e.contents}))??[];a.push({path:i.resolve(t.outdir,`package.json`),contents:Buffer.from(JSON.stringify({type:`module`},null,2),`utf-8`)});for(let e of a)await g(e.path,e.contents);e.errors.length>0?t.onResult({error:{message:e.errors.map(e=>`${e.text} (${e.location?.file})`).join(`
|
|
26
|
+
`)}}):t.onResult({entry:i.resolve(t.outdir,i.basename(t.entry).replace(`.ts`,`.js`)),duration:performance.now()-r,outdir:t.outdir,warnings:e.warnings.map(e=>({message:e.text,file:e.location?.file}))}),t.watch||(n.dispose(),n.cancel())})}},v()],...e});await n.watch()}}function b(e){let n=[`blink.config.ts`],r;for(let a of n){let n=i.resolve(e,a);if(s(n)){let e=t(n);if(e.default){r={...e.default};break}}}if(r||={},!r.entry){for(let t of[`src/agent.ts`,`src/agent.js`,`agent.ts`,`agent.js`]){let n=i.resolve(e,t);if(s(n)){r.entry=n;break}}if(!r.entry)throw Error(`Agent entrypoint not found.
|
|
27
|
+
|
|
28
|
+
Try creating "agent.ts" or specify "entry" in a blink.config.ts file.`)}return r.outdir||=i.resolve(e,`data/build`),r.build||=y(),r}var x=n(r(),1);async function S(e){let t=o(e,`.blink`),n=o(e,`data`);if(!s(t)||s(n))return;let r=o(t,`data`);if(s(r)){console.log(x.default.yellow(`Migrating .blink/data/ to data/...`)),await p(r,n);let e=l(t);for(let r of e){let e=o(t,r),i=o(n,r);s(i)||await p(e,i)}await m(t,{recursive:!0,force:!0})}else{if(!(s(o(t,`build`))||s(o(t,`chats`))||s(o(t,`storage.json`))||s(o(t,`config.json`))||s(o(t,`devhook.txt`))))return;console.log(x.default.yellow(`Migrating .blink/ to data/...`)),await p(t,n)}let i=o(e,`.gitignore`);if(s(i)){let e=c(i,`utf-8`);if(!e.includes(`data`)){let t=e.split(`
|
|
2
29
|
`),n=t.findIndex(e=>e.trim().match(/^\.blink\s*$/));n===-1?(e.endsWith(`
|
|
3
|
-
`)||t.push(``),t.push(`# .blink has migrated to data/`),t.push(`data`)):(t[n]=`data`,(n===0||!t[n-1]?.trim().startsWith(`#`))&&t.splice(n,0,`# .blink has migrated to data/`)),
|
|
4
|
-
`)),console.log(
|
|
5
|
-
`);let r;for(;(r=
|
|
6
|
-
`),n=n.replace(/\\r/g,`\r`)),t[e]=n}return t}function
|
|
30
|
+
`)||t.push(``),t.push(`# .blink has migrated to data/`),t.push(`data`)):(t[n]=`data`,(n===0||!t[n-1]?.trim().startsWith(`#`))&&t.splice(n,0,`# .blink has migrated to data/`)),u(i,t.join(`
|
|
31
|
+
`)),console.log(x.default.green(`Updated .gitignore`))}}console.log(x.default.green(`Migration complete!`))}var C=e(((e,t)=>{t.exports={name:`dotenv`,version:`17.2.3`,description:`Loads environment variables from .env file`,main:`lib/main.js`,types:`lib/main.d.ts`,exports:{".":{types:`./lib/main.d.ts`,require:`./lib/main.js`,default:`./lib/main.js`},"./config":`./config.js`,"./config.js":`./config.js`,"./lib/env-options":`./lib/env-options.js`,"./lib/env-options.js":`./lib/env-options.js`,"./lib/cli-options":`./lib/cli-options.js`,"./lib/cli-options.js":`./lib/cli-options.js`,"./package.json":`./package.json`},scripts:{"dts-check":`tsc --project tests/types/tsconfig.json`,lint:`standard`,pretest:`npm run lint && npm run dts-check`,test:`tap run tests/**/*.js --allow-empty-coverage --disable-coverage --timeout=60000`,"test:coverage":`tap run tests/**/*.js --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov`,prerelease:`npm test`,release:`standard-version`},repository:{type:`git`,url:`git://github.com/motdotla/dotenv.git`},homepage:`https://github.com/motdotla/dotenv#readme`,funding:`https://dotenvx.com`,keywords:[`dotenv`,`env`,`.env`,`environment`,`variables`,`config`,`settings`],readmeFilename:`README.md`,license:`BSD-2-Clause`,devDependencies:{"@types/node":`^18.11.3`,decache:`^4.6.2`,sinon:`^14.0.1`,standard:`^17.0.0`,"standard-version":`^9.5.0`,tap:`^19.2.0`,typescript:`^4.8.4`},engines:{node:`>=12`},browser:{fs:!1}}})),w=e(((e,n)=>{let r=t(`fs`),i=t(`path`),a=t(`os`),o=t(`crypto`),s=C().version,c=[`🔐 encrypt with Dotenvx: https://dotenvx.com`,`🔐 prevent committing .env to code: https://dotenvx.com/precommit`,`🔐 prevent building .env in docker: https://dotenvx.com/prebuild`,`📡 add observability to secrets: https://dotenvx.com/ops`,`👥 sync secrets across teammates & machines: https://dotenvx.com/ops`,`🗂️ backup and recover secrets: https://dotenvx.com/ops`,`✅ audit secrets and track compliance: https://dotenvx.com/ops`,`🔄 add secrets lifecycle management: https://dotenvx.com/ops`,`🔑 add access controls to secrets: https://dotenvx.com/ops`,"🛠️ run anywhere with `dotenvx run -- yourcommand`",`⚙️ specify custom .env file path with { path: '/custom/path/.env' }`,`⚙️ enable debug logging with { debug: true }`,`⚙️ override existing env vars with { override: true }`,`⚙️ suppress all logs with { quiet: true }`,`⚙️ write to custom object with { processEnv: myObject }`,`⚙️ load multiple .env files with { path: ['.env.local', '.env'] }`];function l(){return c[Math.floor(Math.random()*c.length)]}function u(e){return typeof e==`string`?![`false`,`0`,`no`,`off`,``].includes(e.toLowerCase()):!!e}function d(){return process.stdout.isTTY}function f(e){return d()?`\x1b[2m${e}\x1b[0m`:e}let p=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/gm;function m(e){let t={},n=e.toString();n=n.replace(/\r\n?/gm,`
|
|
32
|
+
`);let r;for(;(r=p.exec(n))!=null;){let e=r[1],n=r[2]||``;n=n.trim();let i=n[0];n=n.replace(/^(['"`])([\s\S]*)\1$/gm,`$2`),i===`"`&&(n=n.replace(/\\n/g,`
|
|
33
|
+
`),n=n.replace(/\\r/g,`\r`)),t[e]=n}return t}function h(e){e||={};let t=x(e);e.path=t;let n=k.configDotenv(e);if(!n.parsed){let e=Error(`MISSING_DATA: Cannot parse ${t} for an unknown reason`);throw e.code=`MISSING_DATA`,e}let r=y(e).split(`,`),i=r.length,a;for(let e=0;e<i;e++)try{let t=r[e].trim(),i=b(n,t);a=k.decrypt(i.ciphertext,i.key);break}catch(t){if(e+1>=i)throw t}return k.parse(a)}function g(e){console.error(`[dotenv@${s}][WARN] ${e}`)}function _(e){console.log(`[dotenv@${s}][DEBUG] ${e}`)}function v(e){console.log(`[dotenv@${s}] ${e}`)}function y(e){return e&&e.DOTENV_KEY&&e.DOTENV_KEY.length>0?e.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:``}function b(e,t){let n;try{n=new URL(t)}catch(e){if(e.code===`ERR_INVALID_URL`){let e=Error(`INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development`);throw e.code=`INVALID_DOTENV_KEY`,e}throw e}let r=n.password;if(!r){let e=Error(`INVALID_DOTENV_KEY: Missing key part`);throw e.code=`INVALID_DOTENV_KEY`,e}let i=n.searchParams.get(`environment`);if(!i){let e=Error(`INVALID_DOTENV_KEY: Missing environment part`);throw e.code=`INVALID_DOTENV_KEY`,e}let a=`DOTENV_VAULT_${i.toUpperCase()}`,o=e.parsed[a];if(!o){let e=Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${a} in your .env.vault file.`);throw e.code=`NOT_FOUND_DOTENV_ENVIRONMENT`,e}return{ciphertext:o,key:r}}function x(e){let t=null;if(e&&e.path&&e.path.length>0)if(Array.isArray(e.path))for(let n of e.path)r.existsSync(n)&&(t=n.endsWith(`.vault`)?n:`${n}.vault`);else t=e.path.endsWith(`.vault`)?e.path:`${e.path}.vault`;else t=i.resolve(process.cwd(),`.env.vault`);return r.existsSync(t)?t:null}function S(e){return e[0]===`~`?i.join(a.homedir(),e.slice(1)):e}function w(e){let t=u(process.env.DOTENV_CONFIG_DEBUG||e&&e.debug),n=u(process.env.DOTENV_CONFIG_QUIET||e&&e.quiet);(t||!n)&&v(`Loading env from encrypted .env.vault`);let r=k._parseVault(e),i=process.env;return e&&e.processEnv!=null&&(i=e.processEnv),k.populate(i,r,e),{parsed:r}}function T(e){let t=i.resolve(process.cwd(),`.env`),n=`utf8`,a=process.env;e&&e.processEnv!=null&&(a=e.processEnv);let o=u(a.DOTENV_CONFIG_DEBUG||e&&e.debug),s=u(a.DOTENV_CONFIG_QUIET||e&&e.quiet);e&&e.encoding?n=e.encoding:o&&_(`No encoding is specified. UTF-8 is used by default`);let c=[t];if(e&&e.path)if(!Array.isArray(e.path))c=[S(e.path)];else{c=[];for(let t of e.path)c.push(S(t))}let d,p={};for(let t of c)try{let i=k.parse(r.readFileSync(t,{encoding:n}));k.populate(p,i,e)}catch(e){o&&_(`Failed to load ${t} ${e.message}`),d=e}let m=k.populate(a,p,e);if(o=u(a.DOTENV_CONFIG_DEBUG||o),s=u(a.DOTENV_CONFIG_QUIET||s),o||!s){let e=Object.keys(m).length,t=[];for(let e of c)try{let n=i.relative(process.cwd(),e);t.push(n)}catch(t){o&&_(`Failed to load ${e} ${t.message}`),d=t}v(`injecting env (${e}) from ${t.join(`,`)} ${f(`-- tip: ${l()}`)}`)}return d?{parsed:p,error:d}:{parsed:p}}function E(e){if(y(e).length===0)return k.configDotenv(e);let t=x(e);return t?k._configVault(e):(g(`You set DOTENV_KEY but you are missing a .env.vault file at ${t}. Did you forget to build it?`),k.configDotenv(e))}function D(e,t){let n=Buffer.from(t.slice(-64),`hex`),r=Buffer.from(e,`base64`),i=r.subarray(0,12),a=r.subarray(-16);r=r.subarray(12,-16);try{let e=o.createDecipheriv(`aes-256-gcm`,n,i);return e.setAuthTag(a),`${e.update(r)}${e.final()}`}catch(e){let t=e instanceof RangeError,n=e.message===`Invalid key length`,r=e.message===`Unsupported state or unable to authenticate data`;if(t||n){let e=Error(`INVALID_DOTENV_KEY: It must be 64 characters long (or more)`);throw e.code=`INVALID_DOTENV_KEY`,e}else if(r){let e=Error(`DECRYPTION_FAILED: Please check your DOTENV_KEY`);throw e.code=`DECRYPTION_FAILED`,e}else throw e}}function O(e,t,n={}){let r=!!(n&&n.debug),i=!!(n&&n.override),a={};if(typeof t!=`object`){let e=Error(`OBJECT_REQUIRED: Please check the processEnv argument being passed to populate`);throw e.code=`OBJECT_REQUIRED`,e}for(let n of Object.keys(t))Object.prototype.hasOwnProperty.call(e,n)?(i===!0&&(e[n]=t[n],a[n]=t[n]),r&&_(i===!0?`"${n}" is already defined and WAS overwritten`:`"${n}" is already defined and was NOT overwritten`)):(e[n]=t[n],a[n]=t[n]);return a}let k={configDotenv:T,_configVault:w,_parseVault:h,config:E,decrypt:D,parse:m,populate:O};n.exports.configDotenv=k.configDotenv,n.exports._configVault=k._configVault,n.exports._parseVault=k._parseVault,n.exports.config=k.config,n.exports.decrypt=k.decrypt,n.exports.parse=k.parse,n.exports.populate=k.populate,n.exports=k}));async function T(e,t){let n=e;for(;n!==a(n);){let e=o(n,t);try{return await h(e),e}catch{}n=a(n)}}export{T as findNearestEntry,S as migrateBlinkToData,w as require_main,b as resolveConfig};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const e=require(`../chunk-iXuH7AlR.cjs`),t=require(`../build-lx6plR19.cjs`),n=require(`../index.node-UnooY2Tf.cjs`);require(`../token-error-l6zIbPbZ.cjs`),require(`../esm-C-vSI1Ww.cjs`);let r=require(`path`);r=e.__toESM(r);let i=require(`fs`);i=e.__toESM(i);let a=require(`module`);a=e.__toESM(a);let o=require(`fs/promises`);o=e.__toESM(o);let s=require(`zod/v4`);s=e.__toESM(s),require(`zod/v3`);let c=require(`node:fs`);c=e.__toESM(c);let l=require(`node:stream`);l=e.__toESM(l);let u=require(`node:util`);u=e.__toESM(u);let d=require(`http`);d=e.__toESM(d);let f=require(`node:process`);f=e.__toESM(f);let p=require(`ai`);p=e.__toESM(p);let m=require(`child_process`);m=e.__toESM(m);let h=require(`react`);h=e.__toESM(h);let g=require(`node:path`);g=e.__toESM(g);let _=require(`node:module`);_=e.__toESM(_);let v=require(`zod`);v=e.__toESM(v);let y=require(`node:readline`);y=e.__toESM(y);let b=require(`node:fs/promises`);b=e.__toESM(b);function x(e){let[t,r]=(0,h.useState)(void 0),[i,a]=(0,h.useState)([]),[o,s]=(0,h.useState)(void 0),[c,l]=(0,h.useState)(e.buildResult),[u,d]=(0,h.useState)(e.env),[f,p]=(0,h.useState)(e.apiServerUrl),[g,_]=(0,h.useState)(void 0);return(0,h.useEffect)(()=>{d(e.env),l(e.buildResult),p(e.apiServerUrl)},[e.env,e.buildResult,e.apiServerUrl]),(0,h.useEffect)(()=>{if(!c||`error`in c){r(void 0),a([]),s(void 0);return}let e=new AbortController,t=!1;return s(void 0),(async()=>{let t=await S(),i=(0,m.spawn)(`node`,[`--no-deprecation`,c.entry],{stdio:`pipe`,env:{...process.env,...u,[n.APIServerURLEnvironmentVariable]:f,PORT:t.toString(),HOST:`127.0.0.1`}});e.signal.addEventListener(`abort`,()=>{try{i.kill()}catch{}});let o=!1;i.stdout.on(`data`,e=>{let t=Buffer.from(e).toString(`utf-8`).trim();!o&&t.startsWith(`Agent server listening on`)||(o||console.log(`stdout: ${t}`),t.length&&a(e=>[...e,{level:`log`,message:t}]))}),i.stderr.on(`data`,e=>{o||console.error(`stderr: ${Buffer.from(e).toString(`utf-8`).trim()}`);let t=Buffer.from(e).toString(`utf-8`).trim();t.length&&a(e=>[...e,{level:`error`,message:t}])}),i.on(`error`,t=>{e.abort(t)}),i.on(`exit`,(t,n)=>{e.abort(`Agent exited with code ${t??`unknown`} and signal ${n??`unknown`}. Be sure to call "blink.agent(...).serve()".`)});let s=new n.Client({baseUrl:`http://127.0.0.1:${t}`});for(;!e.signal.aborted;){try{await s.health();break}catch{}await new Promise(e=>setTimeout(e,100))}if(e.signal.aborted)throw e.signal.reason;o=!0;let l=await s.capabilities();_(l),r(s)})().catch(e=>{t||s(e instanceof Error?e:Error(String(e)))}),()=>{t=!0,e.abort()}},[c,u,f]),(0,h.useMemo)(()=>({agent:t,logs:i,error:o,capabilities:g}),[t,i,o,g])}async function S(){let e=(0,d.createServer)();return new Promise((t,n)=>{e.listen(0,()=>{let n=e.address().port;t(n)}).on(`error`,e=>{n(e)})}).finally(()=>{e.close()})}function C(e){let{directory:n,onBuildStart:r,onBuildSuccess:i,onBuildError:a}=typeof e==`string`?{directory:e}:e,o=(0,h.useMemo)(()=>t.resolveConfig(n),[n]),[s,c]=(0,h.useState)(void 0),[l,u]=(0,h.useState)(void 0),[d,f]=(0,h.useState)(`building`),p=(0,h.useRef)(r),m=(0,h.useRef)(i),g=(0,h.useRef)(a);return(0,h.useEffect)(()=>{p.current=r,m.current=i,g.current=a},[r,i,a]),(0,h.useEffect)(()=>{let e=new AbortController;return o.build({cwd:n,entry:o.entry,outdir:o.outdir,watch:!0,dev:!0,signal:e.signal,onStart:()=>{f(`building`),c(void 0),u(void 0),p.current?.()},onResult:e=>{`error`in e?(c(e.error),f(`error`),g.current?.(e.error)):(u(e),f(`success`),m.current?.(e))}}).catch(e=>{console.log(`error`,e),f(`error`),c(e),g.current?.(e)}),()=>{e.abort()}},[n]),(0,h.useMemo)(()=>({error:s,status:d,result:l,entry:o.entry,outdir:o.outdir}),[s,d,l,o.entry,o.outdir])}function w(){return/[<>:"/\\|?*\u0000-\u001F]|[. ]$/g}function T(){return/^(con|prn|aux|nul|com\d|lpt\d)$/i}const E=100,D=/^\.+(\\|\/)|^\.+$/,O=/[. ]+$/,k=/[\p{Control}\p{Format}\p{Zl}\p{Zp}\uFFF0-\uFFFF]/gu,A=/[\p{Control}\p{Format}\p{Zl}\p{Zp}\uFFF0-\uFFFF]/u,j=e=>e===``,M=/([<>:"/\\|?*\u0000-\u001F]){2,}/g,N=/[\t\n\r\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]+/g;let P;function F(){return P??=new Intl.Segmenter(void 0,{granularity:`grapheme`}),P}function ee(e,t={}){if(typeof e!=`string`)throw TypeError(`Expected a string`);let n=t.replacement??`!`;if(w().test(n)||[...n].some(e=>A.test(e)&&!j(e)))throw Error(`Replacement string cannot contain reserved filename characters`);e=e.normalize(`NFC`),e=e.replaceAll(N,` `),n.length>0&&(e=e.replaceAll(M,`$1`)),e=e.replace(O,``),e=e.replace(D,n),e=e.replace(w(),n),e=e.replaceAll(k,e=>j(e)?e:n),e.length===0&&(e=n),e=T().test(e)?e+n:e;let r=typeof t.maxLength==`number`?t.maxLength:100;if(e.length>r){let t=e.lastIndexOf(`.`);if(t===-1)e=I(e,r);else{let n=e.slice(0,t),i=e.slice(t),a=Math.max(0,r-i.length);e=I(n,a)+i}}return e}function I(e,t){if(e.length<=t)return e;let n=0,r=``;for(let{segment:i}of F().segment(e)){let e=n+i.length;if(e>t)break;r+=i,n=e}return r}function L(e){return`${e}.lock`}function R(e){try{return process.kill(e,0),!0}catch(e){return e.code===`EPERM`}}function te(e,t={}){let n=L(e),r=process.pid.toString();try{return c.writeFileSync(n,r,{flag:`wx`}),!0}catch(r){if(r.code!==`EEXIST`)throw r;if(t.stale===0)return!1;let i;try{i=parseInt(c.readFileSync(n,`utf8`),10)}catch{return c.unlinkSync(n),te(e,{...t,stale:0})}if(!R(i))try{return c.unlinkSync(n),te(e,{...t,stale:0})}catch(n){if(n.code===`ENOENT`)return te(e,{...t,stale:0});throw n}return!1}}async function z(e,t={}){let n={stale:!0,retries:0,retryInterval:100,...t},r=g.resolve(e),i=0;for(;i<=n.retries;){if(te(r,n))return()=>B(r);i<n.retries&&await new Promise(e=>setTimeout(e,n.retryInterval)),i++}let a=Error(`Lock file is already being held`);throw a.code=`ELOCKED`,a.file=r,a}function B(e){let t=g.resolve(e),n=L(t);try{if(parseInt(c.readFileSync(n,`utf8`),10)!==process.pid){let e=Error(`Lock is not owned by this process`);throw e.code=`ENOTACQUIRED`,e}c.unlinkSync(n)}catch(e){if(e.code===`ENOENT`){let e=Error(`Lock is not acquired`);throw e.code=`ENOTACQUIRED`,e}throw e}}function V(e){let t=g.resolve(e),n=L(t);try{if(!c.existsSync(n))return{locked:!1};let e=c.readFileSync(n,`utf8`),t=parseInt(e,10);return R(t)?{locked:!0,pid:t}:{locked:!1}}catch(e){return e.code,{locked:!1}}}const ne=e=>{c.mkdirSync(e,{recursive:!0})},re=e=>{try{c.fdatasyncSync(e)}catch{}try{c.closeSync(e)}catch{}},H=e=>{try{let t=c.openSync(e,`r`);try{c.fsyncSync(t)}finally{c.closeSync(t)}}catch{}},U=(e,t)=>{let n=g.dirname(e);ne(n);let r=g.join(n,`.tmp-`+process.pid+`-`+Math.random().toString(36).slice(2)),i;try{i=c.openSync(r,`w`),c.writeFileSync(i,t,`utf-8`),re(i),i=void 0,c.renameSync(r,e),H(e),H(n)}catch(e){if(i!==void 0)try{c.closeSync(i)}catch{}try{c.rmSync(r,{force:!0})}catch{}throw e}},ie=(e,t)=>{let n=new Map,r,i=e=>{if(c.statSync(e,{throwIfNoEntry:!1}))return JSON.parse(c.readFileSync(e,`utf-8`))},a=(e,t)=>{U(e,JSON.stringify(t,null,2))},o=async()=>{if(r)throw Error(`Index is already locked`);let t=g.join(e,`index.json`);ne(e),c.existsSync(t)||c.writeFileSync(t,JSON.stringify({ids:{}}),`utf-8`);let n=await z(t,{stale:!0,retries:5,retryInterval:100});return r=()=>Promise.resolve(n()),()=>{n(),r=void 0}},s=async()=>{let t=g.join(e,`index.json`),n=i(t)??{ids:{}};return n.ids||={},n},l=async t=>{let n=g.join(e,`index.json`);a(n,t)},u=async t=>{let n=(await s()).ids[t];if(n)return g.join(e,n)},d=async t=>{let n=(await s()).ids[t];if(!n)return;let r=g.join(e,n);if(c.statSync(r,{throwIfNoEntry:!1}))return JSON.parse(c.readFileSync(r,`utf-8`))},f=async n=>{let r=n[t],i=String(r),c=ee(i,{replacement:`_`})+`.json`,u=await o();try{let t=await s();t.ids[i]=c,t.current=i;let r=g.join(e,c);a(r,n),await l(t)}finally{await u()}};return{async get(e){return await d(e)},async list(){if(!c.statSync(e,{throwIfNoEntry:!1}))return[];let t=await s(),n=[];for(let[r,i]of Object.entries(t.ids)){let t=g.join(e,i),a=c.statSync(t,{throwIfNoEntry:!1});if(!a)continue;let o=V(t);n.push({key:r,locked:o.locked,pid:o.pid,mtime:a.mtimeMs})}return n.sort((e,t)=>t.mtime-e.mtime),n},async lock(r,i){if(n.has(r))throw Error(`Key "${r}" is already locked in this process`);let a=await u(r);if(!a){let t=ee(r,{replacement:`_`})+`.json`,n=await o();try{let n=await s();n.ids[r]=t;let i=g.join(e,t);ne(e),c.writeFileSync(i,JSON.stringify({}),`utf-8`),await l(n),a=i}finally{await n()}}if(i?.force){let e=V(a);if(e.locked&&e.pid&&e.pid!==process.pid)try{process.kill(e.pid,`SIGTERM`),await new Promise(e=>setTimeout(e,100))}catch(t){t.code!==`ESRCH`&&console.warn(`Failed to kill process ${e.pid}:`,t.message)}}let p=await z(a,{stale:!0,retries:i?.force?10:5,retryInterval:(i?.force,100)});return n.set(r,()=>Promise.resolve(p())),{async get(){let e=await d(r);if(!e)throw Error(`Key ${r} not found`);return e},async set(e){await f(e)},async update(e){let n=await d(r);if(!n||!(t in n))throw Error(`Key ${r} not found`);await f({...n,...e})},async delete(){let t=await o();try{let t=await s(),n=t.ids[r];if(n){delete t.ids[r],t.current===r&&(t.current=void 0),await l(t);let i=g.join(e,n);try{c.rmSync(i,{force:!0}),H(e)}catch{}}}finally{await t()}},async release(){p(),n.delete(r)}}},dispose(){n.clear()}}},W=(e,t)=>{let n=t?.pollInterval??200,r=t?.debounce??50,i=new Set,a,o,s=new Map,l=new Map,u=g.join(e,`index.json`),d=()=>{try{if(!c.statSync(u,{throwIfNoEntry:!1}))return{ids:{}};let e=c.readFileSync(u,`utf-8`);return{ids:JSON.parse(e).ids??{}}}catch{return{ids:{}}}},f=(e,t,n,r)=>{for(let a of i)try{a({key:e,value:t,locked:n,pid:r})}catch(e){console.error(`Error in onChange callback:`,e)}},p=(t,n,r=!1)=>{let i=g.join(e,n);try{let e=c.statSync(i,{throwIfNoEntry:!1}),a=l.get(n);if(!e){a&&(l.delete(n),f(t,void 0,!1));return}let o=e.mtimeMs,s=a?{locked:a.locked,pid:a.pid}:{locked:!1,pid:void 0};if((r||!a)&&(s=V(i)),!a||a.mtime!==o||a.locked!==s.locked||a.pid!==s.pid){let e;e=!a||a.mtime!==o?JSON.parse(c.readFileSync(i,`utf-8`)):a.cachedValue,l.set(n,{mtime:o,key:t,locked:s.locked,pid:s.pid,cachedValue:e}),f(t,e,s.locked,s.pid)}}catch{}},m=()=>{try{let e=d(),t=new Set(Object.keys(e.ids));for(let[t,n]of Object.entries(e.ids))p(t,n,!0);for(let[e,n]of l.entries())t.has(n.key)||(l.delete(e),f(n.key,void 0,!1))}catch{}},h=(e,t,n=!1)=>{let i=s.get(e);i&&clearTimeout(i),s.set(e,setTimeout(()=>{s.delete(e),p(e,t,n)},r))},_=()=>{if(a)return;try{c.mkdirSync(e,{recursive:!0})}catch{}a=c.watch(e,(e,t)=>{if(!t||t.startsWith(`.tmp-`))return;if(t===`index.json`){m();return}if(t.endsWith(`.lock`)){let e=t.replace(`.lock`,``),n=d(),r=Object.keys(n.ids).find(t=>n.ids[t]===e);r&&p(r,e,!0);return}let n=d(),r=Object.keys(n.ids).find(e=>n.ids[e]===t);r&&h(r,t,!1)});let t=()=>{m(),o=setTimeout(t,n)};m(),o=setTimeout(t,n)};return{onChange(e){return i.size===0&&_(),i.add(e),()=>{if(i.delete(e),i.size===0){a&&=(a.close(),void 0),o&&=(clearTimeout(o),void 0);for(let e of s.values())clearTimeout(e);s.clear(),l.clear()}}},dispose(){a&&=(a.close(),void 0),o&&=(clearTimeout(o),void 0);for(let e of s.values())clearTimeout(e);s.clear(),i.clear(),l.clear()}}};async function ae({chatKey:e,agent:t,messages:n,signal:r,shouldContinueStreaming:i=oe}){n=[...n];let a=new TransformStream,o=a.writable.getWriter(),s=async()=>{let a;try{let c=await t.chat({messages:n,chat:{key:e}},{signal:r}),l=(0,p.readUIMessageStream)({message:{id:crypto.randomUUID(),role:`assistant`,parts:[],metadata:{}},stream:c,onError:e=>{e instanceof Error&&e.name===`AbortError`||o.abort(e)}});for await(let e of l)o.write(e),a=e;if(a&&i(a)){n.push(a),await s();return}await o.close()}catch(e){if(e?.name===`AbortError`||r?.aborted)return;await o.abort(e)}finally{await o.close()}};return s().catch(e=>{o.abort(e)}),a.readable}const oe=e=>{if(e.role!==`assistant`)return!1;let t=e.parts.reduce((e,t,n)=>t.type===`step-start`?n:e,-1),r=e.parts.slice(t+1).filter(p.isToolOrDynamicToolUIPart);return r.length===0||r.some(e=>n.isToolApprovalOutput(e.output)&&e.output.outcome===`pending`)?!1:r.every(e=>e.state.startsWith(`output-`))},se=(e,t,n=crypto.randomUUID())=>({created_at:new Date().toISOString(),...e,id:n,metadata:e.metadata,mode:t});function ce(e){return typeof e==`object`&&e?.__blink_internal!==void 0}var le=class{chatId;agent;chatStore;serializeMessage;filterMessages;chat;loading=!1;streamingMessage;status=`idle`;queue=[];abortController;isProcessingQueue=!1;listeners=new Set;watcher;disposed=!1;constructor(e){this.chatId=e.chatId,this.chat={id:this.chatId,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),messages:[]},this.loading=!0,this.chatStore=ie(e.chatsDirectory,`id`),this.serializeMessage=e.serializeMessage,this.filterMessages=e.filterMessages,this.watcher=W(e.chatsDirectory,{pollInterval:1e3,debounce:50}),this.watcher.onChange(e=>{if(e.key!==this.chatId||this.isProcessingQueue)return;if(!e.value){this.chat={id:this.chatId,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),messages:[]},this.status=`idle`,this.streamingMessage=void 0,this.notifyListeners();return}let t=e.value,n=e.value?.error?`error`:`idle`;e.locked&&(n=`streaming`);let r=this.chat.updated_at!==t?.updated_at||this.status!==n;this.chat=t,this.streamingMessage=void 0,this.status=n,r&&this.notifyListeners()}),this.chatStore.get(this.chatId).then(e=>{this.disposed||e&&(this.chat=e)}).catch(e=>{this.chat.error=e instanceof Error?e.message:String(e)}).finally(()=>{this.loading=!1,this.notifyListeners()})}setAgent(e){this.agent=e}getState(){return{id:this.chatId,messages:(this.chat?.messages??[]).filter(e=>!ce(e.metadata)),created_at:this.chat?.created_at,updated_at:this.chat?.updated_at,status:this.status,streamingMessage:this.streamingMessage,error:this.chat?.error,loading:this.loading,queuedMessages:this.queue}}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}async upsertMessage(e,t){let n=!1,r;t?r=t:(r=await this.chatStore.lock(this.chatId),n=!0);try{let t=await r.get();(!t.id||!Array.isArray(t.messages))&&(t={id:this.chatId,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),messages:[]});let n=e;if(this.serializeMessage){let t=this.serializeMessage(e);if(t===void 0)return;n=t}let i=n.id||crypto.randomUUID(),a=n.mode||`run`,o=se(n,a,i),s=t.messages.find(e=>e.id===o.id)?t.messages.map(e=>e.id===o.id?o:e):[...t.messages,o];this.chat={...t,updated_at:new Date().toISOString(),messages:s},await r.set(this.chat),this.notifyListeners()}finally{n&&await r.release()}}async deleteMessage(e){let t;try{t=await this.chatStore.lock(this.chatId);let n=await t.get();this.chat.messages=n.messages.filter(t=>t.id!==e),this.chat.updated_at=new Date().toISOString(),await t.set(this.chat),this.notifyListeners()}finally{t&&await t.release()}}async sendMessage(e){if(this.chat.error=void 0,this.status===`streaming`){this.queue.push(e),this.notifyListeners();return}this.queue=[e],await this.processQueueOrRun()}async start(){await this.processQueueOrRun()}async processQueueOrRun(){if(!this.agent){this.chat.error=`The agent is not available. Please wait for the build to succeed.`,this.status=`error`,this.queue=[],this.notifyListeners();return}if(this.isProcessingQueue)return;this.isProcessingQueue=!0;let e=new AbortController;this.abortController=e,this.chat.error=void 0;let t;try{t=await this.chatStore.lock(this.chatId);let n=!0;for(;this.queue.length>0||n;){n=!1;let r=this.queue.shift();this.status=`streaming`,this.streamingMessage=void 0,r&&await this.upsertMessage(r,t);let i=this.chat.messages;this.filterMessages&&(i=i.filter(this.filterMessages)),i=i.map(e=>({...e,parts:e.parts.map(e=>!(0,p.isToolOrDynamicToolUIPart)(e)||e.input!==``?e:{...e,input:{}})}));let a=await ae({agent:this.agent,chatKey:this.chatId,signal:e.signal,messages:i}),o=async e=>{let n=e;if(this.serializeMessage){let t=this.serializeMessage(e);if(t===void 0)return;n=t}this.chat.updated_at=new Date().toISOString(),this.chat.messages.push(n),this.streamingMessage=void 0,await t?.set(this.chat)},s=a.getReader();try{for(;;){let{done:t,value:n}=await s.read();if(t||e.signal.aborted)break;this.streamingMessage&&n.id!==this.streamingMessage.id&&await o(this.streamingMessage),this.streamingMessage=this.serializeMessage?this.serializeMessage(n):n,this.notifyListeners()}}finally{s.releaseLock()}this.streamingMessage&&await o(this.streamingMessage)}}catch(e){this.chat.error=e instanceof Error?e.message:String(e)}finally{this.isProcessingQueue=!1,this.streamingMessage=void 0,this.chat.error?this.status=`error`:this.status=`idle`,t&&(this.chat.updated_at=new Date().toISOString(),await t.set(this.chat),await t.release(),this.notifyListeners())}}stopStreaming(){this.abortController?.abort(),this.queue.length>0&&setTimeout(()=>{this.processQueueOrRun()},100)}clearQueue(){this.queue=[],this.notifyListeners()}async resetChat(){this.abortController?.abort(),this.resetChatState(),this.notifyListeners();let e;try{e=await this.chatStore.lock(this.chatId),await e.delete()}catch{}finally{if(e)try{await e.release()}catch{}}}dispose(){this.disposed=!0,this.watcher.dispose(),this.listeners.clear(),this.abortController?.abort()}resetChatState(){this.chat={id:this.chatId,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),messages:[]},this.streamingMessage=void 0,this.status=`idle`,this.queue=[]}notifyListeners(){let e=this.getState();for(let t of this.listeners)t(e)}};function ue(e){let{chatId:t,agent:n,chatsDirectory:r,serializeMessage:i,filterMessages:a}=e,o=(0,h.useRef)(null),[s,c]=(0,h.useState)({id:t,messages:[],status:`idle`,loading:!0,queuedMessages:[]});(0,h.useEffect)(()=>{o.current&&o.current.dispose();let e=new le({chatId:t,chatsDirectory:r,serializeMessage:i,filterMessages:a}),n=e.subscribe(e=>{c(e)});return c(e.getState()),o.current=e,()=>{n(),e.dispose(),o.current=null}},[t,r]),(0,h.useEffect)(()=>{o.current&&o.current.setAgent(n)},[n]);let l=(0,h.useCallback)(async e=>{o.current&&await o.current.sendMessage(e)},[]),u=(0,h.useCallback)(async e=>{o.current&&await o.current.upsertMessage(e)},[]),d=(0,h.useCallback)(()=>{o.current&&o.current.stopStreaming()},[]),f=(0,h.useCallback)(async()=>{o.current&&await o.current.resetChat()},[]),p=(0,h.useCallback)(()=>{o.current&&o.current.clearQueue()},[]),m=(0,h.useCallback)(async e=>{o.current&&await o.current.deleteMessage(e)},[]),g=(0,h.useCallback)(async()=>{o.current&&await o.current.start()},[]);return{...s,sendMessage:l,upsertMessage:u,stopStreaming:d,resetChat:f,clearQueue:p,deleteMessage:m,start:g}}var de=Object.getOwnPropertyNames,fe=(e,t)=>function(){return t||(0,e[de(e)[0]])((t={exports:{}}).exports,t),t.exports},G=(0,_.createRequire)(require(`url`).pathToFileURL(__filename).href);v.z.object({email:v.z.string().email(),password:v.z.string().min(8)}),v.z.object({email:v.z.string().email(),code:v.z.string()}),v.z.object({email:v.z.string().email(),password:v.z.string().min(8)});var pe=class{constructor(e,t){this.client=e,this.baseURL=t}async token(e,t={timeout:12e4}){return new Promise((n,r)=>{let i=crypto.randomUUID(),a=this.client.websocket(`/api/auth/token?id=${i}`),o=new URL(`/auth?id=${i}`,this.baseURL),s=setTimeout(()=>{r(Error(`Timeout waiting for the user to authenticate`))},t.timeout);a.onerror=e=>{clearTimeout(s),console.log(`error`,e),r(Error(`Failed to connect to server`))},a.onopen=()=>{e(o.toString(),i)},a.onmessage=e=>{typeof e.data==`string`&&(clearTimeout(s),n(e.data))}})}},me=class extends Error{constructor(e,t){super(e),this.name=`ParseError`,this.type=t.type,this.field=t.field,this.value=t.value,this.line=t.line}};function he(e){}function ge(e){if(typeof e==`function`)throw TypeError("`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?");let{onEvent:t=he,onError:n=he,onRetry:r=he,onComment:i}=e,a=``,o=!0,s,c=``,l=``;function u(e){let t=o?e.replace(/^\xEF\xBB\xBF/,``):e,[n,r]=K(`${a}${t}`);for(let e of n)d(e);a=r,o=!1}function d(e){if(e===``){p();return}if(e.startsWith(`:`)){i&&i(e.slice(e.startsWith(`: `)?2:1));return}let t=e.indexOf(`:`);if(t!==-1){let n=e.slice(0,t),r=e[t+1]===` `?2:1,i=e.slice(t+r);f(n,i,e);return}f(e,``,e)}function f(e,t,i){switch(e){case`event`:l=t;break;case`data`:c=`${c}${t}
|
|
1
|
+
const e=require(`../chunk-iXuH7AlR.cjs`),t=require(`../build-lx6plR19.cjs`),n=require(`../index.node-UnooY2Tf.cjs`);require(`../token-error-l6zIbPbZ.cjs`),require(`../esm-C-vSI1Ww.cjs`);let r=require(`path`);r=e.__toESM(r);let i=require(`fs`);i=e.__toESM(i);let a=require(`module`);a=e.__toESM(a);let o=require(`fs/promises`);o=e.__toESM(o);let s=require(`zod/v4`);s=e.__toESM(s),require(`zod/v3`);let c=require(`node:fs`);c=e.__toESM(c);let l=require(`node:stream`);l=e.__toESM(l);let u=require(`node:util`);u=e.__toESM(u);let d=require(`http`);d=e.__toESM(d);let f=require(`node:process`);f=e.__toESM(f);let p=require(`ai`);p=e.__toESM(p);let m=require(`child_process`);m=e.__toESM(m);let h=require(`react`);h=e.__toESM(h);let g=require(`node:path`);g=e.__toESM(g);let _=require(`node:module`);_=e.__toESM(_);let v=require(`zod`);v=e.__toESM(v);let y=require(`node:readline`);y=e.__toESM(y);let b=require(`node:fs/promises`);b=e.__toESM(b);function x(e){let[t,r]=(0,h.useState)(void 0),[i,a]=(0,h.useState)([]),[o,s]=(0,h.useState)(void 0),[c,l]=(0,h.useState)(e.buildResult),[u,d]=(0,h.useState)(e.env),[f,p]=(0,h.useState)(e.apiServerUrl),[g,_]=(0,h.useState)(void 0);return(0,h.useEffect)(()=>{d(e.env),l(e.buildResult),p(e.apiServerUrl)},[e.env,e.buildResult,e.apiServerUrl]),(0,h.useEffect)(()=>{if(!c||`error`in c){r(void 0),a([]),s(void 0);return}let e=new AbortController,t=!1;return s(void 0),r(void 0),(async()=>{let t=await S(),i=(0,m.spawn)(`node`,[`--no-deprecation`,c.entry],{stdio:`pipe`,env:{...process.env,...u,[n.APIServerURLEnvironmentVariable]:f,PORT:t.toString(),HOST:`127.0.0.1`}});e.signal.addEventListener(`abort`,()=>{try{i.kill()}catch{}});let o=!1;i.stdout.on(`data`,e=>{let t=Buffer.from(e).toString(`utf-8`).trim();!o&&t.startsWith(`Agent server listening on`)||(o||console.log(`stdout: ${t}`),t.length&&a(e=>[...e,{level:`log`,message:t}]))}),i.stderr.on(`data`,e=>{o||console.error(`stderr: ${Buffer.from(e).toString(`utf-8`).trim()}`);let t=Buffer.from(e).toString(`utf-8`).trim();t.length&&a(e=>[...e,{level:`error`,message:t}])}),i.on(`error`,t=>{e.abort(t)}),i.on(`exit`,(t,n)=>{e.abort(`Agent exited with code ${t??`unknown`} and signal ${n??`unknown`}. Be sure to call "blink.agent(...).serve()".`)});let s=new n.Client({baseUrl:`http://127.0.0.1:${t}`});for(;!e.signal.aborted;){try{await s.health();break}catch{}await new Promise(e=>setTimeout(e,100))}if(e.signal.aborted)throw e.signal.reason;o=!0;let l=await s.capabilities();_(l),r(s)})().catch(e=>{t||s(e instanceof Error?e:Error(String(e)))}),()=>{t=!0,e.abort()}},[c,u,f]),(0,h.useMemo)(()=>({agent:t,logs:i,error:o,capabilities:g}),[t,i,o,g])}async function S(){let e=(0,d.createServer)();return new Promise((t,n)=>{e.listen(0,()=>{let n=e.address().port;t(n)}).on(`error`,e=>{n(e)})}).finally(()=>{e.close()})}function C(e){let{directory:n,onBuildStart:r,onBuildSuccess:i,onBuildError:a}=typeof e==`string`?{directory:e}:e,o=(0,h.useMemo)(()=>t.resolveConfig(n),[n]),[s,c]=(0,h.useState)(void 0),[l,u]=(0,h.useState)(void 0),[d,f]=(0,h.useState)(`building`),p=(0,h.useRef)(r),m=(0,h.useRef)(i),g=(0,h.useRef)(a);return(0,h.useEffect)(()=>{p.current=r,m.current=i,g.current=a},[r,i,a]),(0,h.useEffect)(()=>{let e=new AbortController;return o.build({cwd:n,entry:o.entry,outdir:o.outdir,watch:!0,dev:!0,signal:e.signal,onStart:()=>{f(`building`),c(void 0),u(void 0),p.current?.()},onResult:e=>{`error`in e?(c(e.error),f(`error`),g.current?.(e.error)):(u(e),f(`success`),m.current?.(e))}}).catch(e=>{console.log(`error`,e),f(`error`),c(e),g.current?.(e)}),()=>{e.abort()}},[n]),(0,h.useMemo)(()=>({error:s,status:d,result:l,entry:o.entry,outdir:o.outdir}),[s,d,l,o.entry,o.outdir])}function w(){return/[<>:"/\\|?*\u0000-\u001F]|[. ]$/g}function T(){return/^(con|prn|aux|nul|com\d|lpt\d)$/i}const E=100,D=/^\.+(\\|\/)|^\.+$/,O=/[. ]+$/,k=/[\p{Control}\p{Format}\p{Zl}\p{Zp}\uFFF0-\uFFFF]/gu,A=/[\p{Control}\p{Format}\p{Zl}\p{Zp}\uFFF0-\uFFFF]/u,j=e=>e===``,M=/([<>:"/\\|?*\u0000-\u001F]){2,}/g,N=/[\t\n\r\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]+/g;let P;function F(){return P??=new Intl.Segmenter(void 0,{granularity:`grapheme`}),P}function ee(e,t={}){if(typeof e!=`string`)throw TypeError(`Expected a string`);let n=t.replacement??`!`;if(w().test(n)||[...n].some(e=>A.test(e)&&!j(e)))throw Error(`Replacement string cannot contain reserved filename characters`);e=e.normalize(`NFC`),e=e.replaceAll(N,` `),n.length>0&&(e=e.replaceAll(M,`$1`)),e=e.replace(O,``),e=e.replace(D,n),e=e.replace(w(),n),e=e.replaceAll(k,e=>j(e)?e:n),e.length===0&&(e=n),e=T().test(e)?e+n:e;let r=typeof t.maxLength==`number`?t.maxLength:100;if(e.length>r){let t=e.lastIndexOf(`.`);if(t===-1)e=I(e,r);else{let n=e.slice(0,t),i=e.slice(t),a=Math.max(0,r-i.length);e=I(n,a)+i}}return e}function I(e,t){if(e.length<=t)return e;let n=0,r=``;for(let{segment:i}of F().segment(e)){let e=n+i.length;if(e>t)break;r+=i,n=e}return r}function L(e){return`${e}.lock`}function R(e){try{return process.kill(e,0),!0}catch(e){return e.code===`EPERM`}}function te(e,t={}){let n=L(e),r=process.pid.toString();try{return c.writeFileSync(n,r,{flag:`wx`}),!0}catch(r){if(r.code!==`EEXIST`)throw r;if(t.stale===0)return!1;let i;try{i=parseInt(c.readFileSync(n,`utf8`),10)}catch{return c.unlinkSync(n),te(e,{...t,stale:0})}if(!R(i))try{return c.unlinkSync(n),te(e,{...t,stale:0})}catch(n){if(n.code===`ENOENT`)return te(e,{...t,stale:0});throw n}return!1}}async function z(e,t={}){let n={stale:!0,retries:0,retryInterval:100,...t},r=g.resolve(e),i=0;for(;i<=n.retries;){if(te(r,n))return()=>B(r);i<n.retries&&await new Promise(e=>setTimeout(e,n.retryInterval)),i++}let a=Error(`Lock file is already being held`);throw a.code=`ELOCKED`,a.file=r,a}function B(e){let t=g.resolve(e),n=L(t);try{if(parseInt(c.readFileSync(n,`utf8`),10)!==process.pid){let e=Error(`Lock is not owned by this process`);throw e.code=`ENOTACQUIRED`,e}c.unlinkSync(n)}catch(e){if(e.code===`ENOENT`){let e=Error(`Lock is not acquired`);throw e.code=`ENOTACQUIRED`,e}throw e}}function V(e){let t=g.resolve(e),n=L(t);try{if(!c.existsSync(n))return{locked:!1};let e=c.readFileSync(n,`utf8`),t=parseInt(e,10);return R(t)?{locked:!0,pid:t}:{locked:!1}}catch(e){return e.code,{locked:!1}}}const ne=e=>{c.mkdirSync(e,{recursive:!0})},re=e=>{try{c.fdatasyncSync(e)}catch{}try{c.closeSync(e)}catch{}},H=e=>{try{let t=c.openSync(e,`r`);try{c.fsyncSync(t)}finally{c.closeSync(t)}}catch{}},U=(e,t)=>{let n=g.dirname(e);ne(n);let r=g.join(n,`.tmp-`+process.pid+`-`+Math.random().toString(36).slice(2)),i;try{i=c.openSync(r,`w`),c.writeFileSync(i,t,`utf-8`),re(i),i=void 0,c.renameSync(r,e),H(e),H(n)}catch(e){if(i!==void 0)try{c.closeSync(i)}catch{}try{c.rmSync(r,{force:!0})}catch{}throw e}},ie=(e,t)=>{let n=new Map,r,i=e=>{if(c.statSync(e,{throwIfNoEntry:!1}))return JSON.parse(c.readFileSync(e,`utf-8`))},a=(e,t)=>{U(e,JSON.stringify(t,null,2))},o=async()=>{if(r)throw Error(`Index is already locked`);let t=g.join(e,`index.json`);ne(e),c.existsSync(t)||c.writeFileSync(t,JSON.stringify({ids:{}}),`utf-8`);let n=await z(t,{stale:!0,retries:5,retryInterval:100});return r=()=>Promise.resolve(n()),()=>{n(),r=void 0}},s=async()=>{let t=g.join(e,`index.json`),n=i(t)??{ids:{}};return n.ids||={},n},l=async t=>{let n=g.join(e,`index.json`);a(n,t)},u=async t=>{let n=(await s()).ids[t];if(n)return g.join(e,n)},d=async t=>{let n=(await s()).ids[t];if(!n)return;let r=g.join(e,n);if(c.statSync(r,{throwIfNoEntry:!1}))return JSON.parse(c.readFileSync(r,`utf-8`))},f=async n=>{let r=n[t],i=String(r),c=ee(i,{replacement:`_`})+`.json`,u=await o();try{let t=await s();t.ids[i]=c,t.current=i;let r=g.join(e,c);a(r,n),await l(t)}finally{await u()}};return{async get(e){return await d(e)},async list(){if(!c.statSync(e,{throwIfNoEntry:!1}))return[];let t=await s(),n=[];for(let[r,i]of Object.entries(t.ids)){let t=g.join(e,i),a=c.statSync(t,{throwIfNoEntry:!1});if(!a)continue;let o=V(t);n.push({key:r,locked:o.locked,pid:o.pid,mtime:a.mtimeMs})}return n.sort((e,t)=>t.mtime-e.mtime),n},async lock(r,i){if(n.has(r))throw Error(`Key "${r}" is already locked in this process`);let a=await u(r);if(!a){let t=ee(r,{replacement:`_`})+`.json`,n=await o();try{let n=await s();n.ids[r]=t;let i=g.join(e,t);ne(e),c.writeFileSync(i,JSON.stringify({}),`utf-8`),await l(n),a=i}finally{await n()}}if(i?.force){let e=V(a);if(e.locked&&e.pid&&e.pid!==process.pid)try{process.kill(e.pid,`SIGTERM`),await new Promise(e=>setTimeout(e,100))}catch(t){t.code!==`ESRCH`&&console.warn(`Failed to kill process ${e.pid}:`,t.message)}}let p=await z(a,{stale:!0,retries:i?.force?10:5,retryInterval:(i?.force,100)});return n.set(r,()=>Promise.resolve(p())),{async get(){let e=await d(r);if(!e)throw Error(`Key ${r} not found`);return e},async set(e){await f(e)},async update(e){let n=await d(r);if(!n||!(t in n))throw Error(`Key ${r} not found`);await f({...n,...e})},async delete(){let t=await o();try{let t=await s(),n=t.ids[r];if(n){delete t.ids[r],t.current===r&&(t.current=void 0),await l(t);let i=g.join(e,n);try{c.rmSync(i,{force:!0}),H(e)}catch{}}}finally{await t()}},async release(){p(),n.delete(r)}}},dispose(){n.clear()}}},W=(e,t)=>{let n=t?.pollInterval??200,r=t?.debounce??50,i=new Set,a,o,s=new Map,l=new Map,u=g.join(e,`index.json`),d=()=>{try{if(!c.statSync(u,{throwIfNoEntry:!1}))return{ids:{}};let e=c.readFileSync(u,`utf-8`);return{ids:JSON.parse(e).ids??{}}}catch{return{ids:{}}}},f=(e,t,n,r)=>{for(let a of i)try{a({key:e,value:t,locked:n,pid:r})}catch(e){console.error(`Error in onChange callback:`,e)}},p=(t,n,r=!1)=>{let i=g.join(e,n);try{let e=c.statSync(i,{throwIfNoEntry:!1}),a=l.get(n);if(!e){a&&(l.delete(n),f(t,void 0,!1));return}let o=e.mtimeMs,s=a?{locked:a.locked,pid:a.pid}:{locked:!1,pid:void 0};if((r||!a)&&(s=V(i)),!a||a.mtime!==o||a.locked!==s.locked||a.pid!==s.pid){let e;e=!a||a.mtime!==o?JSON.parse(c.readFileSync(i,`utf-8`)):a.cachedValue,l.set(n,{mtime:o,key:t,locked:s.locked,pid:s.pid,cachedValue:e}),f(t,e,s.locked,s.pid)}}catch{}},m=()=>{try{let e=d(),t=new Set(Object.keys(e.ids));for(let[t,n]of Object.entries(e.ids))p(t,n,!0);for(let[e,n]of l.entries())t.has(n.key)||(l.delete(e),f(n.key,void 0,!1))}catch{}},h=(e,t,n=!1)=>{let i=s.get(e);i&&clearTimeout(i),s.set(e,setTimeout(()=>{s.delete(e),p(e,t,n)},r))},_=()=>{if(a)return;try{c.mkdirSync(e,{recursive:!0})}catch{}a=c.watch(e,(e,t)=>{if(!t||t.startsWith(`.tmp-`))return;if(t===`index.json`){m();return}if(t.endsWith(`.lock`)){let e=t.replace(`.lock`,``),n=d(),r=Object.keys(n.ids).find(t=>n.ids[t]===e);r&&p(r,e,!0);return}let n=d(),r=Object.keys(n.ids).find(e=>n.ids[e]===t);r&&h(r,t,!1)});let t=()=>{m(),o=setTimeout(t,n)};m(),o=setTimeout(t,n)};return{onChange(e){return i.size===0&&_(),i.add(e),()=>{if(i.delete(e),i.size===0){a&&=(a.close(),void 0),o&&=(clearTimeout(o),void 0);for(let e of s.values())clearTimeout(e);s.clear(),l.clear()}}},dispose(){a&&=(a.close(),void 0),o&&=(clearTimeout(o),void 0);for(let e of s.values())clearTimeout(e);s.clear(),i.clear(),l.clear()}}};async function ae({chatKey:e,agent:t,messages:n,signal:r,shouldContinueStreaming:i=oe}){n=[...n];let a=new TransformStream,o=a.writable.getWriter(),s=async()=>{let a;try{let c=await t.chat({messages:n,chat:{key:e}},{signal:r}),l=(0,p.readUIMessageStream)({message:{id:crypto.randomUUID(),role:`assistant`,parts:[],metadata:{}},stream:c,onError:e=>{e instanceof Error&&e.name===`AbortError`||o.abort(e)}});for await(let e of l)o.write(e),a=e;if(a&&i(a)){n.push(a),await s();return}await o.close()}catch(e){if(e?.name===`AbortError`||r?.aborted)return;await o.abort(e)}finally{await o.close()}};return s().catch(e=>{o.abort(e)}),a.readable}const oe=e=>{if(e.role!==`assistant`)return!1;let t=e.parts.reduce((e,t,n)=>t.type===`step-start`?n:e,-1),r=e.parts.slice(t+1).filter(p.isToolOrDynamicToolUIPart);return r.length===0||r.some(e=>n.isToolApprovalOutput(e.output)&&e.output.outcome===`pending`)?!1:r.every(e=>e.state.startsWith(`output-`))},se=(e,t,n=crypto.randomUUID())=>({created_at:new Date().toISOString(),...e,id:n,metadata:e.metadata,mode:t});function ce(e){return typeof e==`object`&&e?.__blink_internal!==void 0}var le=class{chatId;agent;chatStore;serializeMessage;filterMessages;chat;loading=!1;streamingMessage;status=`idle`;queue=[];abortController;isProcessingQueue=!1;listeners=new Set;watcher;disposed=!1;constructor(e){this.chatId=e.chatId,this.chat={id:this.chatId,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),messages:[]},this.loading=!0,this.chatStore=ie(e.chatsDirectory,`id`),this.serializeMessage=e.serializeMessage,this.filterMessages=e.filterMessages,this.watcher=W(e.chatsDirectory,{pollInterval:1e3,debounce:50}),this.watcher.onChange(e=>{if(e.key!==this.chatId||this.isProcessingQueue)return;if(!e.value){this.chat={id:this.chatId,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),messages:[]},this.status=`idle`,this.streamingMessage=void 0,this.notifyListeners();return}let t=e.value,n=e.value?.error?`error`:`idle`;e.locked&&(n=`streaming`);let r=this.chat.updated_at!==t?.updated_at||this.status!==n;this.chat=t,this.streamingMessage=void 0,this.status=n,r&&this.notifyListeners()}),this.chatStore.get(this.chatId).then(e=>{this.disposed||e&&(this.chat=e)}).catch(e=>{this.chat.error=e instanceof Error?e.message:String(e)}).finally(()=>{this.loading=!1,this.notifyListeners()})}setAgent(e){this.agent=e}getState(){return{id:this.chatId,messages:(this.chat?.messages??[]).filter(e=>!ce(e.metadata)),created_at:this.chat?.created_at,updated_at:this.chat?.updated_at,status:this.status,streamingMessage:this.streamingMessage,error:this.chat?.error,loading:this.loading,queuedMessages:this.queue}}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}async upsertMessage(e,t){let n=!1,r;t?r=t:(r=await this.chatStore.lock(this.chatId),n=!0);try{let t=await r.get();(!t.id||!Array.isArray(t.messages))&&(t={id:this.chatId,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),messages:[]});let n=e;if(this.serializeMessage){let t=this.serializeMessage(e);if(t===void 0)return;n=t}let i=n.id||crypto.randomUUID(),a=n.mode||`run`,o=se(n,a,i),s=t.messages.find(e=>e.id===o.id)?t.messages.map(e=>e.id===o.id?o:e):[...t.messages,o];this.chat={...t,updated_at:new Date().toISOString(),messages:s},await r.set(this.chat),this.notifyListeners()}finally{n&&await r.release()}}async deleteMessage(e){let t;try{t=await this.chatStore.lock(this.chatId);let n=await t.get();this.chat.messages=n.messages.filter(t=>t.id!==e),this.chat.updated_at=new Date().toISOString(),await t.set(this.chat),this.notifyListeners()}finally{t&&await t.release()}}async sendMessage(e){if(this.chat.error=void 0,this.status===`streaming`){this.queue.push(e),this.notifyListeners();return}this.queue=[e],await this.processQueueOrRun()}async start(){await this.processQueueOrRun()}async processQueueOrRun(){if(!this.agent){this.chat.error=`The agent is not available. Please wait for the build to succeed.`,this.status=`error`,this.queue=[],this.notifyListeners();return}if(this.isProcessingQueue)return;this.isProcessingQueue=!0,this.chat.error=void 0;let e;try{e=await this.chatStore.lock(this.chatId);let t=!0;for(;this.queue.length>0||t;){t=!1;let n=new AbortController;this.abortController=n;let r=this.queue.shift();this.streamingMessage=void 0,this.status=`streaming`,this.notifyListeners(),r&&await this.upsertMessage(r,e);let i=this.chat.messages;this.filterMessages&&(i=i.filter(this.filterMessages)),i=i.map(e=>({...e,parts:e.parts.map(e=>!(0,p.isToolOrDynamicToolUIPart)(e)||e.input!==``?e:{...e,input:{}})}));let a=await ae({agent:this.agent,chatKey:this.chatId,signal:n.signal,messages:i}),o=async t=>{let n=t;if(this.serializeMessage){let e=this.serializeMessage(t);if(e===void 0)return;n=e}this.chat.updated_at=new Date().toISOString(),this.chat.messages.push(n),this.streamingMessage=void 0,await e?.set(this.chat)},s=a.getReader();try{for(;;){let{done:e,value:t}=await s.read();if(e||n.signal.aborted)break;this.streamingMessage&&t.id!==this.streamingMessage.id&&await o(this.streamingMessage),this.streamingMessage=this.serializeMessage?this.serializeMessage(t):t,this.notifyListeners()}}finally{s.releaseLock()}this.streamingMessage&&await o(this.streamingMessage)}}catch(e){this.chat.error=e instanceof Error?e.message:String(e)}finally{this.isProcessingQueue=!1,this.streamingMessage=void 0,this.chat.error?this.status=`error`:this.status=`idle`,e&&(this.chat.updated_at=new Date().toISOString(),await e.set(this.chat),await e.release(),this.notifyListeners())}}stopStreaming(){this.abortController?.abort()}clearQueue(){this.queue=[],this.notifyListeners()}async resetChat(){this.abortController?.abort(),this.resetChatState(),this.notifyListeners();let e;try{e=await this.chatStore.lock(this.chatId),await e.delete()}catch{}finally{if(e)try{await e.release()}catch{}}}dispose(){this.disposed=!0,this.watcher.dispose(),this.listeners.clear(),this.abortController?.abort()}resetChatState(){this.chat={id:this.chatId,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),messages:[]},this.streamingMessage=void 0,this.status=`idle`,this.queue=[]}notifyListeners(){let e=this.getState();for(let t of this.listeners)t(e)}};function ue(e){let{chatId:t,agent:n,chatsDirectory:r,serializeMessage:i,filterMessages:a}=e,o=(0,h.useRef)(null),[s,c]=(0,h.useState)({id:t,messages:[],status:`idle`,loading:!0,queuedMessages:[]});(0,h.useEffect)(()=>{o.current&&o.current.dispose();let e=new le({chatId:t,chatsDirectory:r,serializeMessage:i,filterMessages:a}),n=e.subscribe(e=>{c(e)});return c(e.getState()),o.current=e,()=>{n(),e.dispose(),o.current=null}},[t,r]),(0,h.useEffect)(()=>{o.current&&o.current.setAgent(n)},[n]);let l=(0,h.useCallback)(async e=>{o.current&&await o.current.sendMessage(e)},[]),u=(0,h.useCallback)(async e=>{o.current&&await o.current.upsertMessage(e)},[]),d=(0,h.useCallback)(()=>{o.current&&o.current.stopStreaming()},[]),f=(0,h.useCallback)(async()=>{o.current&&await o.current.resetChat()},[]),p=(0,h.useCallback)(()=>{o.current&&o.current.clearQueue()},[]),m=(0,h.useCallback)(async e=>{o.current&&await o.current.deleteMessage(e)},[]),g=(0,h.useCallback)(async()=>{o.current&&await o.current.start()},[]);return{...s,sendMessage:l,upsertMessage:u,stopStreaming:d,resetChat:f,clearQueue:p,deleteMessage:m,start:g}}var de=Object.getOwnPropertyNames,fe=(e,t)=>function(){return t||(0,e[de(e)[0]])((t={exports:{}}).exports,t),t.exports},G=(0,_.createRequire)(require(`url`).pathToFileURL(__filename).href);v.z.object({email:v.z.string().email(),password:v.z.string().min(8)}),v.z.object({email:v.z.string().email(),code:v.z.string()}),v.z.object({email:v.z.string().email(),password:v.z.string().min(8)});var pe=class{constructor(e,t){this.client=e,this.baseURL=t}async token(e,t={timeout:12e4}){return new Promise((n,r)=>{let i=crypto.randomUUID(),a=this.client.websocket(`/api/auth/token?id=${i}`),o=new URL(`/auth?id=${i}`,this.baseURL),s=setTimeout(()=>{r(Error(`Timeout waiting for the user to authenticate`))},t.timeout);a.onerror=e=>{clearTimeout(s),console.log(`error`,e),r(Error(`Failed to connect to server`))},a.onopen=()=>{e(o.toString(),i)},a.onmessage=e=>{typeof e.data==`string`&&(clearTimeout(s),n(e.data))}})}},me=class extends Error{constructor(e,t){super(e),this.name=`ParseError`,this.type=t.type,this.field=t.field,this.value=t.value,this.line=t.line}};function he(e){}function ge(e){if(typeof e==`function`)throw TypeError("`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?");let{onEvent:t=he,onError:n=he,onRetry:r=he,onComment:i}=e,a=``,o=!0,s,c=``,l=``;function u(e){let t=o?e.replace(/^\xEF\xBB\xBF/,``):e,[n,r]=K(`${a}${t}`);for(let e of n)d(e);a=r,o=!1}function d(e){if(e===``){p();return}if(e.startsWith(`:`)){i&&i(e.slice(e.startsWith(`: `)?2:1));return}let t=e.indexOf(`:`);if(t!==-1){let n=e.slice(0,t),r=e[t+1]===` `?2:1,i=e.slice(t+r);f(n,i,e);return}f(e,``,e)}function f(e,t,i){switch(e){case`event`:l=t;break;case`data`:c=`${c}${t}
|
|
2
2
|
`;break;case`id`:s=t.includes(`\0`)?void 0:t;break;case`retry`:/^\d+$/.test(t)?r(parseInt(t,10)):n(new me(`Invalid \`retry\` value: "${t}"`,{type:`invalid-retry`,value:t,line:i}));break;default:n(new me(`Unknown field "${e.length>20?`${e.slice(0,20)}\u2026`:e}"`,{type:`unknown-field`,field:e,value:t,line:i}));break}}function p(){c.length>0&&t({id:s,event:l||void 0,data:c.endsWith(`
|
|
3
3
|
`)?c.slice(0,-1):c}),s=void 0,c=``,l=``}function m(e={}){a&&e.consume&&d(a),o=!0,s=void 0,c=``,l=``,a=``}return{feed:u,reset:m}}function K(e){let t=[],n=``,r=0;for(;r<e.length;){let i=e.indexOf(`\r`,r),a=e.indexOf(`
|
|
4
4
|
`,r),o=-1;if(i!==-1&&a!==-1?o=Math.min(i,a):i===-1?a!==-1&&(o=a):o=i===e.length-1?-1:i,o===-1){n=e.slice(r);break}else{let n=e.slice(r,o);t.push(n),r=o+1,e[r-1]===`\r`&&e[r]===`
|
|
@@ -304,7 +304,7 @@ You are *NOT* responsible for:
|
|
|
304
304
|
- Continuing any work the run mode agent started
|
|
305
305
|
|
|
306
306
|
Your job is to improve the agent based on run mode failures, NOT to complete the user's original run-mode request yourself.
|
|
307
|
-
`}),(0,p.streamText)({model:n.model(`anthropic/claude-sonnet-4.5`),messages:h,tools:f,experimental_repairToolCall:({tools:e,toolCall:t})=>{throw Object.keys(e).includes(t.toolName)?Error(`You have this tool, but you used an invalid input.`):Error(`Invalid tool call. Tool "${t.toolName}" is not available to the EDIT AGENT.`)}})}),{agent:t,setUserAgentUrl:e=>{i=e},cleanup:()=>{a&&=(a.close(),void 0)}}}const mf=`You are the Blink Edit Agent, an AI assistant that helps developers build and debug Blink agents.
|
|
307
|
+
`}),(0,p.streamText)({model:n.model(`anthropic/claude-sonnet-4.5`),messages:h,maxOutputTokens:64e3,tools:f,experimental_repairToolCall:({tools:e,toolCall:t})=>{throw Object.keys(e).includes(t.toolName)?Error(`You have this tool, but you used an invalid input.`):Error(`Invalid tool call. Tool "${t.toolName}" is not available to the EDIT AGENT.`)}})}),{agent:t,setUserAgentUrl:e=>{i=e},cleanup:()=>{a&&=(a.close(),void 0)}}}const mf=`You are the Blink Edit Agent, an AI assistant that helps developers build and debug Blink agents.
|
|
308
308
|
|
|
309
309
|
You are integrated into the \`blink dev\` command-line interface, where users can toggle between **run mode** (testing their agent) and **edit mode** (getting your help) using Ctrl+E. After making changes, instruct the user to switch to run mode to use their agent.
|
|
310
310
|
|
|
@@ -635,4 +635,4 @@ Instead:
|
|
|
635
635
|
|
|
636
636
|
The agent process can restart at any time, so all important state must be externalized.
|
|
637
637
|
</technical_knowledge>
|
|
638
|
-
`;function hf(e){let[t,r]=(0,h.useState)(void 0),[i,a]=(0,h.useState)(void 0),o=(0,h.useRef)(void 0);return(0,h.useEffect)(()=>{let t=new AbortController;return(async()=>{o.current=pf({directory:e.directory});let i=await gf(),a=o.current.agent.serve({port:i,host:`127.0.0.1`,apiUrl:e.apiServerUrl});t.signal.addEventListener(`abort`,()=>{try{a.close()}catch{}o.current?.cleanup()});let s=new n.Client({baseUrl:`http://127.0.0.1:${i}`});for(;!t.signal.aborted;){try{await s.health();break}catch{}await new Promise(e=>setTimeout(e,100))}if(t.signal.aborted)throw t.signal.reason;r(s)})().catch(e=>{a(e instanceof Error?e:Error(String(e)))}),()=>t.abort()},[e.directory,e.apiServerUrl]),(0,h.useMemo)(()=>({client:t,error:i,setUserAgentUrl:e=>{o.current?.setUserAgentUrl(e)}}),[t,i])}async function gf(){let e=(0,d.createServer)();return new Promise((t,n)=>{e.listen(0,()=>{let n=e.address().port;t(n)}).on(`error`,e=>{n(e)})}).finally(()=>{e.close()})}function _f(e){let{directory:t}=e,[i,a]=(0,h.useState)(`run`),o=(0,h.useRef)(`run`);(0,h.useEffect)(()=>{o.current=i},[i]);let s=(0,h.useCallback)(t=>{a(t),e.onModeChange?.(t)},[e.onModeChange]),c=(0,h.useCallback)(()=>{s(i===`run`?`edit`:`run`)},[i,s]),{error:l,status:u,result:d,entry:f}=C({directory:t,onBuildStart:e.onBuildStart,onBuildSuccess:e.onBuildSuccess,onBuildError:e.onBuildError}),m=Ja(t),g=(0,h.useMemo)(()=>{let e=Aa();return e?{...m,BLINK_TOKEN:e}:m},[m]),_=(0,h.useRef)(void 0);(0,h.useEffect)(()=>{let t=Object.keys(g);if(t.length===_.current||_.current===void 0){_.current=t.length;return}_.current=t.length,e.onEnvLoaded?.(t)},[g,e.onEnvLoaded]);let v=(0,h.useRef)(void 0),y=(0,h.useMemo)(()=>Va({port:0,dataDirectory:(0,r.join)(t,`data`),getAgent:()=>v.current}),[t]),{agent:b,logs:S,error:w,capabilities:T}=x({buildResult:d,env:g,apiServerUrl:y.url}),{client:E,error:D,setUserAgentUrl:O}=hf({directory:t,apiServerUrl:y.url}),[k,A]=(0,h.useState)(`default`);(0,h.useEffect)(()=>{b&&O(b.baseUrl),i===`run`?b?v.current=b:(v.current=void 0,y.stopChat(k)):i===`edit`&&(E?v.current=E:(v.current=void 0,y.stopChat(k)))},[b,E,i,k,y]);let j=(0,h.useRef)(void 0),M=ue({chatId:k,agent:i===`run`?b:E,chatsDirectory:y.chatsDirectory,serializeMessage:e=>{let t=e.role===`user`&&j.current?{...typeof e.metadata==`object`&&e.metadata!==null?e.metadata:{},options:j.current}:e.metadata;return{id:e.id??crypto.randomUUID(),created_at:new Date().toISOString(),role:e.role,parts:e.parts,mode:o.current,metadata:t}},filterMessages:e=>o.current===`edit`?!0:!(ce(e.metadata)||e.mode===`edit`)}),N=(0,h.useRef)(0);(0,h.useEffect)(()=>{if(S.length===N.current)return;let t=N.current;for(let n of S.slice(t))e.onAgentLog?.(n);N.current=S.length},[S,e.onAgentLog,M.upsertMessage]);let[P,F]=(0,h.useState)([]);(0,h.useEffect)(()=>{y.listChats().then(e=>{F(e.map(e=>e.key))})},[y]),(0,h.useEffect)(()=>{k&&!P.includes(k)&&F(e=>[...e,k])},[k,P]);let ee=(0,h.useMemo)(()=>Ma(t),[t]),I=Ua({id:ee,disabled:!T?.request,onRequest:async t=>{if(!b)throw Error(`No agent`);let n=new URL(t.url),r=new URL(b.baseUrl);r.pathname=n.pathname,r.search=n.search;try{let i=await fetch(r.toString(),{method:t.method,body:t.body,headers:t.headers,redirect:`manual`,signal:t.signal,duplex:`half`});return e.onDevhookRequest?.({method:t.method,path:n.pathname,status:i.status}),i}catch(e){return console.error(`Error sending request to user's agent:`,e),new Response(`Internal server error`,{status:500})}}});(0,h.useEffect)(()=>{I.status===`connected`&&e.onDevhookConnected?.(`https://${I.id}.dev.blink.host`)},[I.status,I.id]);let{schema:L,options:R,error:te,setOption:z}=Ha({agent:i===`run`?b:E,capabilities:T,messages:M.messages});(0,h.useEffect)(()=>{j.current=R},[R]);let B=(0,h.useMemo)(()=>{let e=[];return w&&i===`run`&&e.push(w.message),D&&i===`edit`&&e.push(`Edit agent error: ${D.message}`),M.error&&e.push(`Chat error: ${M.error}`),te&&e.push(`Options error: ${te.message}`),e},[w,D,M.error,te,i]);(0,h.useEffect)(()=>{for(let t of B)e.onError?.(t)},[B]);let[V,ne]=(0,h.useState)(),[re,H]=(0,h.useState)(!1),U=(0,h.useMemo)(()=>{let e=[...M.messages].reverse().find(e=>!(e.role!==`assistant`||e.metadata&&e.metadata.ephemeral));if(!e||V===e.id)return;let t=e.parts.filter(p.isToolOrDynamicToolUIPart);if(t.length!==0&&t.some(e=>n.isToolApprovalOutput(e.output)&&e.output.outcome===`pending`))return e},[M.messages,V]),ie=(0,h.useCallback)(async(e,t)=>{if(!U)return;t&&e&&H(!0),ne(U.id);let r=M.messages;if(r.length===0)return;let i=r[r.length-1];if(!i||i.role!==`assistant`||!Array.isArray(i.parts))return;let a=i.parts.map(t=>t.output&&n.isToolApprovalOutput(t.output)&&t.output.outcome===`pending`?{...t,output:{...t.output,outcome:e?`approved`:`rejected`}}:t);await M.upsertMessage({...i,parts:a}),await M.start()},[U,M]);(0,h.useEffect)(()=>{re&&U&&ie(!0)},[re,U,ie]);let W=(0,h.useCallback)(()=>{let e=crypto.randomUUID();A(e),F(t=>[...t,e])},[]),ae=(0,h.useMemo)(()=>{if(U)return{message:U,approve:e=>ie(!0,e),reject:()=>ie(!1),autoApproveEnabled:re}},[U,ie,re]),oe=(0,h.useMemo)(()=>{let e=M.messages;if(e.length!==0)for(let t=e.length-1;t>=0;t--){let n=e[t];if(!n||n.role!==`assistant`||!n.metadata||typeof n.metadata!=`object`||!(`totalUsage`in n.metadata))continue;let r=n.metadata.totalUsage;if(!(!r||typeof r!=`object`)&&!(!(`inputTokens`in r)||!(`outputTokens`in r)||!(`totalTokens`in r)))return{inputTokens:r.inputTokens,outputTokens:r.outputTokens,totalTokens:r.totalTokens,cachedInputTokens:r.cachedInputTokens}}},[M.messages]),se=(0,h.useMemo)(()=>{if(M.status!==`streaming`)return!1;if(!M.streamingMessage)return!0;let e=M.streamingMessage.parts.filter(p.isToolOrDynamicToolUIPart);return e.length>0&&e.every(e=>e.state.startsWith(`output-`))},[M.status,M.streamingMessage]);return{mode:i,setMode:s,toggleMode:c,chat:M,chats:P,switchChat:A,newChat:W,build:{status:u,error:l,entrypoint:f},devhook:{connected:I.status===`connected`,url:I.status===`connected`?`https://${I.id}.dev.blink.host`:void 0},capabilities:T,options:{schema:L,selected:R,error:te,setOption:z},approval:ae,tokenUsage:oe,server:y,showWaitingPlaceholder:se}}exports.useAgent=x,exports.useBundler=C,exports.useChat=ue,exports.useDevMode=_f,exports.useDevhook=Ua,exports.useDotenv=Ja,exports.useEditAgent=hf,exports.useOptions=Ha;
|
|
638
|
+
`;function hf(e){let[t,r]=(0,h.useState)(void 0),[i,a]=(0,h.useState)(void 0),o=(0,h.useRef)(void 0);return(0,h.useEffect)(()=>{let t=new AbortController;return(async()=>{o.current=pf({directory:e.directory});let i=await gf(),a=o.current.agent.serve({port:i,host:`127.0.0.1`,apiUrl:e.apiServerUrl});t.signal.addEventListener(`abort`,()=>{try{a.close()}catch{}o.current?.cleanup()});let s=new n.Client({baseUrl:`http://127.0.0.1:${i}`});for(;!t.signal.aborted;){try{await s.health();break}catch{}await new Promise(e=>setTimeout(e,100))}if(t.signal.aborted)throw t.signal.reason;r(s)})().catch(e=>{a(e instanceof Error?e:Error(String(e)))}),()=>t.abort()},[e.directory,e.apiServerUrl]),(0,h.useMemo)(()=>({client:t,error:i,setUserAgentUrl:e=>{o.current?.setUserAgentUrl(e)}}),[t,i])}async function gf(){let e=(0,d.createServer)();return new Promise((t,n)=>{e.listen(0,()=>{let n=e.address().port;t(n)}).on(`error`,e=>{n(e)})}).finally(()=>{e.close()})}function _f(e){let{directory:t}=e,[i,a]=(0,h.useState)(`run`),o=(0,h.useRef)(`run`);(0,h.useEffect)(()=>{o.current=i},[i]);let s=(0,h.useCallback)(t=>{a(t),e.onModeChange?.(t)},[e.onModeChange]),c=(0,h.useCallback)(()=>{s(i===`run`?`edit`:`run`)},[i,s]),{error:l,status:u,result:d,entry:f}=C({directory:t,onBuildStart:e.onBuildStart,onBuildSuccess:e.onBuildSuccess,onBuildError:e.onBuildError}),m=Ja(t),g=(0,h.useMemo)(()=>{let e=Aa();return e?{...m,BLINK_TOKEN:e}:m},[m]),_=(0,h.useRef)(void 0);(0,h.useEffect)(()=>{let t=Object.keys(g);if(t.length===_.current||_.current===void 0){_.current=t.length;return}_.current=t.length,e.onEnvLoaded?.(t)},[g,e.onEnvLoaded]);let v=(0,h.useRef)(void 0),y=(0,h.useMemo)(()=>Va({port:0,dataDirectory:(0,r.join)(t,`data`),getAgent:()=>v.current}),[t]),{agent:b,logs:S,error:w,capabilities:T}=x({buildResult:d,env:g,apiServerUrl:y.url}),{client:E,error:D,setUserAgentUrl:O}=hf({directory:t,apiServerUrl:y.url}),[k,A]=(0,h.useState)(`default`);(0,h.useEffect)(()=>{b&&O(b.baseUrl),i===`run`?b?v.current=b:(v.current=void 0,y.stopChat(k)):i===`edit`&&(E?v.current=E:(v.current=void 0,y.stopChat(k)))},[b,E,i,k,y]);let j=(0,h.useRef)(void 0),M=ue({chatId:k,agent:i===`run`?b:E,chatsDirectory:y.chatsDirectory,serializeMessage:e=>{let t=e.role===`user`&&j.current?{...typeof e.metadata==`object`&&e.metadata!==null?e.metadata:{},options:j.current}:e.metadata;return{id:e.id??crypto.randomUUID(),created_at:new Date().toISOString(),role:e.role,parts:e.parts,mode:o.current,metadata:t}},filterMessages:e=>o.current===`edit`?!0:!(ce(e.metadata)||e.mode===`edit`)}),N=(0,h.useRef)(0);(0,h.useEffect)(()=>{if(S.length===N.current)return;let t=N.current;for(let n of S.slice(t))e.onAgentLog?.(n);N.current=S.length},[S,e.onAgentLog,M.upsertMessage]);let[P,F]=(0,h.useState)([]);(0,h.useEffect)(()=>{y.listChats().then(e=>{F(e.map(e=>e.key))})},[y]),(0,h.useEffect)(()=>{k&&!P.includes(k)&&F(e=>[...e,k])},[k,P]);let ee=(0,h.useMemo)(()=>Ma(t),[t]),I=Ua({id:ee,disabled:!T?.request,onRequest:async t=>{if(!b)throw Error(`No agent`);let n=new URL(t.url),r=new URL(b.baseUrl);r.pathname=n.pathname,r.search=n.search;try{let i=await fetch(r.toString(),{method:t.method,body:t.body,headers:t.headers,redirect:`manual`,signal:t.signal,duplex:`half`});return e.onDevhookRequest?.({method:t.method,path:n.pathname,status:i.status}),i}catch(e){return console.error(`Error sending request to user's agent:`,e),new Response(`Internal server error`,{status:500})}}});(0,h.useEffect)(()=>{I.status===`connected`&&e.onDevhookConnected?.(`https://${I.id}.dev.blink.host`)},[I.status,I.id]);let{schema:L,options:R,error:te,setOption:z}=Ha({agent:i===`run`?b:E,capabilities:T,messages:M.messages});(0,h.useEffect)(()=>{j.current=R},[R]);let B=(0,h.useMemo)(()=>{let e=[];return w&&i===`run`&&e.push(w.message),D&&i===`edit`&&e.push(`Edit agent error: ${D.message}`),M.error&&u!==`building`&&e.push(`Chat error: ${M.error}`),te&&e.push(`Options error: ${te.message}`),e},[w,D,M.error,te,i,u]);(0,h.useEffect)(()=>{for(let t of B)e.onError?.(t)},[B]);let[V,ne]=(0,h.useState)(),[re,H]=(0,h.useState)(!1),U=(0,h.useMemo)(()=>{let e=[...M.messages].reverse().find(e=>!(e.role!==`assistant`||e.metadata&&e.metadata.ephemeral));if(!e||V===e.id)return;let t=e.parts.filter(p.isToolOrDynamicToolUIPart);if(t.length!==0&&t.some(e=>n.isToolApprovalOutput(e.output)&&e.output.outcome===`pending`))return e},[M.messages,V]),ie=(0,h.useCallback)(async(e,t)=>{if(!U)return;t&&e&&H(!0),ne(U.id);let r=M.messages;if(r.length===0)return;let i=r[r.length-1];if(!i||i.role!==`assistant`||!Array.isArray(i.parts))return;let a=i.parts.map(t=>t.output&&n.isToolApprovalOutput(t.output)&&t.output.outcome===`pending`?{...t,output:{...t.output,outcome:e?`approved`:`rejected`}}:t);await M.upsertMessage({...i,parts:a}),await M.start()},[U,M]);(0,h.useEffect)(()=>{re&&U&&ie(!0)},[re,U,ie]);let W=(0,h.useCallback)(()=>{let e=crypto.randomUUID();A(e),F(t=>[...t,e])},[]),ae=(0,h.useMemo)(()=>{if(U)return{message:U,approve:e=>ie(!0,e),reject:()=>ie(!1),autoApproveEnabled:re}},[U,ie,re]),oe=(0,h.useMemo)(()=>{let e=M.messages;if(e.length!==0)for(let t=e.length-1;t>=0;t--){let n=e[t];if(!n||n.role!==`assistant`||!n.metadata||typeof n.metadata!=`object`||!(`totalUsage`in n.metadata))continue;let r=n.metadata.totalUsage;if(!(!r||typeof r!=`object`)&&!(!(`inputTokens`in r)||!(`outputTokens`in r)||!(`totalTokens`in r)))return{inputTokens:r.inputTokens,outputTokens:r.outputTokens,totalTokens:r.totalTokens,cachedInputTokens:r.cachedInputTokens}}},[M.messages]),se=(0,h.useMemo)(()=>{if(M.status!==`streaming`)return!1;if(!M.streamingMessage)return!0;let e=M.streamingMessage.parts.filter(p.isToolOrDynamicToolUIPart);return e.length>0&&e.every(e=>e.state.startsWith(`output-`))},[M.status,M.streamingMessage]);return{mode:i,setMode:s,toggleMode:c,chat:M,chats:P,switchChat:A,newChat:W,build:{status:u,error:l,entrypoint:f},devhook:{connected:I.status===`connected`,url:I.status===`connected`?`https://${I.id}.dev.blink.host`:void 0},capabilities:T,options:{schema:L,selected:R,error:te,setOption:z},approval:ae,tokenUsage:oe,server:y,showWaitingPlaceholder:se}}exports.useAgent=x,exports.useBundler=C,exports.useChat=ue,exports.useDevMode=_f,exports.useDevhook=Ua,exports.useDotenv=Ja,exports.useEditAgent=hf,exports.useOptions=Ha;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{__commonJSMin as e,__reExport as t,__require as n,__toESM as r}from"../chunk-D9KrCrVq.js";import{resolveConfig as i}from"../build-M5Q2ZTGh.js";import{APIServerURLEnvironmentVariable as a,Client as o,Hono as s,agent as c,createServerAdapter as l,isToolApprovalOutput as u,lastUIOptions as d,model as f,require_has_flag as p,tools as m,validator as h}from"../index.node-CA-85Opm.js";import"../token-error-wsvzy87W.js";import"../esm-D1GEQyaY.js";import{createRequire as g}from"node:module";import{dirname as _,join as v}from"path";import{existsSync as y,mkdirSync as b,readFileSync as x,watch as S,writeFileSync as C}from"fs";import{createRequire as w}from"module";import*as T from"fs/promises";import{readFile as E,stat as D,writeFile as O}from"fs/promises";import"zod/v4";import"zod/v3";import*as k from"node:fs";import{createReadStream as A}from"node:fs";import{Writable as j}from"node:stream";import{stripVTControlCharacters as M}from"node:util";import N,{createServer as P}from"http";import F,{stdin as ee,stdout as te}from"node:process";import{convertToModelMessages as I,isToolOrDynamicToolUIPart as L,readUIMessageStream as ne,streamText as R,tool as z}from"ai";import{spawn as B}from"child_process";import{useCallback as V,useEffect as H,useMemo as U,useRef as W,useState as G}from"react";import*as K from"node:path";import{join as re}from"node:path";import q,{ZodFirstPartyTypeKind as J,ZodType as ie,z as Y}from"zod";import*as ae from"node:readline";import oe from"node:readline";import*as se from"node:fs/promises";function ce(e){let[t,n]=G(void 0),[r,i]=G([]),[s,c]=G(void 0),[l,u]=G(e.buildResult),[d,f]=G(e.env),[p,m]=G(e.apiServerUrl),[h,g]=G(void 0);return H(()=>{f(e.env),u(e.buildResult),m(e.apiServerUrl)},[e.env,e.buildResult,e.apiServerUrl]),H(()=>{if(!l||`error`in l){n(void 0),i([]),c(void 0);return}let e=new AbortController,t=!1;return c(void 0),(async()=>{let t=await le(),r=B(`node`,[`--no-deprecation`,l.entry],{stdio:`pipe`,env:{...process.env,...d,[a]:p,PORT:t.toString(),HOST:`127.0.0.1`}});e.signal.addEventListener(`abort`,()=>{try{r.kill()}catch{}});let s=!1;r.stdout.on(`data`,e=>{let t=Buffer.from(e).toString(`utf-8`).trim();!s&&t.startsWith(`Agent server listening on`)||(s||console.log(`stdout: ${t}`),t.length&&i(e=>[...e,{level:`log`,message:t}]))}),r.stderr.on(`data`,e=>{s||console.error(`stderr: ${Buffer.from(e).toString(`utf-8`).trim()}`);let t=Buffer.from(e).toString(`utf-8`).trim();t.length&&i(e=>[...e,{level:`error`,message:t}])}),r.on(`error`,t=>{e.abort(t)}),r.on(`exit`,(t,n)=>{e.abort(`Agent exited with code ${t??`unknown`} and signal ${n??`unknown`}. Be sure to call "blink.agent(...).serve()".`)});let c=new o({baseUrl:`http://127.0.0.1:${t}`});for(;!e.signal.aborted;){try{await c.health();break}catch{}await new Promise(e=>setTimeout(e,100))}if(e.signal.aborted)throw e.signal.reason;s=!0;let u=await c.capabilities();g(u),n(c)})().catch(e=>{t||c(e instanceof Error?e:Error(String(e)))}),()=>{t=!0,e.abort()}},[l,d,p]),U(()=>({agent:t,logs:r,error:s,capabilities:h}),[t,r,s,h])}async function le(){let e=P();return new Promise((t,n)=>{e.listen(0,()=>{let n=e.address().port;t(n)}).on(`error`,e=>{n(e)})}).finally(()=>{e.close()})}function ue(e){let{directory:t,onBuildStart:n,onBuildSuccess:r,onBuildError:a}=typeof e==`string`?{directory:e}:e,o=U(()=>i(t),[t]),[s,c]=G(void 0),[l,u]=G(void 0),[d,f]=G(`building`),p=W(n),m=W(r),h=W(a);return H(()=>{p.current=n,m.current=r,h.current=a},[n,r,a]),H(()=>{let e=new AbortController;return o.build({cwd:t,entry:o.entry,outdir:o.outdir,watch:!0,dev:!0,signal:e.signal,onStart:()=>{f(`building`),c(void 0),u(void 0),p.current?.()},onResult:e=>{`error`in e?(c(e.error),f(`error`),h.current?.(e.error)):(u(e),f(`success`),m.current?.(e))}}).catch(e=>{console.log(`error`,e),f(`error`),c(e),h.current?.(e)}),()=>{e.abort()}},[t]),U(()=>({error:s,status:d,result:l,entry:o.entry,outdir:o.outdir}),[s,d,l,o.entry,o.outdir])}function de(){return/[<>:"/\\|?*\u0000-\u001F]|[. ]$/g}function fe(){return/^(con|prn|aux|nul|com\d|lpt\d)$/i}const pe=/^\.+(\\|\/)|^\.+$/,me=/[. ]+$/,he=/[\p{Control}\p{Format}\p{Zl}\p{Zp}\uFFF0-\uFFFF]/gu,ge=/[\p{Control}\p{Format}\p{Zl}\p{Zp}\uFFF0-\uFFFF]/u,_e=e=>e===``,ve=/([<>:"/\\|?*\u0000-\u001F]){2,}/g,ye=/[\t\n\r\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]+/g;let be;function xe(){return be??=new Intl.Segmenter(void 0,{granularity:`grapheme`}),be}function Se(e,t={}){if(typeof e!=`string`)throw TypeError(`Expected a string`);let n=t.replacement??`!`;if(de().test(n)||[...n].some(e=>ge.test(e)&&!_e(e)))throw Error(`Replacement string cannot contain reserved filename characters`);e=e.normalize(`NFC`),e=e.replaceAll(ye,` `),n.length>0&&(e=e.replaceAll(ve,`$1`)),e=e.replace(me,``),e=e.replace(pe,n),e=e.replace(de(),n),e=e.replaceAll(he,e=>_e(e)?e:n),e.length===0&&(e=n),e=fe().test(e)?e+n:e;let r=typeof t.maxLength==`number`?t.maxLength:100;if(e.length>r){let t=e.lastIndexOf(`.`);if(t===-1)e=Ce(e,r);else{let n=e.slice(0,t),i=e.slice(t),a=Math.max(0,r-i.length);e=Ce(n,a)+i}}return e}function Ce(e,t){if(e.length<=t)return e;let n=0,r=``;for(let{segment:i}of xe().segment(e)){let e=n+i.length;if(e>t)break;r+=i,n=e}return r}function we(e){return`${e}.lock`}function Te(e){try{return process.kill(e,0),!0}catch(e){return e.code===`EPERM`}}function Ee(e,t={}){let n=we(e),r=process.pid.toString();try{return k.writeFileSync(n,r,{flag:`wx`}),!0}catch(r){if(r.code!==`EEXIST`)throw r;if(t.stale===0)return!1;let i;try{i=parseInt(k.readFileSync(n,`utf8`),10)}catch{return k.unlinkSync(n),Ee(e,{...t,stale:0})}if(!Te(i))try{return k.unlinkSync(n),Ee(e,{...t,stale:0})}catch(n){if(n.code===`ENOENT`)return Ee(e,{...t,stale:0});throw n}return!1}}async function De(e,t={}){let n={stale:!0,retries:0,retryInterval:100,...t},r=K.resolve(e),i=0;for(;i<=n.retries;){if(Ee(r,n))return()=>Oe(r);i<n.retries&&await new Promise(e=>setTimeout(e,n.retryInterval)),i++}let a=Error(`Lock file is already being held`);throw a.code=`ELOCKED`,a.file=r,a}function Oe(e){let t=K.resolve(e),n=we(t);try{if(parseInt(k.readFileSync(n,`utf8`),10)!==process.pid){let e=Error(`Lock is not owned by this process`);throw e.code=`ENOTACQUIRED`,e}k.unlinkSync(n)}catch(e){if(e.code===`ENOENT`){let e=Error(`Lock is not acquired`);throw e.code=`ENOTACQUIRED`,e}throw e}}function ke(e){let t=K.resolve(e),n=we(t);try{if(!k.existsSync(n))return{locked:!1};let e=k.readFileSync(n,`utf8`),t=parseInt(e,10);return Te(t)?{locked:!0,pid:t}:{locked:!1}}catch(e){return e.code,{locked:!1}}}const Ae=e=>{k.mkdirSync(e,{recursive:!0})},je=e=>{try{k.fdatasyncSync(e)}catch{}try{k.closeSync(e)}catch{}},Me=e=>{try{let t=k.openSync(e,`r`);try{k.fsyncSync(t)}finally{k.closeSync(t)}}catch{}},Ne=(e,t)=>{let n=K.dirname(e);Ae(n);let r=K.join(n,`.tmp-`+process.pid+`-`+Math.random().toString(36).slice(2)),i;try{i=k.openSync(r,`w`),k.writeFileSync(i,t,`utf-8`),je(i),i=void 0,k.renameSync(r,e),Me(e),Me(n)}catch(e){if(i!==void 0)try{k.closeSync(i)}catch{}try{k.rmSync(r,{force:!0})}catch{}throw e}},Pe=(e,t)=>{let n=new Map,r,i=e=>{if(k.statSync(e,{throwIfNoEntry:!1}))return JSON.parse(k.readFileSync(e,`utf-8`))},a=(e,t)=>{Ne(e,JSON.stringify(t,null,2))},o=async()=>{if(r)throw Error(`Index is already locked`);let t=K.join(e,`index.json`);Ae(e),k.existsSync(t)||k.writeFileSync(t,JSON.stringify({ids:{}}),`utf-8`);let n=await De(t,{stale:!0,retries:5,retryInterval:100});return r=()=>Promise.resolve(n()),()=>{n(),r=void 0}},s=async()=>{let t=K.join(e,`index.json`),n=i(t)??{ids:{}};return n.ids||={},n},c=async t=>{let n=K.join(e,`index.json`);a(n,t)},l=async t=>{let n=(await s()).ids[t];if(n)return K.join(e,n)},u=async t=>{let n=(await s()).ids[t];if(!n)return;let r=K.join(e,n);if(k.statSync(r,{throwIfNoEntry:!1}))return JSON.parse(k.readFileSync(r,`utf-8`))},d=async n=>{let r=n[t],i=String(r),l=Se(i,{replacement:`_`})+`.json`,u=await o();try{let t=await s();t.ids[i]=l,t.current=i;let r=K.join(e,l);a(r,n),await c(t)}finally{await u()}};return{async get(e){return await u(e)},async list(){if(!k.statSync(e,{throwIfNoEntry:!1}))return[];let t=await s(),n=[];for(let[r,i]of Object.entries(t.ids)){let t=K.join(e,i),a=k.statSync(t,{throwIfNoEntry:!1});if(!a)continue;let o=ke(t);n.push({key:r,locked:o.locked,pid:o.pid,mtime:a.mtimeMs})}return n.sort((e,t)=>t.mtime-e.mtime),n},async lock(r,i){if(n.has(r))throw Error(`Key "${r}" is already locked in this process`);let a=await l(r);if(!a){let t=Se(r,{replacement:`_`})+`.json`,n=await o();try{let n=await s();n.ids[r]=t;let i=K.join(e,t);Ae(e),k.writeFileSync(i,JSON.stringify({}),`utf-8`),await c(n),a=i}finally{await n()}}if(i?.force){let e=ke(a);if(e.locked&&e.pid&&e.pid!==process.pid)try{process.kill(e.pid,`SIGTERM`),await new Promise(e=>setTimeout(e,100))}catch(t){t.code!==`ESRCH`&&console.warn(`Failed to kill process ${e.pid}:`,t.message)}}let f=await De(a,{stale:!0,retries:i?.force?10:5,retryInterval:(i?.force,100)});return n.set(r,()=>Promise.resolve(f())),{async get(){let e=await u(r);if(!e)throw Error(`Key ${r} not found`);return e},async set(e){await d(e)},async update(e){let n=await u(r);if(!n||!(t in n))throw Error(`Key ${r} not found`);await d({...n,...e})},async delete(){let t=await o();try{let t=await s(),n=t.ids[r];if(n){delete t.ids[r],t.current===r&&(t.current=void 0),await c(t);let i=K.join(e,n);try{k.rmSync(i,{force:!0}),Me(e)}catch{}}}finally{await t()}},async release(){f(),n.delete(r)}}},dispose(){n.clear()}}},Fe=(e,t)=>{let n=t?.pollInterval??200,r=t?.debounce??50,i=new Set,a,o,s=new Map,c=new Map,l=K.join(e,`index.json`),u=()=>{try{if(!k.statSync(l,{throwIfNoEntry:!1}))return{ids:{}};let e=k.readFileSync(l,`utf-8`);return{ids:JSON.parse(e).ids??{}}}catch{return{ids:{}}}},d=(e,t,n,r)=>{for(let a of i)try{a({key:e,value:t,locked:n,pid:r})}catch(e){console.error(`Error in onChange callback:`,e)}},f=(t,n,r=!1)=>{let i=K.join(e,n);try{let e=k.statSync(i,{throwIfNoEntry:!1}),a=c.get(n);if(!e){a&&(c.delete(n),d(t,void 0,!1));return}let o=e.mtimeMs,s=a?{locked:a.locked,pid:a.pid}:{locked:!1,pid:void 0};if((r||!a)&&(s=ke(i)),!a||a.mtime!==o||a.locked!==s.locked||a.pid!==s.pid){let e;e=!a||a.mtime!==o?JSON.parse(k.readFileSync(i,`utf-8`)):a.cachedValue,c.set(n,{mtime:o,key:t,locked:s.locked,pid:s.pid,cachedValue:e}),d(t,e,s.locked,s.pid)}}catch{}},p=()=>{try{let e=u(),t=new Set(Object.keys(e.ids));for(let[t,n]of Object.entries(e.ids))f(t,n,!0);for(let[e,n]of c.entries())t.has(n.key)||(c.delete(e),d(n.key,void 0,!1))}catch{}},m=(e,t,n=!1)=>{let i=s.get(e);i&&clearTimeout(i),s.set(e,setTimeout(()=>{s.delete(e),f(e,t,n)},r))},h=()=>{if(a)return;try{k.mkdirSync(e,{recursive:!0})}catch{}a=k.watch(e,(e,t)=>{if(!t||t.startsWith(`.tmp-`))return;if(t===`index.json`){p();return}if(t.endsWith(`.lock`)){let e=t.replace(`.lock`,``),n=u(),r=Object.keys(n.ids).find(t=>n.ids[t]===e);r&&f(r,e,!0);return}let n=u(),r=Object.keys(n.ids).find(e=>n.ids[e]===t);r&&m(r,t,!1)});let t=()=>{p(),o=setTimeout(t,n)};p(),o=setTimeout(t,n)};return{onChange(e){return i.size===0&&h(),i.add(e),()=>{if(i.delete(e),i.size===0){a&&=(a.close(),void 0),o&&=(clearTimeout(o),void 0);for(let e of s.values())clearTimeout(e);s.clear(),c.clear()}}},dispose(){a&&=(a.close(),void 0),o&&=(clearTimeout(o),void 0);for(let e of s.values())clearTimeout(e);s.clear(),i.clear(),c.clear()}}};async function Ie({chatKey:e,agent:t,messages:n,signal:r,shouldContinueStreaming:i=Le}){n=[...n];let a=new TransformStream,o=a.writable.getWriter(),s=async()=>{let a;try{let c=await t.chat({messages:n,chat:{key:e}},{signal:r}),l=ne({message:{id:crypto.randomUUID(),role:`assistant`,parts:[],metadata:{}},stream:c,onError:e=>{e instanceof Error&&e.name===`AbortError`||o.abort(e)}});for await(let e of l)o.write(e),a=e;if(a&&i(a)){n.push(a),await s();return}await o.close()}catch(e){if(e?.name===`AbortError`||r?.aborted)return;await o.abort(e)}finally{await o.close()}};return s().catch(e=>{o.abort(e)}),a.readable}const Le=e=>{if(e.role!==`assistant`)return!1;let t=e.parts.reduce((e,t,n)=>t.type===`step-start`?n:e,-1),n=e.parts.slice(t+1).filter(L);return n.length===0||n.some(e=>u(e.output)&&e.output.outcome===`pending`)?!1:n.every(e=>e.state.startsWith(`output-`))},Re=(e,t,n=crypto.randomUUID())=>({created_at:new Date().toISOString(),...e,id:n,metadata:e.metadata,mode:t});function ze(e){return typeof e==`object`&&e?.__blink_internal!==void 0}var Be=class{chatId;agent;chatStore;serializeMessage;filterMessages;chat;loading=!1;streamingMessage;status=`idle`;queue=[];abortController;isProcessingQueue=!1;listeners=new Set;watcher;disposed=!1;constructor(e){this.chatId=e.chatId,this.chat={id:this.chatId,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),messages:[]},this.loading=!0,this.chatStore=Pe(e.chatsDirectory,`id`),this.serializeMessage=e.serializeMessage,this.filterMessages=e.filterMessages,this.watcher=Fe(e.chatsDirectory,{pollInterval:1e3,debounce:50}),this.watcher.onChange(e=>{if(e.key!==this.chatId||this.isProcessingQueue)return;if(!e.value){this.chat={id:this.chatId,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),messages:[]},this.status=`idle`,this.streamingMessage=void 0,this.notifyListeners();return}let t=e.value,n=e.value?.error?`error`:`idle`;e.locked&&(n=`streaming`);let r=this.chat.updated_at!==t?.updated_at||this.status!==n;this.chat=t,this.streamingMessage=void 0,this.status=n,r&&this.notifyListeners()}),this.chatStore.get(this.chatId).then(e=>{this.disposed||e&&(this.chat=e)}).catch(e=>{this.chat.error=e instanceof Error?e.message:String(e)}).finally(()=>{this.loading=!1,this.notifyListeners()})}setAgent(e){this.agent=e}getState(){return{id:this.chatId,messages:(this.chat?.messages??[]).filter(e=>!ze(e.metadata)),created_at:this.chat?.created_at,updated_at:this.chat?.updated_at,status:this.status,streamingMessage:this.streamingMessage,error:this.chat?.error,loading:this.loading,queuedMessages:this.queue}}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}async upsertMessage(e,t){let n=!1,r;t?r=t:(r=await this.chatStore.lock(this.chatId),n=!0);try{let t=await r.get();(!t.id||!Array.isArray(t.messages))&&(t={id:this.chatId,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),messages:[]});let n=e;if(this.serializeMessage){let t=this.serializeMessage(e);if(t===void 0)return;n=t}let i=n.id||crypto.randomUUID(),a=n.mode||`run`,o=Re(n,a,i),s=t.messages.find(e=>e.id===o.id)?t.messages.map(e=>e.id===o.id?o:e):[...t.messages,o];this.chat={...t,updated_at:new Date().toISOString(),messages:s},await r.set(this.chat),this.notifyListeners()}finally{n&&await r.release()}}async deleteMessage(e){let t;try{t=await this.chatStore.lock(this.chatId);let n=await t.get();this.chat.messages=n.messages.filter(t=>t.id!==e),this.chat.updated_at=new Date().toISOString(),await t.set(this.chat),this.notifyListeners()}finally{t&&await t.release()}}async sendMessage(e){if(this.chat.error=void 0,this.status===`streaming`){this.queue.push(e),this.notifyListeners();return}this.queue=[e],await this.processQueueOrRun()}async start(){await this.processQueueOrRun()}async processQueueOrRun(){if(!this.agent){this.chat.error=`The agent is not available. Please wait for the build to succeed.`,this.status=`error`,this.queue=[],this.notifyListeners();return}if(this.isProcessingQueue)return;this.isProcessingQueue=!0;let e=new AbortController;this.abortController=e,this.chat.error=void 0;let t;try{t=await this.chatStore.lock(this.chatId);let n=!0;for(;this.queue.length>0||n;){n=!1;let r=this.queue.shift();this.status=`streaming`,this.streamingMessage=void 0,r&&await this.upsertMessage(r,t);let i=this.chat.messages;this.filterMessages&&(i=i.filter(this.filterMessages)),i=i.map(e=>({...e,parts:e.parts.map(e=>!L(e)||e.input!==``?e:{...e,input:{}})}));let a=await Ie({agent:this.agent,chatKey:this.chatId,signal:e.signal,messages:i}),o=async e=>{let n=e;if(this.serializeMessage){let t=this.serializeMessage(e);if(t===void 0)return;n=t}this.chat.updated_at=new Date().toISOString(),this.chat.messages.push(n),this.streamingMessage=void 0,await t?.set(this.chat)},s=a.getReader();try{for(;;){let{done:t,value:n}=await s.read();if(t||e.signal.aborted)break;this.streamingMessage&&n.id!==this.streamingMessage.id&&await o(this.streamingMessage),this.streamingMessage=this.serializeMessage?this.serializeMessage(n):n,this.notifyListeners()}}finally{s.releaseLock()}this.streamingMessage&&await o(this.streamingMessage)}}catch(e){this.chat.error=e instanceof Error?e.message:String(e)}finally{this.isProcessingQueue=!1,this.streamingMessage=void 0,this.chat.error?this.status=`error`:this.status=`idle`,t&&(this.chat.updated_at=new Date().toISOString(),await t.set(this.chat),await t.release(),this.notifyListeners())}}stopStreaming(){this.abortController?.abort(),this.queue.length>0&&setTimeout(()=>{this.processQueueOrRun()},100)}clearQueue(){this.queue=[],this.notifyListeners()}async resetChat(){this.abortController?.abort(),this.resetChatState(),this.notifyListeners();let e;try{e=await this.chatStore.lock(this.chatId),await e.delete()}catch{}finally{if(e)try{await e.release()}catch{}}}dispose(){this.disposed=!0,this.watcher.dispose(),this.listeners.clear(),this.abortController?.abort()}resetChatState(){this.chat={id:this.chatId,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),messages:[]},this.streamingMessage=void 0,this.status=`idle`,this.queue=[]}notifyListeners(){let e=this.getState();for(let t of this.listeners)t(e)}};function Ve(e){let{chatId:t,agent:n,chatsDirectory:r,serializeMessage:i,filterMessages:a}=e,o=W(null),[s,c]=G({id:t,messages:[],status:`idle`,loading:!0,queuedMessages:[]});H(()=>{o.current&&o.current.dispose();let e=new Be({chatId:t,chatsDirectory:r,serializeMessage:i,filterMessages:a}),n=e.subscribe(e=>{c(e)});return c(e.getState()),o.current=e,()=>{n(),e.dispose(),o.current=null}},[t,r]),H(()=>{o.current&&o.current.setAgent(n)},[n]);let l=V(async e=>{o.current&&await o.current.sendMessage(e)},[]),u=V(async e=>{o.current&&await o.current.upsertMessage(e)},[]),d=V(()=>{o.current&&o.current.stopStreaming()},[]),f=V(async()=>{o.current&&await o.current.resetChat()},[]),p=V(()=>{o.current&&o.current.clearQueue()},[]),m=V(async e=>{o.current&&await o.current.deleteMessage(e)},[]),h=V(async()=>{o.current&&await o.current.start()},[]);return{...s,sendMessage:l,upsertMessage:u,stopStreaming:d,resetChat:f,clearQueue:p,deleteMessage:m,start:h}}var He=Object.getOwnPropertyNames,Ue=(e,t)=>function(){return t||(0,e[He(e)[0]])((t={exports:{}}).exports,t),t.exports},X=g(import.meta.url);Y.object({email:Y.string().email(),password:Y.string().min(8)}),Y.object({email:Y.string().email(),code:Y.string()}),Y.object({email:Y.string().email(),password:Y.string().min(8)});var We=class{constructor(e,t){this.client=e,this.baseURL=t}async token(e,t={timeout:12e4}){return new Promise((n,r)=>{let i=crypto.randomUUID(),a=this.client.websocket(`/api/auth/token?id=${i}`),o=new URL(`/auth?id=${i}`,this.baseURL),s=setTimeout(()=>{r(Error(`Timeout waiting for the user to authenticate`))},t.timeout);a.onerror=e=>{clearTimeout(s),console.log(`error`,e),r(Error(`Failed to connect to server`))},a.onopen=()=>{e(o.toString(),i)},a.onmessage=e=>{typeof e.data==`string`&&(clearTimeout(s),n(e.data))}})}},Ge=class extends Error{constructor(e,t){super(e),this.name=`ParseError`,this.type=t.type,this.field=t.field,this.value=t.value,this.line=t.line}};function Ke(e){}function qe(e){if(typeof e==`function`)throw TypeError("`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?");let{onEvent:t=Ke,onError:n=Ke,onRetry:r=Ke,onComment:i}=e,a=``,o=!0,s,c=``,l=``;function u(e){let t=o?e.replace(/^\xEF\xBB\xBF/,``):e,[n,r]=Je(`${a}${t}`);for(let e of n)d(e);a=r,o=!1}function d(e){if(e===``){p();return}if(e.startsWith(`:`)){i&&i(e.slice(e.startsWith(`: `)?2:1));return}let t=e.indexOf(`:`);if(t!==-1){let n=e.slice(0,t),r=e[t+1]===` `?2:1,i=e.slice(t+r);f(n,i,e);return}f(e,``,e)}function f(e,t,i){switch(e){case`event`:l=t;break;case`data`:c=`${c}${t}
|
|
1
|
+
import{__commonJSMin as e,__reExport as t,__require as n,__toESM as r}from"../chunk-D9KrCrVq.js";import{resolveConfig as i}from"../build-M5Q2ZTGh.js";import{APIServerURLEnvironmentVariable as a,Client as o,Hono as s,agent as c,createServerAdapter as l,isToolApprovalOutput as u,lastUIOptions as d,model as f,require_has_flag as p,tools as m,validator as h}from"../index.node-CA-85Opm.js";import"../token-error-wsvzy87W.js";import"../esm-D1GEQyaY.js";import{createRequire as g}from"node:module";import{dirname as _,join as v}from"path";import{existsSync as y,mkdirSync as b,readFileSync as x,watch as S,writeFileSync as C}from"fs";import{createRequire as w}from"module";import*as T from"fs/promises";import{readFile as E,stat as D,writeFile as O}from"fs/promises";import"zod/v4";import"zod/v3";import*as k from"node:fs";import{createReadStream as A}from"node:fs";import{Writable as j}from"node:stream";import{stripVTControlCharacters as M}from"node:util";import N,{createServer as P}from"http";import F,{stdin as ee,stdout as te}from"node:process";import{convertToModelMessages as I,isToolOrDynamicToolUIPart as L,readUIMessageStream as ne,streamText as R,tool as z}from"ai";import{spawn as B}from"child_process";import{useCallback as V,useEffect as H,useMemo as U,useRef as W,useState as G}from"react";import*as K from"node:path";import{join as re}from"node:path";import q,{ZodFirstPartyTypeKind as J,ZodType as ie,z as Y}from"zod";import*as ae from"node:readline";import oe from"node:readline";import*as se from"node:fs/promises";function ce(e){let[t,n]=G(void 0),[r,i]=G([]),[s,c]=G(void 0),[l,u]=G(e.buildResult),[d,f]=G(e.env),[p,m]=G(e.apiServerUrl),[h,g]=G(void 0);return H(()=>{f(e.env),u(e.buildResult),m(e.apiServerUrl)},[e.env,e.buildResult,e.apiServerUrl]),H(()=>{if(!l||`error`in l){n(void 0),i([]),c(void 0);return}let e=new AbortController,t=!1;return c(void 0),n(void 0),(async()=>{let t=await le(),r=B(`node`,[`--no-deprecation`,l.entry],{stdio:`pipe`,env:{...process.env,...d,[a]:p,PORT:t.toString(),HOST:`127.0.0.1`}});e.signal.addEventListener(`abort`,()=>{try{r.kill()}catch{}});let s=!1;r.stdout.on(`data`,e=>{let t=Buffer.from(e).toString(`utf-8`).trim();!s&&t.startsWith(`Agent server listening on`)||(s||console.log(`stdout: ${t}`),t.length&&i(e=>[...e,{level:`log`,message:t}]))}),r.stderr.on(`data`,e=>{s||console.error(`stderr: ${Buffer.from(e).toString(`utf-8`).trim()}`);let t=Buffer.from(e).toString(`utf-8`).trim();t.length&&i(e=>[...e,{level:`error`,message:t}])}),r.on(`error`,t=>{e.abort(t)}),r.on(`exit`,(t,n)=>{e.abort(`Agent exited with code ${t??`unknown`} and signal ${n??`unknown`}. Be sure to call "blink.agent(...).serve()".`)});let c=new o({baseUrl:`http://127.0.0.1:${t}`});for(;!e.signal.aborted;){try{await c.health();break}catch{}await new Promise(e=>setTimeout(e,100))}if(e.signal.aborted)throw e.signal.reason;s=!0;let u=await c.capabilities();g(u),n(c)})().catch(e=>{t||c(e instanceof Error?e:Error(String(e)))}),()=>{t=!0,e.abort()}},[l,d,p]),U(()=>({agent:t,logs:r,error:s,capabilities:h}),[t,r,s,h])}async function le(){let e=P();return new Promise((t,n)=>{e.listen(0,()=>{let n=e.address().port;t(n)}).on(`error`,e=>{n(e)})}).finally(()=>{e.close()})}function ue(e){let{directory:t,onBuildStart:n,onBuildSuccess:r,onBuildError:a}=typeof e==`string`?{directory:e}:e,o=U(()=>i(t),[t]),[s,c]=G(void 0),[l,u]=G(void 0),[d,f]=G(`building`),p=W(n),m=W(r),h=W(a);return H(()=>{p.current=n,m.current=r,h.current=a},[n,r,a]),H(()=>{let e=new AbortController;return o.build({cwd:t,entry:o.entry,outdir:o.outdir,watch:!0,dev:!0,signal:e.signal,onStart:()=>{f(`building`),c(void 0),u(void 0),p.current?.()},onResult:e=>{`error`in e?(c(e.error),f(`error`),h.current?.(e.error)):(u(e),f(`success`),m.current?.(e))}}).catch(e=>{console.log(`error`,e),f(`error`),c(e),h.current?.(e)}),()=>{e.abort()}},[t]),U(()=>({error:s,status:d,result:l,entry:o.entry,outdir:o.outdir}),[s,d,l,o.entry,o.outdir])}function de(){return/[<>:"/\\|?*\u0000-\u001F]|[. ]$/g}function fe(){return/^(con|prn|aux|nul|com\d|lpt\d)$/i}const pe=/^\.+(\\|\/)|^\.+$/,me=/[. ]+$/,he=/[\p{Control}\p{Format}\p{Zl}\p{Zp}\uFFF0-\uFFFF]/gu,ge=/[\p{Control}\p{Format}\p{Zl}\p{Zp}\uFFF0-\uFFFF]/u,_e=e=>e===``,ve=/([<>:"/\\|?*\u0000-\u001F]){2,}/g,ye=/[\t\n\r\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]+/g;let be;function xe(){return be??=new Intl.Segmenter(void 0,{granularity:`grapheme`}),be}function Se(e,t={}){if(typeof e!=`string`)throw TypeError(`Expected a string`);let n=t.replacement??`!`;if(de().test(n)||[...n].some(e=>ge.test(e)&&!_e(e)))throw Error(`Replacement string cannot contain reserved filename characters`);e=e.normalize(`NFC`),e=e.replaceAll(ye,` `),n.length>0&&(e=e.replaceAll(ve,`$1`)),e=e.replace(me,``),e=e.replace(pe,n),e=e.replace(de(),n),e=e.replaceAll(he,e=>_e(e)?e:n),e.length===0&&(e=n),e=fe().test(e)?e+n:e;let r=typeof t.maxLength==`number`?t.maxLength:100;if(e.length>r){let t=e.lastIndexOf(`.`);if(t===-1)e=Ce(e,r);else{let n=e.slice(0,t),i=e.slice(t),a=Math.max(0,r-i.length);e=Ce(n,a)+i}}return e}function Ce(e,t){if(e.length<=t)return e;let n=0,r=``;for(let{segment:i}of xe().segment(e)){let e=n+i.length;if(e>t)break;r+=i,n=e}return r}function we(e){return`${e}.lock`}function Te(e){try{return process.kill(e,0),!0}catch(e){return e.code===`EPERM`}}function Ee(e,t={}){let n=we(e),r=process.pid.toString();try{return k.writeFileSync(n,r,{flag:`wx`}),!0}catch(r){if(r.code!==`EEXIST`)throw r;if(t.stale===0)return!1;let i;try{i=parseInt(k.readFileSync(n,`utf8`),10)}catch{return k.unlinkSync(n),Ee(e,{...t,stale:0})}if(!Te(i))try{return k.unlinkSync(n),Ee(e,{...t,stale:0})}catch(n){if(n.code===`ENOENT`)return Ee(e,{...t,stale:0});throw n}return!1}}async function De(e,t={}){let n={stale:!0,retries:0,retryInterval:100,...t},r=K.resolve(e),i=0;for(;i<=n.retries;){if(Ee(r,n))return()=>Oe(r);i<n.retries&&await new Promise(e=>setTimeout(e,n.retryInterval)),i++}let a=Error(`Lock file is already being held`);throw a.code=`ELOCKED`,a.file=r,a}function Oe(e){let t=K.resolve(e),n=we(t);try{if(parseInt(k.readFileSync(n,`utf8`),10)!==process.pid){let e=Error(`Lock is not owned by this process`);throw e.code=`ENOTACQUIRED`,e}k.unlinkSync(n)}catch(e){if(e.code===`ENOENT`){let e=Error(`Lock is not acquired`);throw e.code=`ENOTACQUIRED`,e}throw e}}function ke(e){let t=K.resolve(e),n=we(t);try{if(!k.existsSync(n))return{locked:!1};let e=k.readFileSync(n,`utf8`),t=parseInt(e,10);return Te(t)?{locked:!0,pid:t}:{locked:!1}}catch(e){return e.code,{locked:!1}}}const Ae=e=>{k.mkdirSync(e,{recursive:!0})},je=e=>{try{k.fdatasyncSync(e)}catch{}try{k.closeSync(e)}catch{}},Me=e=>{try{let t=k.openSync(e,`r`);try{k.fsyncSync(t)}finally{k.closeSync(t)}}catch{}},Ne=(e,t)=>{let n=K.dirname(e);Ae(n);let r=K.join(n,`.tmp-`+process.pid+`-`+Math.random().toString(36).slice(2)),i;try{i=k.openSync(r,`w`),k.writeFileSync(i,t,`utf-8`),je(i),i=void 0,k.renameSync(r,e),Me(e),Me(n)}catch(e){if(i!==void 0)try{k.closeSync(i)}catch{}try{k.rmSync(r,{force:!0})}catch{}throw e}},Pe=(e,t)=>{let n=new Map,r,i=e=>{if(k.statSync(e,{throwIfNoEntry:!1}))return JSON.parse(k.readFileSync(e,`utf-8`))},a=(e,t)=>{Ne(e,JSON.stringify(t,null,2))},o=async()=>{if(r)throw Error(`Index is already locked`);let t=K.join(e,`index.json`);Ae(e),k.existsSync(t)||k.writeFileSync(t,JSON.stringify({ids:{}}),`utf-8`);let n=await De(t,{stale:!0,retries:5,retryInterval:100});return r=()=>Promise.resolve(n()),()=>{n(),r=void 0}},s=async()=>{let t=K.join(e,`index.json`),n=i(t)??{ids:{}};return n.ids||={},n},c=async t=>{let n=K.join(e,`index.json`);a(n,t)},l=async t=>{let n=(await s()).ids[t];if(n)return K.join(e,n)},u=async t=>{let n=(await s()).ids[t];if(!n)return;let r=K.join(e,n);if(k.statSync(r,{throwIfNoEntry:!1}))return JSON.parse(k.readFileSync(r,`utf-8`))},d=async n=>{let r=n[t],i=String(r),l=Se(i,{replacement:`_`})+`.json`,u=await o();try{let t=await s();t.ids[i]=l,t.current=i;let r=K.join(e,l);a(r,n),await c(t)}finally{await u()}};return{async get(e){return await u(e)},async list(){if(!k.statSync(e,{throwIfNoEntry:!1}))return[];let t=await s(),n=[];for(let[r,i]of Object.entries(t.ids)){let t=K.join(e,i),a=k.statSync(t,{throwIfNoEntry:!1});if(!a)continue;let o=ke(t);n.push({key:r,locked:o.locked,pid:o.pid,mtime:a.mtimeMs})}return n.sort((e,t)=>t.mtime-e.mtime),n},async lock(r,i){if(n.has(r))throw Error(`Key "${r}" is already locked in this process`);let a=await l(r);if(!a){let t=Se(r,{replacement:`_`})+`.json`,n=await o();try{let n=await s();n.ids[r]=t;let i=K.join(e,t);Ae(e),k.writeFileSync(i,JSON.stringify({}),`utf-8`),await c(n),a=i}finally{await n()}}if(i?.force){let e=ke(a);if(e.locked&&e.pid&&e.pid!==process.pid)try{process.kill(e.pid,`SIGTERM`),await new Promise(e=>setTimeout(e,100))}catch(t){t.code!==`ESRCH`&&console.warn(`Failed to kill process ${e.pid}:`,t.message)}}let f=await De(a,{stale:!0,retries:i?.force?10:5,retryInterval:(i?.force,100)});return n.set(r,()=>Promise.resolve(f())),{async get(){let e=await u(r);if(!e)throw Error(`Key ${r} not found`);return e},async set(e){await d(e)},async update(e){let n=await u(r);if(!n||!(t in n))throw Error(`Key ${r} not found`);await d({...n,...e})},async delete(){let t=await o();try{let t=await s(),n=t.ids[r];if(n){delete t.ids[r],t.current===r&&(t.current=void 0),await c(t);let i=K.join(e,n);try{k.rmSync(i,{force:!0}),Me(e)}catch{}}}finally{await t()}},async release(){f(),n.delete(r)}}},dispose(){n.clear()}}},Fe=(e,t)=>{let n=t?.pollInterval??200,r=t?.debounce??50,i=new Set,a,o,s=new Map,c=new Map,l=K.join(e,`index.json`),u=()=>{try{if(!k.statSync(l,{throwIfNoEntry:!1}))return{ids:{}};let e=k.readFileSync(l,`utf-8`);return{ids:JSON.parse(e).ids??{}}}catch{return{ids:{}}}},d=(e,t,n,r)=>{for(let a of i)try{a({key:e,value:t,locked:n,pid:r})}catch(e){console.error(`Error in onChange callback:`,e)}},f=(t,n,r=!1)=>{let i=K.join(e,n);try{let e=k.statSync(i,{throwIfNoEntry:!1}),a=c.get(n);if(!e){a&&(c.delete(n),d(t,void 0,!1));return}let o=e.mtimeMs,s=a?{locked:a.locked,pid:a.pid}:{locked:!1,pid:void 0};if((r||!a)&&(s=ke(i)),!a||a.mtime!==o||a.locked!==s.locked||a.pid!==s.pid){let e;e=!a||a.mtime!==o?JSON.parse(k.readFileSync(i,`utf-8`)):a.cachedValue,c.set(n,{mtime:o,key:t,locked:s.locked,pid:s.pid,cachedValue:e}),d(t,e,s.locked,s.pid)}}catch{}},p=()=>{try{let e=u(),t=new Set(Object.keys(e.ids));for(let[t,n]of Object.entries(e.ids))f(t,n,!0);for(let[e,n]of c.entries())t.has(n.key)||(c.delete(e),d(n.key,void 0,!1))}catch{}},m=(e,t,n=!1)=>{let i=s.get(e);i&&clearTimeout(i),s.set(e,setTimeout(()=>{s.delete(e),f(e,t,n)},r))},h=()=>{if(a)return;try{k.mkdirSync(e,{recursive:!0})}catch{}a=k.watch(e,(e,t)=>{if(!t||t.startsWith(`.tmp-`))return;if(t===`index.json`){p();return}if(t.endsWith(`.lock`)){let e=t.replace(`.lock`,``),n=u(),r=Object.keys(n.ids).find(t=>n.ids[t]===e);r&&f(r,e,!0);return}let n=u(),r=Object.keys(n.ids).find(e=>n.ids[e]===t);r&&m(r,t,!1)});let t=()=>{p(),o=setTimeout(t,n)};p(),o=setTimeout(t,n)};return{onChange(e){return i.size===0&&h(),i.add(e),()=>{if(i.delete(e),i.size===0){a&&=(a.close(),void 0),o&&=(clearTimeout(o),void 0);for(let e of s.values())clearTimeout(e);s.clear(),c.clear()}}},dispose(){a&&=(a.close(),void 0),o&&=(clearTimeout(o),void 0);for(let e of s.values())clearTimeout(e);s.clear(),i.clear(),c.clear()}}};async function Ie({chatKey:e,agent:t,messages:n,signal:r,shouldContinueStreaming:i=Le}){n=[...n];let a=new TransformStream,o=a.writable.getWriter(),s=async()=>{let a;try{let c=await t.chat({messages:n,chat:{key:e}},{signal:r}),l=ne({message:{id:crypto.randomUUID(),role:`assistant`,parts:[],metadata:{}},stream:c,onError:e=>{e instanceof Error&&e.name===`AbortError`||o.abort(e)}});for await(let e of l)o.write(e),a=e;if(a&&i(a)){n.push(a),await s();return}await o.close()}catch(e){if(e?.name===`AbortError`||r?.aborted)return;await o.abort(e)}finally{await o.close()}};return s().catch(e=>{o.abort(e)}),a.readable}const Le=e=>{if(e.role!==`assistant`)return!1;let t=e.parts.reduce((e,t,n)=>t.type===`step-start`?n:e,-1),n=e.parts.slice(t+1).filter(L);return n.length===0||n.some(e=>u(e.output)&&e.output.outcome===`pending`)?!1:n.every(e=>e.state.startsWith(`output-`))},Re=(e,t,n=crypto.randomUUID())=>({created_at:new Date().toISOString(),...e,id:n,metadata:e.metadata,mode:t});function ze(e){return typeof e==`object`&&e?.__blink_internal!==void 0}var Be=class{chatId;agent;chatStore;serializeMessage;filterMessages;chat;loading=!1;streamingMessage;status=`idle`;queue=[];abortController;isProcessingQueue=!1;listeners=new Set;watcher;disposed=!1;constructor(e){this.chatId=e.chatId,this.chat={id:this.chatId,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),messages:[]},this.loading=!0,this.chatStore=Pe(e.chatsDirectory,`id`),this.serializeMessage=e.serializeMessage,this.filterMessages=e.filterMessages,this.watcher=Fe(e.chatsDirectory,{pollInterval:1e3,debounce:50}),this.watcher.onChange(e=>{if(e.key!==this.chatId||this.isProcessingQueue)return;if(!e.value){this.chat={id:this.chatId,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),messages:[]},this.status=`idle`,this.streamingMessage=void 0,this.notifyListeners();return}let t=e.value,n=e.value?.error?`error`:`idle`;e.locked&&(n=`streaming`);let r=this.chat.updated_at!==t?.updated_at||this.status!==n;this.chat=t,this.streamingMessage=void 0,this.status=n,r&&this.notifyListeners()}),this.chatStore.get(this.chatId).then(e=>{this.disposed||e&&(this.chat=e)}).catch(e=>{this.chat.error=e instanceof Error?e.message:String(e)}).finally(()=>{this.loading=!1,this.notifyListeners()})}setAgent(e){this.agent=e}getState(){return{id:this.chatId,messages:(this.chat?.messages??[]).filter(e=>!ze(e.metadata)),created_at:this.chat?.created_at,updated_at:this.chat?.updated_at,status:this.status,streamingMessage:this.streamingMessage,error:this.chat?.error,loading:this.loading,queuedMessages:this.queue}}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}async upsertMessage(e,t){let n=!1,r;t?r=t:(r=await this.chatStore.lock(this.chatId),n=!0);try{let t=await r.get();(!t.id||!Array.isArray(t.messages))&&(t={id:this.chatId,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),messages:[]});let n=e;if(this.serializeMessage){let t=this.serializeMessage(e);if(t===void 0)return;n=t}let i=n.id||crypto.randomUUID(),a=n.mode||`run`,o=Re(n,a,i),s=t.messages.find(e=>e.id===o.id)?t.messages.map(e=>e.id===o.id?o:e):[...t.messages,o];this.chat={...t,updated_at:new Date().toISOString(),messages:s},await r.set(this.chat),this.notifyListeners()}finally{n&&await r.release()}}async deleteMessage(e){let t;try{t=await this.chatStore.lock(this.chatId);let n=await t.get();this.chat.messages=n.messages.filter(t=>t.id!==e),this.chat.updated_at=new Date().toISOString(),await t.set(this.chat),this.notifyListeners()}finally{t&&await t.release()}}async sendMessage(e){if(this.chat.error=void 0,this.status===`streaming`){this.queue.push(e),this.notifyListeners();return}this.queue=[e],await this.processQueueOrRun()}async start(){await this.processQueueOrRun()}async processQueueOrRun(){if(!this.agent){this.chat.error=`The agent is not available. Please wait for the build to succeed.`,this.status=`error`,this.queue=[],this.notifyListeners();return}if(this.isProcessingQueue)return;this.isProcessingQueue=!0,this.chat.error=void 0;let e;try{e=await this.chatStore.lock(this.chatId);let t=!0;for(;this.queue.length>0||t;){t=!1;let n=new AbortController;this.abortController=n;let r=this.queue.shift();this.streamingMessage=void 0,this.status=`streaming`,this.notifyListeners(),r&&await this.upsertMessage(r,e);let i=this.chat.messages;this.filterMessages&&(i=i.filter(this.filterMessages)),i=i.map(e=>({...e,parts:e.parts.map(e=>!L(e)||e.input!==``?e:{...e,input:{}})}));let a=await Ie({agent:this.agent,chatKey:this.chatId,signal:n.signal,messages:i}),o=async t=>{let n=t;if(this.serializeMessage){let e=this.serializeMessage(t);if(e===void 0)return;n=e}this.chat.updated_at=new Date().toISOString(),this.chat.messages.push(n),this.streamingMessage=void 0,await e?.set(this.chat)},s=a.getReader();try{for(;;){let{done:e,value:t}=await s.read();if(e||n.signal.aborted)break;this.streamingMessage&&t.id!==this.streamingMessage.id&&await o(this.streamingMessage),this.streamingMessage=this.serializeMessage?this.serializeMessage(t):t,this.notifyListeners()}}finally{s.releaseLock()}this.streamingMessage&&await o(this.streamingMessage)}}catch(e){this.chat.error=e instanceof Error?e.message:String(e)}finally{this.isProcessingQueue=!1,this.streamingMessage=void 0,this.chat.error?this.status=`error`:this.status=`idle`,e&&(this.chat.updated_at=new Date().toISOString(),await e.set(this.chat),await e.release(),this.notifyListeners())}}stopStreaming(){this.abortController?.abort()}clearQueue(){this.queue=[],this.notifyListeners()}async resetChat(){this.abortController?.abort(),this.resetChatState(),this.notifyListeners();let e;try{e=await this.chatStore.lock(this.chatId),await e.delete()}catch{}finally{if(e)try{await e.release()}catch{}}}dispose(){this.disposed=!0,this.watcher.dispose(),this.listeners.clear(),this.abortController?.abort()}resetChatState(){this.chat={id:this.chatId,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),messages:[]},this.streamingMessage=void 0,this.status=`idle`,this.queue=[]}notifyListeners(){let e=this.getState();for(let t of this.listeners)t(e)}};function Ve(e){let{chatId:t,agent:n,chatsDirectory:r,serializeMessage:i,filterMessages:a}=e,o=W(null),[s,c]=G({id:t,messages:[],status:`idle`,loading:!0,queuedMessages:[]});H(()=>{o.current&&o.current.dispose();let e=new Be({chatId:t,chatsDirectory:r,serializeMessage:i,filterMessages:a}),n=e.subscribe(e=>{c(e)});return c(e.getState()),o.current=e,()=>{n(),e.dispose(),o.current=null}},[t,r]),H(()=>{o.current&&o.current.setAgent(n)},[n]);let l=V(async e=>{o.current&&await o.current.sendMessage(e)},[]),u=V(async e=>{o.current&&await o.current.upsertMessage(e)},[]),d=V(()=>{o.current&&o.current.stopStreaming()},[]),f=V(async()=>{o.current&&await o.current.resetChat()},[]),p=V(()=>{o.current&&o.current.clearQueue()},[]),m=V(async e=>{o.current&&await o.current.deleteMessage(e)},[]),h=V(async()=>{o.current&&await o.current.start()},[]);return{...s,sendMessage:l,upsertMessage:u,stopStreaming:d,resetChat:f,clearQueue:p,deleteMessage:m,start:h}}var He=Object.getOwnPropertyNames,Ue=(e,t)=>function(){return t||(0,e[He(e)[0]])((t={exports:{}}).exports,t),t.exports},X=g(import.meta.url);Y.object({email:Y.string().email(),password:Y.string().min(8)}),Y.object({email:Y.string().email(),code:Y.string()}),Y.object({email:Y.string().email(),password:Y.string().min(8)});var We=class{constructor(e,t){this.client=e,this.baseURL=t}async token(e,t={timeout:12e4}){return new Promise((n,r)=>{let i=crypto.randomUUID(),a=this.client.websocket(`/api/auth/token?id=${i}`),o=new URL(`/auth?id=${i}`,this.baseURL),s=setTimeout(()=>{r(Error(`Timeout waiting for the user to authenticate`))},t.timeout);a.onerror=e=>{clearTimeout(s),console.log(`error`,e),r(Error(`Failed to connect to server`))},a.onopen=()=>{e(o.toString(),i)},a.onmessage=e=>{typeof e.data==`string`&&(clearTimeout(s),n(e.data))}})}},Ge=class extends Error{constructor(e,t){super(e),this.name=`ParseError`,this.type=t.type,this.field=t.field,this.value=t.value,this.line=t.line}};function Ke(e){}function qe(e){if(typeof e==`function`)throw TypeError("`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?");let{onEvent:t=Ke,onError:n=Ke,onRetry:r=Ke,onComment:i}=e,a=``,o=!0,s,c=``,l=``;function u(e){let t=o?e.replace(/^\xEF\xBB\xBF/,``):e,[n,r]=Je(`${a}${t}`);for(let e of n)d(e);a=r,o=!1}function d(e){if(e===``){p();return}if(e.startsWith(`:`)){i&&i(e.slice(e.startsWith(`: `)?2:1));return}let t=e.indexOf(`:`);if(t!==-1){let n=e.slice(0,t),r=e[t+1]===` `?2:1,i=e.slice(t+r);f(n,i,e);return}f(e,``,e)}function f(e,t,i){switch(e){case`event`:l=t;break;case`data`:c=`${c}${t}
|
|
2
2
|
`;break;case`id`:s=t.includes(`\0`)?void 0:t;break;case`retry`:/^\d+$/.test(t)?r(parseInt(t,10)):n(new Ge(`Invalid \`retry\` value: "${t}"`,{type:`invalid-retry`,value:t,line:i}));break;default:n(new Ge(`Unknown field "${e.length>20?`${e.slice(0,20)}\u2026`:e}"`,{type:`unknown-field`,field:e,value:t,line:i}));break}}function p(){c.length>0&&t({id:s,event:l||void 0,data:c.endsWith(`
|
|
3
3
|
`)?c.slice(0,-1):c}),s=void 0,c=``,l=``}function m(e={}){a&&e.consume&&d(a),o=!0,s=void 0,c=``,l=``,a=``}return{feed:u,reset:m}}function Je(e){let t=[],n=``,r=0;for(;r<e.length;){let i=e.indexOf(`\r`,r),a=e.indexOf(`
|
|
4
4
|
`,r),o=-1;if(i!==-1&&a!==-1?o=Math.min(i,a):i===-1?a!==-1&&(o=a):o=i===e.length-1?-1:i,o===-1){n=e.slice(r);break}else{let n=e.slice(r,o);t.push(n),r=o+1,e[r-1]===`\r`&&e[r]===`
|
|
@@ -215,7 +215,7 @@ You are *NOT* responsible for:
|
|
|
215
215
|
- Continuing any work the run mode agent started
|
|
216
216
|
|
|
217
217
|
Your job is to improve the agent based on run mode failures, NOT to complete the user's original run-mode request yourself.
|
|
218
|
-
`}),R({model:f(`anthropic/claude-sonnet-4.5`),messages:d,tools:u,experimental_repairToolCall:({tools:e,toolCall:t})=>{throw Object.keys(e).includes(t.toolName)?Error(`You have this tool, but you used an invalid input.`):Error(`Invalid tool call. Tool "${t.toolName}" is not available to the EDIT AGENT.`)}})}),{agent:t,setUserAgentUrl:e=>{n=e},cleanup:()=>{r&&=(r.close(),void 0)}}}const du=`You are the Blink Edit Agent, an AI assistant that helps developers build and debug Blink agents.
|
|
218
|
+
`}),R({model:f(`anthropic/claude-sonnet-4.5`),messages:d,maxOutputTokens:64e3,tools:u,experimental_repairToolCall:({tools:e,toolCall:t})=>{throw Object.keys(e).includes(t.toolName)?Error(`You have this tool, but you used an invalid input.`):Error(`Invalid tool call. Tool "${t.toolName}" is not available to the EDIT AGENT.`)}})}),{agent:t,setUserAgentUrl:e=>{n=e},cleanup:()=>{r&&=(r.close(),void 0)}}}const du=`You are the Blink Edit Agent, an AI assistant that helps developers build and debug Blink agents.
|
|
219
219
|
|
|
220
220
|
You are integrated into the \`blink dev\` command-line interface, where users can toggle between **run mode** (testing their agent) and **edit mode** (getting your help) using Ctrl+E. After making changes, instruct the user to switch to run mode to use their agent.
|
|
221
221
|
|
|
@@ -546,4 +546,4 @@ Instead:
|
|
|
546
546
|
|
|
547
547
|
The agent process can restart at any time, so all important state must be externalized.
|
|
548
548
|
</technical_knowledge>
|
|
549
|
-
`;function fu(e){let[t,n]=G(void 0),[r,i]=G(void 0),a=W(void 0);return H(()=>{let t=new AbortController;return(async()=>{a.current=uu({directory:e.directory});let r=await pu(),i=a.current.agent.serve({port:r,host:`127.0.0.1`,apiUrl:e.apiServerUrl});t.signal.addEventListener(`abort`,()=>{try{i.close()}catch{}a.current?.cleanup()});let s=new o({baseUrl:`http://127.0.0.1:${r}`});for(;!t.signal.aborted;){try{await s.health();break}catch{}await new Promise(e=>setTimeout(e,100))}if(t.signal.aborted)throw t.signal.reason;n(s)})().catch(e=>{i(e instanceof Error?e:Error(String(e)))}),()=>t.abort()},[e.directory,e.apiServerUrl]),U(()=>({client:t,error:r,setUserAgentUrl:e=>{a.current?.setUserAgentUrl(e)}}),[t,r])}async function pu(){let e=P();return new Promise((t,n)=>{e.listen(0,()=>{let n=e.address().port;t(n)}).on(`error`,e=>{n(e)})}).finally(()=>{e.close()})}function mu(e){let{directory:t}=e,[n,r]=G(`run`),i=W(`run`);H(()=>{i.current=n},[n]);let a=V(t=>{r(t),e.onModeChange?.(t)},[e.onModeChange]),o=V(()=>{a(n===`run`?`edit`:`run`)},[n,a]),{error:s,status:c,result:l,entry:d}=ue({directory:t,onBuildStart:e.onBuildStart,onBuildSuccess:e.onBuildSuccess,onBuildError:e.onBuildError}),f=mi(t),p=U(()=>{let e=Zr();return e?{...f,BLINK_TOKEN:e}:f},[f]),m=W(void 0);H(()=>{let t=Object.keys(p);if(t.length===m.current||m.current===void 0){m.current=t.length;return}m.current=t.length,e.onEnvLoaded?.(t)},[p,e.onEnvLoaded]);let h=W(void 0),g=U(()=>ci({port:0,dataDirectory:v(t,`data`),getAgent:()=>h.current}),[t]),{agent:_,logs:y,error:b,capabilities:x}=ce({buildResult:l,env:p,apiServerUrl:g.url}),{client:S,error:C,setUserAgentUrl:w}=fu({directory:t,apiServerUrl:g.url}),[T,E]=G(`default`);H(()=>{_&&w(_.baseUrl),n===`run`?_?h.current=_:(h.current=void 0,g.stopChat(T)):n===`edit`&&(S?h.current=S:(h.current=void 0,g.stopChat(T)))},[_,S,n,T,g]);let D=W(void 0),O=Ve({chatId:T,agent:n===`run`?_:S,chatsDirectory:g.chatsDirectory,serializeMessage:e=>{let t=e.role===`user`&&D.current?{...typeof e.metadata==`object`&&e.metadata!==null?e.metadata:{},options:D.current}:e.metadata;return{id:e.id??crypto.randomUUID(),created_at:new Date().toISOString(),role:e.role,parts:e.parts,mode:i.current,metadata:t}},filterMessages:e=>i.current===`edit`?!0:!(ze(e.metadata)||e.mode===`edit`)}),k=W(0);H(()=>{if(y.length===k.current)return;let t=k.current;for(let n of y.slice(t))e.onAgentLog?.(n);k.current=y.length},[y,e.onAgentLog,O.upsertMessage]);let[A,j]=G([]);H(()=>{g.listChats().then(e=>{j(e.map(e=>e.key))})},[g]),H(()=>{T&&!A.includes(T)&&j(e=>[...e,T])},[T,A]);let M=U(()=>$r(t),[t]),N=ui({id:M,disabled:!x?.request,onRequest:async t=>{if(!_)throw Error(`No agent`);let n=new URL(t.url),r=new URL(_.baseUrl);r.pathname=n.pathname,r.search=n.search;try{let i=await fetch(r.toString(),{method:t.method,body:t.body,headers:t.headers,redirect:`manual`,signal:t.signal,duplex:`half`});return e.onDevhookRequest?.({method:t.method,path:n.pathname,status:i.status}),i}catch(e){return console.error(`Error sending request to user's agent:`,e),new Response(`Internal server error`,{status:500})}}});H(()=>{N.status===`connected`&&e.onDevhookConnected?.(`https://${N.id}.dev.blink.host`)},[N.status,N.id]);let{schema:P,options:F,error:ee,setOption:te}=li({agent:n===`run`?_:S,capabilities:x,messages:O.messages});H(()=>{D.current=F},[F]);let I=U(()=>{let e=[];return b&&n===`run`&&e.push(b.message),C&&n===`edit`&&e.push(`Edit agent error: ${C.message}`),O.error&&e.push(`Chat error: ${O.error}`),ee&&e.push(`Options error: ${ee.message}`),e},[b,C,O.error,ee,n]);H(()=>{for(let t of I)e.onError?.(t)},[I]);let[ne,R]=G(),[z,B]=G(!1),K=U(()=>{let e=[...O.messages].reverse().find(e=>!(e.role!==`assistant`||e.metadata&&e.metadata.ephemeral));if(!e||ne===e.id)return;let t=e.parts.filter(L);if(t.length!==0&&t.some(e=>u(e.output)&&e.output.outcome===`pending`))return e},[O.messages,ne]),re=V(async(e,t)=>{if(!K)return;t&&e&&B(!0),R(K.id);let n=O.messages;if(n.length===0)return;let r=n[n.length-1];if(!r||r.role!==`assistant`||!Array.isArray(r.parts))return;let i=r.parts.map(t=>t.output&&u(t.output)&&t.output.outcome===`pending`?{...t,output:{...t.output,outcome:e?`approved`:`rejected`}}:t);await O.upsertMessage({...r,parts:i}),await O.start()},[K,O]);H(()=>{z&&K&&re(!0)},[z,K,re]);let q=V(()=>{let e=crypto.randomUUID();E(e),j(t=>[...t,e])},[]),J=U(()=>{if(K)return{message:K,approve:e=>re(!0,e),reject:()=>re(!1),autoApproveEnabled:z}},[K,re,z]),ie=U(()=>{let e=O.messages;if(e.length!==0)for(let t=e.length-1;t>=0;t--){let n=e[t];if(!n||n.role!==`assistant`||!n.metadata||typeof n.metadata!=`object`||!(`totalUsage`in n.metadata))continue;let r=n.metadata.totalUsage;if(!(!r||typeof r!=`object`)&&!(!(`inputTokens`in r)||!(`outputTokens`in r)||!(`totalTokens`in r)))return{inputTokens:r.inputTokens,outputTokens:r.outputTokens,totalTokens:r.totalTokens,cachedInputTokens:r.cachedInputTokens}}},[O.messages]),Y=U(()=>{if(O.status!==`streaming`)return!1;if(!O.streamingMessage)return!0;let e=O.streamingMessage.parts.filter(L);return e.length>0&&e.every(e=>e.state.startsWith(`output-`))},[O.status,O.streamingMessage]);return{mode:n,setMode:a,toggleMode:o,chat:O,chats:A,switchChat:E,newChat:q,build:{status:c,error:s,entrypoint:d},devhook:{connected:N.status===`connected`,url:N.status===`connected`?`https://${N.id}.dev.blink.host`:void 0},capabilities:x,options:{schema:P,selected:F,error:ee,setOption:te},approval:J,tokenUsage:ie,server:g,showWaitingPlaceholder:Y}}export{ce as useAgent,ue as useBundler,Ve as useChat,mu as useDevMode,ui as useDevhook,mi as useDotenv,fu as useEditAgent,li as useOptions};
|
|
549
|
+
`;function fu(e){let[t,n]=G(void 0),[r,i]=G(void 0),a=W(void 0);return H(()=>{let t=new AbortController;return(async()=>{a.current=uu({directory:e.directory});let r=await pu(),i=a.current.agent.serve({port:r,host:`127.0.0.1`,apiUrl:e.apiServerUrl});t.signal.addEventListener(`abort`,()=>{try{i.close()}catch{}a.current?.cleanup()});let s=new o({baseUrl:`http://127.0.0.1:${r}`});for(;!t.signal.aborted;){try{await s.health();break}catch{}await new Promise(e=>setTimeout(e,100))}if(t.signal.aborted)throw t.signal.reason;n(s)})().catch(e=>{i(e instanceof Error?e:Error(String(e)))}),()=>t.abort()},[e.directory,e.apiServerUrl]),U(()=>({client:t,error:r,setUserAgentUrl:e=>{a.current?.setUserAgentUrl(e)}}),[t,r])}async function pu(){let e=P();return new Promise((t,n)=>{e.listen(0,()=>{let n=e.address().port;t(n)}).on(`error`,e=>{n(e)})}).finally(()=>{e.close()})}function mu(e){let{directory:t}=e,[n,r]=G(`run`),i=W(`run`);H(()=>{i.current=n},[n]);let a=V(t=>{r(t),e.onModeChange?.(t)},[e.onModeChange]),o=V(()=>{a(n===`run`?`edit`:`run`)},[n,a]),{error:s,status:c,result:l,entry:d}=ue({directory:t,onBuildStart:e.onBuildStart,onBuildSuccess:e.onBuildSuccess,onBuildError:e.onBuildError}),f=mi(t),p=U(()=>{let e=Zr();return e?{...f,BLINK_TOKEN:e}:f},[f]),m=W(void 0);H(()=>{let t=Object.keys(p);if(t.length===m.current||m.current===void 0){m.current=t.length;return}m.current=t.length,e.onEnvLoaded?.(t)},[p,e.onEnvLoaded]);let h=W(void 0),g=U(()=>ci({port:0,dataDirectory:v(t,`data`),getAgent:()=>h.current}),[t]),{agent:_,logs:y,error:b,capabilities:x}=ce({buildResult:l,env:p,apiServerUrl:g.url}),{client:S,error:C,setUserAgentUrl:w}=fu({directory:t,apiServerUrl:g.url}),[T,E]=G(`default`);H(()=>{_&&w(_.baseUrl),n===`run`?_?h.current=_:(h.current=void 0,g.stopChat(T)):n===`edit`&&(S?h.current=S:(h.current=void 0,g.stopChat(T)))},[_,S,n,T,g]);let D=W(void 0),O=Ve({chatId:T,agent:n===`run`?_:S,chatsDirectory:g.chatsDirectory,serializeMessage:e=>{let t=e.role===`user`&&D.current?{...typeof e.metadata==`object`&&e.metadata!==null?e.metadata:{},options:D.current}:e.metadata;return{id:e.id??crypto.randomUUID(),created_at:new Date().toISOString(),role:e.role,parts:e.parts,mode:i.current,metadata:t}},filterMessages:e=>i.current===`edit`?!0:!(ze(e.metadata)||e.mode===`edit`)}),k=W(0);H(()=>{if(y.length===k.current)return;let t=k.current;for(let n of y.slice(t))e.onAgentLog?.(n);k.current=y.length},[y,e.onAgentLog,O.upsertMessage]);let[A,j]=G([]);H(()=>{g.listChats().then(e=>{j(e.map(e=>e.key))})},[g]),H(()=>{T&&!A.includes(T)&&j(e=>[...e,T])},[T,A]);let M=U(()=>$r(t),[t]),N=ui({id:M,disabled:!x?.request,onRequest:async t=>{if(!_)throw Error(`No agent`);let n=new URL(t.url),r=new URL(_.baseUrl);r.pathname=n.pathname,r.search=n.search;try{let i=await fetch(r.toString(),{method:t.method,body:t.body,headers:t.headers,redirect:`manual`,signal:t.signal,duplex:`half`});return e.onDevhookRequest?.({method:t.method,path:n.pathname,status:i.status}),i}catch(e){return console.error(`Error sending request to user's agent:`,e),new Response(`Internal server error`,{status:500})}}});H(()=>{N.status===`connected`&&e.onDevhookConnected?.(`https://${N.id}.dev.blink.host`)},[N.status,N.id]);let{schema:P,options:F,error:ee,setOption:te}=li({agent:n===`run`?_:S,capabilities:x,messages:O.messages});H(()=>{D.current=F},[F]);let I=U(()=>{let e=[];return b&&n===`run`&&e.push(b.message),C&&n===`edit`&&e.push(`Edit agent error: ${C.message}`),O.error&&c!==`building`&&e.push(`Chat error: ${O.error}`),ee&&e.push(`Options error: ${ee.message}`),e},[b,C,O.error,ee,n,c]);H(()=>{for(let t of I)e.onError?.(t)},[I]);let[ne,R]=G(),[z,B]=G(!1),K=U(()=>{let e=[...O.messages].reverse().find(e=>!(e.role!==`assistant`||e.metadata&&e.metadata.ephemeral));if(!e||ne===e.id)return;let t=e.parts.filter(L);if(t.length!==0&&t.some(e=>u(e.output)&&e.output.outcome===`pending`))return e},[O.messages,ne]),re=V(async(e,t)=>{if(!K)return;t&&e&&B(!0),R(K.id);let n=O.messages;if(n.length===0)return;let r=n[n.length-1];if(!r||r.role!==`assistant`||!Array.isArray(r.parts))return;let i=r.parts.map(t=>t.output&&u(t.output)&&t.output.outcome===`pending`?{...t,output:{...t.output,outcome:e?`approved`:`rejected`}}:t);await O.upsertMessage({...r,parts:i}),await O.start()},[K,O]);H(()=>{z&&K&&re(!0)},[z,K,re]);let q=V(()=>{let e=crypto.randomUUID();E(e),j(t=>[...t,e])},[]),J=U(()=>{if(K)return{message:K,approve:e=>re(!0,e),reject:()=>re(!1),autoApproveEnabled:z}},[K,re,z]),ie=U(()=>{let e=O.messages;if(e.length!==0)for(let t=e.length-1;t>=0;t--){let n=e[t];if(!n||n.role!==`assistant`||!n.metadata||typeof n.metadata!=`object`||!(`totalUsage`in n.metadata))continue;let r=n.metadata.totalUsage;if(!(!r||typeof r!=`object`)&&!(!(`inputTokens`in r)||!(`outputTokens`in r)||!(`totalTokens`in r)))return{inputTokens:r.inputTokens,outputTokens:r.outputTokens,totalTokens:r.totalTokens,cachedInputTokens:r.cachedInputTokens}}},[O.messages]),Y=U(()=>{if(O.status!==`streaming`)return!1;if(!O.streamingMessage)return!0;let e=O.streamingMessage.parts.filter(L);return e.length>0&&e.every(e=>e.state.startsWith(`output-`))},[O.status,O.streamingMessage]);return{mode:n,setMode:a,toggleMode:o,chat:O,chats:A,switchChat:E,newChat:q,build:{status:c,error:s,entrypoint:d},devhook:{connected:N.status===`connected`,url:N.status===`connected`?`https://${N.id}.dev.blink.host`:void 0},capabilities:x,options:{schema:P,selected:F,error:ee,setOption:te},approval:J,tokenUsage:ie,server:g,showWaitingPlaceholder:Y}}export{ce as useAgent,ue as useBundler,Ve as useChat,mu as useDevMode,ui as useDevhook,mi as useDotenv,fu as useEditAgent,li as useOptions};
|