@shumai-one/shumai-agent 0.1.0 → 0.1.1
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/bin/shumai-agent-app.js +1 -1
- package/package.json +7 -7
package/bin/shumai-agent-app.js
CHANGED
|
@@ -13465,7 +13465,7 @@ The user did not explicitly mention you, but is replying in a thread where you a
|
|
|
13465
13465
|
WHERE a.is_deleted = false
|
|
13466
13466
|
)
|
|
13467
13467
|
SELECT id, name, type, parent_id AS "parentId", storage_key_id AS "storageKeyId", sort_index AS "sortIndex", target_id AS "targetId" FROM descendant;
|
|
13468
|
-
`,I=U.filter((J)=>J.type==="symlink"),G=[];if(I.length>0){let J=I.map((w)=>w.targetId).filter((w)=>!!w);if(J.length>0)G=(await this.prismaClient.asset.findMany({where:{id:{in:J},isDeleted:!1}})).map((M)=>({id:M.id,name:M.name,type:M.type,parentId:M.parentId,storageKeyId:M.storageKeyId,sortIndex:M.sortIndex,targetId:M.targetId}))}let W=[...U.filter((J)=>J.type!=="symlink"),...G].filter((J)=>J.type!=="folder"&&J.type!=="root"&&J.type!=="share_root"&&J.type!=="share"),g=new Set(W.filter((J)=>J.type==="version_stack").map((J)=>J.id)),V=new Map,b=[];for(let J of W){if(J.type==="version_stack")continue;if(J.parentId&&g.has(J.parentId)){let w=V.get(J.parentId)||[];w.push(J),V.set(J.parentId,w)}else b.push(J)}let X=[];for(let J of V.values())if(J.sort((w,M)=>{if(!w.sortIndex||!M.sortIndex)return 0;return w.sortIndex<M.sortIndex?-1:w.sortIndex>M.sortIndex?1:0}),J.length>0)X.push(J[0]);let C=[...b,...X],N=new Map;for(let J of C)N.set(J.id,J);let R=Array.from(N.values()),A=R.map((J)=>J.storageKeyId).filter((J)=>!!J),Y=await this.prismaClient.storageKey.findMany({where:{id:{in:A}}}),L=new Map(Y.map((J)=>[J.id,J.key]));return(await Promise.all(R.map(async(J)=>{let w=J.storageKeyId?L.get(J.storageKeyId):null;if(!w)return null;let M=await yF.presign(process.env.S3_BUCKET||"shumai",w,"GET",J.name);return{id:J.id,name:J.name,url:M}}))).filter((J)=>!!J)}async toPreviewInfo(B){if(!B.media)return null;let Q=void 0;if(B.mediaType?.startsWith("image/")&&B.media.thumbnail?.key)Q=await yF.presign(process.env.S3_BUCKET||"shumai",B.media.thumbnail.key,"GET");else if(B.mediaType?.startsWith("video/")&&B.media.poster?.key)Q=await yF.presign(process.env.S3_BUCKET||"shumai",B.media.poster.key,"GET");let F=void 0;if(B.media.sprite?.key)F=await yF.presign(process.env.S3_BUCKET||"shumai",B.media.sprite.key,"GET");return{mediaType:B.mediaType,thumbnailUrl:Q,originalHeight:B.media.metadata?.originalHeight,originalWidth:B.media.metadata?.originalWidth,spriteUrl:F}}async toCommentInfo(B){let Q=[];if("replies"in B&&B.replies)for(let Z of B.replies)Q.push(await this.toCommentInfo(Z));let F=[];if(B.attachments){for(let Z of B.attachments)if(Z.asset?.storageKey?.key){let W=await yF.presign(process.env.S3_BUCKET||"shumai",Z.asset.storageKey.key,"GET");F.push({id:Z.id,assetId:Z.asset.id,url:W,mediaType:Z.asset.mediaType})}}let U=[],I=(B.message||"").match(/<@([^>]+)>/g);if(I){let Z=I.map((g)=>g.replace("<@","").replace(">","")),W=await this.prismaClient.user.findMany({where:{id:{in:Z}}});for(let g of W)U.push({id:g.id,name:g.name,image:await MX(g.image)})}let G={id:"",name:""};if(B.sessionId)G.id=B.creatorId||"",G.name=B.creator?.name||"Ai Bot",G.image=await MX(B.creator?.image);else if(B.creator)G.id=B.creator.id,G.name=B.creator.name,G.image=await MX(B.creator.image);return{id:B.id,assetId:B.assetId,message:B.message,annotations:B.annotation,second:B.second,creator:G,replies:Q,attachments:F,mentions:U,createdAt:B.createdAt.toISOString(),updatedAt:B.updatedAt.toISOString(),sessionId:B.sessionId}}}var TX=new V2Q;function HzF(B){if(!B)return yX(null,null);return yX(B,null)}class zp{prismaClient;constructor(B=VB){this.prismaClient=B}async createVersionStack(B){let{fileIds:Q,projectId:F,creatorId:U}=B;if(!Q||Q.length===0)throw Error("no file ids provided");return await this.prismaClient.$transaction(async(I)=>{let G=await I.asset.findMany({where:{id:{in:Q}},include:{parent:!0}});if(G.length!==Q.length)throw Error("some files not found");let Z=void 0,W=0;for(let N of G){if(N.type!==AF.file)throw Error(`asset ${N.id} is not a file`);if(!N.parentId)throw Error(`file ${N.id} does not have a parent`);if(Z===void 0)Z=N.parentId;else if(N.parentId!==Z)throw Error("files do not have the same parent");W+=N.sizeByte}if(!Z)throw Error("files do not have a parent");if(!await I.asset.findUnique({where:{id:Z}}))throw Error("parent not found");let b=G[0]?.sortIndex||null,X=await I.asset.create({data:{type:AF.version_stack,fileCount:G.length,sizeByte:W,status:"uploaded",projectId:F,creatorId:U,parentId:Z,sortIndex:b}}),C=null;for(let N of Q)C=HzF(C),await I.asset.update({where:{id:N},data:{parentId:X.id,sortIndex:C}});return await I.asset.update({where:{id:Z},data:{fileCount:{decrement:G.length-1}}}),X})}async changeStackFileVersion(B){let{stackId:Q,fileId:F,beforeId:U}=B;await this.prismaClient.$transaction(async(I)=>{let G=await I.asset.findUnique({where:{id:Q}});if(!G)throw Error("stack not found");if(G.type!==AF.version_stack)throw Error("asset is not a version stack");let Z=await I.asset.findUnique({where:{id:F}});if(!Z)throw Error("file not found");if(Z.parentId!==Q)throw Error("file is not in the stack");let W;if(U==="-1"){let g=await I.asset.findFirst({where:{parentId:Q},orderBy:{sortIndex:"desc"}});W=yX(g?.sortIndex||null,null)}else{let g=await I.asset.findUnique({where:{id:U}});if(!g)throw Error("before_id file not found");if(g.parentId!==Q)throw Error("before_id file is not in the stack");let b=(await I.asset.findFirst({where:{parentId:Q,sortIndex:{lt:g.sortIndex}},orderBy:{sortIndex:"desc"}}))?.sortIndex||null;if(b&&b>=g.sortIndex)b=null;W=yX(b,g.sortIndex)}await I.asset.update({where:{id:F},data:{sortIndex:W}})})}}var jyI=new zp;A2B();Tb();async function w5Q(B,Q){let F;if(!B.database){let U=mX(B),I=Object.keys(U).reduce((Z,W)=>{return Z[W]=[],Z},{}),{memoryAdapter:G}=await Promise.resolve().then(() => (z5Q(),D5Q));F=G(I)(B)}else if(typeof B.database==="function")F=B.database(B);else F=await Q(B);if(!F.transaction)ZF.warn("Adapter does not correctly implement transaction function, patching it automatically. Please update your adapter implementation."),F.transaction=async(U)=>{return U(F)};return F}PU();async function GEQ(B){return w5Q(B,async(Q)=>{let{createKyselyAdapter:F}=await Promise.resolve().then(() => (yAB(),SAB)),{kysely:U,databaseType:I,transaction:G}=await F(Q);if(!U)throw new OQ("Failed to initialize database adapter");let{kyselyAdapter:Z}=await Promise.resolve().then(() => (yAB(),SAB));return Z(U,{type:I||"sqlite",debugLogs:Q.database&&"debugLogs"in Q.database?Q.database.debugLogs:!1,transaction:G})(Q)})}function ZEQ(B){let Q=mX(B),F={};for(let U in Q){let I=Q[U],G=I.fields,Z={};if(Object.entries(G).forEach(([W,g])=>{if(Z[g.fieldName||W]=g,g.references){let V=Q[g.references.model];if(V)Z[g.fieldName||W].references={...g.references,model:V.modelName,field:g.references.field}}}),F[I.modelName]){F[I.modelName].fields={...F[I.modelName].fields,...Z};continue}F[I.modelName]={fields:Z,order:I.order||1/0}}return F}Tb();ta();wk();$7();var mhF={postgres:{string:["character varying","varchar","text","uuid"],number:["int4","integer","bigint","smallint","numeric","real","double precision"],boolean:["bool","boolean"],date:["timestamptz","timestamp","date"],json:["json","jsonb"]},mysql:{string:["varchar","text","uuid"],number:["integer","int","bigint","smallint","decimal","float","double"],boolean:["boolean","tinyint"],date:["timestamp","datetime","date"],json:["json"]},sqlite:{string:["TEXT"],number:["INTEGER","REAL"],boolean:["INTEGER","BOOLEAN"],date:["DATE","INTEGER"],json:["TEXT"]},mssql:{string:["varchar","nvarchar","uniqueidentifier"],number:["int","bigint","smallint","decimal","float","double"],boolean:["bit","smallint"],date:["datetime2","date","datetime"],json:["varchar","nvarchar"]}};function OhF(B,Q,F){function U(G){return G.toLowerCase().split("(")[0].trim()}if(Q==="string[]"||Q==="number[]")return B.toLowerCase().includes("json");let I=mhF[F];return(Array.isArray(Q)?I.string.map((G)=>G.toLowerCase()):I[Q].map((G)=>G.toLowerCase())).includes(U(B))}async function chF(B){try{let Q=await TF`SHOW search_path`.execute(B),F=Q.rows[0]?.search_path??Q.rows[0]?.searchPath;if(F)return F.split(",").map((U)=>U.trim()).map((U)=>U.replace(/^["']|["']$/g,"")).filter((U)=>!U.startsWith("$")&&!U.startsWith("\\$"))[0]||"public"}catch{}return"public"}async function WEQ(B){let Q=ZEQ(B),F=JJ(B.logger),{kysely:U,databaseType:I}=await wAB(B);if(!I)F.warn("Could not determine database type, defaulting to sqlite. Please provide a type in the database options to avoid this."),I="sqlite";if(!U)F.error("Only kysely adapter is supported for migrations. You can use `generate` command to generate the schema, if you're using a different adapter."),process.exit(1);let G="public";if(I==="postgres"){G=await chF(U),F.debug(`PostgreSQL migration: Using schema '${G}' (from search_path)`);try{let w=await TF`
|
|
13468
|
+
`,I=U.filter((J)=>J.type==="symlink"),G=[];if(I.length>0){let J=I.map((w)=>w.targetId).filter((w)=>!!w);if(J.length>0)G=(await this.prismaClient.asset.findMany({where:{id:{in:J},isDeleted:!1}})).map((M)=>({id:M.id,name:M.name,type:M.type,parentId:M.parentId,storageKeyId:M.storageKeyId,sortIndex:M.sortIndex,targetId:M.targetId}))}let W=[...U.filter((J)=>J.type!=="symlink"),...G].filter((J)=>J.type!=="folder"&&J.type!=="root"&&J.type!=="share_root"&&J.type!=="share"),g=new Set(W.filter((J)=>J.type==="version_stack").map((J)=>J.id)),V=new Map,b=[];for(let J of W){if(J.type==="version_stack")continue;if(J.parentId&&g.has(J.parentId)){let w=V.get(J.parentId)||[];w.push(J),V.set(J.parentId,w)}else b.push(J)}let X=[];for(let J of V.values())if(J.sort((w,M)=>{if(!w.sortIndex||!M.sortIndex)return 0;return w.sortIndex<M.sortIndex?-1:w.sortIndex>M.sortIndex?1:0}),J.length>0)X.push(J[0]);let C=[...b,...X],N=new Map;for(let J of C)N.set(J.id,J);let R=Array.from(N.values()),A=R.map((J)=>J.storageKeyId).filter((J)=>!!J),Y=await this.prismaClient.storageKey.findMany({where:{id:{in:A}}}),L=new Map(Y.map((J)=>[J.id,J.key]));return(await Promise.all(R.map(async(J)=>{let w=J.storageKeyId?L.get(J.storageKeyId):null;if(!w)return null;let M=await yF.presign(process.env.S3_BUCKET||"shumai",w,"GET",J.name);return{id:J.id,name:J.name,url:M}}))).filter((J)=>!!J)}async toPreviewInfo(B){if(!B.media)return null;let Q=void 0;if(B.mediaType?.startsWith("image/")&&B.media.thumbnail?.key)Q=await yF.presign(process.env.S3_BUCKET||"shumai",B.media.thumbnail.key,"GET");else if(B.mediaType?.startsWith("video/")&&B.media.poster?.key)Q=await yF.presign(process.env.S3_BUCKET||"shumai",B.media.poster.key,"GET");let F=void 0;if(B.media.sprite?.key)F=await yF.presign(process.env.S3_BUCKET||"shumai",B.media.sprite.key,"GET");return{mediaType:B.mediaType,thumbnailUrl:Q,originalHeight:B.media.metadata?.originalHeight,originalWidth:B.media.metadata?.originalWidth,spriteUrl:F}}async toCommentInfo(B){let Q=[];if("replies"in B&&B.replies)for(let Z of B.replies)Q.push(await this.toCommentInfo(Z));let F=[];if(B.attachments){for(let Z of B.attachments)if(Z.asset?.storageKey?.key){let W=await yF.presign(process.env.S3_BUCKET||"shumai",Z.asset.storageKey.key,"GET");F.push({id:Z.id,assetId:Z.asset.id,url:W,mediaType:Z.asset.mediaType})}}let U=[],I=(B.message||"").match(/<@([^>]+)>/g);if(I){let Z=I.map((g)=>g.replace("<@","").replace(">","")),W=await this.prismaClient.user.findMany({where:{id:{in:Z}}});for(let g of W)U.push({id:g.id,name:g.name,image:await MX(g.image)})}let G={id:"",name:""};if(B.sessionId)G.id=B.creatorId||"",G.name=B.creator?.name||"Ai Bot",G.image=await MX(B.creator?.image);else if(B.creator)G.id=B.creator.id,G.name=B.creator.name,G.image=await MX(B.creator.image);return{id:B.id,assetId:B.assetId,message:B.message,annotations:B.annotation,second:B.second,creator:G,replies:Q,attachments:F,mentions:U,createdAt:B.createdAt.toISOString(),updatedAt:B.updatedAt.toISOString(),sessionId:B.sessionId}}}var TX=new V2Q;function HzF(B){if(!B)return yX(null,null);return yX(B,null)}class zp{prismaClient;constructor(B=VB){this.prismaClient=B}async createVersionStack(B){let{fileIds:Q,projectId:F,creatorId:U}=B;if(!Q||Q.length===0)throw Error("no file ids provided");return await this.prismaClient.$transaction(async(I)=>{let G=await I.asset.findMany({where:{id:{in:Q}},include:{parent:!0}});if(G.length!==Q.length)throw Error("some files not found");let Z=void 0,W=0;for(let N of G){if(N.type!==AF.file)throw Error(`asset ${N.id} is not a file`);if(!N.parentId)throw Error(`file ${N.id} does not have a parent`);if(Z===void 0)Z=N.parentId;else if(N.parentId!==Z)throw Error("files do not have the same parent");W+=N.sizeByte}if(!Z)throw Error("files do not have a parent");if(!await I.asset.findUnique({where:{id:Z}}))throw Error("parent not found");let b=G.find((N)=>N.id===Q[0])?.sortIndex||null,X=await I.asset.create({data:{type:AF.version_stack,fileCount:G.length,sizeByte:W,status:"uploaded",projectId:F,creatorId:U,parentId:Z,sortIndex:b}}),C=null;for(let N of Q)C=HzF(C),await I.asset.update({where:{id:N},data:{parentId:X.id,sortIndex:C}});return await I.asset.update({where:{id:Z},data:{fileCount:{decrement:G.length-1}}}),X})}async changeStackFileVersion(B){let{stackId:Q,fileId:F,beforeId:U}=B;await this.prismaClient.$transaction(async(I)=>{let G=await I.asset.findUnique({where:{id:Q}});if(!G)throw Error("stack not found");if(G.type!==AF.version_stack)throw Error("asset is not a version stack");let Z=await I.asset.findUnique({where:{id:F}});if(!Z)throw Error("file not found");if(Z.parentId!==Q)throw Error("file is not in the stack");let W;if(U==="-1"){let g=await I.asset.findFirst({where:{parentId:Q},orderBy:{sortIndex:"desc"}});W=yX(g?.sortIndex||null,null)}else{let g=await I.asset.findUnique({where:{id:U}});if(!g)throw Error("before_id file not found");if(g.parentId!==Q)throw Error("before_id file is not in the stack");let b=(await I.asset.findFirst({where:{parentId:Q,sortIndex:{lt:g.sortIndex}},orderBy:{sortIndex:"desc"}}))?.sortIndex||null;if(b&&b>=g.sortIndex)b=null;W=yX(b,g.sortIndex)}await I.asset.update({where:{id:F},data:{sortIndex:W}})})}}var jyI=new zp;A2B();Tb();async function w5Q(B,Q){let F;if(!B.database){let U=mX(B),I=Object.keys(U).reduce((Z,W)=>{return Z[W]=[],Z},{}),{memoryAdapter:G}=await Promise.resolve().then(() => (z5Q(),D5Q));F=G(I)(B)}else if(typeof B.database==="function")F=B.database(B);else F=await Q(B);if(!F.transaction)ZF.warn("Adapter does not correctly implement transaction function, patching it automatically. Please update your adapter implementation."),F.transaction=async(U)=>{return U(F)};return F}PU();async function GEQ(B){return w5Q(B,async(Q)=>{let{createKyselyAdapter:F}=await Promise.resolve().then(() => (yAB(),SAB)),{kysely:U,databaseType:I,transaction:G}=await F(Q);if(!U)throw new OQ("Failed to initialize database adapter");let{kyselyAdapter:Z}=await Promise.resolve().then(() => (yAB(),SAB));return Z(U,{type:I||"sqlite",debugLogs:Q.database&&"debugLogs"in Q.database?Q.database.debugLogs:!1,transaction:G})(Q)})}function ZEQ(B){let Q=mX(B),F={};for(let U in Q){let I=Q[U],G=I.fields,Z={};if(Object.entries(G).forEach(([W,g])=>{if(Z[g.fieldName||W]=g,g.references){let V=Q[g.references.model];if(V)Z[g.fieldName||W].references={...g.references,model:V.modelName,field:g.references.field}}}),F[I.modelName]){F[I.modelName].fields={...F[I.modelName].fields,...Z};continue}F[I.modelName]={fields:Z,order:I.order||1/0}}return F}Tb();ta();wk();$7();var mhF={postgres:{string:["character varying","varchar","text","uuid"],number:["int4","integer","bigint","smallint","numeric","real","double precision"],boolean:["bool","boolean"],date:["timestamptz","timestamp","date"],json:["json","jsonb"]},mysql:{string:["varchar","text","uuid"],number:["integer","int","bigint","smallint","decimal","float","double"],boolean:["boolean","tinyint"],date:["timestamp","datetime","date"],json:["json"]},sqlite:{string:["TEXT"],number:["INTEGER","REAL"],boolean:["INTEGER","BOOLEAN"],date:["DATE","INTEGER"],json:["TEXT"]},mssql:{string:["varchar","nvarchar","uniqueidentifier"],number:["int","bigint","smallint","decimal","float","double"],boolean:["bit","smallint"],date:["datetime2","date","datetime"],json:["varchar","nvarchar"]}};function OhF(B,Q,F){function U(G){return G.toLowerCase().split("(")[0].trim()}if(Q==="string[]"||Q==="number[]")return B.toLowerCase().includes("json");let I=mhF[F];return(Array.isArray(Q)?I.string.map((G)=>G.toLowerCase()):I[Q].map((G)=>G.toLowerCase())).includes(U(B))}async function chF(B){try{let Q=await TF`SHOW search_path`.execute(B),F=Q.rows[0]?.search_path??Q.rows[0]?.searchPath;if(F)return F.split(",").map((U)=>U.trim()).map((U)=>U.replace(/^["']|["']$/g,"")).filter((U)=>!U.startsWith("$")&&!U.startsWith("\\$"))[0]||"public"}catch{}return"public"}async function WEQ(B){let Q=ZEQ(B),F=JJ(B.logger),{kysely:U,databaseType:I}=await wAB(B);if(!I)F.warn("Could not determine database type, defaulting to sqlite. Please provide a type in the database options to avoid this."),I="sqlite";if(!U)F.error("Only kysely adapter is supported for migrations. You can use `generate` command to generate the schema, if you're using a different adapter."),process.exit(1);let G="public";if(I==="postgres"){G=await chF(U),F.debug(`PostgreSQL migration: Using schema '${G}' (from search_path)`);try{let w=await TF`
|
|
13469
13469
|
SELECT schema_name
|
|
13470
13470
|
FROM information_schema.schemata
|
|
13471
13471
|
WHERE schema_name = ${G}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shumai-one/shumai-agent",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "AI worker agent for the shumai media workspace",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -26,12 +26,12 @@
|
|
|
26
26
|
"zod": "4.4.3"
|
|
27
27
|
},
|
|
28
28
|
"optionalDependencies": {
|
|
29
|
-
"@shumai-one/shumai-agent-darwin-arm64": "0.1.
|
|
30
|
-
"@shumai-one/shumai-agent-darwin-x64": "0.1.
|
|
31
|
-
"@shumai-one/shumai-agent-linux-arm64": "0.1.
|
|
32
|
-
"@shumai-one/shumai-agent-linux-x64": "0.1.
|
|
33
|
-
"@shumai-one/shumai-agent-win32-arm64": "0.1.
|
|
34
|
-
"@shumai-one/shumai-agent-win32-x64": "0.1.
|
|
29
|
+
"@shumai-one/shumai-agent-darwin-arm64": "0.1.1",
|
|
30
|
+
"@shumai-one/shumai-agent-darwin-x64": "0.1.1",
|
|
31
|
+
"@shumai-one/shumai-agent-linux-arm64": "0.1.1",
|
|
32
|
+
"@shumai-one/shumai-agent-linux-x64": "0.1.1",
|
|
33
|
+
"@shumai-one/shumai-agent-win32-arm64": "0.1.1",
|
|
34
|
+
"@shumai-one/shumai-agent-win32-x64": "0.1.1"
|
|
35
35
|
},
|
|
36
36
|
"repository": {
|
|
37
37
|
"type": "git",
|