@crewx/dreaming 0.1.0-rc.200 → 0.1.0-rc.201

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 +1 @@
1
- "use strict";var T=exports&&exports.__createBinding||(Object.create?(function(t,e,s,r){if(r===void 0)r=s;var n=Object.getOwnPropertyDescriptor(e,s);if(!n||("get"in n?!e.__esModule:n.writable||n.configurable)){n={enumerable:true,get:function(){return e[s]}}}Object.defineProperty(t,r,n)}):(function(t,e,s,r){if(r===void 0)r=s;t[r]=e[s]}));var k=exports&&exports.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:true,value:e})}):function(t,e){t["default"]=e});var L=exports&&exports.__importStar||(function(){var t=function(e){t=Object.getOwnPropertyNames||function(s){var r=[];for(var n in s)if(Object.prototype.hasOwnProperty.call(s,n))r[r.length]=n;return r};return t(e)};return function(e){if(e&&e.__esModule)return e;var s={};if(e!=null){for(var r=t(e),n=0;n<r.length;n++)if(r[n]!=="default")T(s,e,r[n])}k(s,e);return s}})();Object.defineProperty(exports,"__esModule",{value:true});exports.READ_ONLY_BASH_PREFIXES=exports.READ_ONLY_TOOLS=void 0;exports.normalizeToolName=p;exports.extractToolCallsFromLogs=P;exports.analyzeTask=J;exports.isReadOnlyToolCall=S;exports.checkFileStaleness=x;exports.extractActivityLogEntries=R;exports.buildActivityLog=$;exports.summarizeAnalysis=Q;const M=L(require("fs"));const b=require("@crewx/sdk");const B=["tsc","npm test","npm run test","npm run lint","eslint","prettier","jest","vitest","biome","npx tsc"];const N=[/error/i,/failed/i,/exit code [^0]/,/cannot find/i,/does not exist/i,/FAILED/,/✗/,/ERR!/];const U=[[/Type .+ is not assignable to type/i,"Type mismatch"],[/Cannot find module/i,"Module path error"],[/Property .+ does not exist/i,"Missing property"],[/Expected \d+ arguments/i,"Argument count mismatch"],[/Cannot find name/i,"Undeclared variable/function"],[/has no exported member/i,"Missing export"],[/FAIL|AssertionError|expect\(/i,"Test failure"],[/SyntaxError|Unexpected token/i,"Syntax error"]];const z=new Set(["Read File","Edit File","Write File","Terminal","{}",""]);function p(t){if(!t)return"";const e=t.toLowerCase();if(e==="bash"||e==="terminal")return"Bash";if(e==="read"||e==="view")return"Read";if(e==="edit"||e==="apply_patch")return"Edit";if(e==="write")return"Write";if(e==="grep"||e==="rg")return"Grep";if(e==="glob"||e==="find")return"Find";return t}function w(t){const e=t.replace(/\\/g,"/").split("/").filter(Boolean);const s=e.length<=3?e:e.slice(-3);return s.join("/")}function D(t,e){const s=p(t);if(s!=="Read"&&s!=="Edit"&&s!=="Write")return null;if(!e)return null;if(z.has(e))return null;if(e.includes("*** Update File:")||e.includes("*** Add File:")){const n=[];for(const o of e.matchAll(/\*\*\*\s+(?:Update|Add)\s+File:\s*(.+)/g)){const l=o[1].trim();if(l)n.push(w(l))}return n.length?n:null}let r=e;if(/^(Read|Edit|Write|View)\s+/.test(r)){r=r.replace(/^(Read|Edit|Write|View)\s+/,"")}if(/[*?{}]/.test(r))return null;if(r.length>300)return null;if(!/\.\w+$/.test(r)&&!r.includes("/"))return null;if(r.startsWith("/")||/^[A-Za-z]:[\\/]/.test(r)){return w(r)}return r}function W(t){const e=new Set;for(const s of t){try{const r=JSON.parse(s);if(r.type)e.add(r.type)}catch{}}if(e.has("turn.started")||e.has("turn.failed")||e.has("thread.started"))return"codex";if(e.has("assistant.message_delta")||e.has("tool.execution_complete"))return"copilot";if(e.has("step_start")&&e.has("step_finish"))return"opencode";if(e.has("system")&&e.has("result"))return"claude";if(e.has("init")&&e.has("message"))return"gemini";if(e.has("result")&&e.has("assistant"))return"claude";return null}function j(t,e){const s=t?.split("/").pop();if(s&&s in b.BUILTIN_ADAPTERS)return s;return W(e)}function P(t,e){if(!Array.isArray(t))return[];const s=t;const r=s.filter(i=>i.level==="stdout"&&i.message).map(i=>i.message);const n=j(e,r);const o=[];for(const i of s){if(i.level==="info"&&i.message){o.push(...(0,b.defaultParseEvent)(i.message,i.timestamp))}else if(i.level==="stdout"&&i.message){o.push(...(0,b.parseStdoutEvent)("",i.message,n??void 0))}}if(!o.length)return[];const l=new Map;const c=[];for(const i of o){if(i.type==="tool_use"){const a={toolUseId:i.toolUseId??null,name:p(i.toolName),input:i.toolInput??null,isError:null,resultPreview:null};const u=a.toolUseId;if(u){if(l.has(u)){l.get(u).input=a.input;continue}l.set(u,a)}c.push(a)}else if(i.type==="tool_result"){const a=i;if(a.toolUseId&&l.has(a.toolUseId)){const u=l.get(a.toolUseId);u.isError=a.isError===true;u.resultPreview=a.resultPreview??null}else{for(let u=c.length-1;u>=0;u--){const d=c[u];if(d.resultPreview===null){d.isError=a.isError===true;d.resultPreview=a.resultPreview??null;break}}}}}return c}function V(t){const e=t.match(/^\[skill:([^\]]+)\]/);if(e){const s=e[1];if(s==="memory-v2")return"crewx/memory";return s}if(t.startsWith("skill:"))return t.slice(6);return t}function Y(t,e){if(!e)return null;const s=e.trim().split(/\s+/);const r={"crewx/memory":"memory","crewx/doc":"doc","crewx/skill":"skill","crewx/workflow":"workflow","tsserver":"tsserver"};if(t==="crewx/search")return null;let n=0;const o=r[t];if(o&&s[0]===o)n++;const l=s[n];if(!l||l.startsWith("-")||l.startsWith("/"))return null;return l}function G(t){const e={};for(const s of t){if(s.input&&s.input.includes("summarize-dirty"))continue;const r=V(s.name);if(!e[r])e[r]={count:0,subCmds:{}};e[r].count++;const n=Y(r,s.input??null);if(n)e[r].subCmds[n]=(e[r].subCmds[n]??0)+1}return e}function _(t){if(!t)return null;for(const e of B){if(t.includes(e))return e}return null}function H(t){if(t.isError===true)return true;if(!t.resultPreview)return false;return N.some(e=>e.test(t.resultPreview))}function A(t){if(!t)return null;for(const[e,s]of U){if(e.test(t))return s}return null}function X(t){const e={};return t.map(s=>{const r=p(s.name);const n={name:r,input:s.input,isError:s.isError,resultPreview:s.resultPreview,filePath:null,bashCmd:null,bashResult:null,bashErrorMsg:null,errorCategory:null,isVerify:false,editCount:null};if(r==="Read"||r==="Edit"||r==="Write"){n.filePath=D(s.name,s.input)}if((r==="Edit"||r==="Write")&&n.filePath){const o=Array.isArray(n.filePath)?n.filePath:[n.filePath];for(const l of o)e[l]=(e[l]??0)+1;n.editCount=e[o[0]]??null}if(r==="Bash"){n.bashCmd=s.input?s.input.split("\n")[0].slice(0,150):"";n.isVerify=!!_(n.bashCmd);const o=H(s);n.bashResult=o?"fail":"pass";if(o&&s.resultPreview){n.bashErrorMsg=s.resultPreview.trim().split("\n")[0].slice(0,100);n.errorCategory=A(s.resultPreview)}}return n})}function q(t){const e=[];const s=[];for(let r=0;r<t.length;r++){const n=t[r];if(n.name!=="Bash"||!n.isVerify||n.bashResult!=="pass")continue;const o=_(n.bashCmd);const l=[];let c=r-1;while(c>=0){const i=t[c];if(i.name==="Bash"&&i.isVerify){if(_(i.bashCmd)===o&&i.bashResult==="fail"){l.unshift(c)}else if(i.bashResult==="pass"){break}}c--}if(l.length>=1){const i=l[0];const a={};const u=[];for(let f=i;f<=r;f++){const h=t[f];if((h.name==="Edit"||h.name==="Write")&&h.filePath){const v=Array.isArray(h.filePath)?h.filePath:[h.filePath];for(const g of v)a[g]=(a[g]??0)+1}if(h.name==="Bash"&&h.bashResult==="fail"&&h.bashErrorMsg){u.push(h.bashErrorMsg)}}const d=u.map(A).filter(f=>f!==null);e.push({startIdx:i,endIdx:r,failCount:l.length,editFiles:a,errors:[...new Set(u)].slice(0,3),errorCategories:[...new Set(d)],verifyCmd:o})}else{let i=0,a=0,u=r-1;while(u>=0){const d=t[u];if(d.name==="Edit"||d.name==="Write")i++;else if(d.name==="Read"||d.name==="Grep"||d.name==="Find")a++;else break;u--}if(i>0){s.push({startIdx:u+1,endIdx:r,readCount:a,editCount:i})}}}return{struggles:e,efficients:s}}function J(t,e,s=[]){let r=null;if(t.metadata){try{r=JSON.parse(t.metadata).provider??null}catch{}}const n=P(s,r??void 0);const o=t.duration_ms!=null?Math.round(t.duration_ms/1e3):null;const l=X(n);const c=q(l);const i=new Set;const a=new Set;let u=0,d=0;for(const m of l){const y=m.filePath?Array.isArray(m.filePath)?m.filePath:[m.filePath]:[];if(m.name==="Read")y.forEach(E=>i.add(E));else if(m.name==="Edit"||m.name==="Write")y.forEach(E=>a.add(E));else if(m.name==="Bash"){u++;if(m.isVerify)d++}}const f=G(e);const h=a.size>0;const v=!!(f["crewx/doc"]&&f["crewx/doc"].count>0);const g=!!(f["crewx/memory"]&&f["crewx/memory"].count>0);const C=!!(f["tsserver"]&&f["tsserver"].count>0);const O=!!(f["crewx/search"]&&f["crewx/search"].count>0);const F=t.prompt?t.prompt.split("\n")[0].slice(0,120):null;const I=t.result?(0,b.sanitizeLegacyUiCardText)(t.result).split("\n")[0].slice(0,120):null;return{taskId:t.id,agentId:t.agent_id,metaProvider:r,status:t.status,promptSummary:F,resultSummary:I,duration:o,startedAt:t.started_at??null,completedAt:t.completed_at??null,durationMs:t.duration_ms??null,toolCount:n.length,timeline:l,patterns:c,behavior:{readFiles:[...i],editFiles:[...a],bashCount:u},metrics:{struggles:c.struggles.length,total_retries:c.struggles.reduce((m,y)=>m+y.failCount,0),efficients:c.efficients.length,verify_runs:d},skills:f,skillInsights:{hasEdits:h,hasDoc:v,hasMemory:g,hasTsserver:C,hasSearch:O},hasStruggles:c.struggles.length>0}}exports.READ_ONLY_TOOLS=new Set(["Read","Grep","Find","Glob"]);exports.READ_ONLY_BASH_PREFIXES=["git status","git log","git branch","git diff --stat","git show","git remote","git rev-parse","git ls-files","pwd","ls ","ls\n","echo ","cat ","head ","tail ","npx skill tsserver find","npx skill tsserver refs","npx skill tsserver type","crewx memory index","crewx memory find","crewx memory get","crewx doc toc","crewx doc section","crewx doc status","crewx search","crewx agent ls","crewx agent list","crewx wbs status"];const K=[/\bgit\s+(commit|push|pull|merge|rebase|reset|checkout|switch|add|rm)\b/,/\bnpm\s+(install|ci|publish|run\s+(test|lint|build))\b/,/\bnpx\s+tsc\b/,/\bpnpm\s+(install|run)\b/,/\bvitest\b/,/\bjest\b/];function S(t,e){const s=p(t);if(exports.READ_ONLY_TOOLS.has(s))return true;if(s!=="Bash")return false;if(!e)return false;const r=e.split("\n")[0].trimStart();if(K.some(n=>n.test(r)))return false;return exports.READ_ONLY_BASH_PREFIXES.some(n=>r.startsWith(n))}function x(t,e){try{const s=M.statSync(t);if(e){const r=Date.parse(e);if(!Number.isNaN(r)&&s.mtimeMs>r)return"stale"}return"ok"}catch{return"unknown"}}function Z(t,e){if(!S(t.name,t.input))return null;if(t.isError)return null;let s=null;let r="ok";if(t.name==="Read"&&t.filePath){const o=Array.isArray(t.filePath)?t.filePath[0]??null:t.filePath;s=o;if(o)r=x(o,e)}const n=t.name==="Bash"?t.bashCmd??t.input?.slice(0,150)??null:t.input?.slice(0,150)??null;return{tool:t.name,cmd:n,result:t.resultPreview??null,filePath:s,status:r}}function R(t){const e=[];for(const s of t){for(const r of s.timeline){const n=Z(r,s.completedAt);if(n)e.push(n)}}return e}function $(t,e,s,r,n){const o=R(t);const l=[];let c=0;let i=false;for(const a of o){const u=(a.result?.length??0)+(a.cmd?.length??0)+80;if(c+u>n&&l.length>0){i=true;break}l.push(a);c+=u}return{threadId:e,agentId:s,lookback:r,totalEntries:o.length,entries:l,truncated:i,budgetUsed:c}}function Q(t){const e={};for(const s of t.timeline){const r=s.name||"?";e[r]=(e[r]??0)+1}return{taskId:t.taskId,agentId:t.agentId,status:t.status,duration:t.duration,startedAt:t.startedAt,completedAt:t.completedAt,toolCount:t.toolCount,toolCounts:e,editFiles:t.behavior.editFiles,readFiles:t.behavior.readFiles,hasStruggles:t.hasStruggles,promptSummary:t.promptSummary}}
1
+ "use strict";var k=exports&&exports.__createBinding||(Object.create?(function(t,e,s,r){if(r===void 0)r=s;var n=Object.getOwnPropertyDescriptor(e,s);if(!n||("get"in n?!e.__esModule:n.writable||n.configurable)){n={enumerable:true,get:function(){return e[s]}}}Object.defineProperty(t,r,n)}):(function(t,e,s,r){if(r===void 0)r=s;t[r]=e[s]}));var T=exports&&exports.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:true,value:e})}):function(t,e){t["default"]=e});var L=exports&&exports.__importStar||(function(){var t=function(e){t=Object.getOwnPropertyNames||function(s){var r=[];for(var n in s)if(Object.prototype.hasOwnProperty.call(s,n))r[r.length]=n;return r};return t(e)};return function(e){if(e&&e.__esModule)return e;var s={};if(e!=null){for(var r=t(e),n=0;n<r.length;n++)if(r[n]!=="default")k(s,e,r[n])}T(s,e);return s}})();Object.defineProperty(exports,"__esModule",{value:true});exports.READ_ONLY_BASH_PREFIXES=exports.READ_ONLY_TOOLS=void 0;exports.normalizeToolName=p;exports.extractToolCallsFromLogs=P;exports.analyzeTask=J;exports.isReadOnlyToolCall=x;exports.checkFileStaleness=S;exports.extractActivityLogEntries=R;exports.buildActivityLog=$;exports.summarizeAnalysis=Q;const M=L(require("fs"));const b=require("@crewx/sdk");const B=["tsc","npm test","npm run test","npm run lint","eslint","prettier","jest","vitest","biome","npx tsc"];const N=[/error/i,/failed/i,/exit code [^0]/,/cannot find/i,/does not exist/i,/FAILED/,/✗/,/ERR!/];const U=[[/Type .+ is not assignable to type/i,"Type mismatch"],[/Cannot find module/i,"Module path error"],[/Property .+ does not exist/i,"Missing property"],[/Expected \d+ arguments/i,"Argument count mismatch"],[/Cannot find name/i,"Undeclared variable/function"],[/has no exported member/i,"Missing export"],[/FAIL|AssertionError|expect\(/i,"Test failure"],[/SyntaxError|Unexpected token/i,"Syntax error"]];const z=new Set(["Read File","Edit File","Write File","Terminal","{}",""]);function p(t){if(!t)return"";const e=t.toLowerCase();if(e==="bash"||e==="terminal")return"Bash";if(e==="read"||e==="view")return"Read";if(e==="edit"||e==="apply_patch")return"Edit";if(e==="write")return"Write";if(e==="grep"||e==="rg")return"Grep";if(e==="glob"||e==="find")return"Find";return t}function _(t){const e=t.replace(/\\/g,"/").split("/").filter(Boolean);const s=e.length<=3?e:e.slice(-3);return s.join("/")}function D(t,e){const s=p(t);if(s!=="Read"&&s!=="Edit"&&s!=="Write")return null;if(!e)return null;if(z.has(e))return null;if(e.includes("*** Update File:")||e.includes("*** Add File:")){const n=[];for(const o of e.matchAll(/\*\*\*\s+(?:Update|Add)\s+File:\s*(.+)/g)){const l=o[1].trim();if(l)n.push(_(l))}return n.length?n:null}let r=e;if(/^(Read|Edit|Write|View)\s+/.test(r)){r=r.replace(/^(Read|Edit|Write|View)\s+/,"")}if(/[*?{}]/.test(r))return null;if(r.length>300)return null;if(!/\.\w+$/.test(r)&&!r.includes("/"))return null;if(r.startsWith("/")||/^[A-Za-z]:[\\/]/.test(r)){return _(r)}return r}function W(t){const e=new Set;for(const s of t){try{const r=JSON.parse(s);if(r.type)e.add(r.type)}catch{}}if(e.has("turn.started")||e.has("turn.failed")||e.has("thread.started"))return"codex";if(e.has("assistant.message_delta")||e.has("tool.execution_complete"))return"copilot";if(e.has("step_start")&&e.has("step_finish"))return"opencode";if(e.has("system")&&e.has("result"))return"claude";if(e.has("init")&&e.has("message"))return"gemini";if(e.has("result")&&e.has("assistant"))return"claude";return null}function j(t,e){const s=t?.split("/").pop();if(s&&s in b.BUILTIN_ADAPTERS)return s;return W(e)}function P(t,e){if(!Array.isArray(t))return[];const s=t;const r=s.filter(i=>i.level==="stdout"&&i.message).map(i=>i.message);const n=j(e,r);const o=[];for(const i of s){if(i.level==="info"&&i.message){o.push(...(0,b.defaultParseEvent)(i.message,i.timestamp))}else if(i.level==="stdout"&&i.message){o.push(...(0,b.parseStdoutEvent)("",i.message,n??void 0))}}if(!o.length)return[];const l=new Map;const c=[];for(const i of o){if(i.type==="tool_use"){const a={toolUseId:i.toolUseId??null,name:p(i.toolName),input:i.toolInput??null,isError:null,resultPreview:null};const u=a.toolUseId;if(u){if(l.has(u)){l.get(u).input=a.input;continue}l.set(u,a)}c.push(a)}else if(i.type==="tool_result"){const a=i;if(a.toolUseId&&l.has(a.toolUseId)){const u=l.get(a.toolUseId);u.isError=a.isError===true;u.resultPreview=a.resultPreview??null}else{for(let u=c.length-1;u>=0;u--){const d=c[u];if(d.resultPreview===null){d.isError=a.isError===true;d.resultPreview=a.resultPreview??null;break}}}}}return c}function V(t){const e=t.match(/^\[skill:([^\]]+)\]/);if(e){const s=e[1];if(s==="memory-v2")return"crewx/memory";return s}if(t.startsWith("skill:"))return t.slice(6);return t}function Y(t,e){if(!e)return null;const s=e.trim().split(/\s+/);const r={"crewx/memory":"memory","crewx/doc":"doc","crewx/skill":"skill","crewx/workflow":"workflow","tsserver":"tsserver"};if(t==="crewx/search")return null;let n=0;const o=r[t];if(o&&s[0]===o)n++;const l=s[n];if(!l||l.startsWith("-")||l.startsWith("/"))return null;return l}function G(t){const e={};for(const s of t){if(s.input&&s.input.includes("summarize-dirty"))continue;const r=V(s.name);if(!e[r])e[r]={count:0,subCmds:{}};e[r].count++;const n=Y(r,s.input??null);if(n)e[r].subCmds[n]=(e[r].subCmds[n]??0)+1}return e}function w(t){if(!t)return null;for(const e of B){if(t.includes(e))return e}return null}function H(t){if(t.isError===true)return true;if(!t.resultPreview)return false;return N.some(e=>e.test(t.resultPreview))}function A(t){if(!t)return null;for(const[e,s]of U){if(e.test(t))return s}return null}function X(t){const e={};return t.map(s=>{const r=p(s.name);const n={name:r,input:s.input,isError:s.isError,resultPreview:s.resultPreview,filePath:null,bashCmd:null,bashResult:null,bashErrorMsg:null,errorCategory:null,isVerify:false,editCount:null};if(r==="Read"||r==="Edit"||r==="Write"){n.filePath=D(s.name,s.input)}if((r==="Edit"||r==="Write")&&n.filePath){const o=Array.isArray(n.filePath)?n.filePath:[n.filePath];for(const l of o)e[l]=(e[l]??0)+1;n.editCount=e[o[0]]??null}if(r==="Bash"){n.bashCmd=s.input?s.input.split("\n")[0].slice(0,150):"";n.isVerify=!!w(n.bashCmd);const o=H(s);n.bashResult=o?"fail":"pass";if(o&&s.resultPreview){n.bashErrorMsg=s.resultPreview.trim().split("\n")[0].slice(0,100);n.errorCategory=A(s.resultPreview)}}return n})}function q(t){const e=[];const s=[];for(let r=0;r<t.length;r++){const n=t[r];if(n.name!=="Bash"||!n.isVerify||n.bashResult!=="pass")continue;const o=w(n.bashCmd);const l=[];let c=r-1;while(c>=0){const i=t[c];if(i.name==="Bash"&&i.isVerify){if(w(i.bashCmd)===o&&i.bashResult==="fail"){l.unshift(c)}else if(i.bashResult==="pass"){break}}c--}if(l.length>=1){const i=l[0];const a={};const u=[];for(let f=i;f<=r;f++){const h=t[f];if((h.name==="Edit"||h.name==="Write")&&h.filePath){const v=Array.isArray(h.filePath)?h.filePath:[h.filePath];for(const g of v)a[g]=(a[g]??0)+1}if(h.name==="Bash"&&h.bashResult==="fail"&&h.bashErrorMsg){u.push(h.bashErrorMsg)}}const d=u.map(A).filter(f=>f!==null);e.push({startIdx:i,endIdx:r,failCount:l.length,editFiles:a,errors:[...new Set(u)].slice(0,3),errorCategories:[...new Set(d)],verifyCmd:o})}else{let i=0,a=0,u=r-1;while(u>=0){const d=t[u];if(d.name==="Edit"||d.name==="Write")i++;else if(d.name==="Read"||d.name==="Grep"||d.name==="Find")a++;else break;u--}if(i>0){s.push({startIdx:u+1,endIdx:r,readCount:a,editCount:i})}}}return{struggles:e,efficients:s}}function J(t,e,s=[]){let r=null;if(t.metadata){try{r=JSON.parse(t.metadata).provider??null}catch{}}const n=P(s,r??void 0);const o=t.duration_ms!=null?Math.round(t.duration_ms/1e3):null;const l=X(n);const c=q(l);const i=new Set;const a=new Set;let u=0,d=0;for(const m of l){const y=m.filePath?Array.isArray(m.filePath)?m.filePath:[m.filePath]:[];if(m.name==="Read")y.forEach(E=>i.add(E));else if(m.name==="Edit"||m.name==="Write")y.forEach(E=>a.add(E));else if(m.name==="Bash"){u++;if(m.isVerify)d++}}const f=G(e);const h=a.size>0;const v=!!(f["crewx/doc"]&&f["crewx/doc"].count>0);const g=!!(f["crewx/memory"]&&f["crewx/memory"].count>0);const C=!!(f["tsserver"]&&f["tsserver"].count>0);const O=!!(f["crewx/search"]&&f["crewx/search"].count>0);const F=t.prompt?t.prompt.split("\n")[0].slice(0,120):null;const I=t.result?(0,b.sanitizeLegacyUiCardText)(t.result).split("\n")[0].slice(0,120):null;return{taskId:t.id,agentId:t.agent_id,metaProvider:r,status:t.status,promptSummary:F,resultSummary:I,duration:o,startedAt:t.started_at??null,completedAt:t.completed_at??null,durationMs:t.duration_ms??null,toolCount:n.length,timeline:l,patterns:c,behavior:{readFiles:[...i],editFiles:[...a],bashCount:u},metrics:{struggles:c.struggles.length,total_retries:c.struggles.reduce((m,y)=>m+y.failCount,0),efficients:c.efficients.length,verify_runs:d},skills:f,skillInsights:{hasEdits:h,hasDoc:v,hasMemory:g,hasTsserver:C,hasSearch:O},hasStruggles:c.struggles.length>0}}exports.READ_ONLY_TOOLS=new Set(["Read","Grep","Find","Glob"]);exports.READ_ONLY_BASH_PREFIXES=["git status","git log","git branch","git diff --stat","git show","git remote","git rev-parse","git ls-files","pwd","ls ","ls\n","echo ","cat ","head ","tail ","crewx skill tsserver find","crewx skill tsserver refs","crewx skill tsserver type","npx skill tsserver find","npx skill tsserver refs","npx skill tsserver type","crewx memory index","crewx memory find","crewx memory get","crewx doc toc","crewx doc section","crewx doc status","crewx search","crewx agent ls","crewx agent list","crewx wbs status"];const K=[/\bgit\s+(commit|push|pull|merge|rebase|reset|checkout|switch|add|rm)\b/,/\bnpm\s+(install|ci|publish|run\s+(test|lint|build))\b/,/\bnpx\s+tsc\b/,/\bpnpm\s+(install|run)\b/,/\bvitest\b/,/\bjest\b/];function x(t,e){const s=p(t);if(exports.READ_ONLY_TOOLS.has(s))return true;if(s!=="Bash")return false;if(!e)return false;const r=e.split("\n")[0].trimStart();if(K.some(n=>n.test(r)))return false;return exports.READ_ONLY_BASH_PREFIXES.some(n=>r.startsWith(n))}function S(t,e){try{const s=M.statSync(t);if(e){const r=Date.parse(e);if(!Number.isNaN(r)&&s.mtimeMs>r)return"stale"}return"ok"}catch{return"unknown"}}function Z(t,e){if(!x(t.name,t.input))return null;if(t.isError)return null;let s=null;let r="ok";if(t.name==="Read"&&t.filePath){const o=Array.isArray(t.filePath)?t.filePath[0]??null:t.filePath;s=o;if(o)r=S(o,e)}const n=t.name==="Bash"?t.bashCmd??t.input?.slice(0,150)??null:t.input?.slice(0,150)??null;return{tool:t.name,cmd:n,result:t.resultPreview??null,filePath:s,status:r}}function R(t){const e=[];for(const s of t){for(const r of s.timeline){const n=Z(r,s.completedAt);if(n)e.push(n)}}return e}function $(t,e,s,r,n){const o=R(t);const l=[];let c=0;let i=false;for(const a of o){const u=(a.result?.length??0)+(a.cmd?.length??0)+80;if(c+u>n&&l.length>0){i=true;break}l.push(a);c+=u}return{threadId:e,agentId:s,lookback:r,totalEntries:o.length,entries:l,truncated:i,budgetUsed:c}}function Q(t){const e={};for(const s of t.timeline){const r=s.name||"?";e[r]=(e[r]??0)+1}return{taskId:t.taskId,agentId:t.agentId,status:t.status,duration:t.duration,startedAt:t.startedAt,completedAt:t.completedAt,toolCount:t.toolCount,toolCounts:e,editFiles:t.behavior.editFiles,readFiles:t.behavior.readFiles,hasStruggles:t.hasStruggles,promptSummary:t.promptSummary}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewx/dreaming",
3
- "version": "0.1.0-rc.200",
3
+ "version": "0.1.0-rc.201",
4
4
  "description": "Dreaming — mandatory retrospection skill for CrewX agents (task/thread review)",
5
5
  "type": "commonjs",
6
6
  "main": "dist/cli.js",
@@ -31,8 +31,8 @@
31
31
  ],
32
32
  "license": "MIT",
33
33
  "dependencies": {
34
- "@crewx/sdk": "0.9.0-rc.174",
35
- "@crewx/shared": "0.0.6-rc.89"
34
+ "@crewx/sdk": "0.9.0-rc.175",
35
+ "@crewx/shared": "0.0.6-rc.90"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@types/node": "^20.0.0",