@zibby/core 0.5.45 → 0.5.47
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/index.js +81 -81
- package/dist/package.json +1 -1
- package/dist/register-built-in-strategies.js +27 -27
- package/dist/strategies/agent-env.js +1 -1
- package/dist/strategies/claude-strategy.js +5 -5
- package/dist/strategies/codex-strategy.js +2 -2
- package/dist/strategies/gemini-strategy.js +1 -1
- package/dist/strategies/index.js +45 -45
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import{AgentStrategy as Ce,getSkill as _e,NO_INTEGRATION_TOGGLEABLE_SKILL_IDS as ke}from"@zibby/agent-workflow";import{query as Ne}from"@anthropic-ai/claude-agent-sdk";import Se from"node:process";var se=Object.freeze(["PROJECT_API_TOKEN","ZIBBY_USER_TOKEN","GITHUB_TOKEN","GITLAB_TOKEN","GITLAB_OAUTH_TOKEN","ATLASSIAN_ACCESS_TOKEN","JIRA_API_TOKEN","JIRA_EMAIL","SENTRY_AUTH_TOKEN","SLACK_BOT_TOKEN","DISCORD_BOT_TOKEN","ZIBBY_CHAT_SLACK_TOKEN","ZIBBY_CHAT_LARK_APP_SECRET","ZIBBY_CHAT_DISCORD_INTERACTION_TOKEN","LINEAR_API_KEY","LINEAR_OAUTH_TOKEN","PLANE_API_KEY","PLANE_OAUTH_TOKEN","ZIBBY_INJECTED_GOOGLE_TOKEN","ZIBBY_INJECTED_LINKEDIN_TOKEN","ZIBBY_MEMORY_AWS_ACCESS_KEY_ID","ZIBBY_MEMORY_AWS_SECRET_ACCESS_KEY","ZIBBY_MEMORY_AWS_SESSION_TOKEN"]);function le(t=Se.env){let e={},n=new Set(se);for(let[o,r]of Object.entries(t))n.has(o)||r!==void 0&&(e[o]=r);return e}function ce(t){return!!t&&(t.transport==="http"||typeof t.url=="string"&&!t.command)}function H(t,e,{processEnv:n}={}){if(!e)return null;if(ce(e)){let r=String(e.url||"").trim();if(!r)return null;let a=e.headers&&typeof e.headers=="object"?e.headers:void 0;switch(t){case"claude":return{type:"http",url:r,...a&&{headers:a}};case"codex":return{url:r,...a&&{http_headers:a}};case"gemini":return{url:r,type:"http",...a&&{headers:a}};case"cursor":return{url:r,...a&&{headers:a}};default:return{type:"http",url:r,...a&&{headers:a}}}}let o={command:e.command};return e.args?.length&&(o.args=e.args),e.cwd&&(o.cwd=e.cwd),n?o.env={...n,...e.env||{}}:e.env&&Object.keys(e.env).length&&(o.env=e.env),o}function ue(t){return ce(t)?`http \u2192 ${String(t.url||"").replace(/\?.*$/,"")}`:`${t?.command||"?"} ${(t?.args||[]).join(" ")}`.trim()}import{z as de}from"zod";import{zodToJsonSchema as Ie}from"zod-to-json-schema";function ve(t){if(!t||typeof t!="object")return t;if(Array.isArray(t.type))return t.type.includes("null")||(t.type=[...t.type,"null"]),t;if(typeof t.type=="string")return t.type=[t.type,"null"],t;for(let e of["anyOf","oneOf"])if(Array.isArray(t[e]))return t[e].some(n=>n&&n.type==="null")||(t[e]=[...t[e],{type:"null"}]),t;return{anyOf:[t,{type:"null"}]}}function C(t){if(!t||typeof t!="object")return t;for(let e of["$defs","definitions"])if(t[e]&&typeof t[e]=="object")for(let n of Object.keys(t[e]))t[e][n]=C(t[e][n]);for(let e of["anyOf","oneOf","allOf"])Array.isArray(t[e])&&(t[e]=t[e].map(C));if(t.properties&&typeof t.properties=="object"){t.additionalProperties=!1;let e=Object.keys(t.properties),n=new Set(Array.isArray(t.required)?t.required:[]);for(let o of e){let r=C(t.properties[o]);n.has(o)||(r=ve(r)),t.properties[o]=r}t.required=e}return t.items&&(Array.isArray(t.items)?t.items=t.items.map(C):t.items=C(t.items)),t}function fe(t,e={target:"openApi3"}){if(!t)return null;let n=e?.target==="openAi",o=null;if(typeof de?.toJSONSchema=="function")try{o=de.toJSONSchema(t)}catch{}if(!o)try{o=Ie(t,e)}catch{return null}if(n&&o)try{return C(o)}catch{return o}return o}import{writeFileSync as W,mkdirSync as Z,existsSync as k,readFileSync as Ee}from"fs";import{homedir as he}from"os";import{join as O}from"path";import w from"chalk";var A={debug:0,info:1,warn:2,error:3,silent:4},F=class{constructor(){this._level=this._getLogLevel()}_getLogLevel(){if(process.env.ZIBBY_DEBUG==="true")return A.debug;if(process.env.ZIBBY_VERBOSE==="true")return A.info;let e=process.env.LOG_LEVEL?.toLowerCase();return e&&e in A?A[e]:A.info}_shouldLog(e){return A[e]>=this._level}_formatMessage(e,n,o={}){let r=new Date().toISOString(),u=`${this._getPrefix(e)} ${n}`;return Object.keys(o).length>0&&(u+=w.dim(` ${JSON.stringify(o)}`)),u}_getPrefix(e){return{debug:w.gray("[DEBUG]"),info:w.cyan("[INFO]"),warn:w.yellow("[WARN]"),error:w.red("\u274C [ERROR]")}[e]||""}debug(e,n){this._shouldLog("debug")&&console.log(this._formatMessage("debug",e,n))}info(e,n){this._shouldLog("info")&&console.log(this._formatMessage("info",e,n))}warn(e,n){this._shouldLog("warn")&&console.warn(this._formatMessage("warn",e,n))}error(e,n){this._shouldLog("error")&&console.error(this._formatMessage("error",e,n))}setLevel(e){e in A&&(this._level=A[e])}getLevel(){return Object.keys(A).find(e=>A[e]===this._level)}},l=new F;import{timeline as V,Timeline as Fe,WORKFLOW_GRAPH_LOG_MARKER_PREFIX as Ve}from"@zibby/agent-workflow";var pe=[{alias:"auto",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",isDefault:!0},{alias:"opus-4.8",canonicalId:"claude-opus-4-8",vendor:"claude",label:"Claude \xB7 Opus 4.8",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-8",canonicalId:"claude-opus-4-8",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.8"},{alias:"opus-5",canonicalId:"claude-opus-5",vendor:"claude",label:"Claude \xB7 Opus 5",family:"claude-opus-5",pickerVisible:!0},{alias:"claude-opus-5",canonicalId:"claude-opus-5",vendor:"claude",family:"claude-opus-5",aliasOf:"opus-5"},{alias:"sonnet-5",canonicalId:"claude-sonnet-5",vendor:"claude",label:"Claude \xB7 Sonnet 5",family:"claude-sonnet-5",pickerVisible:!0},{alias:"claude-sonnet-5",canonicalId:"claude-sonnet-5",vendor:"claude",family:"claude-sonnet-5",aliasOf:"sonnet-5"},{alias:"fable-5",canonicalId:"claude-fable-5",vendor:"claude",label:"Claude \xB7 Fable 5",family:"claude-fable-5",pickerVisible:!0},{alias:"claude-fable-5",canonicalId:"claude-fable-5",vendor:"claude",family:"claude-fable-5",aliasOf:"fable-5"},{alias:"sonnet-4.8",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4"},{alias:"sonnet-4-8",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.8"},{alias:"opus-4.7",canonicalId:"claude-opus-4-7",vendor:"claude",label:"Claude \xB7 Opus 4.7",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-7",canonicalId:"claude-opus-4-7",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.7"},{alias:"sonnet-4.7",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4"},{alias:"sonnet-4-7",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.7"},{alias:"sonnet-4.6",canonicalId:"claude-sonnet-4-6",vendor:"claude",label:"Claude \xB7 Sonnet 4.6",family:"claude-sonnet-4",pickerVisible:!0,aliasOf:"auto"},{alias:"sonnet-4-6",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"auto"},{alias:"opus-4.6",canonicalId:"claude-opus-4-6",vendor:"claude",label:"Claude \xB7 Opus 4.6",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-6",canonicalId:"claude-opus-4-6",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.6"},{alias:"sonnet-4.5",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",label:"Claude \xB7 Sonnet 4.5",family:"claude-sonnet-4",pickerVisible:!0},{alias:"sonnet-4-5",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.5"},{alias:"opus-4.5",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",label:"Claude \xB7 Opus 4.5",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-5",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"haiku-4.5",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",label:"Claude \xB7 Haiku 4.5",family:"claude-haiku-4"},{alias:"haiku-4-5",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",family:"claude-haiku-4",aliasOf:"haiku-4.5"},{alias:"claude-opus-4-8",canonicalId:"claude-opus-4-8",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.8"},{alias:"claude-sonnet-4-8",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.8"},{alias:"claude-opus-4-7",canonicalId:"claude-opus-4-7",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.7"},{alias:"claude-sonnet-4-7",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.7"},{alias:"claude-sonnet-4-6",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"auto"},{alias:"claude-opus-4-6",canonicalId:"claude-opus-4-6",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.6"},{alias:"claude-sonnet-4-5-20250929",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.5"},{alias:"claude-opus-4-5-20251101",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"claude-haiku-4-5-20251001",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",family:"claude-haiku-4",aliasOf:"haiku-4.5"},{alias:"claude-opus-4-20250514",canonicalId:"claude-opus-4-20250514",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"auto",canonicalId:"gpt-5.6-luna",vendor:"codex",family:"gpt-5",isDefault:!0},{alias:"o4-mini",canonicalId:"o4-mini",vendor:"codex",label:"Codex \xB7 o4-mini",family:"o4-mini",pickerVisible:!0},{alias:"o3",canonicalId:"o3",vendor:"codex",family:"o3"},{alias:"o3-mini",canonicalId:"o3-mini",vendor:"codex",family:"o3-mini"},{alias:"codex-mini",canonicalId:"codex-mini-latest",vendor:"codex",family:"codex-mini"},{alias:"gpt-4o",canonicalId:"gpt-4o",vendor:"codex",label:"Codex \xB7 GPT-4o",family:"gpt-4o",pickerVisible:!0},{alias:"gpt-4o-mini",canonicalId:"gpt-4o-mini",vendor:"codex",label:"Codex \xB7 GPT-4o mini",family:"gpt-4o-mini",pickerVisible:!0},{alias:"gpt-5.2-codex",canonicalId:"gpt-5.2-codex",vendor:"codex",label:"Codex \xB7 GPT-5.2",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.2",canonicalId:"gpt-5.2",vendor:"codex",label:"Codex \xB7 GPT-5.2 base",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.3",canonicalId:"gpt-5.3",vendor:"codex",label:"Codex \xB7 GPT-5.3",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.3-codex",canonicalId:"gpt-5.3-codex",vendor:"codex",family:"gpt-5"},{alias:"gpt-5.4",canonicalId:"gpt-5.4",vendor:"codex",label:"Codex \xB7 GPT-5.4",family:"gpt-5"},{alias:"gpt-5.5",canonicalId:"gpt-5.5",vendor:"codex",label:"Codex \xB7 GPT-5.5",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.6-luna",canonicalId:"gpt-5.6-luna",vendor:"codex",label:"Codex \xB7 GPT-5.6 Luna",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.6-terra",canonicalId:"gpt-5.6-terra",vendor:"codex",label:"Codex \xB7 GPT-5.6 Terra",family:"gpt-5",pickerVisible:!0},{alias:"auto",canonicalId:"gemini-3-pro",vendor:"gemini",family:"gemini-3",isDefault:!0},{alias:"gemini-3-pro",canonicalId:"gemini-3-pro",vendor:"gemini",label:"Gemini \xB7 3 Pro",family:"gemini-3",pickerVisible:!0},{alias:"gemini-3-flash",canonicalId:"gemini-3-flash",vendor:"gemini",label:"Gemini \xB7 3 Flash",family:"gemini-3",pickerVisible:!0},{alias:"gemini-2.5-pro",canonicalId:"gemini-2.5-pro",vendor:"gemini",label:"Gemini \xB7 2.5 Pro",family:"gemini-2.5",pickerVisible:!0},{alias:"gemini-2.5-flash",canonicalId:"gemini-2.5-flash",vendor:"gemini",label:"Gemini \xB7 2.5 Flash",family:"gemini-2.5",pickerVisible:!0}];function R(t){let e={};for(let n of pe)n.vendor===t&&(e[n.alias]=n.canonicalId);return e}function me(t,e){let n=typeof e=="string"?e.trim():"";if(n&&n!=="auto")return n;if(n==="auto"&&pe.some(o=>o.vendor===t&&o.isDefault))return"auto";throw new Error(`[${t}] No model reached this LLM call: the node passed none, no config sets one, and the run carries none (MODEL env unset). Refusing to silently substitute a vendor default \u2014 pick a model on the agent (deploy modal / MODEL cell) or pass options.model explicitly.`)}var Y=R("claude"),Ze=R("codex"),qe=R("gemini"),ze={CURSOR_AGENT_DEFAULT:1200*1e3,OPENAI_REQUEST:18e4};function M(t){let e=`${t}_POOL`,n=process.env[e];if(!n||typeof n!="string")return{picked:null,count:0,dispose:()=>{}};let o=n.split(/[,\n]+/).map(u=>u.trim()).filter(Boolean);if(o.length===0)return{picked:null,count:0,dispose:()=>{}};let r=o[Math.floor(Math.random()*o.length)],a=process.env[t];return process.env[t]=r,l.debug(`[auth-pool] ${t}: picked 1 of ${o.length} from pool (***${r.slice(-4)})`),{picked:r,count:o.length,dispose(){a===void 0?delete process.env[t]:process.env[t]=a}}}function ge(t){if(!t||typeof t!="object")return null;let e=(...r)=>{for(let a of r){if(a==null||a==="")continue;let u=Number(a);if(Number.isFinite(u))return u}return null},n=e(t.input_tokens,t.inputTokens,t.prompt_tokens,t.promptTokens),o=e(t.output_tokens,t.outputTokens,t.completion_tokens,t.completionTokens);return n==null&&o==null?null:{input:n||0,output:o||0}}import{createRequire as Le}from"module";import f from"process";var Oe=Le(import.meta.url);function xe(){try{if(f.env.CLAUDE_CODE_EXECUTABLE&&k(f.env.CLAUDE_CODE_EXECUTABLE))return f.env.CLAUDE_CODE_EXECUTABLE;let t=f.platform,e=f.arch,n=`@anthropic-ai/claude-agent-sdk-${t}-${e}`,o=t==="win32"?"claude.exe":"claude";try{let r=Oe.resolve(`${n}/package.json`),a=O(r,"..",o);if(k(a))return a}catch{}try{let r=Oe.resolve("@anthropic-ai/claude-agent-sdk/package.json"),a=O(r,"..");for(let y of[o,O("vendor",o),O("bin",o)]){let T=O(a,y);if(k(T))return T}let u=O(a,"..",`claude-agent-sdk-${t}-${e}`,o);if(k(u))return u}catch{}}catch{}return null}var K=xe();K&&l.debug(`Claude native CLI resolved to baked binary: ${K}`);var ye=class extends Ce{constructor(){super("claude","Claude (Anthropic API)",50)}canHandle(e){let n=!!f.env.ANTHROPIC_API_KEY||!!f.env.ANTHROPIC_API_KEY_POOL,o=!!f.env.CLAUDE_CODE_OAUTH_TOKEN||!!f.env.CLAUDE_CODE_OAUTH_TOKEN_POOL,r=!!f.env.ANTHROPIC_AUTH_TOKEN||!!f.env.ANTHROPIC_AUTH_TOKEN_POOL,a=n||o||r;return a||l.debug("ClaudeAgentStrategy: no credentials. Set one of ANTHROPIC_API_KEY / CLAUDE_CODE_OAUTH_TOKEN / ANTHROPIC_AUTH_TOKEN (or a *_POOL variant for multi-token rotation)."),a}async invoke(e,n={}){let{model:o,workspace:r=f.cwd(),schema:a=null,images:u=[],skills:y=null,sessionPath:T=null,nodeName:S=null,timeout:m,config:g={},activityLog:E=!1,signal:N=null,sessionId:q,resume:z,forkSession:Ae,sessionStore:X}=n,I=me("claude",o),L=Y[I]||I;Y[I]&&I!==L&&l.debug(`Mapped model: ${I} \u2192 ${L}`);let Te=[M("ANTHROPIC_API_KEY"),M("CLAUDE_CODE_OAUTH_TOKEN"),M("ANTHROPIC_AUTH_TOKEN")];try{l.debug(`Invoking Claude Agent SDK with model: ${L}, skills: ${JSON.stringify(y)}`);let U=(s,_)=>{let v=String(s??"");return v.length>_?`${v.slice(0,_)}\u2026`:v},Q=(s,_)=>{try{console.log(JSON.stringify({mode:s,..._}))}catch{}},x=f.env.CLAUDE_CODE_OAUTH_TOKEN,ee=f.env.ANTHROPIC_API_KEY,te=f.env.ANTHROPIC_AUTH_TOKEN;f.env.CLAUDE_CODE_CREDENTIALS_JSON?$e(f.env.CLAUDE_CODE_CREDENTIALS_JSON):x&&we(x,f.env.__ZIBBY_CLAUDE_PLAN);let B=f.env.__ZIBBY_CLAUDE_PLAN,ne=B?B.charAt(0).toUpperCase()+B.slice(1):null,D;if(x?D=ne?`Claude ${ne} plan \xB7 ***${x.slice(-4)}`:`Subscription \xB7 ***${x.slice(-4)}`:ee?D=`API key \xB7 ***${ee.slice(-4)}`:te?D=`Bearer \xB7 ***${te.slice(-4)}`:D="NONE \u2014 request will fail",!E){let s=(await import("chalk")).default;console.log(""),console.log(` ${s.cyan("\u25C6")} ${s.bold(L)}`),console.log(` ${s.dim("Auth: ")}${D}`),console.log(` ${s.dim("Workdir: ")}${r}`),console.log(""),console.log(s.bold("Prompt sent to LLM:")),console.log(s.dim("\u2500".repeat(60))),console.log(s.dim(e)),console.log(s.dim("\u2500".repeat(60)))}let{allowedTools:G,mcpServers:b}=this._resolveSkills(y,{sessionPath:T,workspace:r,nodeName:S});for(let s of n.extraMcpServers||[])if(s&&s.serverName&&s.def){if(Object.prototype.hasOwnProperty.call(b,s.serverName)){console.warn(`[custom-mcp] skip "${s.serverName}" \u2014 a built-in skill already owns that MCP name (no shadowing)`);continue}let _=H("claude",s.def);_&&(b[s.serverName]=_,G.push(`mcp__${s.serverName}__*`))}try{let s={cwd:r,allowedTools:G,...Array.isArray(n.disallowedTools)&&n.disallowedTools.length?{disallowedTools:n.disallowedTools}:{},settings:{permissions:{allow:["Bash(*)","Read(*)","Write(*)","Edit(*)","MultiEdit(*)","NotebookEdit(*)","Grep(*)","Glob(*)","WebFetch(*)","WebSearch(*)","Task(*)","TodoWrite(*)","Skill(*)"]}},model:L,env:le(f.env),...K&&{pathToClaudeCodeExecutable:K},...Object.keys(b).length>0&&{mcpServers:b},...q&&{sessionId:q},...z&&{resume:z},...Ae&&{forkSession:!0},...X&&{sessionStore:X}};if(a){let h=typeof a.parse=="function"?fe(a):a;s.outputFormat={type:"json_schema",schema:h},l.debug("Structured output enforced via SDK outputFormat")}l.debug(`Agent SDK options: ${JSON.stringify({cwd:s.cwd,toolCount:G.length,permissionMode:s.permissionMode,model:s.model,hasOutputFormat:!!s.outputFormat})}`);let _="",v=0,oe=[];l.debug("Starting Claude Agent SDK query stream");let ae=e,J=Array.isArray(u)?u.filter(i=>i&&typeof i.path=="string"&&i.path.startsWith("/")):[];if(J.length){let i=J.map((h,d)=>` ${d+1}. ${h.path}${h.name?` (${h.name})`:""}`).join(`
|
|
2
|
-
`);
|
|
1
|
+
import{AgentStrategy as Ne,getSkill as Oe,NO_INTEGRATION_TOGGLEABLE_SKILL_IDS as Le}from"@zibby/agent-workflow";import{query as xe}from"@anthropic-ai/claude-agent-sdk";import ve from"node:process";var ce=Object.freeze(["PROJECT_API_TOKEN","ZIBBY_USER_TOKEN","GITHUB_TOKEN","GITLAB_TOKEN","GITLAB_OAUTH_TOKEN","GITLAB_INSTANCES","ATLASSIAN_ACCESS_TOKEN","JIRA_API_TOKEN","JIRA_EMAIL","SENTRY_AUTH_TOKEN","SLACK_BOT_TOKEN","DISCORD_BOT_TOKEN","ZIBBY_CHAT_SLACK_TOKEN","ZIBBY_CHAT_LARK_APP_SECRET","ZIBBY_CHAT_DISCORD_INTERACTION_TOKEN","LINEAR_API_KEY","LINEAR_OAUTH_TOKEN","PLANE_API_KEY","PLANE_OAUTH_TOKEN","ZIBBY_INJECTED_GOOGLE_TOKEN","ZIBBY_INJECTED_LINKEDIN_TOKEN","ZIBBY_MEMORY_AWS_ACCESS_KEY_ID","ZIBBY_MEMORY_AWS_SECRET_ACCESS_KEY","ZIBBY_MEMORY_AWS_SESSION_TOKEN"]);function ue(t=ve.env){let e={},o=new Set(ce);for(let[a,r]of Object.entries(t))o.has(a)||r!==void 0&&(e[a]=r);return e}function de(t){return!!t&&(t.transport==="http"||typeof t.url=="string"&&!t.command)}function V(t,e,{processEnv:o}={}){if(!e)return null;if(de(e)){let r=String(e.url||"").trim();if(!r)return null;let i=e.headers&&typeof e.headers=="object"?e.headers:void 0;switch(t){case"claude":return{type:"http",url:r,...i&&{headers:i}};case"codex":return{url:r,...i&&{http_headers:i}};case"gemini":return{url:r,type:"http",...i&&{headers:i}};case"cursor":return{url:r,...i&&{headers:i}};default:return{type:"http",url:r,...i&&{headers:i}}}}let a={command:e.command};return e.args?.length&&(a.args=e.args),e.cwd&&(a.cwd=e.cwd),o?a.env={...o,...e.env||{}}:e.env&&Object.keys(e.env).length&&(a.env=e.env),a}function pe(t){return de(t)?`http \u2192 ${String(t.url||"").replace(/\?.*$/,"")}`:`${t?.command||"?"} ${(t?.args||[]).join(" ")}`.trim()}import{z as fe}from"zod";import{zodToJsonSchema as Ce}from"zod-to-json-schema";function ke(t){if(!t||typeof t!="object")return t;if(Array.isArray(t.type))return t.type.includes("null")||(t.type=[...t.type,"null"]),t;if(typeof t.type=="string")return t.type=[t.type,"null"],t;for(let e of["anyOf","oneOf"])if(Array.isArray(t[e]))return t[e].some(o=>o&&o.type==="null")||(t[e]=[...t[e],{type:"null"}]),t;return{anyOf:[t,{type:"null"}]}}function k(t){if(!t||typeof t!="object")return t;for(let e of["$defs","definitions"])if(t[e]&&typeof t[e]=="object")for(let o of Object.keys(t[e]))t[e][o]=k(t[e][o]);for(let e of["anyOf","oneOf","allOf"])Array.isArray(t[e])&&(t[e]=t[e].map(k));if(t.properties&&typeof t.properties=="object"){t.additionalProperties=!1;let e=Object.keys(t.properties),o=new Set(Array.isArray(t.required)?t.required:[]);for(let a of e){let r=k(t.properties[a]);o.has(a)||(r=ke(r)),t.properties[a]=r}t.required=e}return t.items&&(Array.isArray(t.items)?t.items=t.items.map(k):t.items=k(t.items)),t}function me(t,e={target:"openApi3"}){if(!t)return null;let o=e?.target==="openAi",a=null;if(typeof fe?.toJSONSchema=="function")try{a=fe.toJSONSchema(t)}catch{}if(!a)try{a=Ce(t,e)}catch{return null}if(o&&a)try{return k(a)}catch{return a}return a}import{writeFileSync as q,mkdirSync as z,existsSync as N,readFileSync as Ae}from"fs";import{homedir as Te}from"os";import{join as y}from"path";import $ from"chalk";var A={debug:0,info:1,warn:2,error:3,silent:4},Y=class{constructor(){this._level=this._getLogLevel()}_getLogLevel(){if(process.env.ZIBBY_DEBUG==="true")return A.debug;if(process.env.ZIBBY_VERBOSE==="true")return A.info;let e=process.env.LOG_LEVEL?.toLowerCase();return e&&e in A?A[e]:A.info}_shouldLog(e){return A[e]>=this._level}_formatMessage(e,o,a={}){let r=new Date().toISOString(),d=`${this._getPrefix(e)} ${o}`;return Object.keys(a).length>0&&(d+=$.dim(` ${JSON.stringify(a)}`)),d}_getPrefix(e){return{debug:$.gray("[DEBUG]"),info:$.cyan("[INFO]"),warn:$.yellow("[WARN]"),error:$.red("\u274C [ERROR]")}[e]||""}debug(e,o){this._shouldLog("debug")&&console.log(this._formatMessage("debug",e,o))}info(e,o){this._shouldLog("info")&&console.log(this._formatMessage("info",e,o))}warn(e,o){this._shouldLog("warn")&&console.warn(this._formatMessage("warn",e,o))}error(e,o){this._shouldLog("error")&&console.error(this._formatMessage("error",e,o))}setLevel(e){e in A&&(this._level=A[e])}getLevel(){return Object.keys(A).find(e=>A[e]===this._level)}},s=new Y;import{timeline as W,Timeline as Ye,WORKFLOW_GRAPH_LOG_MARKER_PREFIX as We}from"@zibby/agent-workflow";var ge=[{alias:"auto",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",isDefault:!0},{alias:"opus-4.8",canonicalId:"claude-opus-4-8",vendor:"claude",label:"Claude \xB7 Opus 4.8",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-8",canonicalId:"claude-opus-4-8",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.8"},{alias:"opus-5",canonicalId:"claude-opus-5",vendor:"claude",label:"Claude \xB7 Opus 5",family:"claude-opus-5",pickerVisible:!0},{alias:"claude-opus-5",canonicalId:"claude-opus-5",vendor:"claude",family:"claude-opus-5",aliasOf:"opus-5"},{alias:"sonnet-5",canonicalId:"claude-sonnet-5",vendor:"claude",label:"Claude \xB7 Sonnet 5",family:"claude-sonnet-5",pickerVisible:!0},{alias:"claude-sonnet-5",canonicalId:"claude-sonnet-5",vendor:"claude",family:"claude-sonnet-5",aliasOf:"sonnet-5"},{alias:"fable-5",canonicalId:"claude-fable-5",vendor:"claude",label:"Claude \xB7 Fable 5",family:"claude-fable-5",pickerVisible:!0},{alias:"claude-fable-5",canonicalId:"claude-fable-5",vendor:"claude",family:"claude-fable-5",aliasOf:"fable-5"},{alias:"sonnet-4.8",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4"},{alias:"sonnet-4-8",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.8"},{alias:"opus-4.7",canonicalId:"claude-opus-4-7",vendor:"claude",label:"Claude \xB7 Opus 4.7",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-7",canonicalId:"claude-opus-4-7",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.7"},{alias:"sonnet-4.7",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4"},{alias:"sonnet-4-7",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.7"},{alias:"sonnet-4.6",canonicalId:"claude-sonnet-4-6",vendor:"claude",label:"Claude \xB7 Sonnet 4.6",family:"claude-sonnet-4",pickerVisible:!0,aliasOf:"auto"},{alias:"sonnet-4-6",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"auto"},{alias:"opus-4.6",canonicalId:"claude-opus-4-6",vendor:"claude",label:"Claude \xB7 Opus 4.6",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-6",canonicalId:"claude-opus-4-6",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.6"},{alias:"sonnet-4.5",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",label:"Claude \xB7 Sonnet 4.5",family:"claude-sonnet-4",pickerVisible:!0},{alias:"sonnet-4-5",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.5"},{alias:"opus-4.5",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",label:"Claude \xB7 Opus 4.5",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-5",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"haiku-4.5",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",label:"Claude \xB7 Haiku 4.5",family:"claude-haiku-4"},{alias:"haiku-4-5",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",family:"claude-haiku-4",aliasOf:"haiku-4.5"},{alias:"claude-opus-4-8",canonicalId:"claude-opus-4-8",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.8"},{alias:"claude-sonnet-4-8",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.8"},{alias:"claude-opus-4-7",canonicalId:"claude-opus-4-7",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.7"},{alias:"claude-sonnet-4-7",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.7"},{alias:"claude-sonnet-4-6",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"auto"},{alias:"claude-opus-4-6",canonicalId:"claude-opus-4-6",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.6"},{alias:"claude-sonnet-4-5-20250929",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.5"},{alias:"claude-opus-4-5-20251101",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"claude-haiku-4-5-20251001",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",family:"claude-haiku-4",aliasOf:"haiku-4.5"},{alias:"claude-opus-4-20250514",canonicalId:"claude-opus-4-20250514",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"auto",canonicalId:"gpt-5.6-luna",vendor:"codex",family:"gpt-5",isDefault:!0},{alias:"o4-mini",canonicalId:"o4-mini",vendor:"codex",label:"Codex \xB7 o4-mini",family:"o4-mini",pickerVisible:!0},{alias:"o3",canonicalId:"o3",vendor:"codex",family:"o3"},{alias:"o3-mini",canonicalId:"o3-mini",vendor:"codex",family:"o3-mini"},{alias:"codex-mini",canonicalId:"codex-mini-latest",vendor:"codex",family:"codex-mini"},{alias:"gpt-4o",canonicalId:"gpt-4o",vendor:"codex",label:"Codex \xB7 GPT-4o",family:"gpt-4o",pickerVisible:!0},{alias:"gpt-4o-mini",canonicalId:"gpt-4o-mini",vendor:"codex",label:"Codex \xB7 GPT-4o mini",family:"gpt-4o-mini",pickerVisible:!0},{alias:"gpt-5.2-codex",canonicalId:"gpt-5.2-codex",vendor:"codex",label:"Codex \xB7 GPT-5.2",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.2",canonicalId:"gpt-5.2",vendor:"codex",label:"Codex \xB7 GPT-5.2 base",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.3",canonicalId:"gpt-5.3",vendor:"codex",label:"Codex \xB7 GPT-5.3",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.3-codex",canonicalId:"gpt-5.3-codex",vendor:"codex",family:"gpt-5"},{alias:"gpt-5.4",canonicalId:"gpt-5.4",vendor:"codex",label:"Codex \xB7 GPT-5.4",family:"gpt-5"},{alias:"gpt-5.5",canonicalId:"gpt-5.5",vendor:"codex",label:"Codex \xB7 GPT-5.5",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.6-luna",canonicalId:"gpt-5.6-luna",vendor:"codex",label:"Codex \xB7 GPT-5.6 Luna",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.6-terra",canonicalId:"gpt-5.6-terra",vendor:"codex",label:"Codex \xB7 GPT-5.6 Terra",family:"gpt-5",pickerVisible:!0},{alias:"auto",canonicalId:"gemini-3-pro",vendor:"gemini",family:"gemini-3",isDefault:!0},{alias:"gemini-3-pro",canonicalId:"gemini-3-pro",vendor:"gemini",label:"Gemini \xB7 3 Pro",family:"gemini-3",pickerVisible:!0},{alias:"gemini-3-flash",canonicalId:"gemini-3-flash",vendor:"gemini",label:"Gemini \xB7 3 Flash",family:"gemini-3",pickerVisible:!0},{alias:"gemini-2.5-pro",canonicalId:"gemini-2.5-pro",vendor:"gemini",label:"Gemini \xB7 2.5 Pro",family:"gemini-2.5",pickerVisible:!0},{alias:"gemini-2.5-flash",canonicalId:"gemini-2.5-flash",vendor:"gemini",label:"Gemini \xB7 2.5 Flash",family:"gemini-2.5",pickerVisible:!0}];function M(t){let e={};for(let o of ge)o.vendor===t&&(e[o.alias]=o.canonicalId);return e}function _e(t,e){let o=typeof e=="string"?e.trim():"";if(o&&o!=="auto")return o;if(o==="auto"&&ge.some(a=>a.vendor===t&&a.isDefault))return"auto";throw new Error(`[${t}] No model reached this LLM call: the node passed none, no config sets one, and the run carries none (MODEL env unset). Refusing to silently substitute a vendor default \u2014 pick a model on the agent (deploy modal / MODEL cell) or pass options.model explicitly.`)}var Z=M("claude"),ze=M("codex"),Xe=M("gemini"),Qe={CURSOR_AGENT_DEFAULT:1200*1e3,OPENAI_REQUEST:18e4};function K(t){let e=`${t}_POOL`,o=process.env[e];if(!o||typeof o!="string")return{picked:null,count:0,dispose:()=>{}};let a=o.split(/[,\n]+/).map(d=>d.trim()).filter(Boolean);if(a.length===0)return{picked:null,count:0,dispose:()=>{}};let r=a[Math.floor(Math.random()*a.length)],i=process.env[t];return process.env[t]=r,s.debug(`[auth-pool] ${t}: picked 1 of ${a.length} from pool (***${r.slice(-4)})`),{picked:r,count:a.length,dispose(){i===void 0?delete process.env[t]:process.env[t]=i}}}function ye(t){if(!t||typeof t!="object")return null;let e=(...r)=>{for(let i of r){if(i==null||i==="")continue;let d=Number(i);if(Number.isFinite(d))return d}return null},o=e(t.input_tokens,t.inputTokens,t.prompt_tokens,t.promptTokens),a=e(t.output_tokens,t.outputTokens,t.completion_tokens,t.completionTokens);return o==null&&a==null?null:{input:o||0,output:a||0}}import{createRequire as De}from"module";import f from"process";var Ee=De(import.meta.url);function we(){try{if(f.env.CLAUDE_CODE_EXECUTABLE&&N(f.env.CLAUDE_CODE_EXECUTABLE))return f.env.CLAUDE_CODE_EXECUTABLE;let t=f.platform,e=f.arch,o=`@anthropic-ai/claude-agent-sdk-${t}-${e}`,a=t==="win32"?"claude.exe":"claude";try{let r=Ee.resolve(`${o}/package.json`),i=y(r,"..",a);if(N(i))return i}catch{}try{let r=Ee.resolve("@anthropic-ai/claude-agent-sdk/package.json"),i=y(r,"..");for(let O of[a,y("vendor",a),y("bin",a)]){let T=y(i,O);if(N(T))return T}let d=y(i,"..",`claude-agent-sdk-${t}-${e}`,a);if(N(d))return d}catch{}}catch{}return null}var U=we();U&&s.debug(`Claude native CLI resolved to baked binary: ${U}`);var he=class extends Ne{constructor(){super("claude","Claude (Anthropic API)",50)}canHandle(e){let o=!!f.env.ANTHROPIC_API_KEY||!!f.env.ANTHROPIC_API_KEY_POOL,a=!!f.env.CLAUDE_CODE_OAUTH_TOKEN||!!f.env.CLAUDE_CODE_OAUTH_TOKEN_POOL,r=!!f.env.ANTHROPIC_AUTH_TOKEN||!!f.env.ANTHROPIC_AUTH_TOKEN_POOL,i=o||a||r;return i||s.debug("ClaudeAgentStrategy: no credentials. Set one of ANTHROPIC_API_KEY / CLAUDE_CODE_OAUTH_TOKEN / ANTHROPIC_AUTH_TOKEN (or a *_POOL variant for multi-token rotation)."),i}async invoke(e,o={}){let{model:a,workspace:r=f.cwd(),schema:i=null,images:d=[],skills:O=null,sessionPath:T=null,nodeName:S=null,timeout:m,config:g={},activityLog:E=!1,signal:L=null,sessionId:X,resume:Q,forkSession:be,sessionStore:ee}=o,I=_e("claude",a),x=Z[I]||I;Z[I]&&I!==x&&s.debug(`Mapped model: ${I} \u2192 ${x}`);let Se=[K("ANTHROPIC_API_KEY"),K("CLAUDE_CODE_OAUTH_TOKEN"),K("ANTHROPIC_AUTH_TOKEN")];try{s.debug(`Invoking Claude Agent SDK with model: ${x}, skills: ${JSON.stringify(O)}`);let B=(l,_)=>{let v=String(l??"");return v.length>_?`${v.slice(0,_)}\u2026`:v},G=(l,_)=>{try{console.log(JSON.stringify({mode:l,..._}))}catch{}},D=f.env.CLAUDE_CODE_OAUTH_TOKEN,te=f.env.ANTHROPIC_API_KEY,ne=f.env.ANTHROPIC_AUTH_TOKEN;f.env.CLAUDE_CODE_CREDENTIALS_JSON?Pe(f.env.CLAUDE_CODE_CREDENTIALS_JSON):D&&Re(D,f.env.__ZIBBY_CLAUDE_PLAN);let J=f.env.__ZIBBY_CLAUDE_PLAN,oe=J?J.charAt(0).toUpperCase()+J.slice(1):null,w;if(D?w=oe?`Claude ${oe} plan \xB7 ***${D.slice(-4)}`:`Subscription \xB7 ***${D.slice(-4)}`:te?w=`API key \xB7 ***${te.slice(-4)}`:ne?w=`Bearer \xB7 ***${ne.slice(-4)}`:w="NONE \u2014 request will fail",!E){let l=(await import("chalk")).default;console.log(""),console.log(` ${l.cyan("\u25C6")} ${l.bold(x)}`),console.log(` ${l.dim("Auth: ")}${w}`),console.log(` ${l.dim("Workdir: ")}${r}`),console.log(""),console.log(l.bold("Prompt sent to LLM:")),console.log(l.dim("\u2500".repeat(60))),console.log(l.dim(e)),console.log(l.dim("\u2500".repeat(60)))}let{allowedTools:j,mcpServers:b}=this._resolveSkills(O,{sessionPath:T,workspace:r,nodeName:S});for(let l of o.extraMcpServers||[])if(l&&l.serverName&&l.def){if(Object.prototype.hasOwnProperty.call(b,l.serverName)){console.warn(`[custom-mcp] skip "${l.serverName}" \u2014 a built-in skill already owns that MCP name (no shadowing)`);continue}let _=V("claude",l.def);_&&(b[l.serverName]=_,j.push(`mcp__${l.serverName}__*`))}try{let l={cwd:r,allowedTools:j,...Array.isArray(o.disallowedTools)&&o.disallowedTools.length?{disallowedTools:o.disallowedTools}:{},settings:{permissions:{allow:["Bash(*)","Read(*)","Write(*)","Edit(*)","MultiEdit(*)","NotebookEdit(*)","Grep(*)","Glob(*)","WebFetch(*)","WebSearch(*)","Task(*)","TodoWrite(*)","Skill(*)"]}},model:x,env:ue(f.env),...U&&{pathToClaudeCodeExecutable:U},...Object.keys(b).length>0&&{mcpServers:b},...X&&{sessionId:X},...Q&&{resume:Q},...be&&{forkSession:!0},...ee&&{sessionStore:ee}};if(i){let h=typeof i.parse=="function"?me(i):i;l.outputFormat={type:"json_schema",schema:h},s.debug("Structured output enforced via SDK outputFormat")}s.debug(`Agent SDK options: ${JSON.stringify({cwd:l.cwd,toolCount:j.length,permissionMode:l.permissionMode,model:l.model,hasOutputFormat:!!l.outputFormat})}`);let _="",v=0,ae=[];s.debug("Starting Claude Agent SDK query stream");let ie=e,F=Array.isArray(d)?d.filter(n=>n&&typeof n.path=="string"&&n.path.startsWith("/")):[];if(F.length){let n=F.map((h,u)=>` ${u+1}. ${h.path}${h.name?` (${h.name})`:""}`).join(`
|
|
2
|
+
`);ie=`${e}
|
|
3
3
|
|
|
4
4
|
# Attached image files \u2014 VIEW THESE
|
|
5
|
-
The user attached ${
|
|
6
|
-
${
|
|
5
|
+
The user attached ${F.length} image(s), saved locally. Use the Read tool on each path to SEE the image, then use what it shows to answer:
|
|
6
|
+
${n}`}let re;try{re=xe({prompt:ie,options:l})}catch(n){throw s.error(`Failed to initialize Claude Agent SDK: ${n.message}`),n}let se=null,P=0,Ie=3;if(L?.aborted){let n=new Error("Aborted via signal");throw n.name="AbortError",n}try{for await(let n of re){if(L?.aborted){let u=new Error("Aborted via signal");throw u.name="AbortError",u}if(ae.push(n),n.type==="system"&&n.subtype==="init"){let u=n.mcp_servers||[];if(u.length>0){let c=u.map(p=>`${p.name}=${p.status}${p.error?` (${String(p.error).slice(0,120)})`:""}`).join(", ");s.info(`[mcp] SDK init \u2014 ${u.length} server(s): ${c}`);for(let p of u)p.status!=="connected"&&s.warn(`[mcp] server '${p.name}' did not connect: status=${p.status}`,{name:p.name,status:p.status,error:p.error})}else Object.keys(b||{}).length>0&&s.warn(`[mcp] SDK init returned no mcp_servers despite passing ${Object.keys(b).length} server(s) \u2014 SDK version may not expose this field, or config was dropped`);if(Array.isArray(n.tools)){let c=n.tools.filter(p=>p.startsWith("mcp__"));c.length>0?s.info(`[mcp] tools visible to model: ${c.join(", ")}`):Object.keys(b||{}).length>0&&s.warn("[mcp] no mcp__* tools in model's tool list \u2014 MCP servers configured but tools didn't reach the prompt")}}if(n.type==="system"&&n.subtype==="api_retry"){let u=Number(n.attempt)||0,c=Number(n.max_retries)||0,p=n.error_status!=null?String(n.error_status):"?",C=typeof n.error=="string"?n.error:"error",H=Number.isFinite(n.retry_delay_ms)?Math.round(n.retry_delay_ms):null,le=`upstream ${p} (${C}) \u2014 SDK retry ${u}/${c}`+(H!=null?` in ${H}ms`:"");E&&G("turn:retry",{status:p,kind:C,attempt:u,maxRetries:c,delayMs:H,detail:le}),s.warn(`[claude] transient ${le}`);continue}if(n.type==="error"||n.error){let u=n.error?.message||n.error||n.message||"Unknown API error";try{s.error("SDK error event raw payload",{fullMessage:JSON.stringify(n,null,2)})}catch{}throw new Error(typeof u=="string"?u:JSON.stringify(u))}let h=JSON.stringify(n.message?.content||n.text||"").slice(0,200);if(h===se){if(P++,P>=Ie){let u=(n.message?.content?.[0]?.text||n.text||"unknown").slice(0,100);throw new Error(`API stuck in loop (${P}x repeated): ${u}`)}}else se=h,P=1;if(n.type==="assistant"||n.constructor?.name==="AssistantMessage"){let u=n.message?.content||n.content||[];for(let c of u)if(c.type==="thinking"&&c.thinking)E?G("turn:thinking",{text:B(c.thinking,600)}):console.log(`${c.thinking.substring(0,200)}${c.thinking.length>200?"...":""}`);else if(c.type==="text"&&c.text)_+=c.text,E||(c.text.length<500?console.log(`${c.text}`):console.log(`${c.text.substring(0,200)}... (${c.text.length} chars)`));else if(c.type==="tool_use")if(v++,c.name.includes("memory")?W.stepMemory(`Tool: ${c.name}`):W.stepTool(`Tool: ${c.name}`),E)G("turn:tool",{name:c.name});else{let C=JSON.stringify(c.input).substring(0,100);console.log(` Input: ${C}${JSON.stringify(c.input).length>100?"...":""}`)}}else if(!(n.type==="user"&&n.tool_use_result)){if(n.type==="result"||n.constructor?.name==="ResultMessage"){let u=n.result||n.text||n.content||_;try{$e({message:n,sessionPath:T,nodeName:S,model:I,toolCallCount:v})}catch(p){s.debug(`usage.json write failed: ${p.message}`)}let c=ye(n?.usage||n?.message?.usage);if(i){if(n.structured_output){s.debug("Using SDK native structured_output");let C=typeof i.parse=="function"?i.parse(n.structured_output):n.structured_output;return{raw:u,structured:C,...c?{usage:c}:{}}}if(u){let p=this._extractJson(u,i);if(p)return{raw:u,structured:p,...c?{usage:c}:{}}}s.warn(`Could not extract structured output \u2014 returning raw text (${(u||"").length} chars)`)}return u||""}}}if(s.warn(`Agent SDK ended without result. Collected ${ae.length} messages`),_.length>0)return s.debug("Returning accumulated text from messages"),_;throw new Error("Claude Agent SDK query ended without result")}catch(n){let h={message:n?.message,name:n?.name,code:n?.code,cause:n?.cause?.message||n?.cause,stack:n?.stack?.split(`
|
|
7
7
|
`).slice(0,5).join(`
|
|
8
|
-
`),stringified:(()=>{try{return JSON.stringify(
|
|
8
|
+
`),stringified:(()=>{try{return JSON.stringify(n,Object.getOwnPropertyNames(Object(n)))}catch{return String(n)}})()};throw s.error(`Error during query stream: ${n?.message||n}`,h),n}}catch(l){throw s.error("Claude Agent SDK call failed",{message:l?.message,name:l?.name,code:l?.code,cause:l?.cause?.message||l?.cause}),l}}finally{for(let B of Se)B.dispose()}}_resolveSkills(e,o){let a=["Read","Write","Edit","Bash","Grep","Glob"];if(e===null)return s.debug("No skills \u2014 pure LLM mode"),{allowedTools:[],mcpServers:{}};if(!Array.isArray(e)||e.length===0)return s.debug("Default IDE skills for code generation"),{allowedTools:[...a],mcpServers:{}};let r=[...a],i={},d=f.env.WORKFLOW_ENABLED_INTEGRATIONS,O=typeof d=="string"&&d.trim()!==""?new Set(d.split(",").map(m=>m.trim()).filter(Boolean)):null,T=m=>{let g=Oe(m);return g?.meta?.toggleable===!0?!0:g?.meta?.toggleable===void 0&&Le.includes(m)},S=m=>O!==null&&O.size>0&&T(m)&&!O.has(m);for(let m of e){if(S(m)){s.debug(`Skill "${m}" disabled by enabledIntegrations allowlist \u2014 skipping`);continue}let g=Oe(m);if(!g){s.warn(`Unknown skill "${m}" \u2014 skipping`);continue}if(g.allowedTools&&r.push(...g.allowedTools),typeof g.resolve=="function"){let E=g.resolve(o),L=V("claude",E);L&&(i[g.serverName]=L,s.debug(`MCP: ${g.serverName} \u2192 ${pe(E)}`))}}return{allowedTools:r,mcpServers:i}}_extractJson(e,o){let a=[()=>{if(e.includes("===JSON_START===")){let r=e.indexOf("===JSON_START===")+16,i=e.indexOf("===JSON_END===");return e.substring(r,i).trim()}},()=>e.match(/```json\s*\n([\s\S]*?)\n```/)?.[1]?.trim(),()=>{if(!e.startsWith("{"))return e.match(/```\s*\n([\s\S]*?)\n```/)?.[1]?.trim()},()=>e.trim(),()=>{let r=e.indexOf("{"),i=e.lastIndexOf("}");if(r!==-1&&i>r)return e.substring(r,i+1)}];for(let r of a)try{let i=r();if(!i)continue;let d=JSON.parse(i);if(typeof d!="object"||d===null)continue;return typeof o.parse=="function"?o.parse(d):d}catch{}return null}};function $e({message:t,sessionPath:e,nodeName:o,model:a,toolCallCount:r}){if(!e||!o)return;let i=t?.usage||t?.message?.usage||{},d=R(i.input_tokens,i.inputTokens),O=R(i.output_tokens,i.outputTokens),T=R(i.cache_read_input_tokens,i.cacheReadInputTokens),S=R(i.cache_creation_input_tokens,i.cacheCreationInputTokens),m=R(t?.duration_ms,t?.durationMs),g={model:a||null,input_tokens:d,output_tokens:O,cache_read_tokens:T,cache_creation_tokens:S,tool_call_count:typeof r=="number"?r:null,duration_ms:m,captured_at:new Date().toISOString()},E=y(e,o);try{z(E,{recursive:!0})}catch{}q(y(E,"usage.json"),JSON.stringify(g,null,2),"utf-8")}function R(...t){for(let e of t){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"&&e.trim()!==""&&!isNaN(Number(e)))return Number(e)}return null}function Re(t,e){let o=y(Te(),".claude"),a=y(o,".credentials.json"),r={claudeAiOauth:{accessToken:t,refreshToken:"",expiresAt:Date.now()+365*24*60*60*1e3,scopes:["user:inference","user:profile"],...e?{subscriptionType:String(e).toLowerCase()}:{}}};try{if(N(a)&&JSON.parse(Ae(a,"utf-8"))?.claudeAiOauth?.accessToken===t)return;z(o,{recursive:!0}),q(a,JSON.stringify(r,null,2),"utf-8"),s.debug(`Wrote Claude Code OAuth credentials to ${a}`)}catch(i){s.warn(`Could not write ${a}: ${i.message} \u2014 Claude SDK may fail to authenticate.`)}}function Pe(t){let e=y(Te(),".claude"),o=y(e,".credentials.json"),a;try{a=JSON.parse(t)}catch(r){s.warn(`CLAUDE_CODE_CREDENTIALS_JSON not valid JSON: ${r.message}`);return}if(!a?.claudeAiOauth?.accessToken){s.warn("CLAUDE_CODE_CREDENTIALS_JSON missing claudeAiOauth.accessToken \u2014 skipping write.");return}try{if(N(o)){let r=JSON.parse(Ae(o,"utf-8"));if(r?.claudeAiOauth?.accessToken===a.claudeAiOauth.accessToken&&r?.claudeAiOauth?.expiresAt===a.claudeAiOauth.expiresAt)return}z(e,{recursive:!0}),q(o,JSON.stringify(a,null,2),"utf-8"),s.debug(`Wrote full Claude Code credentials blob to ${o}`)}catch(r){s.warn(`Could not write ${o}: ${r.message} \u2014 Claude SDK may fail to authenticate.`)}}export{ce as AGENT_ENV_SECRET_DENYLIST,he as ClaudeAgentStrategy,ue as sanitizeAgentEnv};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{AgentStrategy as pe,getSkill as fe}from"@zibby/agent-workflow";import le from"node:process";var se=Object.freeze(["PROJECT_API_TOKEN","ZIBBY_USER_TOKEN","GITHUB_TOKEN","GITLAB_TOKEN","GITLAB_OAUTH_TOKEN","ATLASSIAN_ACCESS_TOKEN","JIRA_API_TOKEN","JIRA_EMAIL","SENTRY_AUTH_TOKEN","SLACK_BOT_TOKEN","DISCORD_BOT_TOKEN","ZIBBY_CHAT_SLACK_TOKEN","ZIBBY_CHAT_LARK_APP_SECRET","ZIBBY_CHAT_DISCORD_INTERACTION_TOKEN","LINEAR_API_KEY","LINEAR_OAUTH_TOKEN","PLANE_API_KEY","PLANE_OAUTH_TOKEN","ZIBBY_INJECTED_GOOGLE_TOKEN","ZIBBY_INJECTED_LINKEDIN_TOKEN","ZIBBY_MEMORY_AWS_ACCESS_KEY_ID","ZIBBY_MEMORY_AWS_SECRET_ACCESS_KEY","ZIBBY_MEMORY_AWS_SESSION_TOKEN"]);function z(n=le.env){let e={},o=new Set(se);for(let[t,i]of Object.entries(n))o.has(t)||i!==void 0&&(e[t]=i);return e}function ce(n){return!!n&&(n.transport==="http"||typeof n.url=="string"&&!n.command)}function R(n,e,{processEnv:o}={}){if(!e)return null;if(ce(e)){let i=String(e.url||"").trim();if(!i)return null;let a=e.headers&&typeof e.headers=="object"?e.headers:void 0;switch(n){case"claude":return{type:"http",url:i,...a&&{headers:a}};case"codex":return{url:i,...a&&{http_headers:a}};case"gemini":return{url:i,type:"http",...a&&{headers:a}};case"cursor":return{url:i,...a&&{headers:a}};default:return{type:"http",url:i,...a&&{headers:a}}}}let t={command:e.command};return e.args?.length&&(t.args=e.args),e.cwd&&(t.cwd=e.cwd),o?t.env={...o,...e.env||{}}:e.env&&Object.keys(e.env).length&&(t.env=e.env),t}import{execSync as A}from"node:child_process";import{readFileSync as me,mkdirSync as j,cpSync as ge,existsSync as ye}from"node:fs";import{join as C}from"node:path";import{homedir as _e}from"node:os";import{z as Z}from"zod";import{zodToJsonSchema as ue}from"zod-to-json-schema";function de(n){if(!n||typeof n!="object")return n;if(Array.isArray(n.type))return n.type.includes("null")||(n.type=[...n.type,"null"]),n;if(typeof n.type=="string")return n.type=[n.type,"null"],n;for(let e of["anyOf","oneOf"])if(Array.isArray(n[e]))return n[e].some(o=>o&&o.type==="null")||(n[e]=[...n[e],{type:"null"}]),n;return{anyOf:[n,{type:"null"}]}}function h(n){if(!n||typeof n!="object")return n;for(let e of["$defs","definitions"])if(n[e]&&typeof n[e]=="object")for(let o of Object.keys(n[e]))n[e][o]=h(n[e][o]);for(let e of["anyOf","oneOf","allOf"])Array.isArray(n[e])&&(n[e]=n[e].map(h));if(n.properties&&typeof n.properties=="object"){n.additionalProperties=!1;let e=Object.keys(n.properties),o=new Set(Array.isArray(n.required)?n.required:[]);for(let t of e){let i=h(n.properties[t]);o.has(t)||(i=de(i)),n.properties[t]=i}n.required=e}return n.items&&(Array.isArray(n.items)?n.items=n.items.map(h):n.items=h(n.items)),n}function W(n,e={target:"openApi3"}){if(!n)return null;let o=e?.target==="openAi",t=null;if(typeof Z?.toJSONSchema=="function")try{t=Z.toJSONSchema(n)}catch{}if(!t)try{t=ue(n,e)}catch{return null}if(o&&t)try{return h(t)}catch{return t}return t}function q(n){if(!n||typeof n!="object")return null;let e=(...i)=>{for(let a of i){if(a==null||a==="")continue;let s=Number(a);if(Number.isFinite(s))return s}return null},o=e(n.input_tokens,n.inputTokens,n.prompt_tokens,n.promptTokens),t=e(n.output_tokens,n.outputTokens,n.completion_tokens,n.completionTokens);return o==null&&t==null?null:{input:o||0,output:t||0}}import b from"chalk";var m={debug:0,info:1,warn:2,error:3,silent:4},B=class{constructor(){this._level=this._getLogLevel()}_getLogLevel(){if(process.env.ZIBBY_DEBUG==="true")return m.debug;if(process.env.ZIBBY_VERBOSE==="true")return m.info;let e=process.env.LOG_LEVEL?.toLowerCase();return e&&e in m?m[e]:m.info}_shouldLog(e){return m[e]>=this._level}_formatMessage(e,o,t={}){let i=new Date().toISOString(),s=`${this._getPrefix(e)} ${o}`;return Object.keys(t).length>0&&(s+=b.dim(` ${JSON.stringify(t)}`)),s}_getPrefix(e){return{debug:b.gray("[DEBUG]"),info:b.cyan("[INFO]"),warn:b.yellow("[WARN]"),error:b.red("\u274C [ERROR]")}[e]||""}debug(e,o){this._shouldLog("debug")&&console.log(this._formatMessage("debug",e,o))}info(e,o){this._shouldLog("info")&&console.log(this._formatMessage("info",e,o))}warn(e,o){this._shouldLog("warn")&&console.warn(this._formatMessage("warn",e,o))}error(e,o){this._shouldLog("error")&&console.error(this._formatMessage("error",e,o))}setLevel(e){e in m&&(this._level=m[e])}getLevel(){return Object.keys(m).find(e=>m[e]===this._level)}},l=new B;import{timeline as G,Timeline as Ne,WORKFLOW_GRAPH_LOG_MARKER_PREFIX as Pe}from"@zibby/agent-workflow";var Q=[{alias:"auto",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",isDefault:!0},{alias:"opus-4.8",canonicalId:"claude-opus-4-8",vendor:"claude",label:"Claude \xB7 Opus 4.8",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-8",canonicalId:"claude-opus-4-8",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.8"},{alias:"opus-5",canonicalId:"claude-opus-5",vendor:"claude",label:"Claude \xB7 Opus 5",family:"claude-opus-5",pickerVisible:!0},{alias:"claude-opus-5",canonicalId:"claude-opus-5",vendor:"claude",family:"claude-opus-5",aliasOf:"opus-5"},{alias:"sonnet-5",canonicalId:"claude-sonnet-5",vendor:"claude",label:"Claude \xB7 Sonnet 5",family:"claude-sonnet-5",pickerVisible:!0},{alias:"claude-sonnet-5",canonicalId:"claude-sonnet-5",vendor:"claude",family:"claude-sonnet-5",aliasOf:"sonnet-5"},{alias:"fable-5",canonicalId:"claude-fable-5",vendor:"claude",label:"Claude \xB7 Fable 5",family:"claude-fable-5",pickerVisible:!0},{alias:"claude-fable-5",canonicalId:"claude-fable-5",vendor:"claude",family:"claude-fable-5",aliasOf:"fable-5"},{alias:"sonnet-4.8",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4"},{alias:"sonnet-4-8",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.8"},{alias:"opus-4.7",canonicalId:"claude-opus-4-7",vendor:"claude",label:"Claude \xB7 Opus 4.7",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-7",canonicalId:"claude-opus-4-7",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.7"},{alias:"sonnet-4.7",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4"},{alias:"sonnet-4-7",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.7"},{alias:"sonnet-4.6",canonicalId:"claude-sonnet-4-6",vendor:"claude",label:"Claude \xB7 Sonnet 4.6",family:"claude-sonnet-4",pickerVisible:!0,aliasOf:"auto"},{alias:"sonnet-4-6",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"auto"},{alias:"opus-4.6",canonicalId:"claude-opus-4-6",vendor:"claude",label:"Claude \xB7 Opus 4.6",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-6",canonicalId:"claude-opus-4-6",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.6"},{alias:"sonnet-4.5",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",label:"Claude \xB7 Sonnet 4.5",family:"claude-sonnet-4",pickerVisible:!0},{alias:"sonnet-4-5",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.5"},{alias:"opus-4.5",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",label:"Claude \xB7 Opus 4.5",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-5",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"haiku-4.5",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",label:"Claude \xB7 Haiku 4.5",family:"claude-haiku-4"},{alias:"haiku-4-5",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",family:"claude-haiku-4",aliasOf:"haiku-4.5"},{alias:"claude-opus-4-8",canonicalId:"claude-opus-4-8",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.8"},{alias:"claude-sonnet-4-8",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.8"},{alias:"claude-opus-4-7",canonicalId:"claude-opus-4-7",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.7"},{alias:"claude-sonnet-4-7",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.7"},{alias:"claude-sonnet-4-6",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"auto"},{alias:"claude-opus-4-6",canonicalId:"claude-opus-4-6",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.6"},{alias:"claude-sonnet-4-5-20250929",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.5"},{alias:"claude-opus-4-5-20251101",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"claude-haiku-4-5-20251001",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",family:"claude-haiku-4",aliasOf:"haiku-4.5"},{alias:"claude-opus-4-20250514",canonicalId:"claude-opus-4-20250514",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"auto",canonicalId:"gpt-5.6-luna",vendor:"codex",family:"gpt-5",isDefault:!0},{alias:"o4-mini",canonicalId:"o4-mini",vendor:"codex",label:"Codex \xB7 o4-mini",family:"o4-mini",pickerVisible:!0},{alias:"o3",canonicalId:"o3",vendor:"codex",family:"o3"},{alias:"o3-mini",canonicalId:"o3-mini",vendor:"codex",family:"o3-mini"},{alias:"codex-mini",canonicalId:"codex-mini-latest",vendor:"codex",family:"codex-mini"},{alias:"gpt-4o",canonicalId:"gpt-4o",vendor:"codex",label:"Codex \xB7 GPT-4o",family:"gpt-4o",pickerVisible:!0},{alias:"gpt-4o-mini",canonicalId:"gpt-4o-mini",vendor:"codex",label:"Codex \xB7 GPT-4o mini",family:"gpt-4o-mini",pickerVisible:!0},{alias:"gpt-5.2-codex",canonicalId:"gpt-5.2-codex",vendor:"codex",label:"Codex \xB7 GPT-5.2",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.2",canonicalId:"gpt-5.2",vendor:"codex",label:"Codex \xB7 GPT-5.2 base",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.3",canonicalId:"gpt-5.3",vendor:"codex",label:"Codex \xB7 GPT-5.3",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.3-codex",canonicalId:"gpt-5.3-codex",vendor:"codex",family:"gpt-5"},{alias:"gpt-5.4",canonicalId:"gpt-5.4",vendor:"codex",label:"Codex \xB7 GPT-5.4",family:"gpt-5"},{alias:"gpt-5.5",canonicalId:"gpt-5.5",vendor:"codex",label:"Codex \xB7 GPT-5.5",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.6-luna",canonicalId:"gpt-5.6-luna",vendor:"codex",label:"Codex \xB7 GPT-5.6 Luna",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.6-terra",canonicalId:"gpt-5.6-terra",vendor:"codex",label:"Codex \xB7 GPT-5.6 Terra",family:"gpt-5",pickerVisible:!0},{alias:"auto",canonicalId:"gemini-3-pro",vendor:"gemini",family:"gemini-3",isDefault:!0},{alias:"gemini-3-pro",canonicalId:"gemini-3-pro",vendor:"gemini",label:"Gemini \xB7 3 Pro",family:"gemini-3",pickerVisible:!0},{alias:"gemini-3-flash",canonicalId:"gemini-3-flash",vendor:"gemini",label:"Gemini \xB7 3 Flash",family:"gemini-3",pickerVisible:!0},{alias:"gemini-2.5-pro",canonicalId:"gemini-2.5-pro",vendor:"gemini",label:"Gemini \xB7 2.5 Pro",family:"gemini-2.5",pickerVisible:!0},{alias:"gemini-2.5-flash",canonicalId:"gemini-2.5-flash",vendor:"gemini",label:"Gemini \xB7 2.5 Flash",family:"gemini-2.5",pickerVisible:!0}];function P(n){let e={};for(let o of Q)o.vendor===n&&(e[o.alias]=o.canonicalId);return e}function ee(n,e){let o=typeof e=="string"?e.trim():"";if(o&&o!=="auto")return o;if(o==="auto"&&Q.some(t=>t.vendor===n&&t.isDefault))return"auto";throw new Error(`[${n}] No model reached this LLM call: the node passed none, no config sets one, and the run carries none (MODEL env unset). Refusing to silently substitute a vendor default \u2014 pick a model on the agent (deploy modal / MODEL cell) or pass options.model explicitly.`)}var Me=P("claude"),Y=P("codex"),we=P("gemini"),De={CURSOR_AGENT_DEFAULT:1200*1e3,OPENAI_REQUEST:18e4};function V(n){let e=`${n}_POOL`,o=process.env[e];if(!o||typeof o!="string")return{picked:null,count:0,dispose:()=>{}};let t=o.split(/[,\n]+/).map(s=>s.trim()).filter(Boolean);if(t.length===0)return{picked:null,count:0,dispose:()=>{}};let i=t[Math.floor(Math.random()*t.length)],a=process.env[n];return process.env[n]=i,l.debug(`[auth-pool] ${n}: picked 1 of ${t.length} from pool (***${i.slice(-4)})`),{picked:i,count:t.length,dispose(){a===void 0?delete process.env[n]:process.env[n]=a}}}function U(n){if(Array.isArray(n))return n.map(U);if(n&&typeof n=="object"){let e={};for(let[o,t]of Object.entries(n))t!==null&&(e[o]=U(t));return e}return n}var ne=class extends pe{constructor(){super("codex","Codex (OpenAI)",75)}canHandle(e){if(!!!(process.env.OPENAI_API_KEY||process.env.OPENAI_API_KEY_POOL||process.env.CODEX_API_KEY||process.env.CODEX_API_KEY_POOL))return l.debug("CodexAgentStrategy: OPENAI_API_KEY or CODEX_API_KEY not set"),!1;try{return A("codex --version",{encoding:"utf-8",timeout:5e3,stdio:"pipe"}),!0}catch{return l.warn("[Codex] codex CLI not found. Install: npm install -g @openai/codex"),!1}}async invoke(e,o={}){let{model:t,workspace:i=process.cwd(),schema:a=null,images:s=[],skills:g=null,plugins:c=null,sessionPath:v=null,nodeName:_=null,timeout:$,config:Oe={},signal:J=null}=o,oe=[V("OPENAI_API_KEY"),V("CODEX_API_KEY")];try{let{Codex:L}=await import("@openai/codex-sdk"),x=ee("codex",t),k=Y[x]||x;Y[x]&&x!==k&&l.debug(`Mapped model: ${x} \u2192 ${k}`),l.debug(`Invoking Codex SDK with model: ${k}, skills: ${JSON.stringify(g)}`);let S=process.env.CODEX_API_KEY||process.env.OPENAI_API_KEY;S&&!process.env.CODEX_API_KEY&&(process.env.CODEX_API_KEY=S);let te=S?` | key: ***${S.slice(-4)}`:" | key: not set";if(console.log(`
|
|
2
|
-
\u25C6 Model: ${
|
|
1
|
+
import{AgentStrategy as pe,getSkill as fe}from"@zibby/agent-workflow";import le from"node:process";var se=Object.freeze(["PROJECT_API_TOKEN","ZIBBY_USER_TOKEN","GITHUB_TOKEN","GITLAB_TOKEN","GITLAB_OAUTH_TOKEN","GITLAB_INSTANCES","ATLASSIAN_ACCESS_TOKEN","JIRA_API_TOKEN","JIRA_EMAIL","SENTRY_AUTH_TOKEN","SLACK_BOT_TOKEN","DISCORD_BOT_TOKEN","ZIBBY_CHAT_SLACK_TOKEN","ZIBBY_CHAT_LARK_APP_SECRET","ZIBBY_CHAT_DISCORD_INTERACTION_TOKEN","LINEAR_API_KEY","LINEAR_OAUTH_TOKEN","PLANE_API_KEY","PLANE_OAUTH_TOKEN","ZIBBY_INJECTED_GOOGLE_TOKEN","ZIBBY_INJECTED_LINKEDIN_TOKEN","ZIBBY_MEMORY_AWS_ACCESS_KEY_ID","ZIBBY_MEMORY_AWS_SECRET_ACCESS_KEY","ZIBBY_MEMORY_AWS_SESSION_TOKEN"]);function z(n=le.env){let e={},o=new Set(se);for(let[t,i]of Object.entries(n))o.has(t)||i!==void 0&&(e[t]=i);return e}function ce(n){return!!n&&(n.transport==="http"||typeof n.url=="string"&&!n.command)}function R(n,e,{processEnv:o}={}){if(!e)return null;if(ce(e)){let i=String(e.url||"").trim();if(!i)return null;let a=e.headers&&typeof e.headers=="object"?e.headers:void 0;switch(n){case"claude":return{type:"http",url:i,...a&&{headers:a}};case"codex":return{url:i,...a&&{http_headers:a}};case"gemini":return{url:i,type:"http",...a&&{headers:a}};case"cursor":return{url:i,...a&&{headers:a}};default:return{type:"http",url:i,...a&&{headers:a}}}}let t={command:e.command};return e.args?.length&&(t.args=e.args),e.cwd&&(t.cwd=e.cwd),o?t.env={...o,...e.env||{}}:e.env&&Object.keys(e.env).length&&(t.env=e.env),t}import{execSync as A}from"node:child_process";import{readFileSync as me,mkdirSync as j,cpSync as ge,existsSync as ye}from"node:fs";import{join as C}from"node:path";import{homedir as _e}from"node:os";import{z as Z}from"zod";import{zodToJsonSchema as ue}from"zod-to-json-schema";function de(n){if(!n||typeof n!="object")return n;if(Array.isArray(n.type))return n.type.includes("null")||(n.type=[...n.type,"null"]),n;if(typeof n.type=="string")return n.type=[n.type,"null"],n;for(let e of["anyOf","oneOf"])if(Array.isArray(n[e]))return n[e].some(o=>o&&o.type==="null")||(n[e]=[...n[e],{type:"null"}]),n;return{anyOf:[n,{type:"null"}]}}function h(n){if(!n||typeof n!="object")return n;for(let e of["$defs","definitions"])if(n[e]&&typeof n[e]=="object")for(let o of Object.keys(n[e]))n[e][o]=h(n[e][o]);for(let e of["anyOf","oneOf","allOf"])Array.isArray(n[e])&&(n[e]=n[e].map(h));if(n.properties&&typeof n.properties=="object"){n.additionalProperties=!1;let e=Object.keys(n.properties),o=new Set(Array.isArray(n.required)?n.required:[]);for(let t of e){let i=h(n.properties[t]);o.has(t)||(i=de(i)),n.properties[t]=i}n.required=e}return n.items&&(Array.isArray(n.items)?n.items=n.items.map(h):n.items=h(n.items)),n}function W(n,e={target:"openApi3"}){if(!n)return null;let o=e?.target==="openAi",t=null;if(typeof Z?.toJSONSchema=="function")try{t=Z.toJSONSchema(n)}catch{}if(!t)try{t=ue(n,e)}catch{return null}if(o&&t)try{return h(t)}catch{return t}return t}function q(n){if(!n||typeof n!="object")return null;let e=(...i)=>{for(let a of i){if(a==null||a==="")continue;let s=Number(a);if(Number.isFinite(s))return s}return null},o=e(n.input_tokens,n.inputTokens,n.prompt_tokens,n.promptTokens),t=e(n.output_tokens,n.outputTokens,n.completion_tokens,n.completionTokens);return o==null&&t==null?null:{input:o||0,output:t||0}}import b from"chalk";var m={debug:0,info:1,warn:2,error:3,silent:4},B=class{constructor(){this._level=this._getLogLevel()}_getLogLevel(){if(process.env.ZIBBY_DEBUG==="true")return m.debug;if(process.env.ZIBBY_VERBOSE==="true")return m.info;let e=process.env.LOG_LEVEL?.toLowerCase();return e&&e in m?m[e]:m.info}_shouldLog(e){return m[e]>=this._level}_formatMessage(e,o,t={}){let i=new Date().toISOString(),s=`${this._getPrefix(e)} ${o}`;return Object.keys(t).length>0&&(s+=b.dim(` ${JSON.stringify(t)}`)),s}_getPrefix(e){return{debug:b.gray("[DEBUG]"),info:b.cyan("[INFO]"),warn:b.yellow("[WARN]"),error:b.red("\u274C [ERROR]")}[e]||""}debug(e,o){this._shouldLog("debug")&&console.log(this._formatMessage("debug",e,o))}info(e,o){this._shouldLog("info")&&console.log(this._formatMessage("info",e,o))}warn(e,o){this._shouldLog("warn")&&console.warn(this._formatMessage("warn",e,o))}error(e,o){this._shouldLog("error")&&console.error(this._formatMessage("error",e,o))}setLevel(e){e in m&&(this._level=m[e])}getLevel(){return Object.keys(m).find(e=>m[e]===this._level)}},l=new B;import{timeline as G,Timeline as Ne,WORKFLOW_GRAPH_LOG_MARKER_PREFIX as Pe}from"@zibby/agent-workflow";var Q=[{alias:"auto",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",isDefault:!0},{alias:"opus-4.8",canonicalId:"claude-opus-4-8",vendor:"claude",label:"Claude \xB7 Opus 4.8",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-8",canonicalId:"claude-opus-4-8",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.8"},{alias:"opus-5",canonicalId:"claude-opus-5",vendor:"claude",label:"Claude \xB7 Opus 5",family:"claude-opus-5",pickerVisible:!0},{alias:"claude-opus-5",canonicalId:"claude-opus-5",vendor:"claude",family:"claude-opus-5",aliasOf:"opus-5"},{alias:"sonnet-5",canonicalId:"claude-sonnet-5",vendor:"claude",label:"Claude \xB7 Sonnet 5",family:"claude-sonnet-5",pickerVisible:!0},{alias:"claude-sonnet-5",canonicalId:"claude-sonnet-5",vendor:"claude",family:"claude-sonnet-5",aliasOf:"sonnet-5"},{alias:"fable-5",canonicalId:"claude-fable-5",vendor:"claude",label:"Claude \xB7 Fable 5",family:"claude-fable-5",pickerVisible:!0},{alias:"claude-fable-5",canonicalId:"claude-fable-5",vendor:"claude",family:"claude-fable-5",aliasOf:"fable-5"},{alias:"sonnet-4.8",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4"},{alias:"sonnet-4-8",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.8"},{alias:"opus-4.7",canonicalId:"claude-opus-4-7",vendor:"claude",label:"Claude \xB7 Opus 4.7",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-7",canonicalId:"claude-opus-4-7",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.7"},{alias:"sonnet-4.7",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4"},{alias:"sonnet-4-7",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.7"},{alias:"sonnet-4.6",canonicalId:"claude-sonnet-4-6",vendor:"claude",label:"Claude \xB7 Sonnet 4.6",family:"claude-sonnet-4",pickerVisible:!0,aliasOf:"auto"},{alias:"sonnet-4-6",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"auto"},{alias:"opus-4.6",canonicalId:"claude-opus-4-6",vendor:"claude",label:"Claude \xB7 Opus 4.6",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-6",canonicalId:"claude-opus-4-6",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.6"},{alias:"sonnet-4.5",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",label:"Claude \xB7 Sonnet 4.5",family:"claude-sonnet-4",pickerVisible:!0},{alias:"sonnet-4-5",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.5"},{alias:"opus-4.5",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",label:"Claude \xB7 Opus 4.5",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-5",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"haiku-4.5",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",label:"Claude \xB7 Haiku 4.5",family:"claude-haiku-4"},{alias:"haiku-4-5",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",family:"claude-haiku-4",aliasOf:"haiku-4.5"},{alias:"claude-opus-4-8",canonicalId:"claude-opus-4-8",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.8"},{alias:"claude-sonnet-4-8",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.8"},{alias:"claude-opus-4-7",canonicalId:"claude-opus-4-7",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.7"},{alias:"claude-sonnet-4-7",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.7"},{alias:"claude-sonnet-4-6",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"auto"},{alias:"claude-opus-4-6",canonicalId:"claude-opus-4-6",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.6"},{alias:"claude-sonnet-4-5-20250929",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.5"},{alias:"claude-opus-4-5-20251101",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"claude-haiku-4-5-20251001",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",family:"claude-haiku-4",aliasOf:"haiku-4.5"},{alias:"claude-opus-4-20250514",canonicalId:"claude-opus-4-20250514",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"auto",canonicalId:"gpt-5.6-luna",vendor:"codex",family:"gpt-5",isDefault:!0},{alias:"o4-mini",canonicalId:"o4-mini",vendor:"codex",label:"Codex \xB7 o4-mini",family:"o4-mini",pickerVisible:!0},{alias:"o3",canonicalId:"o3",vendor:"codex",family:"o3"},{alias:"o3-mini",canonicalId:"o3-mini",vendor:"codex",family:"o3-mini"},{alias:"codex-mini",canonicalId:"codex-mini-latest",vendor:"codex",family:"codex-mini"},{alias:"gpt-4o",canonicalId:"gpt-4o",vendor:"codex",label:"Codex \xB7 GPT-4o",family:"gpt-4o",pickerVisible:!0},{alias:"gpt-4o-mini",canonicalId:"gpt-4o-mini",vendor:"codex",label:"Codex \xB7 GPT-4o mini",family:"gpt-4o-mini",pickerVisible:!0},{alias:"gpt-5.2-codex",canonicalId:"gpt-5.2-codex",vendor:"codex",label:"Codex \xB7 GPT-5.2",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.2",canonicalId:"gpt-5.2",vendor:"codex",label:"Codex \xB7 GPT-5.2 base",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.3",canonicalId:"gpt-5.3",vendor:"codex",label:"Codex \xB7 GPT-5.3",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.3-codex",canonicalId:"gpt-5.3-codex",vendor:"codex",family:"gpt-5"},{alias:"gpt-5.4",canonicalId:"gpt-5.4",vendor:"codex",label:"Codex \xB7 GPT-5.4",family:"gpt-5"},{alias:"gpt-5.5",canonicalId:"gpt-5.5",vendor:"codex",label:"Codex \xB7 GPT-5.5",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.6-luna",canonicalId:"gpt-5.6-luna",vendor:"codex",label:"Codex \xB7 GPT-5.6 Luna",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.6-terra",canonicalId:"gpt-5.6-terra",vendor:"codex",label:"Codex \xB7 GPT-5.6 Terra",family:"gpt-5",pickerVisible:!0},{alias:"auto",canonicalId:"gemini-3-pro",vendor:"gemini",family:"gemini-3",isDefault:!0},{alias:"gemini-3-pro",canonicalId:"gemini-3-pro",vendor:"gemini",label:"Gemini \xB7 3 Pro",family:"gemini-3",pickerVisible:!0},{alias:"gemini-3-flash",canonicalId:"gemini-3-flash",vendor:"gemini",label:"Gemini \xB7 3 Flash",family:"gemini-3",pickerVisible:!0},{alias:"gemini-2.5-pro",canonicalId:"gemini-2.5-pro",vendor:"gemini",label:"Gemini \xB7 2.5 Pro",family:"gemini-2.5",pickerVisible:!0},{alias:"gemini-2.5-flash",canonicalId:"gemini-2.5-flash",vendor:"gemini",label:"Gemini \xB7 2.5 Flash",family:"gemini-2.5",pickerVisible:!0}];function P(n){let e={};for(let o of Q)o.vendor===n&&(e[o.alias]=o.canonicalId);return e}function ee(n,e){let o=typeof e=="string"?e.trim():"";if(o&&o!=="auto")return o;if(o==="auto"&&Q.some(t=>t.vendor===n&&t.isDefault))return"auto";throw new Error(`[${n}] No model reached this LLM call: the node passed none, no config sets one, and the run carries none (MODEL env unset). Refusing to silently substitute a vendor default \u2014 pick a model on the agent (deploy modal / MODEL cell) or pass options.model explicitly.`)}var Me=P("claude"),Y=P("codex"),we=P("gemini"),De={CURSOR_AGENT_DEFAULT:1200*1e3,OPENAI_REQUEST:18e4};function V(n){let e=`${n}_POOL`,o=process.env[e];if(!o||typeof o!="string")return{picked:null,count:0,dispose:()=>{}};let t=o.split(/[,\n]+/).map(s=>s.trim()).filter(Boolean);if(t.length===0)return{picked:null,count:0,dispose:()=>{}};let i=t[Math.floor(Math.random()*t.length)],a=process.env[n];return process.env[n]=i,l.debug(`[auth-pool] ${n}: picked 1 of ${t.length} from pool (***${i.slice(-4)})`),{picked:i,count:t.length,dispose(){a===void 0?delete process.env[n]:process.env[n]=a}}}function U(n){if(Array.isArray(n))return n.map(U);if(n&&typeof n=="object"){let e={};for(let[o,t]of Object.entries(n))t!==null&&(e[o]=U(t));return e}return n}var ne=class extends pe{constructor(){super("codex","Codex (OpenAI)",75)}canHandle(e){if(!!!(process.env.OPENAI_API_KEY||process.env.OPENAI_API_KEY_POOL||process.env.CODEX_API_KEY||process.env.CODEX_API_KEY_POOL))return l.debug("CodexAgentStrategy: OPENAI_API_KEY or CODEX_API_KEY not set"),!1;try{return A("codex --version",{encoding:"utf-8",timeout:5e3,stdio:"pipe"}),!0}catch{return l.warn("[Codex] codex CLI not found. Install: npm install -g @openai/codex"),!1}}async invoke(e,o={}){let{model:t,workspace:i=process.cwd(),schema:a=null,images:s=[],skills:g=null,plugins:c=null,sessionPath:v=null,nodeName:_=null,timeout:$,config:Oe={},signal:J=null}=o,oe=[V("OPENAI_API_KEY"),V("CODEX_API_KEY")];try{let{Codex:L}=await import("@openai/codex-sdk"),x=ee("codex",t),S=Y[x]||x;Y[x]&&x!==S&&l.debug(`Mapped model: ${x} \u2192 ${S}`),l.debug(`Invoking Codex SDK with model: ${S}, skills: ${JSON.stringify(g)}`);let k=process.env.CODEX_API_KEY||process.env.OPENAI_API_KEY;k&&!process.env.CODEX_API_KEY&&(process.env.CODEX_API_KEY=k);let te=k?` | key: ***${k.slice(-4)}`:" | key: not set";if(console.log(`
|
|
2
|
+
\u25C6 Model: ${S}${te}
|
|
3
3
|
`),Array.isArray(c)&&c.length>0){let r=this._resolveCodexHome(v);process.env.CODEX_HOME=r;try{j(r,{recursive:!0})}catch{}this._ensurePlugins(c,r)}let T=(await import("chalk")).default;console.log(`
|
|
4
4
|
${T.bold("Prompt sent to LLM:")}`),console.log(T.dim("\u2500".repeat(60))),console.log(T.dim(e)),console.log(T.dim("\u2500".repeat(60)));let O=this._resolveSkillsToMcp(g,{sessionPath:v,workspace:i,nodeName:_});for(let r of o.extraMcpServers||[])if(r&&r.serverName&&r.def){if(Object.prototype.hasOwnProperty.call(O,r.serverName)){console.warn(`[custom-mcp] skip "${r.serverName}" \u2014 a built-in skill already owns that MCP name (no shadowing)`);continue}let p=R("codex",r.def);p&&(O[r.serverName]=p)}let N={};Object.keys(O).length>0&&(N.mcp_servers=O,Object.values(O).some(r=>r&&typeof r.url=="string")&&(N.experimental_use_rmcp_client=!0),l.debug(`[Codex] MCP servers: ${Object.keys(O).join(", ")}`));let F=this._resolveCodexBin(),ie=new L({...F?{codexPathOverride:F}:{},...Object.keys(N).length>0&&{config:N},env:z(process.env)}),E=i;try{E&&j(E,{recursive:!0})}catch{}(!E||!ye(E))&&(E=process.cwd());let ae=ie.startThread({workingDirectory:E,skipGitRepoCheck:!0,approvalPolicy:"never",sandboxMode:"danger-full-access",networkAccessEnabled:!0}),X=a&&typeof a.parse=="function",M={};if(a)try{let r=X?W(a,{target:"openAi"}):a;M.outputSchema=r,l.debug("Structured output via SDK outputSchema")}catch(r){l.warn(`[Codex] Schema conversion failed, will extract from text: ${r.message}`)}let w=Array.isArray(s)?s.filter(r=>r&&typeof r.path=="string"&&r.path.startsWith("/")):[];if(w.length&&(e=`${e}
|
|
5
5
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{AgentStrategy as Ne,getSkill as we}from"@zibby/agent-workflow";import _e from"node:process";var Se=Object.freeze(["PROJECT_API_TOKEN","ZIBBY_USER_TOKEN","GITHUB_TOKEN","GITLAB_TOKEN","GITLAB_OAUTH_TOKEN","ATLASSIAN_ACCESS_TOKEN","JIRA_API_TOKEN","JIRA_EMAIL","SENTRY_AUTH_TOKEN","SLACK_BOT_TOKEN","DISCORD_BOT_TOKEN","ZIBBY_CHAT_SLACK_TOKEN","ZIBBY_CHAT_LARK_APP_SECRET","ZIBBY_CHAT_DISCORD_INTERACTION_TOKEN","LINEAR_API_KEY","LINEAR_OAUTH_TOKEN","PLANE_API_KEY","PLANE_OAUTH_TOKEN","ZIBBY_INJECTED_GOOGLE_TOKEN","ZIBBY_INJECTED_LINKEDIN_TOKEN","ZIBBY_MEMORY_AWS_ACCESS_KEY_ID","ZIBBY_MEMORY_AWS_SECRET_ACCESS_KEY","ZIBBY_MEMORY_AWS_SESSION_TOKEN"]);function se(r=_e.env){let e={},t=new Set(Se);for(let[n,i]of Object.entries(r))t.has(n)||i!==void 0&&(e[n]=i);return e}function be(r){return!!r&&(r.transport==="http"||typeof r.url=="string"&&!r.command)}function q(r,e,{processEnv:t}={}){if(!e)return null;if(be(e)){let i=String(e.url||"").trim();if(!i)return null;let o=e.headers&&typeof e.headers=="object"?e.headers:void 0;switch(r){case"claude":return{type:"http",url:i,...o&&{headers:o}};case"codex":return{url:i,...o&&{http_headers:o}};case"gemini":return{url:i,type:"http",...o&&{headers:o}};case"cursor":return{url:i,...o&&{headers:o}};default:return{type:"http",url:i,...o&&{headers:o}}}}let n={command:e.command};return e.args?.length&&(n.args=e.args),e.cwd&&(n.cwd=e.cwd),t?n.env={...t,...e.env||{}}:e.env&&Object.keys(e.env).length&&(n.env=e.env),n}import{execSync as ke,spawn as Pe}from"node:child_process";import{z as oe}from"zod";import{zodToJsonSchema as xe}from"zod-to-json-schema";function ve(r){if(!r||typeof r!="object")return r;if(Array.isArray(r.type))return r.type.includes("null")||(r.type=[...r.type,"null"]),r;if(typeof r.type=="string")return r.type=[r.type,"null"],r;for(let e of["anyOf","oneOf"])if(Array.isArray(r[e]))return r[e].some(t=>t&&t.type==="null")||(r[e]=[...r[e],{type:"null"}]),r;return{anyOf:[r,{type:"null"}]}}function k(r){if(!r||typeof r!="object")return r;for(let e of["$defs","definitions"])if(r[e]&&typeof r[e]=="object")for(let t of Object.keys(r[e]))r[e][t]=k(r[e][t]);for(let e of["anyOf","oneOf","allOf"])Array.isArray(r[e])&&(r[e]=r[e].map(k));if(r.properties&&typeof r.properties=="object"){r.additionalProperties=!1;let e=Object.keys(r.properties),t=new Set(Array.isArray(r.required)?r.required:[]);for(let n of e){let i=k(r.properties[n]);t.has(n)||(i=ve(i)),r.properties[n]=i}r.required=e}return r.items&&(Array.isArray(r.items)?r.items=r.items.map(k):r.items=k(r.items)),r}function ae(r,e={target:"openApi3"}){if(!r)return null;let t=e?.target==="openAi",n=null;if(typeof oe?.toJSONSchema=="function")try{n=oe.toJSONSchema(r)}catch{}if(!n)try{n=xe(r,e)}catch{return null}if(t&&n)try{return k(n)}catch{return n}return n}import{existsSync as de,mkdirSync as pe,readFileSync as me,rmSync as Ce,writeFileSync as ge}from"node:fs";import{join as v}from"node:path";import G from"chalk";var g={debug:0,info:1,warn:2,error:3,silent:4},X=class{constructor(){this._level=this._getLogLevel()}_getLogLevel(){if(process.env.ZIBBY_DEBUG==="true")return g.debug;if(process.env.ZIBBY_VERBOSE==="true")return g.info;let e=process.env.LOG_LEVEL?.toLowerCase();return e&&e in g?g[e]:g.info}_shouldLog(e){return g[e]>=this._level}_formatMessage(e,t,n={}){let i=new Date().toISOString(),s=`${this._getPrefix(e)} ${t}`;return Object.keys(n).length>0&&(s+=G.dim(` ${JSON.stringify(n)}`)),s}_getPrefix(e){return{debug:G.gray("[DEBUG]"),info:G.cyan("[INFO]"),warn:G.yellow("[WARN]"),error:G.red("\u274C [ERROR]")}[e]||""}debug(e,t){this._shouldLog("debug")&&console.log(this._formatMessage("debug",e,t))}info(e,t){this._shouldLog("info")&&console.log(this._formatMessage("info",e,t))}warn(e,t){this._shouldLog("warn")&&console.warn(this._formatMessage("warn",e,t))}error(e,t){this._shouldLog("error")&&console.error(this._formatMessage("error",e,t))}setLevel(e){e in g&&(this._level=g[e])}getLevel(){return Object.keys(g).find(e=>g[e]===this._level)}},u=new X;var le=[{alias:"auto",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",isDefault:!0},{alias:"opus-4.8",canonicalId:"claude-opus-4-8",vendor:"claude",label:"Claude \xB7 Opus 4.8",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-8",canonicalId:"claude-opus-4-8",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.8"},{alias:"opus-5",canonicalId:"claude-opus-5",vendor:"claude",label:"Claude \xB7 Opus 5",family:"claude-opus-5",pickerVisible:!0},{alias:"claude-opus-5",canonicalId:"claude-opus-5",vendor:"claude",family:"claude-opus-5",aliasOf:"opus-5"},{alias:"sonnet-5",canonicalId:"claude-sonnet-5",vendor:"claude",label:"Claude \xB7 Sonnet 5",family:"claude-sonnet-5",pickerVisible:!0},{alias:"claude-sonnet-5",canonicalId:"claude-sonnet-5",vendor:"claude",family:"claude-sonnet-5",aliasOf:"sonnet-5"},{alias:"fable-5",canonicalId:"claude-fable-5",vendor:"claude",label:"Claude \xB7 Fable 5",family:"claude-fable-5",pickerVisible:!0},{alias:"claude-fable-5",canonicalId:"claude-fable-5",vendor:"claude",family:"claude-fable-5",aliasOf:"fable-5"},{alias:"sonnet-4.8",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4"},{alias:"sonnet-4-8",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.8"},{alias:"opus-4.7",canonicalId:"claude-opus-4-7",vendor:"claude",label:"Claude \xB7 Opus 4.7",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-7",canonicalId:"claude-opus-4-7",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.7"},{alias:"sonnet-4.7",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4"},{alias:"sonnet-4-7",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.7"},{alias:"sonnet-4.6",canonicalId:"claude-sonnet-4-6",vendor:"claude",label:"Claude \xB7 Sonnet 4.6",family:"claude-sonnet-4",pickerVisible:!0,aliasOf:"auto"},{alias:"sonnet-4-6",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"auto"},{alias:"opus-4.6",canonicalId:"claude-opus-4-6",vendor:"claude",label:"Claude \xB7 Opus 4.6",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-6",canonicalId:"claude-opus-4-6",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.6"},{alias:"sonnet-4.5",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",label:"Claude \xB7 Sonnet 4.5",family:"claude-sonnet-4",pickerVisible:!0},{alias:"sonnet-4-5",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.5"},{alias:"opus-4.5",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",label:"Claude \xB7 Opus 4.5",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-5",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"haiku-4.5",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",label:"Claude \xB7 Haiku 4.5",family:"claude-haiku-4"},{alias:"haiku-4-5",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",family:"claude-haiku-4",aliasOf:"haiku-4.5"},{alias:"claude-opus-4-8",canonicalId:"claude-opus-4-8",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.8"},{alias:"claude-sonnet-4-8",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.8"},{alias:"claude-opus-4-7",canonicalId:"claude-opus-4-7",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.7"},{alias:"claude-sonnet-4-7",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.7"},{alias:"claude-sonnet-4-6",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"auto"},{alias:"claude-opus-4-6",canonicalId:"claude-opus-4-6",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.6"},{alias:"claude-sonnet-4-5-20250929",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.5"},{alias:"claude-opus-4-5-20251101",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"claude-haiku-4-5-20251001",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",family:"claude-haiku-4",aliasOf:"haiku-4.5"},{alias:"claude-opus-4-20250514",canonicalId:"claude-opus-4-20250514",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"auto",canonicalId:"gpt-5.6-luna",vendor:"codex",family:"gpt-5",isDefault:!0},{alias:"o4-mini",canonicalId:"o4-mini",vendor:"codex",label:"Codex \xB7 o4-mini",family:"o4-mini",pickerVisible:!0},{alias:"o3",canonicalId:"o3",vendor:"codex",family:"o3"},{alias:"o3-mini",canonicalId:"o3-mini",vendor:"codex",family:"o3-mini"},{alias:"codex-mini",canonicalId:"codex-mini-latest",vendor:"codex",family:"codex-mini"},{alias:"gpt-4o",canonicalId:"gpt-4o",vendor:"codex",label:"Codex \xB7 GPT-4o",family:"gpt-4o",pickerVisible:!0},{alias:"gpt-4o-mini",canonicalId:"gpt-4o-mini",vendor:"codex",label:"Codex \xB7 GPT-4o mini",family:"gpt-4o-mini",pickerVisible:!0},{alias:"gpt-5.2-codex",canonicalId:"gpt-5.2-codex",vendor:"codex",label:"Codex \xB7 GPT-5.2",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.2",canonicalId:"gpt-5.2",vendor:"codex",label:"Codex \xB7 GPT-5.2 base",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.3",canonicalId:"gpt-5.3",vendor:"codex",label:"Codex \xB7 GPT-5.3",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.3-codex",canonicalId:"gpt-5.3-codex",vendor:"codex",family:"gpt-5"},{alias:"gpt-5.4",canonicalId:"gpt-5.4",vendor:"codex",label:"Codex \xB7 GPT-5.4",family:"gpt-5"},{alias:"gpt-5.5",canonicalId:"gpt-5.5",vendor:"codex",label:"Codex \xB7 GPT-5.5",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.6-luna",canonicalId:"gpt-5.6-luna",vendor:"codex",label:"Codex \xB7 GPT-5.6 Luna",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.6-terra",canonicalId:"gpt-5.6-terra",vendor:"codex",label:"Codex \xB7 GPT-5.6 Terra",family:"gpt-5",pickerVisible:!0},{alias:"auto",canonicalId:"gemini-3-pro",vendor:"gemini",family:"gemini-3",isDefault:!0},{alias:"gemini-3-pro",canonicalId:"gemini-3-pro",vendor:"gemini",label:"Gemini \xB7 3 Pro",family:"gemini-3",pickerVisible:!0},{alias:"gemini-3-flash",canonicalId:"gemini-3-flash",vendor:"gemini",label:"Gemini \xB7 3 Flash",family:"gemini-3",pickerVisible:!0},{alias:"gemini-2.5-pro",canonicalId:"gemini-2.5-pro",vendor:"gemini",label:"Gemini \xB7 2.5 Pro",family:"gemini-2.5",pickerVisible:!0},{alias:"gemini-2.5-flash",canonicalId:"gemini-2.5-flash",vendor:"gemini",label:"Gemini \xB7 2.5 Flash",family:"gemini-2.5",pickerVisible:!0}];function $(r){let e={};for(let t of le)t.vendor===r&&(e[t.alias]=t.canonicalId);return e}function ce(r,e){let t=typeof e=="string"?e.trim():"";if(t&&t!=="auto")return t;if(t==="auto"&&le.some(n=>n.vendor===r&&n.isDefault))return"auto";throw new Error(`[${r}] No model reached this LLM call: the node passed none, no config sets one, and the run carries none (MODEL env unset). Refusing to silently substitute a vendor default \u2014 pick a model on the agent (deploy modal / MODEL cell) or pass options.model explicitly.`)}var ze=$("claude"),He=$("codex"),ue=$("gemini"),je={CURSOR_AGENT_DEFAULT:1200*1e3,OPENAI_REQUEST:18e4};import{z as fe}from"zod";import{zodToJsonSchema as Te}from"zod-to-json-schema";function Ae(r){if(!r)return null;if(typeof fe?.toJSONSchema=="function")try{return fe.toJSONSchema(r)}catch{}try{return Te(r,{target:"openApi3"})}catch{return null}}var D=class{static generateFileOutputInstructions(e,t){let n;typeof e?.parse=="function"?n=Ae(e):n=e;let i=this._buildExample(n);return`
|
|
1
|
+
import{AgentStrategy as Ne,getSkill as we}from"@zibby/agent-workflow";import _e from"node:process";var Se=Object.freeze(["PROJECT_API_TOKEN","ZIBBY_USER_TOKEN","GITHUB_TOKEN","GITLAB_TOKEN","GITLAB_OAUTH_TOKEN","GITLAB_INSTANCES","ATLASSIAN_ACCESS_TOKEN","JIRA_API_TOKEN","JIRA_EMAIL","SENTRY_AUTH_TOKEN","SLACK_BOT_TOKEN","DISCORD_BOT_TOKEN","ZIBBY_CHAT_SLACK_TOKEN","ZIBBY_CHAT_LARK_APP_SECRET","ZIBBY_CHAT_DISCORD_INTERACTION_TOKEN","LINEAR_API_KEY","LINEAR_OAUTH_TOKEN","PLANE_API_KEY","PLANE_OAUTH_TOKEN","ZIBBY_INJECTED_GOOGLE_TOKEN","ZIBBY_INJECTED_LINKEDIN_TOKEN","ZIBBY_MEMORY_AWS_ACCESS_KEY_ID","ZIBBY_MEMORY_AWS_SECRET_ACCESS_KEY","ZIBBY_MEMORY_AWS_SESSION_TOKEN"]);function se(r=_e.env){let e={},t=new Set(Se);for(let[n,i]of Object.entries(r))t.has(n)||i!==void 0&&(e[n]=i);return e}function be(r){return!!r&&(r.transport==="http"||typeof r.url=="string"&&!r.command)}function q(r,e,{processEnv:t}={}){if(!e)return null;if(be(e)){let i=String(e.url||"").trim();if(!i)return null;let o=e.headers&&typeof e.headers=="object"?e.headers:void 0;switch(r){case"claude":return{type:"http",url:i,...o&&{headers:o}};case"codex":return{url:i,...o&&{http_headers:o}};case"gemini":return{url:i,type:"http",...o&&{headers:o}};case"cursor":return{url:i,...o&&{headers:o}};default:return{type:"http",url:i,...o&&{headers:o}}}}let n={command:e.command};return e.args?.length&&(n.args=e.args),e.cwd&&(n.cwd=e.cwd),t?n.env={...t,...e.env||{}}:e.env&&Object.keys(e.env).length&&(n.env=e.env),n}import{execSync as ke,spawn as Pe}from"node:child_process";import{z as oe}from"zod";import{zodToJsonSchema as xe}from"zod-to-json-schema";function ve(r){if(!r||typeof r!="object")return r;if(Array.isArray(r.type))return r.type.includes("null")||(r.type=[...r.type,"null"]),r;if(typeof r.type=="string")return r.type=[r.type,"null"],r;for(let e of["anyOf","oneOf"])if(Array.isArray(r[e]))return r[e].some(t=>t&&t.type==="null")||(r[e]=[...r[e],{type:"null"}]),r;return{anyOf:[r,{type:"null"}]}}function k(r){if(!r||typeof r!="object")return r;for(let e of["$defs","definitions"])if(r[e]&&typeof r[e]=="object")for(let t of Object.keys(r[e]))r[e][t]=k(r[e][t]);for(let e of["anyOf","oneOf","allOf"])Array.isArray(r[e])&&(r[e]=r[e].map(k));if(r.properties&&typeof r.properties=="object"){r.additionalProperties=!1;let e=Object.keys(r.properties),t=new Set(Array.isArray(r.required)?r.required:[]);for(let n of e){let i=k(r.properties[n]);t.has(n)||(i=ve(i)),r.properties[n]=i}r.required=e}return r.items&&(Array.isArray(r.items)?r.items=r.items.map(k):r.items=k(r.items)),r}function ae(r,e={target:"openApi3"}){if(!r)return null;let t=e?.target==="openAi",n=null;if(typeof oe?.toJSONSchema=="function")try{n=oe.toJSONSchema(r)}catch{}if(!n)try{n=xe(r,e)}catch{return null}if(t&&n)try{return k(n)}catch{return n}return n}import{existsSync as de,mkdirSync as pe,readFileSync as me,rmSync as Ce,writeFileSync as ge}from"node:fs";import{join as v}from"node:path";import G from"chalk";var g={debug:0,info:1,warn:2,error:3,silent:4},X=class{constructor(){this._level=this._getLogLevel()}_getLogLevel(){if(process.env.ZIBBY_DEBUG==="true")return g.debug;if(process.env.ZIBBY_VERBOSE==="true")return g.info;let e=process.env.LOG_LEVEL?.toLowerCase();return e&&e in g?g[e]:g.info}_shouldLog(e){return g[e]>=this._level}_formatMessage(e,t,n={}){let i=new Date().toISOString(),s=`${this._getPrefix(e)} ${t}`;return Object.keys(n).length>0&&(s+=G.dim(` ${JSON.stringify(n)}`)),s}_getPrefix(e){return{debug:G.gray("[DEBUG]"),info:G.cyan("[INFO]"),warn:G.yellow("[WARN]"),error:G.red("\u274C [ERROR]")}[e]||""}debug(e,t){this._shouldLog("debug")&&console.log(this._formatMessage("debug",e,t))}info(e,t){this._shouldLog("info")&&console.log(this._formatMessage("info",e,t))}warn(e,t){this._shouldLog("warn")&&console.warn(this._formatMessage("warn",e,t))}error(e,t){this._shouldLog("error")&&console.error(this._formatMessage("error",e,t))}setLevel(e){e in g&&(this._level=g[e])}getLevel(){return Object.keys(g).find(e=>g[e]===this._level)}},u=new X;var le=[{alias:"auto",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",isDefault:!0},{alias:"opus-4.8",canonicalId:"claude-opus-4-8",vendor:"claude",label:"Claude \xB7 Opus 4.8",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-8",canonicalId:"claude-opus-4-8",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.8"},{alias:"opus-5",canonicalId:"claude-opus-5",vendor:"claude",label:"Claude \xB7 Opus 5",family:"claude-opus-5",pickerVisible:!0},{alias:"claude-opus-5",canonicalId:"claude-opus-5",vendor:"claude",family:"claude-opus-5",aliasOf:"opus-5"},{alias:"sonnet-5",canonicalId:"claude-sonnet-5",vendor:"claude",label:"Claude \xB7 Sonnet 5",family:"claude-sonnet-5",pickerVisible:!0},{alias:"claude-sonnet-5",canonicalId:"claude-sonnet-5",vendor:"claude",family:"claude-sonnet-5",aliasOf:"sonnet-5"},{alias:"fable-5",canonicalId:"claude-fable-5",vendor:"claude",label:"Claude \xB7 Fable 5",family:"claude-fable-5",pickerVisible:!0},{alias:"claude-fable-5",canonicalId:"claude-fable-5",vendor:"claude",family:"claude-fable-5",aliasOf:"fable-5"},{alias:"sonnet-4.8",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4"},{alias:"sonnet-4-8",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.8"},{alias:"opus-4.7",canonicalId:"claude-opus-4-7",vendor:"claude",label:"Claude \xB7 Opus 4.7",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-7",canonicalId:"claude-opus-4-7",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.7"},{alias:"sonnet-4.7",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4"},{alias:"sonnet-4-7",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.7"},{alias:"sonnet-4.6",canonicalId:"claude-sonnet-4-6",vendor:"claude",label:"Claude \xB7 Sonnet 4.6",family:"claude-sonnet-4",pickerVisible:!0,aliasOf:"auto"},{alias:"sonnet-4-6",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"auto"},{alias:"opus-4.6",canonicalId:"claude-opus-4-6",vendor:"claude",label:"Claude \xB7 Opus 4.6",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-6",canonicalId:"claude-opus-4-6",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.6"},{alias:"sonnet-4.5",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",label:"Claude \xB7 Sonnet 4.5",family:"claude-sonnet-4",pickerVisible:!0},{alias:"sonnet-4-5",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.5"},{alias:"opus-4.5",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",label:"Claude \xB7 Opus 4.5",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-5",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"haiku-4.5",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",label:"Claude \xB7 Haiku 4.5",family:"claude-haiku-4"},{alias:"haiku-4-5",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",family:"claude-haiku-4",aliasOf:"haiku-4.5"},{alias:"claude-opus-4-8",canonicalId:"claude-opus-4-8",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.8"},{alias:"claude-sonnet-4-8",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.8"},{alias:"claude-opus-4-7",canonicalId:"claude-opus-4-7",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.7"},{alias:"claude-sonnet-4-7",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.7"},{alias:"claude-sonnet-4-6",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"auto"},{alias:"claude-opus-4-6",canonicalId:"claude-opus-4-6",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.6"},{alias:"claude-sonnet-4-5-20250929",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.5"},{alias:"claude-opus-4-5-20251101",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"claude-haiku-4-5-20251001",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",family:"claude-haiku-4",aliasOf:"haiku-4.5"},{alias:"claude-opus-4-20250514",canonicalId:"claude-opus-4-20250514",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"auto",canonicalId:"gpt-5.6-luna",vendor:"codex",family:"gpt-5",isDefault:!0},{alias:"o4-mini",canonicalId:"o4-mini",vendor:"codex",label:"Codex \xB7 o4-mini",family:"o4-mini",pickerVisible:!0},{alias:"o3",canonicalId:"o3",vendor:"codex",family:"o3"},{alias:"o3-mini",canonicalId:"o3-mini",vendor:"codex",family:"o3-mini"},{alias:"codex-mini",canonicalId:"codex-mini-latest",vendor:"codex",family:"codex-mini"},{alias:"gpt-4o",canonicalId:"gpt-4o",vendor:"codex",label:"Codex \xB7 GPT-4o",family:"gpt-4o",pickerVisible:!0},{alias:"gpt-4o-mini",canonicalId:"gpt-4o-mini",vendor:"codex",label:"Codex \xB7 GPT-4o mini",family:"gpt-4o-mini",pickerVisible:!0},{alias:"gpt-5.2-codex",canonicalId:"gpt-5.2-codex",vendor:"codex",label:"Codex \xB7 GPT-5.2",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.2",canonicalId:"gpt-5.2",vendor:"codex",label:"Codex \xB7 GPT-5.2 base",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.3",canonicalId:"gpt-5.3",vendor:"codex",label:"Codex \xB7 GPT-5.3",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.3-codex",canonicalId:"gpt-5.3-codex",vendor:"codex",family:"gpt-5"},{alias:"gpt-5.4",canonicalId:"gpt-5.4",vendor:"codex",label:"Codex \xB7 GPT-5.4",family:"gpt-5"},{alias:"gpt-5.5",canonicalId:"gpt-5.5",vendor:"codex",label:"Codex \xB7 GPT-5.5",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.6-luna",canonicalId:"gpt-5.6-luna",vendor:"codex",label:"Codex \xB7 GPT-5.6 Luna",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.6-terra",canonicalId:"gpt-5.6-terra",vendor:"codex",label:"Codex \xB7 GPT-5.6 Terra",family:"gpt-5",pickerVisible:!0},{alias:"auto",canonicalId:"gemini-3-pro",vendor:"gemini",family:"gemini-3",isDefault:!0},{alias:"gemini-3-pro",canonicalId:"gemini-3-pro",vendor:"gemini",label:"Gemini \xB7 3 Pro",family:"gemini-3",pickerVisible:!0},{alias:"gemini-3-flash",canonicalId:"gemini-3-flash",vendor:"gemini",label:"Gemini \xB7 3 Flash",family:"gemini-3",pickerVisible:!0},{alias:"gemini-2.5-pro",canonicalId:"gemini-2.5-pro",vendor:"gemini",label:"Gemini \xB7 2.5 Pro",family:"gemini-2.5",pickerVisible:!0},{alias:"gemini-2.5-flash",canonicalId:"gemini-2.5-flash",vendor:"gemini",label:"Gemini \xB7 2.5 Flash",family:"gemini-2.5",pickerVisible:!0}];function $(r){let e={};for(let t of le)t.vendor===r&&(e[t.alias]=t.canonicalId);return e}function ce(r,e){let t=typeof e=="string"?e.trim():"";if(t&&t!=="auto")return t;if(t==="auto"&&le.some(n=>n.vendor===r&&n.isDefault))return"auto";throw new Error(`[${r}] No model reached this LLM call: the node passed none, no config sets one, and the run carries none (MODEL env unset). Refusing to silently substitute a vendor default \u2014 pick a model on the agent (deploy modal / MODEL cell) or pass options.model explicitly.`)}var ze=$("claude"),He=$("codex"),ue=$("gemini"),je={CURSOR_AGENT_DEFAULT:1200*1e3,OPENAI_REQUEST:18e4};import{z as fe}from"zod";import{zodToJsonSchema as Te}from"zod-to-json-schema";function Ae(r){if(!r)return null;if(typeof fe?.toJSONSchema=="function")try{return fe.toJSONSchema(r)}catch{}try{return Te(r,{target:"openApi3"})}catch{return null}}var D=class{static generateFileOutputInstructions(e,t){let n;typeof e?.parse=="function"?n=Ae(e):n=e;let i=this._buildExample(n);return`
|
|
2
2
|
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
3
3
|
\u{1F6A8} MANDATORY: WRITE RESULT TO FILE \u{1F6A8}
|
|
4
4
|
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|