@vibecontrols/agent 2026.531.13 → 2026.531.15

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.

Potentially problematic release.


This version of @vibecontrols/agent might be problematic. Click here for more details.

package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- import{createApp,invalidatePairingToken,mintPairingToken}from"./index-h2n00ae3.js";import"./index-926vt87h.js";import{bootstrapWorkspace}from"./index-ns2dd8nx.js";import"./index-q96eskyn.js";import"./index-skmkfyzb.js";import"./index-95nmejfd.js";import"./index-vfwervz9.js";import"./index-y5q0m3cx.js";import"./index-ttafzcs7.js";import{getAgentVersion}from"./index-1x89a7r1.js";import"./index-srbb2214.js";import{telemetryService}from"./index-sfjbh6fa.js";import"./index-3jez1q8j.js";import"./index-brtw3j8x.js";import{getAgentApiKey,loadAgentApiKey}from"./index-b4wy3jrt.js";import"./index-d3mz9vws.js";import"./index-rnk0kny8.js";import{applyAgentConfigToEnv,applyAgentSecretsToEnv,getSecret,readAgentConfig,setSecret}from"./index-2pqv0bya.js";import{getDaemonProfile}from"./index-7pdmqbj8.js";import{getProfileDataDir,getVibecontrolsDir,getVibecontrolsProductDir,getVibecontrolsProfile}from"./index-bysm7taq.js";import"./index-zs58d1hc.js";import{__require}from"./index-e9rt4m94.js";import{isAbsolute}from"path";import{existsSync,mkdirSync,readFileSync,readdirSync,renameSync,unlinkSync,writeFileSync}from"fs";import{dirname,join}from"path";var MIGRATION_MARKER=".secrets-migrated-v1",SECRET_KEYS=["static-api-key","clientId","clientSecret"];function composeName(scope,key){return`${scope}:${key}`}function getMarkerPath(){return join(getVibecontrolsProductDir(),MIGRATION_MARKER)}function writeMarker(){let path=getMarkerPath();mkdirSync(dirname(path),{recursive:!0}),writeFileSync(path,`${new Date().toISOString()}
3
+ import{createApp,invalidatePairingToken,mintPairingToken}from"./index-s3vbcsga.js";import"./index-926vt87h.js";import{bootstrapWorkspace}from"./index-ns2dd8nx.js";import"./index-mq3amjcf.js";import"./index-skmkfyzb.js";import"./index-95nmejfd.js";import"./index-wmeb40wr.js";import"./index-y5q0m3cx.js";import"./index-wk359257.js";import{getAgentVersion}from"./index-cyhcvfxs.js";import"./index-srbb2214.js";import{telemetryService}from"./index-sfjbh6fa.js";import"./index-3jez1q8j.js";import"./index-brtw3j8x.js";import{getAgentApiKey,loadAgentApiKey}from"./index-b4wy3jrt.js";import"./index-d3mz9vws.js";import"./index-rnk0kny8.js";import{applyAgentConfigToEnv,applyAgentSecretsToEnv,getSecret,readAgentConfig,setSecret}from"./index-2pqv0bya.js";import{getDaemonProfile}from"./index-7pdmqbj8.js";import{getProfileDataDir,getVibecontrolsDir,getVibecontrolsProductDir,getVibecontrolsProfile}from"./index-bysm7taq.js";import"./index-zs58d1hc.js";import{__require}from"./index-e9rt4m94.js";import{isAbsolute}from"path";import{existsSync,mkdirSync,readFileSync,readdirSync,renameSync,unlinkSync,writeFileSync}from"fs";import{dirname,join}from"path";var MIGRATION_MARKER=".secrets-migrated-v1",SECRET_KEYS=["static-api-key","clientId","clientSecret"];function composeName(scope,key){return`${scope}:${key}`}function getMarkerPath(){return join(getVibecontrolsProductDir(),MIGRATION_MARKER)}function writeMarker(){let path=getMarkerPath();mkdirSync(dirname(path),{recursive:!0}),writeFileSync(path,`${new Date().toISOString()}
4
4
  `,{mode:384})}function parseJsonFile(path){if(!existsSync(path))return null;try{let raw=readFileSync(path,"utf8"),parsed=JSON.parse(raw);if(parsed&&typeof parsed==="object"&&!Array.isArray(parsed))return parsed}catch{}return null}function atomicWriteJson(path,data){mkdirSync(dirname(path),{recursive:!0});let tmp=`${path}.${process.pid}.tmp`;writeFileSync(tmp,`${JSON.stringify(data,null,2)}
5
5
  `,{mode:384}),renameSync(tmp,path)}function listAgentConfigs(){let productDir=getVibecontrolsProductDir(),agentsDir=join(productDir,"agents");if(!existsSync(agentsDir))return[];let entries=[],names;try{names=readdirSync(agentsDir)}catch{return[]}for(let name of names){let cfgPath=join(agentsDir,name,"config.json");if(!existsSync(cfgPath))continue;entries.push({path:cfgPath,scope:name})}return entries}function listProfileFiles(){let productDir=getVibecontrolsProductDir(),profilesDir=join(productDir,"profiles");if(!existsSync(profilesDir))return[];let entries=[],names;try{names=readdirSync(profilesDir)}catch{return[]}for(let name of names){if(!name.endsWith(".json"))continue;entries.push({path:join(profilesDir,name),scope:name.slice(0,-5)})}return entries}async function migrateOneJson(path,scope){let data=parseJsonFile(path);if(!data)return 0;let moved=0;for(let key of SECRET_KEYS){let v=data[key];if(typeof v!=="string"||v.length===0)continue;let composed=composeName(scope,key);try{await setSecret(composed,v),delete data[key],moved++,getDaemonProfile().logger.info("secrets-migrator","migrated field",{path,scope,key})}catch(err){getDaemonProfile().logger.warn("secrets-migrator","failed to migrate field",{path,scope,key,error:String(err)})}}if(moved>0)atomicWriteJson(path,data);return moved}async function runSecretsMigrationOnce(){let result={alreadyMigrated:!1,fieldsMoved:0,filesUpdated:0};if(existsSync(getMarkerPath()))return result.alreadyMigrated=!0,result;let targets=[...listAgentConfigs(),...listProfileFiles()];for(let t of targets){let moved;try{moved=await migrateOneJson(t.path,t.scope)}catch(err){getDaemonProfile().logger.warn("secrets-migrator","skipping target after error",{path:t.path,error:String(err)});continue}if(moved>0)result.fieldsMoved+=moved,result.filesUpdated++}try{writeMarker()}catch(err){getDaemonProfile().logger.warn("secrets-migrator","failed to drop migration marker",{error:String(err)})}if(result.fieldsMoved>0)getDaemonProfile().logger.info("secrets-migrator","migration complete",{fieldsMoved:result.fieldsMoved,filesUpdated:result.filesUpdated});return result}{let originalJsonParse=JSON.parse.bind(JSON);JSON.parse=(text,reviver)=>{try{return originalJsonParse(text,reviver)}catch(err){if(typeof text==="string"&&text.endsWith("}}"))try{return originalJsonParse(text.slice(0,-1),reviver)}catch{}throw err}};let RequestProto=globalThis.Request?.prototype;if(RequestProto&&typeof RequestProto.json==="function"){let originalJson=RequestProto.json;RequestProto.json=async function(){let text=await this.text();if(!text)return;try{return originalJsonParse(text)}catch{if(text.endsWith("}}"))try{return originalJsonParse(text.slice(0,-1))}catch{}let fresh=new Request("http://shim/",{method:"POST",body:text});return originalJson.call(fresh)}}}}bootstrapWorkspace();applyAgentConfigToEnv();if(!process.env.VIBECONTROLS_DATA_DIR)process.env.VIBECONTROLS_DATA_DIR=getVibecontrolsDir();if(typeof Bun>"u")console.error("ERROR: VibeControls Agent requires Bun runtime."),console.error("Install Bun: https://bun.sh"),process.exit(1);function defaultPortForProfile(profile){if(profile==="default")return 3005;let h=2166136261;for(let i=0;i<profile.length;i++)h=Math.imul(h^profile.charCodeAt(i),16777619);return 3100+Math.abs(h)%300}var _resolvedProfile=(()=>{try{return getVibecontrolsProfile()}catch{return"default"}})(),parsedPort=Number.parseInt(process.env.PORT||String(defaultPortForProfile(_resolvedProfile)),10),port=Number.isInteger(parsedPort)&&parsedPort>0?parsedPort:3005,host=process.env.HOST||"0.0.0.0",dbPath=(()=>{let fromEnv=process.env.DB_PATH;if(!fromEnv)return;if(isAbsolute(fromEnv))return fromEnv;console.warn(`[boot] Ignoring relative DB_PATH=${fromEnv} (cwd=${process.cwd()}). Use an absolute path or unset to fall back to ${getProfileDataDir()}.`);return})(),apiKey=process.env.AGENT_API_KEY||void 0,logLevel=process.env.LOG_LEVEL||"info",corsOrigin=process.env.CORS_ORIGIN||void 0;async function main(){try{await runSecretsMigrationOnce()}catch(err){getDaemonProfile().logger.warn("server","secrets migration encountered an error",{error:String(err)})}let legacyJsonKey=readAgentConfig()["static-api-key"],profile=(()=>{try{return getVibecontrolsProfile()}catch{return"default"}})(),preExistingApiKey=legacyJsonKey??await getSecret(`${profile}:static-api-key`),isFirstBoot=!apiKey&&!preExistingApiKey;await loadAgentApiKey(),await applyAgentSecretsToEnv();let vibeClientId=process.env.VIBE_CLIENT_ID,vibeClientSecret=process.env.VIBE_CLIENT_SECRET,vibeGlobalGatewayUrl=process.env.VIBE_GLOBAL_GATEWAY_URL,vibeWorkspaceGatewayUrl=process.env.VIBE_WORKSPACE_GATEWAY_URL,vibeWorkspaceId=process.env.VIBE_WORKSPACE_ID,hasInlineCreds=!!vibeClientId&&!!vibeClientSecret&&!!vibeGlobalGatewayUrl&&!!vibeWorkspaceGatewayUrl&&!!vibeWorkspaceId;getDaemonProfile().logger.info("server","Starting VibeControls Agent...",{runtime:"bun",bunVersion:Bun.version,port,host,env:"production"});try{let cfgRaw=readAgentConfig(),persisted=cfgRaw["telemetry.enabled"]===!0||cfgRaw["telemetry.enabled"]==="true";telemetryService.init({persisted});let startedAt=Date.now();telemetryService.emit("agent.started",{version:process.env.npm_package_version??"unknown",profile:_resolvedProfile,platform:process.platform}),process.__vibe_started_at=startedAt}catch{}let maxBootAttempts=Math.max(1,Number.parseInt(process.env.VIBECONTROLS_AGENT_BOOT_RETRIES??"10",10)||10),isFatalBootError=(err)=>{let msg=String(err?.message??err).toLowerCase();return msg.includes("syntax")||msg.includes("cannot find module")||msg.includes("module not found")||msg.includes("typeerror")||msg.includes("config schema")||msg.includes("invalid config")||msg.includes("corrupt")||msg.includes("eaccess")||msg.includes("eperm")},bootstrap=null,attempt=0;while(!bootstrap){attempt++;try{bootstrap=await createApp({port,host,dbPath,apiKey,logLevel,corsOrigin}),await bootstrap.start();try{let fs=await import("fs"),runtimePath=`${getVibecontrolsDir()}/runtime.json`;fs.writeFileSync(runtimePath,JSON.stringify({pid:process.pid,port,host,profile:_resolvedProfile,startedAt:new Date().toISOString(),version:getAgentVersion()},null,2));let cleanup=()=>{try{if(fs.existsSync(runtimePath))fs.unlinkSync(runtimePath)}catch{}};process.once("SIGTERM",cleanup),process.once("SIGINT",cleanup),process.once("exit",cleanup)}catch(err){getDaemonProfile().logger.warn("server","Could not write runtime.json",{error:String(err)})}}catch(err){let fatal=isFatalBootError(err);if(getDaemonProfile().logger.error("server","Failed to start agent server",{attempt,maxBootAttempts,fatal,error:String(err)}),fatal||attempt>=maxBootAttempts)console.error(`\u274C Failed to start VibeControls Agent (attempt ${attempt}/${maxBootAttempts}, fatal=${fatal}):`,err),process.exit(1);let delayMs=Math.min(30000,1000*2**Math.min(5,attempt-1)),jitter=Math.floor(Math.random()*500),wait=delayMs+jitter;console.warn(`\u26A0\uFE0F Agent boot attempt ${attempt}/${maxBootAttempts} failed (transient), retrying in ${Math.round(wait/1000)}s...`),await new Promise((r)=>setTimeout(r,wait)),bootstrap=null}}let tunnelProvider=bootstrap.getServiceRegistry().getProvider("tunnel"),tunnelUrl=null;if(tunnelProvider?.getActiveTunnelUrl)for(let i=0;i<30;i++){if(tunnelUrl=await tunnelProvider.getActiveTunnelUrl(),tunnelUrl)break;await new Promise((r)=>setTimeout(r,1000))}if(!tunnelUrl){let{sanitizeEnvSuffix}=await import("./tunnel-bootstrap-x82wcnt8.js"),{getVibecontrolsProfile:getVibecontrolsProfile2}=await import("./path-utils-y2ba2951.js"),profileSuffix=sanitizeEnvSuffix(getVibecontrolsProfile2());tunnelUrl=process.env[`AGENT_TUNNEL_URL_${profileSuffix}`]??process.env.AGENT_TUNNEL_URL??null}let cfg=readAgentConfig(),resolvedApiKey=apiKey||getAgentApiKey()||cfg["static-api-key"]||"",bootState=getDaemonProfile().getBootState(),pairingToken=bootState==="ready"?null:mintPairingToken();if(bootState==="ready")invalidatePairingToken();printBanner({port,host,tunnelUrl,apiKey:resolvedApiKey,revealApiKey:isFirstBoot||process.env.AGENT_PRINT_API_KEY==="1",state:bootState,pairingToken});let{existsSync:existsSync2,unlinkSync:unlinkSync2}=await import("fs"),{tmpdir}=await import("os"),{join:joinPath}=await import("path"),shutdown=async(signal)=>{getDaemonProfile().logger.info("server",`Received ${signal}, shutting down...`);try{let startedAt=process.__vibe_started_at??Date.now();telemetryService.emit("agent.stopped",{uptime_s:Math.round((Date.now()-startedAt)/1000),reason:signal}),await telemetryService.flush(),telemetryService.stop()}catch{}let lifecycle=bootstrap.getLifecycle();if(signal==="SIGTERM"){let flagPath=joinPath(tmpdir(),`.boff-vibecontrols-kill-${process.pid}`);if(existsSync2(flagPath)){try{unlinkSync2(flagPath)}catch{}if(getDaemonProfile().logger.info("server","Kill-intent flag detected \u2014 full shutdown"),lifecycle)await lifecycle.kill();else await bootstrap.stop({reason:"shutdown"}),process.exit(0)}else if(getDaemonProfile().logger.info("server","No kill flag \u2014 treating as hot-reload (soft stop)"),lifecycle)await lifecycle.softStop();else await bootstrap.stop({reason:"reload"})}else if(lifecycle)await lifecycle.kill();else await bootstrap.stop({reason:"shutdown"}),process.exit(0)};if(process.on("SIGINT",()=>shutdown("SIGINT")),process.on("SIGTERM",()=>shutdown("SIGTERM")),hasInlineCreds){let timeoutMs=(()=>{let raw=process.env.VIBECONTROLS_FINALIZE_TIMEOUT_MS,n=raw?Number.parseInt(raw,10):NaN;return Number.isFinite(n)&&n>0?n:300000})();getDaemonProfile().logger.info("server",`VIBE_* env vars detected \u2014 running inline finalize (timeout ${Math.round(timeoutMs/1000)}s)`),(async()=>{let inlineCreds={clientId:vibeClientId,clientSecret:vibeClientSecret,workspaceId:vibeWorkspaceId,globalGatewayUrl:vibeGlobalGatewayUrl,workspaceGatewayUrl:vibeWorkspaceGatewayUrl};try{let result=await Promise.race([bootstrap.finalize(inlineCreds),new Promise((resolve)=>setTimeout(()=>resolve({ok:!1,error:`inline finalize timed out after ${Math.round(timeoutMs/1000)}s`}),timeoutMs))]);if(!result.ok){getDaemonProfile().logger.warn("server","Inline finalize failed \u2014 agent stays awaiting-config. Background retry worker will keep trying.",{error:result.error});let{startFinalizeRetryWorker}=await import("./finalize-retry-worker-3q4xc65x.js"),{setFinalizeRetryHandle}=await import("./finalize-retry-handle-registry-vbq5qhj1.js"),handle=startFinalizeRetryWorker({trigger:()=>bootstrap.finalize(inlineCreds)});setFinalizeRetryHandle(handle)}}catch(err){getDaemonProfile().logger.error("server","Inline finalize threw",{error:String(err)})}})()}else getDaemonProfile().logger.info("server","Agent is awaiting gateway credentials. Add it on the VibeControls platform using the tunnel URL and API key shown above.")}function printBanner(opts){let pad=(s)=>("\u2551 "+s).padEnd(65)+"\u2551",line="\u2560"+"\u2550".repeat(64)+"\u2563",top="\u2554"+"\u2550".repeat(64)+"\u2557",bot="\u255A"+"\u2550".repeat(64)+"\u255D",displayKey=opts.revealApiKey?opts.apiKey:opts.apiKey?`${opts.apiKey.substring(0,8)}****${opts.apiKey.substring(opts.apiKey.length-4)}`:"(none)";if(console.log(""),console.log(top),console.log(pad("VibeControls Agent")),console.log(line),console.log(pad(`State: ${opts.state}`)),console.log(pad(`Agent URL: http://${opts.host}:${opts.port}`)),console.log(pad(`API Key: ${displayKey}`)),console.log(pad(`Tunnel URL: ${opts.tunnelUrl??"(none)"}`)),opts.pairingToken)console.log(pad(`Pairing: ${opts.pairingToken}`)),console.log(pad(" (send as x-pairing-token on bootstrap)"));if(console.log(line),console.log(pad(`Health: http://localhost:${opts.port}/health`)),console.log(pad(`Status: http://localhost:${opts.port}/api/agent/status`)),console.log(bot),!opts.revealApiKey)console.log(" (Set AGENT_PRINT_API_KEY=1 to print the API key in full.)");console.log("")}main();
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{CORE_PLUGIN_NAMES,DEFAULT_PLUGINS,PluginManager,TRUSTED_PACKAGES,getPluginPackageRoot,validatePluginPackageName}from"./index-1x89a7r1.js";import"./index-7pdmqbj8.js";import"./index-bysm7taq.js";import"./index-zs58d1hc.js";import"./index-e9rt4m94.js";export{validatePluginPackageName,getPluginPackageRoot,TRUSTED_PACKAGES,PluginManager,DEFAULT_PLUGINS,CORE_PLUGIN_NAMES};
2
+ import{CORE_PLUGIN_NAMES,DEFAULT_PLUGINS,PluginManager,TRUSTED_PACKAGES,getPluginPackageRoot,validatePluginPackageName}from"./index-cyhcvfxs.js";import"./index-7pdmqbj8.js";import"./index-bysm7taq.js";import"./index-zs58d1hc.js";import"./index-e9rt4m94.js";export{validatePluginPackageName,getPluginPackageRoot,TRUSTED_PACKAGES,PluginManager,DEFAULT_PLUGINS,CORE_PLUGIN_NAMES};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{attachSecondaryProfile}from"./index-q96eskyn.js";import"./index-ttafzcs7.js";import"./index-1x89a7r1.js";import"./index-srbb2214.js";import"./index-brtw3j8x.js";import"./index-b4wy3jrt.js";import"./index-d3mz9vws.js";import"./index-rnk0kny8.js";import"./index-2pqv0bya.js";import"./index-7pdmqbj8.js";import"./index-bysm7taq.js";import"./index-zs58d1hc.js";import"./index-e9rt4m94.js";export{attachSecondaryProfile};
2
+ import{attachSecondaryProfile}from"./index-mq3amjcf.js";import"./index-wk359257.js";import"./index-cyhcvfxs.js";import"./index-srbb2214.js";import"./index-brtw3j8x.js";import"./index-b4wy3jrt.js";import"./index-d3mz9vws.js";import"./index-rnk0kny8.js";import"./index-2pqv0bya.js";import"./index-7pdmqbj8.js";import"./index-bysm7taq.js";import"./index-zs58d1hc.js";import"./index-e9rt4m94.js";export{attachSecondaryProfile};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibecontrols/agent",
3
- "version": "2026.531.13",
3
+ "version": "2026.531.15",
4
4
  "main": "./dist/index.js",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{createApp}from"./index-h2n00ae3.js";import"./index-926vt87h.js";import"./index-q96eskyn.js";import"./index-skmkfyzb.js";import"./index-95nmejfd.js";import"./index-vfwervz9.js";import"./index-y5q0m3cx.js";import"./index-ttafzcs7.js";import"./index-1x89a7r1.js";import"./index-srbb2214.js";import"./index-sfjbh6fa.js";import"./index-3jez1q8j.js";import"./index-brtw3j8x.js";import"./index-b4wy3jrt.js";import"./index-d3mz9vws.js";import"./index-rnk0kny8.js";import"./index-2pqv0bya.js";import"./index-7pdmqbj8.js";import"./index-bysm7taq.js";import"./index-zs58d1hc.js";import"./index-e9rt4m94.js";export{createApp};
@@ -1,3 +0,0 @@
1
- // @bun
2
- var LOOPBACK_HOSTS=new Set(["localhost","127.0.0.1","0.0.0.0","::1","[::1]"]);function normalizedHost(hostname){return hostname.toLowerCase().replace(/^\[|\]$/g,"")}function isLikelyLocalRequest(request,server){let headers=request.headers;if(headers.has("cf-connecting-ip")||headers.has("x-forwarded-for")||headers.has("x-real-ip")||headers.has("forwarded"))return!1;let peerAddress=server?.requestIP(request)?.address;if(!peerAddress)return!1;return LOOPBACK_HOSTS.has(normalizedHost(peerAddress))}function denyNonLocalMutation(request,envOverride,server){if(isLikelyLocalRequest(request,server))return null;if(process.env[envOverride]==="1")return null;return`This operation is local-only by default. Set ${envOverride}=1 to allow it over a tunnel.`}
3
- export{isLikelyLocalRequest,denyNonLocalMutation};