@crewx/sdk 0.8.9-rc.25 → 0.8.9-rc.26
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/plugins/index.js
CHANGED
|
@@ -266,4 +266,5 @@ ${s.join(`
|
|
|
266
266
|
`),c},{behavior:"immediate"})}}catch(r){throw r instanceof _?r:new _("DB_ERROR","Failed to save user message",r)}finally{n.close();}}saveAssistantMessage(t,e,s){if(!this.dbExists())return;let n=this.openHandle(true);try{let r=new Date().toISOString();n.db.update(u).set({last_message:e,updated_at:r}).where(drizzleOrm.eq(u.id,t)).run();}catch(r){throw r instanceof _?r:new _("DB_ERROR","Failed to save assistant message",r)}finally{n.close();}}updateThread(t,e){if(!this.dbExists())return;let s=this.openHandle(true);try{let n={updated_at:new Date().toISOString()};e.title!==void 0&&(n.title=e.title,n.title_locked=1),e.titleLocked!==void 0&&(n.title_locked=e.titleLocked?1:0),s.db.update(u).set(n).where(drizzleOrm.eq(u.id,t)).run();}catch(n){throw n instanceof _?n:new _("DB_ERROR","Failed to update thread",n)}finally{s.close();}}togglePin(t,e){let s=this.openHandle(true);try{let n=e?drizzleOrm.and(drizzleOrm.eq(u.id,t),drizzleOrm.eq(u.workspace_id,e)):drizzleOrm.eq(u.id,t),r=s.db.select({pinned:u.pinned,metadata:u.metadata}).from(u).where(n).get();if(!r)return null;let i=r.pinned?0:1,a=r.metadata?JSON.parse(r.metadata):{};if(i){let l=e?drizzleOrm.and(drizzleOrm.eq(u.pinned,1),drizzleOrm.eq(u.workspace_id,e)):drizzleOrm.eq(u.pinned,1),c=s.db.select({metadata:u.metadata}).from(u).where(l).all(),p=0;for(let g of c){let k=g.metadata?JSON.parse(g.metadata):{};typeof k.pinOrder=="number"&&k.pinOrder>p&&(p=k.pinOrder);}a.pinOrder=p+1;}else delete a.pinOrder;return s.db.update(u).set({pinned:i,metadata:Object.keys(a).length>0?JSON.stringify(a):null}).where(n).run(),{pinned:!!i}}catch(n){throw n instanceof _?n:new _("DB_ERROR","Failed to toggle pin",n)}finally{s.close();}}reorderPins(t,e){let s=this.openHandle(true);try{for(let n=0;n<t.length;n++){let r=e?drizzleOrm.and(drizzleOrm.eq(u.id,t[n]),drizzleOrm.eq(u.workspace_id,e)):drizzleOrm.eq(u.id,t[n]),i=s.db.select({metadata:u.metadata}).from(u).where(r).get();if(!i)continue;let a=i.metadata?JSON.parse(i.metadata):{};a.pinOrder=n+1,s.db.update(u).set({metadata:JSON.stringify(a)}).where(r).run();}}catch(n){throw n instanceof _?n:new _("DB_ERROR","Failed to reorder pins",n)}finally{s.close();}}toggleStar(t,e){let s=this.openHandle(true);try{let n=e?drizzleOrm.and(drizzleOrm.eq(u.id,t),drizzleOrm.eq(u.workspace_id,e)):drizzleOrm.eq(u.id,t),r=s.db.select({starred:u.starred}).from(u).where(n).get();if(!r)return null;let i=r.starred?0:1;return s.db.update(u).set({starred:i}).where(n).run(),{starred:!!i}}catch(n){throw n instanceof _?n:new _("DB_ERROR","Failed to toggle star",n)}finally{s.close();}}};function me(d){return d.replace(/<conversation_history[^>]*>[\s\S]*?<\/conversation_history>/g,"").split(`
|
|
267
267
|
`).filter(n=>!(n.startsWith("Loaded ")&&n.includes("layouts from")||n.includes("[dotenv@")||n.includes("[Nest]")&&n.includes("DEBUG")||n.startsWith("Registered custom layout:")||n.startsWith("Updated custom layout:"))).join(`
|
|
268
268
|
`).trim()}function fe(d){if(!d)return "";let t=d;try{let e=JSON.parse(t);Array.isArray(e)?t=e.filter(s=>s?.type==="text"&&s?.text).map(s=>s.text).join(`
|
|
269
|
-
`):e&&typeof e=="object"&&e.result!==void 0&&(t=e.result||"");}catch{t=me(t);}return t}var st=class{dbPath;constructor(t){this.dbPath=t??D.join(Pt.homedir(),".crewx","crewx.db");}getThreadRepo(){return new et({dbPath:this.dbPath})}updateThread(t,e){this.getThreadRepo().updateThread(t,{title:e.title});}async ensureThread(t,e,s){let n=this.getThreadRepo(),r=n.findThreadById(t);if(r){if(r.platform!==e)throw new Error(`Thread '${t}' already exists with platform '${r.platform}' \u2014 cannot change to '${e}' (platform is immutable)`);return {created:false}}return n.ensureThread(t,e,s),{created:true}}async fetchHistory(t,e){let s=e?.limit??100,n=this.getThreadRepo(),r=n.findThreadById(t),i=n.findTopLevelTasks(t,void 0,s),a=new Set(["queued","cancelled"]);i=i.filter(p=>(!p.status||!a.has(p.status))&&(!e?.currentTraceId||p.trace_id!==e.currentTraceId));let l=r?.platform??"cli",c=this.rowsToMessages(i);return {threadId:t,platform:l,messages:c,metadata:{title:r?.title??void 0,firstMessage:r?.first_message??void 0,lastMessage:r?.last_message??void 0,messageCount:r?.message_count??0,updatedAt:r?.updated_at?new Date(r.updated_at).getTime():void 0}}}async saveUserMessage(t,e,s,n){let{firstMessage:r}=this.getThreadRepo().saveUserMessage(t,e);return {id:t,firstMessage:r}}async saveAssistantMessage(t,e,s,n){return this.getThreadRepo().saveAssistantMessage(t,e),{id:t}}close(){}normalizeStatus(t){if(t&&!["success","completed","done"].includes(t)){if(["failed","error"].includes(t))return "failed";if(t==="running")return "running"}}rowsToMessages(t){let e=[];for(let s of t){s.prompt&&e.push({id:`${s.id}-user`,text:s.prompt,isAssistant:false,timestamp:new Date(s.started_at).getTime(),metadata:{caller_agent_id:s.caller_agent_id}});let n=fe(s.result),r=this.normalizeStatus(s.status);if(n||r==="running"||r==="failed"){let i={agent_id:s.agent_id,task_id:s.id};r&&(i.status=r),
|
|
269
|
+
`):e&&typeof e=="object"&&e.result!==void 0&&(t=e.result||"");}catch{t=me(t);}return t}var st=class{dbPath;constructor(t){this.dbPath=t??D.join(Pt.homedir(),".crewx","crewx.db");}getThreadRepo(){return new et({dbPath:this.dbPath})}updateThread(t,e){this.getThreadRepo().updateThread(t,{title:e.title});}async ensureThread(t,e,s){let n=this.getThreadRepo(),r=n.findThreadById(t);if(r){if(r.platform!==e)throw new Error(`Thread '${t}' already exists with platform '${r.platform}' \u2014 cannot change to '${e}' (platform is immutable)`);return {created:false}}return n.ensureThread(t,e,s),{created:true}}async fetchHistory(t,e){let s=e?.limit??100,n=this.getThreadRepo(),r=n.findThreadById(t),i=n.findTopLevelTasks(t,void 0,s),a=new Set(["queued","cancelled"]);i=i.filter(p=>(!p.status||!a.has(p.status))&&(!e?.currentTraceId||p.trace_id!==e.currentTraceId));let l=r?.platform??"cli",c=this.rowsToMessages(i);return {threadId:t,platform:l,messages:c,metadata:{title:r?.title??void 0,firstMessage:r?.first_message??void 0,lastMessage:r?.last_message??void 0,messageCount:r?.message_count??0,updatedAt:r?.updated_at?new Date(r.updated_at).getTime():void 0}}}async saveUserMessage(t,e,s,n){let{firstMessage:r}=this.getThreadRepo().saveUserMessage(t,e);return {id:t,firstMessage:r}}async saveAssistantMessage(t,e,s,n){return this.getThreadRepo().saveAssistantMessage(t,e),{id:t}}close(){}normalizeStatus(t){if(t&&!["success","completed","done"].includes(t)){if(["failed","error"].includes(t))return "failed";if(t==="running")return "running"}}rowsToMessages(t){let e=[];for(let s of t){s.prompt&&e.push({id:`${s.id}-user`,text:s.prompt,isAssistant:false,timestamp:new Date(s.started_at).getTime(),metadata:{caller_agent_id:s.caller_agent_id}});let n=fe(s.result),r=this.normalizeStatus(s.status);if(n||r==="running"||r==="failed"){let i={agent_id:s.agent_id,task_id:s.id};r&&(i.status=r),r==="failed"&&s.error&&(i.reason=s.error.split(`
|
|
270
|
+
`)[0].slice(0,200)),e.push({id:`${s.id}-assistant`,text:n,isAssistant:true,timestamp:new Date(s.started_at).getTime(),metadata:i});}}return e}};var ut=class extends v{name="conversation";_provider;unsubStart=null;unsubEnd=null;constructor(t){super(),this._provider=new st(t?.dbPath);}get conversationProvider(){return this._provider}async afterUserMessage(t,e,s,n){}async afterAssistantMessage(t,e,s){}attach(t){this.unsubStart=t.on("task:start",async e=>{if(!e.threadId)return;let s=e.platform??"cli";try{let n=await this._provider.ensureThread(e.threadId,s,e.workspaceId),r=await this._provider.saveUserMessage(e.threadId,e.message??"");await this.afterUserMessage(e.threadId,r.id,n.created||r.firstMessage,e);}catch{}}),this.unsubEnd=t.on("task:end",async e=>{if(!e.result)return;let s=e.metadata?.threadId;if(!s)return;let n=e.agentRef?.replace(/^@/,"")??"";try{let{id:r}=await this._provider.saveAssistantMessage(s,e.result,n);await this.afterAssistantMessage(s,r,e);}catch{}});}detach(t){this.unsubStart?.(),this.unsubStart=null,this.unsubEnd?.(),this.unsubEnd=null,this._provider.close?.();}};exports.ConversationPlugin=ut;exports.FileLoggerPlugin=nt;exports.SqliteTracingPlugin=ct;
|
package/package.json
CHANGED
|
@@ -340,7 +340,7 @@ layouts:
|
|
|
340
340
|
{{/if}}
|
|
341
341
|
{{#each messages}}
|
|
342
342
|
{{#if isAssistant}}
|
|
343
|
-
<message role="assistant"{{#if metadata.agent_id}} agent="{{metadata.agent_id}}"{{/if}}{{#if metadata.task_id}} task_id="{{metadata.task_id}}"{{/if}}{{#if metadata.status}} status="{{metadata.status}}"{{/if}}{{#if created_at}} created_at="{{created_at}}"{{/if}}{{#if metadata.slack}}{{#with metadata.slack}}{{#if bot_username}} name="{{bot_username}}"{{/if}}{{#if bot_user_id}} slack_user="{{bot_user_id}}"{{/if}}{{/with}}{{/if}}>
|
|
343
|
+
<message role="assistant"{{#if metadata.agent_id}} agent="{{metadata.agent_id}}"{{/if}}{{#if metadata.task_id}} task_id="{{metadata.task_id}}"{{/if}}{{#if metadata.status}} status="{{metadata.status}}"{{/if}}{{#if metadata.reason}} reason="{{metadata.reason}}"{{/if}}{{#if created_at}} created_at="{{created_at}}"{{/if}}{{#if metadata.slack}}{{#with metadata.slack}}{{#if bot_username}} name="{{bot_username}}"{{/if}}{{#if bot_user_id}} slack_user="{{bot_user_id}}"{{/if}}{{/with}}{{/if}}>
|
|
344
344
|
{{else}}
|
|
345
345
|
<message role="user"{{#if metadata.caller_agent_id}} from="@{{metadata.caller_agent_id}}"{{/if}}{{#if created_at}} created_at="{{created_at}}"{{/if}}{{#if metadata.slack}}{{#with metadata.slack}}{{#if user_profile.display_name}} name="{{user_profile.display_name}}"{{else if username}} name="{{username}}"{{/if}}{{#if user_id}} slack_user="{{user_id}}"{{/if}}{{/with}}{{/if}}>
|
|
346
346
|
{{/if}}
|