@zibby/skills 0.1.94 → 0.1.95

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.
@@ -1,4 +1,4 @@
1
- import{spawnSync as d}from"node:child_process";import{existsSync as s,mkdirSync as c,readdirSync as h,writeFileSync as m}from"node:fs";import{createHash as u}from"node:crypto";import{join as n}from"node:path";import{SKILL_META as y}from"@zibby/skill-ids";function i(){return process.env.CBM_BIN||"/usr/local/bin/codebase-memory-mcp"}function a(){if(process.env.CBM_CACHE_DIR)return process.env.CBM_CACHE_DIR;let e=process.env.WORKSPACE||process.env.ZIBBY_WORKSPACE;return e?n(e,".zibby","cbm-cache"):"/tmp/zibby-cbm-cache"}function l(){let e=process.env.WORKSPACE||process.env.ZIBBY_WORKSPACE||"/workspace",r=n(e,".zibby","repos");try{if(s(r)){let t=h(r,{withFileTypes:!0}).filter(o=>o.isDirectory()).map(o=>n(r,o.name));if(t.length===1)return t[0];if(t.length>1)return r}}catch{}return s(e)?e:null}function _(e){return u("sha256").update(e).digest("hex").slice(0,16)}var x={id:"codebase-memory",serverName:"codebase_memory",meta:y["codebase-memory"],allowedTools:["mcp__codebase_memory__*"],description:"Codebase memory \u2014 code-graph + semantic index over the checked-out repo (architecture, graph search, dependency trace, change detection)",promptFragment:`## Codebase Memory (code-graph + semantic index over THIS repo)
1
+ import{spawnSync as d}from"node:child_process";import{existsSync as n,mkdirSync as c,readdirSync as h,writeFileSync as m}from"node:fs";import{createHash as u}from"node:crypto";import{join as s}from"node:path";import{SKILL_META as y}from"@zibby/skill-ids";function i(){return process.env.CBM_BIN||"/usr/local/bin/codebase-memory-mcp"}function a(){if(process.env.CBM_CACHE_DIR)return process.env.CBM_CACHE_DIR;let e=process.env.WORKSPACE||process.env.ZIBBY_WORKSPACE;return e?s(e,".zibby","cbm-cache"):"/tmp/zibby-cbm-cache"}function l(){let e=process.env.WORKSPACE||process.env.ZIBBY_WORKSPACE||"/workspace",r=s(e,".zibby","repos");try{if(n(r)){let t=h(r,{withFileTypes:!0}).filter(o=>o.isDirectory()).map(o=>s(r,o.name));if(t.length===1)return t[0];if(t.length>1)return r}}catch{}return null}function _(e){return u("sha256").update(e).digest("hex").slice(0,16)}var x={id:"codebase-memory",serverName:"codebase_memory",meta:y["codebase-memory"],allowedTools:["mcp__codebase_memory__*"],description:"Codebase memory \u2014 code-graph + semantic index over the checked-out repo (architecture, graph search, dependency trace, change detection)",promptFragment:`## Codebase Memory (code-graph + semantic index over THIS repo)
2
2
  The checked-out repository is indexed into a queryable code graph + semantic
3
3
  index. Reach for these instead of blindly grepping when you need structure,
4
4
  relationships, or "where does X live / what depends on Y":
@@ -10,5 +10,5 @@ relationships, or "where does X live / what depends on Y":
10
10
  - get_code_snippet / search_code: pull the exact code for a node / text match.
11
11
  - index_status / list_projects: confirm the index is present before querying.
12
12
  The repo is indexed for you at the start of the run; if a query comes back
13
- empty, call index_status, and only re-index (index_repository) if needed.`,resolve(){let e=a();try{c(e,{recursive:!0})}catch{}let r={CBM_CACHE_DIR:e};return process.env.WORKSPACE&&(r.WORKSPACE=process.env.WORKSPACE),{type:"stdio",command:i(),args:[],env:r,description:this.description,alwaysLoad:!0}},invokeAgentOptions(){try{let e=l();if(!e)return{};let r=a();try{c(r,{recursive:!0})}catch{}let t=n(r,`.cbm-indexed-${_(e)}`);if(s(t))return{};let o=i();if(!s(o)&&!process.env.CBM_BIN)return{};let p=d(o,["cli","index_repository",JSON.stringify({repo_path:e})],{env:{...process.env,CBM_CACHE_DIR:r},encoding:"utf-8",timeout:300*1e3,maxBuffer:32*1024*1024});try{m(t,`${new Date().toISOString()} status=${p.status}
13
+ empty, call index_status, and only re-index (index_repository) if needed.`,resolve(){let e=a();try{c(e,{recursive:!0})}catch{}let r={CBM_CACHE_DIR:e};return process.env.WORKSPACE&&(r.WORKSPACE=process.env.WORKSPACE),{type:"stdio",command:i(),args:[],env:r,description:this.description,alwaysLoad:!0}},invokeAgentOptions(){try{let e=l();if(!e)return{};let r=a();try{c(r,{recursive:!0})}catch{}let t=s(r,`.cbm-indexed-${_(e)}`);if(n(t))return{};let o=i();if(!n(o)&&!process.env.CBM_BIN)return{};let p=d(o,["cli","index_repository",JSON.stringify({repo_path:e})],{env:{...process.env,CBM_CACHE_DIR:r},encoding:"utf-8",timeout:300*1e3,maxBuffer:32*1024*1024});try{m(t,`${new Date().toISOString()} status=${p.status}
14
14
  `)}catch{}}catch{}return{}}};export{x as codebaseMemorySkill};
package/dist/gitlab.js CHANGED
@@ -1,8 +1,8 @@
1
- import{existsSync as x}from"fs";import{fileURLToPath as E}from"url";import{dirname as U,resolve as C}from"path";var A=Object.freeze({SENTRY:"sentry",JIRA:"jira",GITHUB:"github",GITLAB:"gitlab",SLACK:"slack",LARK:"lark",OPENAI_BILLING:"openai_billing",ANTHROPIC_BILLING:"anthropic_billing",CURSOR_ADMIN:"cursor_admin",NOTION:"notion",GOOGLE:"google",PLANE:"plane",LINEAR:"linear",FIGMA:"figma",HUBSPOT:"hubspot",OPEN_DESIGN:"open_design",LINKEDIN_PERSONAL:"linkedin_personal",LINKEDIN_BUSINESS:"linkedin_business",DISCORD:"discord"}),H=Object.freeze({sentry:{id:"sentry",name:"Sentry",connectPath:"/integrations?provider=sentry"},jira:{id:"jira",name:"Jira",connectPath:"/integrations?provider=jira"},github:{id:"github",name:"GitHub",connectPath:"/integrations?provider=github"},gitlab:{id:"gitlab",name:"GitLab",connectPath:"/integrations?provider=gitlab"},slack:{id:"slack",name:"Slack",connectPath:"/integrations?provider=slack"},lark:{id:"lark",name:"Lark",connectPath:"/integrations?provider=lark"},openai_billing:{id:"openai_billing",name:"OpenAI Admin",connectPath:"/integrations?provider=openai_billing"},anthropic_billing:{id:"anthropic_billing",name:"Anthropic Admin",connectPath:"/integrations?provider=anthropic_billing"},cursor_admin:{id:"cursor_admin",name:"Cursor Admin",connectPath:"/integrations?provider=cursor_admin"},notion:{id:"notion",name:"Notion",connectPath:"/integrations?provider=notion"},google:{id:"google",name:"Google Docs",connectPath:"/integrations?provider=google"},plane:{id:"plane",name:"Plane",connectPath:"/integrations?provider=plane"},linear:{id:"linear",name:"Linear",connectPath:"/integrations?provider=linear"},figma:{id:"figma",name:"Figma",connectPath:"/integrations?provider=figma"},hubspot:{id:"hubspot",name:"HubSpot",connectPath:"/integrations?provider=hubspot"},open_design:{id:"open_design",name:"OpenDesign",connectPath:"/integrations?provider=open_design"},linkedin_personal:{id:"linkedin_personal",name:"LinkedIn (Personal)",connectPath:"/integrations?provider=linkedin_personal"},linkedin_business:{id:"linkedin_business",name:"LinkedIn (Business)",connectPath:"/integrations?provider=linkedin_business"},discord:{id:"discord",name:"Discord",connectPath:"/integrations?provider=discord"}});import{spawn as z,execSync as Y}from"child_process";import{existsSync as Q,mkdirSync as V,readdirSync as X,statSync as ee,readFileSync as te}from"fs";import{resolve as ie,join as se,basename as ne}from"path";function R(l,n,r,s,e="clone"){try{l(`git -C "${n}" remote set-url origin "${r}"`,{stdio:"pipe"})}catch(i){let t=String(i?.message||i);s&&(t=t.split(s).join("***")),console.error(`[${e}] WARNING: failed to strip token from .git/config: ${t}`)}}import $ from"crypto";var L=/<!--\s*zbfp:([a-f0-9]{8,20})\s*-->/i,O=/<!--\s*zbreview-summary\s*-->/i;function q(l){return String(l||"").replace(L,"").replace(O,"").replace(/\b(?:lines?|L)\s*#?\d+(?:\s*[-–]\s*\d+)?/gi,"").replace(/[`*_>#~]/g,"").replace(/\s+/g," ").trim().toLowerCase().slice(0,400)}function G(l,n){return $.createHash("sha256").update(`${String(l||"")}\0${q(n)}`).digest("hex").slice(0,12)}function M(l){return`
1
+ import{existsSync as M}from"fs";import{fileURLToPath as E}from"url";import{dirname as U,resolve as C}from"path";var A=Object.freeze({SENTRY:"sentry",JIRA:"jira",GITHUB:"github",GITLAB:"gitlab",SLACK:"slack",LARK:"lark",OPENAI_BILLING:"openai_billing",ANTHROPIC_BILLING:"anthropic_billing",CURSOR_ADMIN:"cursor_admin",NOTION:"notion",GOOGLE:"google",PLANE:"plane",LINEAR:"linear",FIGMA:"figma",HUBSPOT:"hubspot",OPEN_DESIGN:"open_design",LINKEDIN_PERSONAL:"linkedin_personal",LINKEDIN_BUSINESS:"linkedin_business",DISCORD:"discord"}),H=Object.freeze({sentry:{id:"sentry",name:"Sentry",connectPath:"/integrations?provider=sentry"},jira:{id:"jira",name:"Jira",connectPath:"/integrations?provider=jira"},github:{id:"github",name:"GitHub",connectPath:"/integrations?provider=github"},gitlab:{id:"gitlab",name:"GitLab",connectPath:"/integrations?provider=gitlab"},slack:{id:"slack",name:"Slack",connectPath:"/integrations?provider=slack"},lark:{id:"lark",name:"Lark",connectPath:"/integrations?provider=lark"},openai_billing:{id:"openai_billing",name:"OpenAI Admin",connectPath:"/integrations?provider=openai_billing"},anthropic_billing:{id:"anthropic_billing",name:"Anthropic Admin",connectPath:"/integrations?provider=anthropic_billing"},cursor_admin:{id:"cursor_admin",name:"Cursor Admin",connectPath:"/integrations?provider=cursor_admin"},notion:{id:"notion",name:"Notion",connectPath:"/integrations?provider=notion"},google:{id:"google",name:"Google Docs",connectPath:"/integrations?provider=google"},plane:{id:"plane",name:"Plane",connectPath:"/integrations?provider=plane"},linear:{id:"linear",name:"Linear",connectPath:"/integrations?provider=linear"},figma:{id:"figma",name:"Figma",connectPath:"/integrations?provider=figma"},hubspot:{id:"hubspot",name:"HubSpot",connectPath:"/integrations?provider=hubspot"},open_design:{id:"open_design",name:"OpenDesign",connectPath:"/integrations?provider=open_design"},linkedin_personal:{id:"linkedin_personal",name:"LinkedIn (Personal)",connectPath:"/integrations?provider=linkedin_personal"},linkedin_business:{id:"linkedin_business",name:"LinkedIn (Business)",connectPath:"/integrations?provider=linkedin_business"},discord:{id:"discord",name:"Discord",connectPath:"/integrations?provider=discord"}});import{spawn as z,execSync as Y}from"child_process";import{existsSync as Q,mkdirSync as V,readdirSync as X,statSync as ee,readFileSync as te}from"fs";import{resolve as ie,join as se,basename as ne}from"path";function R(l,n,r,s,e="clone"){try{l(`git -C "${n}" remote set-url origin "${r}"`,{stdio:"pipe"})}catch(i){let t=String(i?.message||i);s&&(t=t.split(s).join("***")),console.error(`[${e}] WARNING: failed to strip token from .git/config: ${t}`)}}import $ from"crypto";var L=/<!--\s*zbfp:([a-f0-9]{8,20})\s*-->/i,O=/<!--\s*zbreview-summary\s*-->/i;function q(l){return String(l||"").replace(L,"").replace(O,"").replace(/\b(?:lines?|L)\s*#?\d+(?:\s*[-–]\s*\d+)?/gi,"").replace(/[`*_>#~]/g,"").replace(/\s+/g," ").trim().toLowerCase().slice(0,400)}function G(l,n){return $.createHash("sha256").update(`${String(l||"")}\0${q(n)}`).digest("hex").slice(0,12)}function x(l){return`
2
2
 
3
3
  <!-- zbfp:${l} -->`}var N=`
4
4
 
5
- <!-- zbreview-summary -->`;function v(l){let n=L.exec(String(l||""));return n?n[1].toLowerCase():null}function k(l){return O.test(String(l||""))}function P(l,n){let r=new Set([...n||[]].map(i=>String(i).toLowerCase())),s=[],e=0;for(let i of Array.isArray(l)?l:[]){if(!i||!i.body)continue;let t=G(i.path,i.body);if(r.has(t)){e+=1;continue}r.add(t),s.push({...i,_fp:t,body:`${String(i.body)}${M(t)}`})}return{toPost:s,skipped:e}}function B(){if(process.env.MCP_SKILL_PATH)return process.env.MCP_SKILL_PATH;let l=U(E(import.meta.url)),n=C(l,"..","bin","mcp-skill.mjs");return x(n)?n:null}function J(){let l=process.env.GITLAB_API_URL;if(l)return l.replace(/\/+$/,"");let n=(process.env.GITLAB_URL||process.env.GITLAB_INSTANCE_URL||"https://gitlab.com").trim().replace(/\/+$/,"");return/\/api\/v\d+$/.test(n)?n:`${n}/api/v4`}function D(){if(process.env.GITLAB_OAUTH_TOKEN)return{Authorization:`Bearer ${process.env.GITLAB_OAUTH_TOKEN}`};let l=process.env.GITLAB_TOKEN;if(!l)throw new Error("GitLab is not connected: set GITLAB_TOKEN (personal/project access token, api scope) or GITLAB_OAUTH_TOKEN.");return{"PRIVATE-TOKEN":l}}async function h(l,n={}){let r=/^https?:\/\//.test(l)?l:`${J()}${l}`,s={Accept:"application/json","User-Agent":"Zibby-App",...D(),...n.body?{"Content-Type":"application/json"}:{}},e=await fetch(r,{method:n.method||"GET",headers:s,body:n.body?JSON.stringify(n.body):void 0});if(!e.ok){let i=await e.text().catch(()=>"");throw new Error(`GitLab API ${e.status}: ${i.slice(0,300)}`)}return n.raw?e.text():e.json()}function T(){let l=process.env.GITLAB_API_URL;return(process.env.GITLAB_URL||process.env.GITLAB_INSTANCE_URL||(l?l.replace(/\/api\/v\d+\/?$/,""):"")||"https://gitlab.com").trim().replace(/\/+$/,"").replace(/\/api\/v\d+$/,"")}function F(){return process.env.GITLAB_OAUTH_TOKEN||process.env.GITLAB_TOKEN||null}function g(l){let n=String(l);return/^\d+$/.test(n)?n:encodeURIComponent(n)}var ge={id:"gitlab",serverName:"gitlab",allowedTools:["mcp__gitlab__*"],requiresIntegration:A.GITLAB,envKeys:["GITLAB_TOKEN","GITLAB_OAUTH_TOKEN","GITLAB_INSTANCE_URL","GITLAB_API_URL"],description:"GitLab \u2014 merge requests, diffs, MR reviews/discussions, issues",promptFragment:`## GitLab (connected)
5
+ <!-- zbreview-summary -->`;function v(l){let n=L.exec(String(l||""));return n?n[1].toLowerCase():null}function k(l){return O.test(String(l||""))}function P(l,n){let r=new Set([...n||[]].map(i=>String(i).toLowerCase())),s=[],e=0;for(let i of Array.isArray(l)?l:[]){if(!i||!i.body)continue;let t=G(i.path,i.body);if(r.has(t)){e+=1;continue}r.add(t),s.push({...i,_fp:t,body:`${String(i.body)}${x(t)}`})}return{toPost:s,skipped:e}}function B(){if(process.env.MCP_SKILL_PATH)return process.env.MCP_SKILL_PATH;let l=U(E(import.meta.url)),n=C(l,"..","bin","mcp-skill.mjs");return M(n)?n:null}function J(){let l=process.env.GITLAB_API_URL;if(l)return l.replace(/\/+$/,"");let n=(process.env.GITLAB_URL||process.env.GITLAB_INSTANCE_URL||"https://gitlab.com").trim().replace(/\/+$/,"");return/\/api\/v\d+$/.test(n)?n:`${n}/api/v4`}function D(){if(process.env.GITLAB_OAUTH_TOKEN)return{Authorization:`Bearer ${process.env.GITLAB_OAUTH_TOKEN}`};let l=process.env.GITLAB_TOKEN;if(!l)throw new Error("GitLab is not connected: set GITLAB_TOKEN (personal/project access token, api scope) or GITLAB_OAUTH_TOKEN.");return{"PRIVATE-TOKEN":l}}async function h(l,n={}){let r=/^https?:\/\//.test(l)?l:`${J()}${l}`,s={Accept:"application/json","User-Agent":"Zibby-App",...D(),...n.body?{"Content-Type":"application/json"}:{}},e=await fetch(r,{method:n.method||"GET",headers:s,body:n.body?JSON.stringify(n.body):void 0});if(!e.ok){let i=await e.text().catch(()=>"");throw new Error(`GitLab API ${e.status}: ${i.slice(0,300)}`)}return n.raw?e.text():e.json()}function T(){let l=process.env.GITLAB_API_URL;return(process.env.GITLAB_URL||process.env.GITLAB_INSTANCE_URL||(l?l.replace(/\/api\/v\d+\/?$/,""):"")||"https://gitlab.com").trim().replace(/\/+$/,"").replace(/\/api\/v\d+$/,"")}function F(){return process.env.GITLAB_OAUTH_TOKEN||process.env.GITLAB_TOKEN||null}function g(l){let n=String(l);return/^\d+$/.test(n)?n:encodeURIComponent(n)}var ge={id:"gitlab",serverName:"gitlab",allowedTools:["mcp__gitlab__*"],requiresIntegration:A.GITLAB,envKeys:["GITLAB_TOKEN","GITLAB_OAUTH_TOKEN","GITLAB_INSTANCE_URL","GITLAB_API_URL"],description:"GitLab \u2014 merge requests, diffs, MR reviews/discussions, issues",promptFragment:`## GitLab (connected)
6
6
  You have access to the user's GitLab projects via the REST API (cloud gitlab.com OR self-hosted). A "merge request" (MR) is GitLab's pull request. An MR is addressed by a PROJECT (numeric id OR full path like "group/repo") and an \`iid\` (the per-project MR number shown in the URL). For projects, prefer the full path form ("group/subgroup/repo") \u2014 it's what users have. Available tools:
7
7
 
8
8
  ### Discovery