@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.
- package/dist/hooks/hook-client.js +6 -6
- package/dist/hooks/hook-daemon.js +25 -25
- package/dist/plugin/.claude-plugin/plugin.json +1 -1
- package/dist/plugin/dist/hooks/hook-client.js +6 -6
- package/dist/plugin/dist/hooks/hook-daemon.js +25 -25
- package/dist/plugin/dist/runtime-manifest.json +4 -4
- package/dist/plugin/package.json +2 -2
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {createConnection}from'node:net';import {
|
|
2
|
-
`,{mode:384});}catch{}}function
|
|
3
|
-
`),0}
|
|
4
|
-
`);
|
|
5
|
-
`);
|
|
6
|
-
`);
|
|
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));
|