@devflow-tools/devflow 0.18.65 → 0.18.66

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,7 +1,7 @@
1
1
  {
2
2
  "name": "devflow",
3
3
  "description": "DevFlow — Developer Intelligence Platform: project context, code graph, knowledge base, memory engine, and workflow automation with 14 domain plugins",
4
- "version": "0.18.65",
4
+ "version": "0.18.66",
5
5
  "author": {
6
6
  "name": "DevFlow"
7
7
  },
@@ -1,6 +1,6 @@
1
- import {createConnection}from'node:net';import {getDaemonSocketPath,getDevFlowStateRoot}from'@devflow-tools/sdk';import {mkdirSync,appendFileSync}from'node:fs';import {join,dirname}from'node:path';import {openGlobalDevFlowDatabase}from'@devflow-tools/database';import {createHash}from'node:crypto';function b(e,t,n){try{let o=openGlobalDevFlowDatabase();try{o.insertEvent({kind:e,timestamp:Date.now(),duration:n,success:t.success!==!1,metadata:t});}finally{o.close();}}catch{}}var I=["4-Gate enforcement","memory prefetch cache","daemon-shared hook state"];function p(e){let t=N(e.input)??e.requestType;if(b("hook_daemon_request",{success:e.success,projectRoot:e.projectRoot,requestType:e.requestType,tool:t,attempts:e.attempts},e.durationMs),e.success)return;let n=Date.now(),o=v(e.input);try{let r=openGlobalDevFlowDatabase(void 0,{busyTimeoutMs:250});try{r.insertHookFallback({id:`hook-fallback:${createHash("sha256").update(`${e.projectRoot}\0${o.sessionId??""}\0${o.toolUseId??""}\0${e.requestType}\0${n}`).digest("hex").slice(0,24)}`,projectRoot:e.projectRoot,sessionId:o.sessionId,toolUseId:o.toolUseId,requestType:e.requestType,tool:t,reason:e.reason??"unknown",durationMs:e.durationMs,attempts:e.attempts,createdAt:n});}finally{r.close();}}catch{}try{let r=join(getDevFlowStateRoot(),"logs","hook-fallback",`${new Date(n).toISOString().slice(0,10)}.log`);mkdirSync(dirname(r),{recursive:!0,mode:448}),appendFileSync(r,`${JSON.stringify({ts:n,tool:t,requestType:e.requestType,projectRoot:e.projectRoot,reason:`daemon-${e.reason??"unknown"}`,durationMs:e.durationMs,attempts:e.attempts,bypassCountLost:!0,disabledFeatures:I})}
2
- `,{mode:384});}catch{}}function v(e){try{let t=JSON.parse(e);return {sessionId:typeof t.session_id=="string"?t.session_id:void 0,toolUseId:typeof t.tool_use_id=="string"?t.tool_use_id:void 0}}catch{return {}}}function N(e){try{let t=JSON.parse(e);return typeof t.tool_name=="string"&&t.tool_name?t.tool_name:null}catch{return null}}var d=process.env.CLAUDE_PROJECT_DIR||process.cwd(),q=getDaemonSocketPath(d),u=process.argv[2],h=process.argv[3],m=Number(process.env.DEVFLOW_HOOK_CLIENT_TIMEOUT_MS),F=Number.isFinite(m)&&m>0?m:1e3,f=Number(process.env.DEVFLOW_HOOK_CLIENT_RETRY_DELAY_MS),P=Number.isFinite(f)&&f>=0?f:100,g=2*1024*1024,y=u==="memory-snapshot"?2:1;async function L(){let e=h!==void 0?H(h):u==="memory-snapshot"?{input:"",truncated:false}:await j(),{input:t,truncated:n}=e,o=Date.now(),r="unknown";for(let a=0;a<y;a+=1){let s=await B(t,n);if(s.response!==null){if(x(s.response)){r="protocol";break}return p({projectRoot:d,requestType:u,input:t,durationMs:Date.now()-o,success:true,attempts:a+1}),process.stdout.write(`${s.response}
3
- `),0}r=s.reason??"unknown",a<y-1&&await G(P);}return process.env.DEVFLOW_HOOK_CLIENT_SUPPRESS_FALLBACK_LOG!=="1"&&p({projectRoot:d,requestType:u,input:t,durationMs:Date.now()-o,success:false,attempts:y,reason:r}),1}function x(e){try{let t=JSON.parse(e);return !!(t&&typeof t=="object"&&!Array.isArray(t)&&typeof t.error=="string")}catch{return true}}function B(e,t){return new Promise(n=>{let o=createConnection(q),r=false,a="",s=(c,l)=>{r||(r=true,clearTimeout(i),o.destroy(),n({response:c,reason:l}));},i=setTimeout(()=>s(null,"timeout"),F);o.setEncoding("utf8"),o.on("connect",()=>{o.write(`${JSON.stringify({type:"hello",rootPath:d})}
4
- `);let c=$(e,t);if(!c){s(null,"protocol");return}o.write(`${JSON.stringify(c)}
5
- `);}),o.on("data",c=>{a+=c;let l=a.indexOf(`
6
- `);if(l<0)return;let _=a.slice(0,l).trim();s(_||null);}),o.on("error",()=>s(null,"unreachable")),o.on("close",()=>s(null,"unreachable"));})}function $(e,t){let n=t?{truncated:true}:{};return u==="stop"?{type:"stop",input:e,...n}:u==="memory-snapshot"?{type:"memory-snapshot"}:["session-start","session-end","post-tool-use","post-tool-use-failure","pre-tool-use","user-prompt-submit","pre-compact"].includes(u)?{type:u,input:e,...n}:null}function j(){return new Promise(e=>{let t=[],n=0,o=false;process.stdin.on("data",r=>{let a=Buffer.isBuffer(r)?r:Buffer.from(r),s=g-n;if(s>0){let i=a.subarray(0,s);t.push(i),n+=i.length;}a.length>s&&(o=true);}),process.stdin.on("end",()=>e({input:Buffer.concat(t).toString("utf8"),truncated:o})),process.stdin.on("error",()=>e({input:"",truncated:false}));})}function H(e){let t=Buffer.from(e);return t.length<=g?{input:e,truncated:false}:{input:t.subarray(0,g).toString("utf8"),truncated:true}}function G(e){return new Promise(t=>setTimeout(t,e))}L().then(e=>process.exit(e)).catch(()=>process.exit(1));
1
+ import {createConnection}from'node:net';import {mkdirSync,appendFileSync,writeFileSync,renameSync,readFileSync,existsSync}from'node:fs';import {getDaemonSocketPath,getDevFlowStateRoot,getDaemonPidPath,getProjectStateDir}from'@devflow-tools/sdk';import {join,dirname}from'node:path';import {openGlobalDevFlowDatabase}from'@devflow-tools/database';import {createHash,randomUUID}from'node:crypto';function R(e,t,o){try{let r=openGlobalDevFlowDatabase();try{r.insertEvent({kind:e,timestamp:Date.now(),duration:o,success:t.success!==!1,metadata:t});}finally{r.close();}}catch{}}var j=["4-Gate enforcement","memory prefetch cache","daemon-shared hook state"];function y(e){let t=F(e.input)??e.requestType;if(R("hook_daemon_request",{success:e.success,projectRoot:e.projectRoot,requestType:e.requestType,tool:t,attempts:e.attempts},e.durationMs),e.success)return;let o=Date.now(),r=A(e.input);try{let n=openGlobalDevFlowDatabase(void 0,{busyTimeoutMs:250});try{n.insertHookFallback({id:`hook-fallback:${createHash("sha256").update(`${e.projectRoot}\0${r.sessionId??""}\0${r.toolUseId??""}\0${e.requestType}\0${o}`).digest("hex").slice(0,24)}`,projectRoot:e.projectRoot,sessionId:r.sessionId,toolUseId:r.toolUseId,requestType:e.requestType,tool:t,reason:e.reason??"unknown",durationMs:e.durationMs,attempts:e.attempts,createdAt:o});}finally{n.close();}}catch{}try{let n=join(getDevFlowStateRoot(),"logs","hook-fallback",`${new Date(o).toISOString().slice(0,10)}.log`);mkdirSync(dirname(n),{recursive:!0,mode:448}),appendFileSync(n,`${JSON.stringify({ts:o,tool:t,requestType:e.requestType,projectRoot:e.projectRoot,reason:`daemon-${e.reason??"unknown"}`,durationMs:e.durationMs,attempts:e.attempts,bypassCountLost:!0,disabledFeatures:j})}
2
+ `,{mode:384});}catch{}}function A(e){try{let t=JSON.parse(e);return {sessionId:typeof t.session_id=="string"?t.session_id:void 0,toolUseId:typeof t.tool_use_id=="string"?t.tool_use_id:void 0}}catch{return {}}}function F(e){try{let t=JSON.parse(e);return typeof t.tool_name=="string"&&t.tool_name?t.tool_name:null}catch{return null}}var C=2*1024*1024;function J(e){return join(getProjectStateDir(e),"user-prompt-submit-pending")}function k(e,t){if(Buffer.byteLength(t,"utf8")>C)throw new Error("user_prompt_submit_input_too_large");let o=J(e);mkdirSync(o,{recursive:true,mode:448});let r=`user-prompt-submit-spool-${Date.now()}-${process.pid}-${randomUUID().slice(0,8)}`,n=join(o,`.${r}.tmp`),s=join(o,`${r}.json`);return writeFileSync(n,t,{mode:384}),renameSync(n,s),r}var c=process.env.CLAUDE_PROJECT_DIR||process.cwd(),X=getDaemonSocketPath(c),a=process.argv[2],O=process.argv[3],h=Number(process.env.DEVFLOW_HOOK_CLIENT_TIMEOUT_MS),z=Number.isFinite(h)&&h>0?h:1e3,b=Number(process.env.DEVFLOW_HOOK_CLIENT_RETRY_DELAY_MS),Q=Number.isFinite(b)&&b>=0?b:100,S=2*1024*1024,_=a==="memory-snapshot"?2:1;async function Z(){let e=O!==void 0?se(O):a==="memory-snapshot"?{input:"",truncated:false}:await ne(),{input:t,truncated:o}=e,r=Date.now(),n="unknown";for(let s=0;s<_;s+=1){let i=await re(t,o);if(i.response!==null){if(te(i.response)){n="protocol";break}return y({projectRoot:c,requestType:a,input:t,durationMs:Date.now()-r,success:true,attempts:s+1}),process.stdout.write(`${i.response}
3
+ `),0}n=i.reason??"unknown",s<_-1&&await ie(Q);}if(process.env.DEVFLOW_HOOK_CLIENT_SUPPRESS_FALLBACK_LOG!=="1"&&y({projectRoot:c,requestType:a,input:t,durationMs:Date.now()-r,success:false,attempts:_,reason:n}),a==="user-prompt-submit"&&t.trim())try{k(c,t);}catch{}return 1}function ee(){let e=process.env.CLAUDE_PLUGIN_ROOT?.trim();if(e)try{let t=JSON.parse(readFileSync(`${e}/dist/runtime-manifest.json`,"utf8"));return typeof t.manifestHash=="string"?t.manifestHash:void 0}catch{return}}function m(e){try{let t=getDaemonPidPath(e);if(!existsSync(t))return;let o=Number.parseInt(readFileSync(t,"utf8").trim(),10);if(!Number.isInteger(o)||o<=1||o===process.pid)return;process.kill(o,"SIGTERM");}catch{}}function te(e){try{let t=JSON.parse(e);return !!(t&&typeof t=="object"&&!Array.isArray(t)&&typeof t.error=="string")}catch{return true}}function re(e,t){return new Promise(o=>{let r=createConnection(X),n=false,s="",i=false,p=ee(),u=(d,l)=>{n||(n=true,clearTimeout(I),r.destroy(),o({response:d,reason:l}));},I=setTimeout(()=>{i||m(c),u(null,"timeout");},z);r.setEncoding("utf8"),r.on("connect",()=>{r.write(`${JSON.stringify({type:"hello",rootPath:c,...p?{runtimeManifestHash:p}:{}})}
4
+ `);}),r.on("data",d=>{for(s+=d;!n;){let l=s.indexOf(`
5
+ `);if(l<0)return;let f=s.slice(0,l).trim();if(s=s.slice(l+1),!i){try{let D=JSON.parse(f);if(D.error==="daemon_runtime_mismatch"){m(c),u(null,"protocol");return}if(D.type!=="hello_ack"){if(!p){u(f||null);return}m(c),u(null,"protocol");return}}catch{m(c),u(null,"protocol");return}i=true;let w=oe(e,t);if(!w){u(null,"protocol");return}r.write(`${JSON.stringify(w)}
6
+ `);continue}u(f||null);}}),r.on("error",()=>u(null,"unreachable")),r.on("close",()=>u(null,"unreachable"));})}function oe(e,t){let o=t?{truncated:true}:{};return a==="stop"?{type:"stop",input:e,...o}:a==="memory-snapshot"?{type:"memory-snapshot"}:["session-start","session-end","post-tool-use","post-tool-use-failure","pre-tool-use","user-prompt-submit","pre-compact"].includes(a)?{type:a,input:e,...o}:null}function ne(){return new Promise(e=>{let t=[],o=0,r=false;process.stdin.on("data",n=>{let s=Buffer.isBuffer(n)?n:Buffer.from(n),i=S-o;if(i>0){let p=s.subarray(0,i);t.push(p),o+=p.length;}s.length>i&&(r=true);}),process.stdin.on("end",()=>e({input:Buffer.concat(t).toString("utf8"),truncated:r})),process.stdin.on("error",()=>e({input:"",truncated:false}));})}function se(e){let t=Buffer.from(e);return t.length<=S?{input:e,truncated:false}:{input:t.subarray(0,S).toString("utf8"),truncated:true}}function ie(e){return new Promise(t=>setTimeout(t,e))}Z().then(e=>process.exit(e)).catch(()=>process.exit(1));