shared-context-ai 0.1.34 → 0.1.35
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/discovery.d.ts +4 -4
- package/dist/discovery.js +6 -6
- package/dist/index.js +72 -171
- package/package.json +1 -1
package/dist/discovery.d.ts
CHANGED
|
@@ -21,13 +21,13 @@ interface DiscoveredResource {
|
|
|
21
21
|
license?: string;
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
|
-
interface
|
|
25
|
-
|
|
24
|
+
interface PluginMembership {
|
|
25
|
+
pluginImportPath: string;
|
|
26
26
|
memberImportPaths: string[];
|
|
27
27
|
}
|
|
28
28
|
interface DiscoveryResult {
|
|
29
29
|
resources: DiscoveredResource[];
|
|
30
|
-
|
|
30
|
+
pluginMemberships: PluginMembership[];
|
|
31
31
|
pluginName?: string;
|
|
32
32
|
formatLabel?: string;
|
|
33
33
|
}
|
|
@@ -39,4 +39,4 @@ interface DiscoveryOptions {
|
|
|
39
39
|
}
|
|
40
40
|
declare function discoverResources(rootPath: string, options?: DiscoveryOptions): DiscoveryResult;
|
|
41
41
|
|
|
42
|
-
export { type
|
|
42
|
+
export { type DiscoveredResource, type DiscoveryOptions, type DiscoveryResult, type PluginMembership, discoverResources };
|
package/dist/discovery.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var G=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var se=Object.prototype.hasOwnProperty;var re=(e,t)=>{for(var
|
|
2
|
+
"use strict";var G=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var se=Object.prototype.hasOwnProperty;var re=(e,t)=>{for(var c in t)G(e,c,{get:t[c],enumerable:!0})},ne=(e,t,c,$)=>{if(t&&typeof t=="object"||typeof t=="function")for(let M of te(t))!se.call(e,M)&&M!==c&&G(e,M,{get:()=>t[M],enumerable:!($=ee(t,M))||$.enumerable});return e};var ie=e=>ne(G({},"__esModule",{value:!0}),e);var ue={};re(ue,{discoverResources:()=>le});module.exports=ie(ue);var f=require("fs"),h=require("path"),Z=require("crypto");var U=".context-plugin",Y="manifest.json";function V(e,t){return{version:1,name:e.name||"Untitled Plugin",description:e.description||void 0,resources:t.map(c=>c.resourceRef),...e.author?{author:typeof e.author=="string"?{name:e.author}:{name:e.author.name||"",url:e.author.url}}:{},...e.homepage?{homepage:e.homepage}:{},...e.license?{license:e.license}:{}}}function oe(e,t){return{version:1,name:e.name||"Untitled Extension",description:e.description||void 0,resources:t.map(c=>c.resourceRef),...e.author?{author:typeof e.author=="string"?{name:e.author}:{name:e.author.name||"",url:e.author.url}}:{},...e.homepage?{homepage:e.homepage}:{},...e.license?{license:e.license}:{}}}function ae(e,t){return{version:1,name:e.name||"Untitled Plugin",description:e.description||void 0,resources:t.map(c=>c.resourceRef),...e.author?{author:typeof e.author=="string"?{name:e.author}:{name:e.author.name||"",url:e.author.url}}:{},...e.homepage?{homepage:e.homepage}:{},...e.license?{license:e.license}:{}}}var K=[{path:`${U}/${Y}`,converter:()=>{throw new Error("Use parsePluginManifest for native format")},formatLabel:"Shared Context"},{path:".claude-plugin/plugin.json",converter:V,formatLabel:"Claude Plugin"},{path:".claude/plugin.json",converter:V,formatLabel:"Claude Plugin"},{path:"gemini-extension.json",converter:oe,formatLabel:"Gemini Extension"},{path:".cursor-plugin/plugin.json",converter:ae,formatLabel:"Cursor Plugin"}];var Q=[{folder:"skills",mainFile:"SKILL.md",resourceType:"skill",canHaveChildren:!0},{folder:"commands",mainFile:null,resourceType:"skill",canHaveChildren:!0},{folder:"hooks",mainFile:"hook.json",resourceType:"hook",canHaveChildren:!1},{folder:"agents",mainFile:null,resourceType:"agent",canHaveChildren:!0},{folder:"mcps",mainFile:"mcp.json",resourceType:"mcp",canHaveChildren:!0},{folder:"plugins",mainFile:"README.md",resourceType:"plugin",canHaveChildren:!1},{folder:"collections",mainFile:"README.md",resourceType:"plugin",canHaveChildren:!1}],X=`${U}/${Y}`;function O(e){let t={name:"",description:"",body:e};if(!e.startsWith(`---
|
|
3
3
|
`)&&!e.startsWith(`---\r
|
|
4
|
-
`))return t;let
|
|
5
|
-
---`,3);if(
|
|
6
|
-
`),A=null,x=!1;for(let E=0;E<
|
|
4
|
+
`))return t;let c=e.indexOf(`
|
|
5
|
+
---`,3);if(c===-1)return t;let $=e.slice(4,c),M=e.slice(c+4);t.body=M.replace(/^\r?\n/,"").replace(/^\r?\n/,"");let D={},L={},W=new Set(["requires","tools"]),I={},F=$.split(`
|
|
6
|
+
`),A=null,x=!1;for(let E=0;E<F.length;E++){let o=F[E];if(A&&/^\s+-\s/.test(o)){let a=o.replace(/^\s+-\s/,"").trim();if(a){let l=w(a);x?I[A].push(l):L[A].push(l)}continue}A=null,x=!1;let g=o.indexOf(":");if(g===-1)continue;let s=o.slice(0,g).trim(),u=o.slice(g+1).trim();if(!u&&s&&E+1<F.length&&/^\s+-\s/.test(F[E+1])){A=s,W.has(s)?(x=!0,I[s]=[]):(x=!1,L[s]=[]);continue}let r=s?u.match(/^([|>])([+-]?)\s*$/):null;if(r){let a=r[1],l=r[2],n=E+1;for(;n<F.length&&F[n].trim()==="";)n++;let d="";if(n<F.length){let v=F[n].match(/^(\s+)/);if(v){let b=v[1].length,i=[];for(;n<F.length;){let p=F[n];if(p.trim()===""){i.push(""),n++;continue}let m=p.match(/^(\s*)/);if(!m||m[1].length<b)break;i.push(p.slice(b)),n++}if(l!=="+")for(;i.length>0&&i[i.length-1]==="";)i.pop();if(a==="|")d=i.join(`
|
|
7
7
|
`);else for(let p=0;p<i.length;p++)p>0&&(d+=i[p]===""||i[p-1]===""?`
|
|
8
|
-
`:" "),d+=i[p]}}s==="name"||s==="title"?t.name=d:s==="description"?t.description=d:s==="skill_class"?t.skillClass=d:s==="service"?t.service=d:d&&(
|
|
9
|
-
`).replace(/[ \t]+$/gm,"").replace(/\n+$/,"")}function
|
|
8
|
+
`:" "),d+=i[p]}}s==="name"||s==="title"?t.name=d:s==="description"?t.description=d:s==="skill_class"?t.skillClass=d:s==="service"?t.service=d:d&&(D[s]=d),E=n-1;continue}s==="name"||s==="title"?t.name=w(u):s==="description"?t.description=w(u):s==="skill_class"?t.skillClass=w(u):s==="service"?t.service=w(u):s&&u&&(D[s]=w(u))}return I.requires?.length&&(t.requires=I.requires),I.tools?.length&&(t.tools=I.tools),Object.keys(D).length&&(t.fields=D),Object.keys(L).length&&(t.arrayFields=L),t}function w(e){let t=e.trim();if(t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")){let c=t.slice(1,-1);return t.startsWith('"')?c.replace(/\\"/g,'"').replace(/\\\\/g,"\\"):c.replace(/''/g,"'")}return t}function ce(e){let{body:t}=O(e);return t.replace(/\r\n/g,`
|
|
9
|
+
`).replace(/[ \t]+$/gm,"").replace(/\n+$/,"")}function j(e){let t=ce(e);return`sha256:${(0,Z.createHash)("sha256").update(t,"utf8").digest("hex")}`}function C(e){return e.split("-").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}function q(e){try{return(0,f.statSync)(e).isDirectory()}catch{return!1}}function B(e){try{return(0,f.readdirSync)(e).filter(t=>!t.startsWith(".")&&q((0,h.join)(e,t)))}catch{return[]}}function z(e){try{return(0,f.readdirSync)(e).filter(t=>!t.startsWith(".")&&!q((0,h.join)(e,t)))}catch{return[]}}function le(e,t){let c=[],$=[],M,D;function L(o,g){let s=[],u=[];for(let r of Q){let a=(0,h.join)(o,r.folder);if(!(0,f.existsSync)(a)||!q(a))continue;let l=g?`${g}/${r.folder}`:r.folder;if(r.folder==="files"){for(let n of z(a)){if(!n.endsWith(".md"))continue;let d=(0,h.join)(a,n),v=(0,f.readFileSync)(d,"utf-8"),b=O(v),i=b.name||(0,h.basename)(n,".md"),p=`${l}/${(0,h.basename)(n,".md")}`;s.push({importPath:p,resourceType:"file",title:i,description:b.description||null,body:b.body,bodyHash:j(v),metadata:{}})}continue}if(r.mainFile===null)for(let n of z(a)){if(!n.endsWith(".md"))continue;let d=(0,h.basename)(n,".md"),v=`${l}/${d}`;if(q((0,h.join)(a,d)))continue;let b=(0,f.readFileSync)((0,h.join)(a,n),"utf-8"),i=O(b),p=i.name||C(d),m={};i.skillClass&&(m.skillClass=i.skillClass),i.service&&(m.service=i.service),i.requires?.length&&(m.requires=i.requires),i.tools?.length&&(m.tools=i.tools),i.fields&&Object.keys(i.fields).length&&(m.fields=i.fields),r.folder==="commands"&&(m.fields||(m.fields={}),m.fields["user-invocable"]="true"),s.push({importPath:v,resourceType:r.resourceType,title:p,description:i.description||null,body:i.body,bodyHash:j(b),metadata:m})}for(let n of B(a)){let d=r.mainFile||`${n}.md`,v=(0,h.join)(a,n,d);if(!(0,f.existsSync)(v)){if(r.mainFile===null)for(let T of B((0,h.join)(a,n))){let S=`${T}.md`,R=(0,h.join)(a,n,T,S);if(!(0,f.existsSync)(R))continue;let N=(0,f.readFileSync)(R,"utf-8"),k=O(N),J=k.name||C(T),_={};k.skillClass&&(_.skillClass=k.skillClass),k.service&&(_.service=k.service),k.requires?.length&&(_.requires=k.requires),k.tools?.length&&(_.tools=k.tools),k.fields&&Object.keys(k.fields).length&&(_.fields=k.fields),s.push({importPath:`${l}/${T}`,resourceType:r.resourceType,title:J,description:k.description||null,body:k.body,bodyHash:j(N),metadata:_})}continue}let b=(0,f.readFileSync)(v,"utf-8"),i=`${l}/${n}`,p,m,H,P={},y=null;if(r.resourceType==="hook"||r.resourceType==="mcp"){try{let T=JSON.parse(b);p=T.name||C(n),m=T.description||null}catch{p=C(n),m=null}H=b}else if(r.resourceType==="plugin"){let T=(0,h.join)(a,n,U,Y);if((0,f.existsSync)(T))try{let S=JSON.parse((0,f.readFileSync)(T,"utf-8"));p=S.name||C(n),m=S.description||null,H=b,S.resources&&Array.isArray(S.resources)&&u.push({pluginImportPath:i,memberImportPaths:S.resources.map(R=>{let N=R.split("/");return N.length>=3?`${N[0]}/${N[N.length-1]}`:R})})}catch{p=C(n),m=null,H=b}else y=O(b),p=y.name||C(n),m=y.description||null,H=y.body,y.arrayFields?.resources&&u.push({pluginImportPath:i,memberImportPaths:y.arrayFields.resources.map(S=>{let R=S.split("/");return R.length>=3?`${R[0]}/${R[R.length-1]}`:S})})}else y=O(b),p=y.name||C(n),m=y.description||null,H=y.body,y.skillClass&&(P.skillClass=y.skillClass),y.service&&(P.service=y.service),y.requires?.length&&(P.requires=y.requires),y.tools?.length&&(P.tools=y.tools),y.fields&&Object.keys(y.fields).length&&(P.fields=y.fields);r.folder==="commands"&&(P.fields||(P.fields={}),P.fields["user-invocable"]="true"),s.push({importPath:i,resourceType:r.resourceType,title:p,description:m,body:H,bodyHash:j(b),metadata:P})}}return{resources:s,memberships:u}}let W=L(e,"");c.push(...W.resources),$.push(...W.memberships);let I=new Set;t?.mcpConfigPath&&I.add(t.mcpConfigPath);let F=(0,h.join)(e,".mcp.json");(0,f.existsSync)(F)&&I.add(F);for(let o of I)if((0,f.existsSync)(o))try{let g=JSON.parse((0,f.readFileSync)(o,"utf-8"));if(g.mcpServers&&typeof g.mcpServers=="object")for(let[s,u]of Object.entries(g.mcpServers)){let r=`mcps/${s}`;if(c.some(n=>n.importPath===r))continue;let a=C(s),l=JSON.stringify({name:a,description:`MCP server: ${s}`,mcpServers:{[s]:u}},null,2);c.push({importPath:r,resourceType:"mcp",title:a,description:`MCP server: ${s}`,body:l,bodyHash:j(l),metadata:{}})}}catch{}if(t?.settingsPath&&(0,f.existsSync)(t.settingsPath))try{let o=JSON.parse((0,f.readFileSync)(t.settingsPath,"utf-8"));if(o.hooks&&typeof o.hooks=="object"&&!Array.isArray(o.hooks)){let g={};for(let[s,u]of Object.entries(o.hooks))if(Array.isArray(u))for(let r of u){if(!r||typeof r!="object")continue;let a=r,l=a._sc;if(!l)continue;g[l]||(g[l]={}),g[l][s]||(g[l][s]=[]);let{_sc:n,...d}=a;g[l][s].push(d)}for(let[s,u]of Object.entries(g)){let r=s;if(c.some(d=>d.importPath===r))continue;let a=s.split("/").pop()||s,l=C(a),n=JSON.stringify({name:l,description:`Hook: ${l}`,hooks:u},null,2);c.push({importPath:r,resourceType:"hook",title:l,description:`Hook: ${l}`,body:n,bodyHash:j(n),metadata:{}})}}}catch{}for(let o of K){if(o.path===X)continue;let g=(0,h.join)(e,o.path);if((0,f.existsSync)(g)){try{let s=JSON.parse((0,f.readFileSync)(g,"utf-8"));if(M=M||s.name||void 0,D=o.formatLabel,!c.some(u=>u.resourceType==="plugin")){let u=c.filter(d=>d.resourceType!=="plugin").map(d=>({resourceRef:d.importPath})),r=o.converter(s,u),a=(0,h.join)(e,"README.md"),l=(0,f.existsSync)(a)?(0,f.readFileSync)(a,"utf-8"):"",n="plugins/_root";c.push({importPath:n,resourceType:"plugin",title:C(r.name),description:r.description||null,body:l,bodyHash:j(l),metadata:{},manifestMetadata:{...r.author?{author:r.author}:{},...r.homepage?{homepage:r.homepage}:{},...r.license?{license:r.license}:{}}}),r.resources.length>0&&$.push({pluginImportPath:n,memberImportPaths:r.resources})}}catch{}break}}{let u=function(r,a,l){if(!(l>4))for(let n of B(r)){if(s.has(n))continue;let d=(0,h.join)(r,n),v=a?`${a}/${n}`:n;for(let b of K){if(b.path===X)continue;let i=(0,h.join)(d,b.path);if((0,f.existsSync)(i)){if(o.has(v))break;o.add(v);try{let p=JSON.parse((0,f.readFileSync)(i,"utf-8")),m=L(d,v);if(m.resources.length===0)break;c.push(...m.resources),$.push(...m.memberships);let H=m.resources.filter(R=>R.resourceType!=="plugin").map(R=>({resourceRef:R.importPath})),P=b.converter(p,H),y=(0,h.join)(d,"README.md"),T=(0,f.existsSync)(y)?(0,f.readFileSync)(y,"utf-8"):"",S=`${v}/_plugin`;c.push({importPath:S,resourceType:"plugin",title:C(P.name),description:P.description||null,body:T,bodyHash:j(T),metadata:{},manifestMetadata:{...P.author?{author:P.author}:{},...P.homepage?{homepage:P.homepage}:{},...P.license?{license:P.license}:{}}}),$.push({pluginImportPath:S,memberImportPaths:m.resources.map(R=>R.importPath)}),M||(M=p.name||void 0),D||(D=b.formatLabel)}catch{}break}}u(d,v,l+1)}};var E=u;let o=new Set,g=new Set(Q.map(r=>r.folder)),s=new Set([...g,"worktrees","plugins","node_modules","todos"]);u(e,"",0)}let A=(0,h.join)(e,"files");if((0,f.existsSync)(A)&&q(A)&&!c.some(o=>o.resourceType==="file"))for(let o of z(A)){if(!o.endsWith(".md"))continue;let g=(0,h.join)(A,o),s=(0,f.readFileSync)(g,"utf-8"),u=O(s),r=u.name||(0,h.basename)(o,".md"),a=`files/${(0,h.basename)(o,".md")}`;c.some(l=>l.importPath===a)||c.push({importPath:a,resourceType:"file",title:r,description:u.description||null,body:u.body,bodyHash:j(s),metadata:{}})}return{resources:[...c.filter(o=>o.resourceType!=="plugin"),...c.filter(o=>o.resourceType==="plugin")],pluginMemberships:$,pluginName:M,formatLabel:D}}0&&(module.exports={discoverResources});
|