@zibby/core 0.5.19 → 0.5.20
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/backend-client.js +1 -1
- package/dist/index.js +1 -1
- package/dist/package.json +1 -1
- package/package.json +1 -1
package/dist/backend-client.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{existsSync as _,readFileSync as E}from"node:fs";import{homedir as
|
|
1
|
+
import{existsSync as _,readFileSync as E}from"node:fs";import{homedir as T}from"node:os";import{join as y}from"node:path";var l=new Map,u={github:"GITHUB_TOKEN",gitlab:"GITLAB_TOKEN",sentry:"SENTRY_AUTH_TOKEN",slack:"SLACK_BOT_TOKEN"};function d(){let e=process.env.ZIBBY_SELF_HOST;return e!=null&&e!==""&&e!=="0"&&e.toLowerCase()!=="false"}function h(){if(process.env.PROJECT_API_TOKEN)return process.env.PROJECT_API_TOKEN;if(process.env.ZIBBY_USER_TOKEN)return process.env.ZIBBY_USER_TOKEN;try{let e=y(T(),".zibby","config.json");return _(e)&&JSON.parse(E(e,"utf-8")).sessionToken||null}catch{return null}}function w(){return process.env.ZIBBY_ACCOUNT_API_URL?process.env.ZIBBY_ACCOUNT_API_URL.replace(/\/$/,""):(process.env.ZIBBY_ENV||"prod")==="local"?"http://localhost:3001":process.env.ZIBBY_PROD_ACCOUNT_API_URL||"https://api-prod.zibby.app"}async function k(e){if(d()){let f=u[e];if(f&&process.env[f])return{token:process.env[f]}}let i=Date.now(),o=l.get(e);if(o&&o.expiresAt>i)return o.data;let r=h();if(!r)throw new Error("No session token. Run `zibby login` first.");let s=`${w()}/integrations/token/${e}`,n=await fetch(s,{method:"GET",headers:{Authorization:`Bearer ${r}`}});if(!n.ok){let f=await n.text().catch(()=>"");throw n.status===404?new Error(`${e} is not connected. Connect it at https://studio.zibby.dev/integrations`):n.status===401||n.status===403?new Error("Session expired. Run `zibby login` to re-authenticate."):new Error(`Failed to resolve ${e} token (${n.status}): ${f}`)}let t=await n.json();if(!t||typeof t!="object")throw new Error(`Invalid response from ${e} token endpoint: expected object, got ${typeof t}`);if(e==="jira"){if(!t.token||typeof t.token!="string")throw new Error(`Invalid jira token response: token is ${typeof t.token}, expected string`);if(!t.cloudId)throw new Error("Invalid jira token response: missing cloudId")}else if(e==="github"&&(!t.token||typeof t.token!="string"))throw new Error(`Invalid github token response: token is ${typeof t.token}, expected string`);let c=((t.expiresInSec||3e3)-120)*1e3;return l.set(e,{data:t,expiresAt:i+c}),t}function O(e){e?l.delete(e):l.clear()}var a=null;function p(e){let i=process.env.WORKFLOW_ENABLED_INTEGRATIONS;if(typeof i!="string"||i.trim()==="")return e;let o=new Set(i.split(",").map(s=>s.trim()).filter(Boolean));if(o.size===0)return e;let r={};for(let[s,n]of Object.entries(e))o.has(s)&&(r[s]=n);return r}async function A(){let e=Date.now();if(a&&a.expiresAt>e)return a.data;if(d()){let o={};for(let[s,n]of Object.entries(u))o[s]=!!process.env[n];let r=p(o);return a={data:r,expiresAt:e+6e4},r}let i=h();if(!i)return{};try{let o=await fetch(`${w()}/integrations/status`,{method:"GET",headers:{Authorization:`Bearer ${i}`}});if(!o.ok)return{};let r=await o.json(),s={};if(r&&typeof r=="object")for(let[t,c]of Object.entries(r))c&&typeof c=="object"&&"connected"in c&&(s[t]=!!c.connected);let n=p(s);return a={data:n,expiresAt:e+6e4},n}catch{return{}}}function B(){a=null}export{B as clearConnectedCache,O as clearTokenCache,A as getConnectedIntegrations,k as resolveIntegrationToken};
|
package/dist/index.js
CHANGED
|
@@ -149,7 +149,7 @@ ${b.join(`
|
|
|
149
149
|
|
|
150
150
|
${y}
|
|
151
151
|
`),p.debug(`Prompt length: ${f.length} chars`),process.env.STAGE!=="prod"&&p.debug(`Full prompt:
|
|
152
|
-
${f}`),r.invoke(f,d)}import{SKILLS as Np}from"@zibby/agent-workflow";import{registerSkill as Lp,getSkill as Mp,hasSkill as Dp,getAllSkills as Up,listSkillIds as jp}from"@zibby/agent-workflow";var Fo={READ_FILE:"read_file",WRITE_FILE:"write_file",LIST_DIRECTORY:"list_directory",RUN_COMMAND:"run_command",OPEN_URL:"open_url",WAIT:"wait"},Bo={LIST_PROJECTS:"jira_list_projects",SEARCH:"jira_search",GET_ISSUE:"jira_get_issue",CREATE_ISSUE:"jira_create_issue",LIST_SPRINTS:"jira_list_sprints",GET_SPRINT_ISSUES:"jira_get_sprint_issues",GET_COMMENTS:"jira_get_comments",ADD_COMMENT:"jira_add_comment",EDIT_ISSUE:"jira_edit_issue",TRANSITION_ISSUE:"jira_transition_issue"},Go={GET_USER:"github_get_user",LIST_ORGS:"github_list_orgs",LIST_REPOS:"github_list_repos",CLONE:"github_clone",SEARCH_REPOS:"github_search_repos",SEARCH_ISSUES:"github_search_issues",SEARCH_CODE:"github_search_code",GET_PR:"github_get_pr",GET_PR_DIFF:"github_get_pr_diff",LIST_PR_FILES:"github_list_pr_files",LIST_PR_COMMENTS:"github_list_pr_comments",LIST_COMMITS:"github_list_commits",GET_COMMIT:"github_get_commit",GET_FILE:"github_get_file",CREATE_ISSUE:"github_create_issue"},Ko={LIST_CHANNELS:"slack_list_channels",POST_MESSAGE:"slack_post_message",REPLY_TO_THREAD:"slack_reply_to_thread",ADD_REACTION:"slack_add_reaction",GET_CHANNEL_HISTORY:"slack_get_channel_history",GET_THREAD_REPLIES:"slack_get_thread_replies",GET_USERS:"slack_get_users",GET_USER_PROFILE:"slack_get_user_profile"},Jo={GENERATE:"run_generate",TEST:"run_test",STATUS:"run_status",CANCEL:"run_cancel",WAIT:"run_wait",ARTIFACTS:"run_artifacts",LIST_SPECS:"list_specs"},zo={GET_TEST_HISTORY:"memory_get_test_history",GET_SELECTORS:"memory_get_selectors",GET_PAGE_MODEL:"memory_get_page_model",GET_NAVIGATION:"memory_get_navigation",SAVE_INSIGHT:"memory_save_insight"},Yo={STORE:"memory_store",RECALL:"memory_recall",BRIEF:"memory_brief",END_SESSION:"memory_end_session",TASK_LOG:"task_log",TASK_HISTORY:"task_history"},Ho={INSTALL:"install_skill",UNINSTALL:"uninstall_skill",LIST_AVAILABLE:"list_available_skills"},Jl={...Fo,...Bo,...Go,...Ko,...Jo,...zo,...Yo,...Ho};import{existsSync as Wo,readFileSync as Vo}from"node:fs";import{homedir as Zo}from"node:os";import{join as Xo}from"node:path";var it=new Map,qo={github:"GITHUB_TOKEN",gitlab:"GITLAB_TOKEN",slack:"SLACK_BOT_TOKEN"};function Qo(){let s=process.env.ZIBBY_SELF_HOST;return s!=null&&s!==""&&s!=="0"&&s.toLowerCase()!=="false"}function es(){if(process.env.PROJECT_API_TOKEN)return process.env.PROJECT_API_TOKEN;if(process.env.ZIBBY_USER_TOKEN)return process.env.ZIBBY_USER_TOKEN;try{let s=Xo(Zo(),".zibby","config.json");return Wo(s)&&JSON.parse(Vo(s,"utf-8")).sessionToken||null}catch{return null}}function ts(){return process.env.ZIBBY_ACCOUNT_API_URL?process.env.ZIBBY_ACCOUNT_API_URL.replace(/\/$/,""):(process.env.ZIBBY_ENV||"prod")==="local"?"http://localhost:3001":process.env.ZIBBY_PROD_ACCOUNT_API_URL||"https://api-prod.zibby.app"}async function rs(s){if(Qo()){let l=qo[s];if(l&&process.env[l])return{token:process.env[l]}}let e=Date.now(),t=it.get(s);if(t&&t.expiresAt>e)return t.data;let r=es();if(!r)throw new Error("No session token. Run `zibby login` first.");let n=`${ts()}/integrations/token/${s}`,o=await fetch(n,{method:"GET",headers:{Authorization:`Bearer ${r}`}});if(!o.ok){let l=await o.text().catch(()=>"");throw o.status===404?new Error(`${s} is not connected. Connect it at https://studio.zibby.dev/integrations`):o.status===401||o.status===403?new Error("Session expired. Run `zibby login` to re-authenticate."):new Error(`Failed to resolve ${s} token (${o.status}): ${l}`)}let i=await o.json();if(!i||typeof i!="object")throw new Error(`Invalid response from ${s} token endpoint: expected object, got ${typeof i}`);if(s==="jira"){if(!i.token||typeof i.token!="string")throw new Error(`Invalid jira token response: token is ${typeof i.token}, expected string`);if(!i.cloudId)throw new Error("Invalid jira token response: missing cloudId")}else if(s==="github"&&(!i.token||typeof i.token!="string"))throw new Error(`Invalid github token response: token is ${typeof i.token}, expected string`);let c=((i.expiresInSec||3e3)-120)*1e3;return it.set(s,{data:i,expiresAt:e+c}),i}function ns(s){s?it.delete(s):it.clear()}import{readdir as os,access as vr,copyFile as ss,constants as Tr}from"fs/promises";import{join as at,relative as is}from"node:path";async function as(s={}){let{testResultsDir:e="test-results",testsDir:t="tests",projectRoot:r=process.cwd(),verbose:n=!0}=s;n&&console.log(`\u{1F3A5} Organizing test videos...
|
|
152
|
+
${f}`),r.invoke(f,d)}import{SKILLS as Np}from"@zibby/agent-workflow";import{registerSkill as Lp,getSkill as Mp,hasSkill as Dp,getAllSkills as Up,listSkillIds as jp}from"@zibby/agent-workflow";var Fo={READ_FILE:"read_file",WRITE_FILE:"write_file",LIST_DIRECTORY:"list_directory",RUN_COMMAND:"run_command",OPEN_URL:"open_url",WAIT:"wait"},Bo={LIST_PROJECTS:"jira_list_projects",SEARCH:"jira_search",GET_ISSUE:"jira_get_issue",CREATE_ISSUE:"jira_create_issue",LIST_SPRINTS:"jira_list_sprints",GET_SPRINT_ISSUES:"jira_get_sprint_issues",GET_COMMENTS:"jira_get_comments",ADD_COMMENT:"jira_add_comment",EDIT_ISSUE:"jira_edit_issue",TRANSITION_ISSUE:"jira_transition_issue"},Go={GET_USER:"github_get_user",LIST_ORGS:"github_list_orgs",LIST_REPOS:"github_list_repos",CLONE:"github_clone",SEARCH_REPOS:"github_search_repos",SEARCH_ISSUES:"github_search_issues",SEARCH_CODE:"github_search_code",GET_PR:"github_get_pr",GET_PR_DIFF:"github_get_pr_diff",LIST_PR_FILES:"github_list_pr_files",LIST_PR_COMMENTS:"github_list_pr_comments",LIST_COMMITS:"github_list_commits",GET_COMMIT:"github_get_commit",GET_FILE:"github_get_file",CREATE_ISSUE:"github_create_issue"},Ko={LIST_CHANNELS:"slack_list_channels",POST_MESSAGE:"slack_post_message",REPLY_TO_THREAD:"slack_reply_to_thread",ADD_REACTION:"slack_add_reaction",GET_CHANNEL_HISTORY:"slack_get_channel_history",GET_THREAD_REPLIES:"slack_get_thread_replies",GET_USERS:"slack_get_users",GET_USER_PROFILE:"slack_get_user_profile"},Jo={GENERATE:"run_generate",TEST:"run_test",STATUS:"run_status",CANCEL:"run_cancel",WAIT:"run_wait",ARTIFACTS:"run_artifacts",LIST_SPECS:"list_specs"},zo={GET_TEST_HISTORY:"memory_get_test_history",GET_SELECTORS:"memory_get_selectors",GET_PAGE_MODEL:"memory_get_page_model",GET_NAVIGATION:"memory_get_navigation",SAVE_INSIGHT:"memory_save_insight"},Yo={STORE:"memory_store",RECALL:"memory_recall",BRIEF:"memory_brief",END_SESSION:"memory_end_session",TASK_LOG:"task_log",TASK_HISTORY:"task_history"},Ho={INSTALL:"install_skill",UNINSTALL:"uninstall_skill",LIST_AVAILABLE:"list_available_skills"},Jl={...Fo,...Bo,...Go,...Ko,...Jo,...zo,...Yo,...Ho};import{existsSync as Wo,readFileSync as Vo}from"node:fs";import{homedir as Zo}from"node:os";import{join as Xo}from"node:path";var it=new Map,qo={github:"GITHUB_TOKEN",gitlab:"GITLAB_TOKEN",sentry:"SENTRY_AUTH_TOKEN",slack:"SLACK_BOT_TOKEN"};function Qo(){let s=process.env.ZIBBY_SELF_HOST;return s!=null&&s!==""&&s!=="0"&&s.toLowerCase()!=="false"}function es(){if(process.env.PROJECT_API_TOKEN)return process.env.PROJECT_API_TOKEN;if(process.env.ZIBBY_USER_TOKEN)return process.env.ZIBBY_USER_TOKEN;try{let s=Xo(Zo(),".zibby","config.json");return Wo(s)&&JSON.parse(Vo(s,"utf-8")).sessionToken||null}catch{return null}}function ts(){return process.env.ZIBBY_ACCOUNT_API_URL?process.env.ZIBBY_ACCOUNT_API_URL.replace(/\/$/,""):(process.env.ZIBBY_ENV||"prod")==="local"?"http://localhost:3001":process.env.ZIBBY_PROD_ACCOUNT_API_URL||"https://api-prod.zibby.app"}async function rs(s){if(Qo()){let l=qo[s];if(l&&process.env[l])return{token:process.env[l]}}let e=Date.now(),t=it.get(s);if(t&&t.expiresAt>e)return t.data;let r=es();if(!r)throw new Error("No session token. Run `zibby login` first.");let n=`${ts()}/integrations/token/${s}`,o=await fetch(n,{method:"GET",headers:{Authorization:`Bearer ${r}`}});if(!o.ok){let l=await o.text().catch(()=>"");throw o.status===404?new Error(`${s} is not connected. Connect it at https://studio.zibby.dev/integrations`):o.status===401||o.status===403?new Error("Session expired. Run `zibby login` to re-authenticate."):new Error(`Failed to resolve ${s} token (${o.status}): ${l}`)}let i=await o.json();if(!i||typeof i!="object")throw new Error(`Invalid response from ${s} token endpoint: expected object, got ${typeof i}`);if(s==="jira"){if(!i.token||typeof i.token!="string")throw new Error(`Invalid jira token response: token is ${typeof i.token}, expected string`);if(!i.cloudId)throw new Error("Invalid jira token response: missing cloudId")}else if(s==="github"&&(!i.token||typeof i.token!="string"))throw new Error(`Invalid github token response: token is ${typeof i.token}, expected string`);let c=((i.expiresInSec||3e3)-120)*1e3;return it.set(s,{data:i,expiresAt:e+c}),i}function ns(s){s?it.delete(s):it.clear()}import{readdir as os,access as vr,copyFile as ss,constants as Tr}from"fs/promises";import{join as at,relative as is}from"node:path";async function as(s={}){let{testResultsDir:e="test-results",testsDir:t="tests",projectRoot:r=process.cwd(),verbose:n=!0}=s;n&&console.log(`\u{1F3A5} Organizing test videos...
|
|
153
153
|
`);let o=at(r,e),i=at(r,t);try{let c=await os(o),l=0;for(let a of c){if(a.startsWith("."))continue;let u=at(o,a,"video.webm");try{await vr(u,Tr.F_OK)}catch{continue}let d=a.replace(/-chromium$/,"").replace(/-firefox$/,"").replace(/-webkit$/,""),m=await ls(i,d);if(m){let f=m.replace(/\.spec\.(js|ts)$/,".spec.webm");await ss(u,f),n&&console.log(`\u2705 ${is(r,f)}`),l++}else n&&console.log(`\u26A0\uFE0F Could not find test file for: ${a}`)}return n&&(console.log(`
|
|
154
154
|
\u{1F3AC} Organized ${l} video(s)`),console.log(`\u{1F4C2} Videos are now next to their test files in ${t}/`)),{movedCount:l,success:!0}}catch(c){return n&&console.error("\u274C Error organizing videos:",c.message),{movedCount:0,success:!1,error:c.message}}}async function ls(s,e){let t=e.split("-");for(let r=t.length;r>0;r--){let o=t.slice(0,r).join("/");for(let i of["js","ts"]){let c=at(s,`${o}.spec.${i}`);try{return await vr(c,Tr.F_OK),c}catch{}}}return null}var Be=class{constructor(e,t={}){this.apiKey=e,this.baseUrl=t.baseUrl||process.env.ZIBBY_API_URL||"https://api-prod.zibby.app",this.enabled=!!e}isEnabled(){return this.enabled}};function Ar(){let s=process.env.ZIBBY_API_KEY;return new Be(s)}import{execSync as cs}from"node:child_process";import{existsSync as us,mkdirSync as ps}from"node:fs";import{join as fs}from"node:path";async function ds(s={}){let{baseDir:e="/workspace/repos",repos:t=null,depth:r=1,branch:n=null}=s,o=process.env.REPOS;if(!o)throw new Error("REPOS environment variable not set. Are you running in a Zibby workflow container?");let i;try{i=JSON.parse(o)}catch(a){throw new Error(`Failed to parse REPOS env var: ${a.message}`,{cause:a})}if(!Array.isArray(i)||i.length===0)throw new Error("No repositories configured for this project");let c=t?i.filter(a=>t.includes(a.name)):i;if(c.length===0)throw new Error(`No matching repositories found. Available: ${i.map(a=>a.name).join(", ")}`);us(e)||ps(e,{recursive:!0});let l={};return await Promise.all(c.map(async a=>{let u=a.provider||"github",d=u==="gitlab"?process.env.GITLAB_TOKEN:process.env.GITHUB_TOKEN;if(!d){console.error(`${u.toUpperCase()}_TOKEN not set, skipping ${a.name}`),l[a.name]=null;return}let m=a.name.replace(/\//g,"-"),f=fs(e,m),g=a.cloneUrl||a.url;if(!g){console.error(`Repository "${a.name}" has no clone URL`),l[a.name]=null;return}let y;u==="gitlab"?y=g.replace(/^https:\/\//,`https://oauth2:${d}@`):y=g.replace(/^https:\/\//,`https://x-access-token:${d}@`);let h=["clone"];r>0&&h.push("--depth",r.toString()),n&&h.push("--branch",n),h.push(y,f);let b=`git ${h.join(" ")}`;console.log(`Cloning ${a.name} (${u}) to ${f}...`);try{cs(b,{stdio:"pipe",env:{...process.env,GIT_TERMINAL_PROMPT:"0"}}),console.log(`Repository ${a.name} cloned successfully`),l[a.name]=f}catch(w){let E=w.message.replace(d,"***").replace(y,g);console.error(`Failed to clone ${a.name}: ${E}`),l[a.name]=null}})),l}var $r=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;function ms(s){return typeof s=="string"&&$r.test(s)}var Or=ms;function gs(s){if(!Or(s))throw TypeError("Invalid UUID");let e;return Uint8Array.of((e=parseInt(s.slice(0,8),16))>>>24,e>>>16&255,e>>>8&255,e&255,(e=parseInt(s.slice(9,13),16))>>>8,e&255,(e=parseInt(s.slice(14,18),16))>>>8,e&255,(e=parseInt(s.slice(19,23),16))>>>8,e&255,(e=parseInt(s.slice(24,36),16))/1099511627776&255,e/4294967296&255,e>>>24&255,e>>>16&255,e>>>8&255,e&255)}var At=gs;var K=[];for(let s=0;s<256;++s)K.push((s+256).toString(16).slice(1));function Ir(s,e=0){return(K[s[e+0]]+K[s[e+1]]+K[s[e+2]]+K[s[e+3]]+"-"+K[s[e+4]]+K[s[e+5]]+"-"+K[s[e+6]]+K[s[e+7]]+"-"+K[s[e+8]]+K[s[e+9]]+"-"+K[s[e+10]]+K[s[e+11]]+K[s[e+12]]+K[s[e+13]]+K[s[e+14]]+K[s[e+15]]).toLowerCase()}function hs(s){s=unescape(encodeURIComponent(s));let e=new Uint8Array(s.length);for(let t=0;t<s.length;++t)e[t]=s.charCodeAt(t);return e}var Cr="6ba7b810-9dad-11d1-80b4-00c04fd430c8",Pr="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function $t(s,e,t,r,n,o){let i=typeof t=="string"?hs(t):t,c=typeof r=="string"?At(r):r;if(typeof r=="string"&&(r=At(r)),r?.length!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let l=new Uint8Array(16+i.length);if(l.set(c),l.set(i,c.length),l=e(l),l[6]=l[6]&15|s,l[8]=l[8]&63|128,n){if(o=o||0,o<0||o+16>n.length)throw new RangeError(`UUID byte range ${o}:${o+15} is out of buffer bounds`);for(let a=0;a<16;++a)n[o+a]=l[a];return n}return Ir(l)}import{createHash as ys}from"crypto";function bs(s){return Array.isArray(s)?s=Buffer.from(s):typeof s=="string"&&(s=Buffer.from(s,"utf8")),ys("sha1").update(s).digest()}var kr=bs;function Ot(s,e,t,r){return $t(80,kr,s,e,t,r)}Ot.DNS=Cr;Ot.URL=Pr;var It=Ot;var Nr="@zibby/core ZibbySessionStore/1",Ge=class{constructor({apiUrl:e,apiKey:t,workflowUuid:r,fetchImpl:n=globalThis.fetch}){if(!e)throw new Error("ZibbySessionStore: apiUrl is required");if(!t)throw new Error("ZibbySessionStore: apiKey is required");if(!r)throw new Error("ZibbySessionStore: workflowUuid is required");this._apiUrl=String(e).replace(/\/+$/,""),this._apiKey=t,this._workflowUuid=r,this._fetch=n}async append(e,t){if(!Array.isArray(t)||t.length===0)return;let r=`${this._apiUrl}/workflows/${encodeURIComponent(this._workflowUuid)}/sessions/${encodeURIComponent(e.sessionId)}/append`,n=await this._fetch(r,{method:"POST",headers:{Authorization:`Bearer ${this._apiKey}`,"Content-Type":"application/json","User-Agent":Nr},body:JSON.stringify({entries:t})});if(!n.ok)throw new Error(`ZibbySessionStore.append HTTP ${n.status}`)}async load(e){let t=`${this._apiUrl}/workflows/${encodeURIComponent(this._workflowUuid)}/sessions/${encodeURIComponent(e.sessionId)}`,r;try{r=await this._fetch(t,{method:"GET",headers:{Authorization:`Bearer ${this._apiKey}`,"User-Agent":Nr}})}catch{return null}if(r.status===404||!r.ok)return null;let n;try{n=await r.json()}catch{return null}let o=Array.isArray(n?.entries)?n.entries:null;return o&&o.length>0?o:null}};var Ss="6ba7b810-9dad-11d1-80b4-00c04fd430c8",Rr=new Set;function ws(){return(process.env.PROGRESS_API_URL||process.env.ZIBBY_API_BASE||"").replace(/\/executions\/?$/,"").replace(/\/+$/,"")}function Lr({namespace:s=Ss}={}){return{id:"session",description:"Persist agent conversation state across invocations (Claude-only in v1)",envKeys:[],tools:[],invokeAgentOptions(e,t){let r=e?.conversationId,n=e?.workflowUuid;if(!r||!n)return null;let o=t?.agentType;if(o&&o!=="claude")return Rr.has(o)||(console.warn(`[SKILLS.SESSION] agent type '${o}' does not support native sessions \u2014 node running stateless`),Rr.add(o)),null;let i=It(`${n}:${r}`,s),c=ws(),l=process.env.PROJECT_API_TOKEN||process.env.ZIBBY_USER_TOKEN,a=null;if(c&&l)try{a=new Ge({apiUrl:c,apiKey:l,workflowUuid:n})}catch(m){console.warn(`[SKILLS.SESSION] failed to build SessionStore: ${m.message}`),a=null}return e.resetConversation?{sessionId:i,resume:i,forkSession:!0,...a&&{sessionStore:a}}:e.hasPriorSession?{resume:i,...a&&{sessionStore:a}}:{sessionId:i,...a&&{sessionStore:a}}}}}import{spawn as Mr}from"node:child_process";import{readFileSync as _s,writeFileSync as xs,existsSync as lt}from"node:fs";import{homedir as Dr}from"node:os";import{join as _e}from"node:path";async function Es(){let s=_e(Dr(),".local/share/cursor-agent/versions");if(!lt(s))throw new Error(`cursor-agent not found at ${s}. Please install cursor-agent first.`);return console.log(`\u{1F527} Patching cursor-agent for CI/CD...
|
|
155
155
|
`),new Promise((e,t)=>{let r=_e(__dirname,"../../scripts/patch-cursor-mcp.py");if(!lt(r)){t(new Error("Patch script not found"));return}let n=Mr("python3",[r],{stdio:"inherit"});n.on("close",o=>{o===0?e({success:!0}):t(new Error(`Patch failed with code ${o}`))}),n.on("error",o=>{t(o)})})}function vs(){let s=_e(Dr(),".local/share/cursor-agent/versions");if(!lt(s))return{patched:!1,installed:!1};try{let e=nn("fs").readdirSync(s);if(e.length===0)return{patched:!1,installed:!1};let t=e.sort().reverse()[0],r=_e(s,t,"index.js");return lt(r)?{patched:_s(r,"utf-8").includes("AUTO-APPROVE MCP TOOLS FOR CI/CD"),installed:!0,path:r}:{patched:!1,installed:!1}}catch(e){return{patched:!1,installed:!1,error:e.message}}}async function Ts(s){return console.log(`\u{1F511} Getting MCP approval keys...
|
package/dist/package.json
CHANGED