MCPcopy Index your code
hub / github.com/ChinaSiro/claude-code-sourcemap / PPK

Function PPK

package/cli.js:3988–4072  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

3986<${FT}>${H}</${FT}>
3987<${wj}>${_}</${wj}>
3988<${gw}>${CL(j)}</${gw}>
3989</${XA}>`;IO({value:M,mode:"task-notification",priority:"later",agentId:O})}async function QI8(q,K){let{command:_,description:z,shellCommand:Y,toolUseId:$,agentId:A,kind:O}=q,{setAppState:w}=K,{taskOutput:j}=Y,H=j.taskId,J=pq(async()=>{Qa6(H,w)}),M={...C0(H,"local_bash",z,$),type:"local_bash",status:"running",command:_,completionStatusSentInAttachment:!1,shellCommand:Y,unregisterCleanup:J,lastReportedTotalLines:0,isBackgrounded:!0,agentId:A,kind:O};H0(M,w),Y.background(H);let X=R67(H,z,O,$,A);return Y.result.then(async(P)=>{X(),await S67(Y);let W=!1;A3(H,w,(D)=>{if(D.status==="killed")return W=!0,D;return{...D,status:P.code===0?"completed":"failed",result:{code:P.code,interrupted:P.interrupted},shellCommand:null,unregisterCleanup:void 0,endTime:Date.now()}}),nm8(H,z,W?"killed":P.code===0?"completed":"failed",P.code,w,$,O,A),Zw(H)}),{taskId:H,cleanup:()=>{J()}}}function dI8(q,K,_){let{command:z,description:Y,shellCommand:$,agentId:A}=q,O=$.taskOutput.taskId,w=pq(async()=>{Qa6(O,K)}),j={...C0(O,"local_bash",Y,_),type:"local_bash",status:"running",command:z,completionStatusSentInAttachment:!1,shellCommand:$,unregisterCleanup:w,lastReportedTotalLines:0,isBackgrounded:!1,agentId:A};return H0(j,K),O}function t4Y(q,K,_){let Y=K().tasks[q];if(!sv(Y)||Y.isBackgrounded||!Y.shellCommand)return!1;let{shellCommand:$,description:A}=Y,{toolUseId:O,kind:w,agentId:j}=Y;if(!$.background(q))return!1;_((J)=>{let M=J.tasks[q];if(!sv(M)||M.isBackgrounded)return J;return{...J,tasks:{...J.tasks,[q]:{...M,isBackgrounded:!0}}}});let H=R67(q,A,w,O,j);return $.result.then(async(J)=>{H(),await S67($);let M=!1,X;if(A3(q,_,(P)=>{if(P.status==="killed")return M=!0,P;return X=P.unregisterCleanup,{...P,status:J.code===0?"completed":"failed",result:{code:J.code,interrupted:J.interrupted},shellCommand:null,unregisterCleanup:void 0,endTime:Date.now()}}),X?.(),M)nm8(q,A,"killed",J.code,_,O,w,j);else{let P=J.code===0?"completed":"failed";nm8(q,A,P,J.code,_,O,w,j)}Zw(q)}),!0}function h67(q){return Object.values(q.tasks).some((K)=>{if(sv(K)&&!K.isBackgrounded&&K.shellCommand)return!0;if(EJ(K)&&!K.isBackgrounded&&!Bm8(K))return!0;return!1})}function ZI8(q,K){let _=q(),z=Object.keys(_.tasks).filter(($)=>{let A=_.tasks[$];return sv(A)&&!A.isBackgrounded&&A.shellCommand});for(let $ of z)t4Y($,q,K);let Y=Object.keys(_.tasks).filter(($)=>{let A=_.tasks[$];return EJ(A)&&!A.isBackgrounded});for(let $ of Y)lXK($,q,K)}function cI8(q,K,_,z,Y){if(!K.background(q))return!1;let $;z((O)=>{let w=O.tasks[q];if(!sv(w)||w.isBackgrounded)return O;return $=w.agentId,{...O,tasks:{...O.tasks,[q]:{...w,isBackgrounded:!0}}}});let A=R67(q,_,void 0,Y,$);return K.result.then(async(O)=>{A(),await S67(K);let w=!1,j;A3(q,z,(J)=>{if(J.status==="killed")return w=!0,J;return j=J.unregisterCleanup,{...J,status:O.code===0?"completed":"failed",result:{code:O.code,interrupted:O.interrupted},shellCommand:null,unregisterCleanup:void 0,endTime:Date.now()}}),j?.();let H=w?"killed":O.code===0?"completed":"failed";nm8(q,_,H,O.code,z,Y,void 0,$),Zw(q)}),!0}function lI8(q,K){A3(q,K,(_)=>_.notified?_:{..._,notified:!0})}function nI8(q,K){let _;K((z)=>{let Y=z.tasks[q];if(!sv(Y)||Y.isBackgrounded)return z;_=Y.unregisterCleanup;let{[q]:$,...A}=z.tasks;return{...z,tasks:A}}),_?.()}async function S67(q){try{await q.taskOutput.flush(),q.cleanup()}catch(K){H6(K)}}var FR6="Background command ",i4Y=5000,r4Y=45000,o4Y=1024,a4Y,Mm8;var vK6=y(()=>{RY();Yw6();GN();c9();e7();E8();p2();Ij();J0();gP();gm8();$F1();a4Y=[/\(y\/n\)/i,/\[y\/n\]/i,/\(yes\/no\)/i,/\b(?:Do you|Would you|Shall I|Are you sure|Ready to)\b.*\? *$/i,/Press (any key|Enter)/i,/Continue\?/i,/Overwrite\?/i];Mm8={name:"LocalShellTask",type:"local_bash",async kill(q,K){Qa6(q,K)}}});function KKY(q){let K=zKY(q),_=qKY.get(K);return _!==void 0?_:e4Y}function _KY(q){return q.trim().split(/\s+/)[0]||""}function zKY(q){let K=F2(q),_=K[K.length-1]||q;return _KY(_)}function nXK(q,K,_,z){let $=KKY(q)(K,_,z);return{isError:$.isError,message:$.message}}var e4Y=(q,K,_)=>({isError:q!==0,message:q!==0?`Command failed with exit code ${q}`:void 0}),qKY;var iXK=y(()=>{SG();qKY=new Map([["grep",(q,K,_)=>({isError:q>=2,message:q===1?"No matches found":void 0})],["rg",(q,K,_)=>({isError:q>=2,message:q===1?"No matches found":void 0})],["find",(q,K,_)=>({isError:q>=2,message:q===1?"Some directories were inaccessible":void 0})],["diff",(q,K,_)=>({isError:q>=2,message:q===1?"Files differ":void 0})],["test",(q,K,_)=>({isError:q>=2,message:q===1?"Condition is false":void 0})],["[",(q,K,_)=>({isError:q>=2,message:q===1?"Condition is false":void 0})]])});var YKY,rXK,oXK;var aXK=y(()=>{x7();YKY=B6(()=>L.object({entries:L.record(L.string(),L.string()),entryChecksums:L.record(L.string(),L.string()).optional()})),rXK=B6(()=>L.object({organizationId:L.string(),repo:L.string(),version:L.number(),lastModified:L.string(),checksum:L.string(),content:YKY()})),oXK=B6(()=>L.object({error:L.object({details:L.object({error_code:L.literal("team_memory_too_many_entries"),max_entries:L.number().int().positive(),received_entries:L.number().int().positive()})})}))});import{createHash as $KY}from"crypto";import{mkdir as AKY,readdir as OKY,readFile as sXK,stat as wKY,writeFile as jKY}from"fs/promises";import{join as HKY,relative as JKY,sep as MKY}from"path";function tXK(){return{lastKnownChecksum:null,serverChecksums:new Map,serverMaxEntries:null}}function PKY(q){return"sha256:"+$KY("sha256").update(q,"utf8").digest("hex")}function eXK(q){return q instanceof Error&&"code"in q&&typeof q.code==="string"}function I67(){if(E7()!=="firstParty"||!WP())return!1;let q=Kq();return Boolean(q?.accessToken&&q.scopes?.includes(Mh)&&q.scopes.includes(e96))}function u67(q){return`${process.env.TEAM_MEMORY_SYNC_URL||u7().BASE_API_URL}/api/claude_code/team_memory?repo=${encodeURIComponent(q)}`}function m67(){let q=Kq();if(q?.accessToken)return{headers:{Authorization:`Bearer ${q.accessToken}`,"anthropic-beta":rM,"User-Agent":n$()}};return{error:"No OAuth token available for team memory sync"}}async function WKY(q,K,_){try{await k$();let z=m67();if(z.error)return{success:!1,error:z.error,skipRetry:!0,errorType:"auth"};let Y={...z.headers};if(_)Y["If-None-Match"]=`"${_.replace(/"/g,"")}"`;let $=u67(K),A=await $1.get($,{headers:Y,timeout:x67,validateStatus:(j)=>j===200||j===304||j===404});if(A.status===304)return N("team-memory-sync: not modified (304)",{level:"debug"}),{success:!0,notModified:!0,checksum:_??void 0};if(A.status===404)return N("team-memory-sync: no remote data (404)",{level:"debug"}),q.lastKnownChecksum=null,{success:!0,isEmpty:!0};let O=rXK().safeParse(A.data);if(!O.success)return N("team-memory-sync: invalid response format",{level:"warn"}),{success:!1,error:"Invalid team memory response format",skipRetry:!0,errorType:"parse"};let w=O.data.checksum||A.headers.etag?.replace(/^"|"$/g,"")||void 0;if(w)q.lastKnownChecksum=w;return N(`team-memory-sync: fetched successfully (checksum: ${w??"none"})`,{level:"debug"}),{success:!0,data:O.data,isEmpty:!1,checksum:w}}catch(z){let{kind:Y,status:$,message:A}=Sc(z),O=$1.isAxiosError(z)?JSON.stringify(z.response?.data??""):"";if(Y!=="other")N(`team-memory-sync: fetch error ${$}: ${O}`,{level:"warn"});switch(Y){case"auth":return{success:!1,error:`Not authorized for team memory sync: ${O}`,skipRetry:!0,errorType:"auth",httpStatus:$};case"timeout":return{success:!1,error:"Team memory sync request timeout",errorType:"timeout"};case"network":return{success:!1,error:"Cannot connect to server",errorType:"network"};default:return{success:!1,error:A,errorType:"unknown",httpStatus:$}}}}async function DKY(q,K){try{await k$();let _=m67();if(_.error)return{success:!1,error:_.error,errorType:"auth"};let z=u67(K)+"&view=hashes",Y=await $1.get(z,{headers:_.headers,timeout:x67,validateStatus:(O)=>O===200||O===404});if(Y.status===404)return q.lastKnownChecksum=null,{success:!0,entryChecksums:{}};let $=Y.data?.checksum||Y.headers.etag?.replace(/^"|"$/g,""),A=Y.data?.entryChecksums;if(!A||typeof A!=="object")return{success:!1,error:"Server did not return entryChecksums (?view=hashes unsupported)",errorType:"parse"};if($)q.lastKnownChecksum=$;return{success:!0,version:Y.data?.version,checksum:$,entryChecksums:A}}catch(_){let{kind:z,status:Y,message:$}=Sc(_);switch(z){case"auth":return{success:!1,error:"Not authorized",errorType:"auth",httpStatus:Y};case"timeout":return{success:!1,error:"Timeout",errorType:"timeout"};case"network":return{success:!1,error:"Network error",errorType:"network"};default:return{success:!1,error:$,errorType:"unknown",httpStatus:Y}}}}async function fKY(q,K,_){let z=null;for(let Y=1;Y<=C67+1;Y++){if(z=await WKY(q,K,_),z.success||z.skipRetry)return z;if(Y>C67)return z;let $=hC(Y);N(`team-memory-sync: retry ${Y}/${C67}`,{level:"debug"}),await R7($)}return z}function ZKY(q){let K=Object.keys(q).sort();if(K.length===0)return[];let _=Buffer.byteLength('{"entries":{}}',"utf8"),z=(O,w)=>Buffer.byteLength(g6(O),"utf8")+Buffer.byteLength(g6(w),"utf8")+2,Y=[],$={},A=_;for(let O of K){let w=z(O,q[O]);if(A+w>XKY&&Object.keys($).length>0)Y.push($),$={},A=_;$[O]=q[O],A+=w}return Y.push($),Y}async function GKY(q,K,_,z){try{await k$();let Y=m67();if(Y.error)return{success:!1,error:Y.error,errorType:"auth"};let $={...Y.headers,"Content-Type":"application/json"};if(z)$["If-Match"]=`"${z.replace(/"/g,"")}"`;let A=u67(K),O=await $1.put(A,{entries:_},{headers:$,timeout:x67,validateStatus:(j)=>j===200||j===412});if(O.status===412)return N("team-memory-sync: conflict (412 Precondition Failed)",{level:"info"}),{success:!1,conflict:!0,error:"ETag mismatch"};let w=O.data?.checksum;if(w)q.lastKnownChecksum=w;return N(`team-memory-sync: uploaded ${Object.keys(_).length} entries (checksum: ${w??"none"})`,{level:"debug"}),{success:!0,checksum:w,lastModified:O.data?.lastModified}}catch(Y){let $=$1.isAxiosError(Y)?JSON.stringify(Y.response?.data??""):"";N(`team-memory-sync: upload failed: ${Y instanceof Error?Y.message:""} ${$}`,{level:"warn"});let{kind:A,status:O,message:w}=Sc(Y),j=A==="http"||A==="other"?"unknown":A,H,J,M;if(O===413&&$1.isAxiosError(Y)){let X=oXK().safeParse(Y.response?.data);if(X.success)H=X.data.error.details.error_code,J=X.data.error.details.max_entries,M=X.data.error.details.received_entries}return{success:!1,error:w,errorType:j,httpStatus:O,...H!==void 0&&{serverErrorCode:H},...J!==void 0&&{serverMaxEntries:J},...M!==void 0&&{serverReceivedEntries:M}}}}async function TKY(q){let K=wu(),_={},z=[];async function Y(A){try{let O=await OKY(A,{withFileTypes:!0});await Promise.all(O.map(async(w)=>{let j=HKY(A,w.name);if(w.isDirectory())await Y(j);else if(w.isFile())try{let H=await wKY(j);if(H.size>b67){N(`team-memory-sync: skipping oversized file ${w.name} (${H.size} > ${b67} bytes)`,{level:"info"});return}let J=await sXK(j,"utf8"),M=JKY(K,j).replaceAll("\\","/"),X=$a1(J);if(X.length>0){let P=X[0];z.push({path:M,ruleId:P.ruleId,label:P.label}),N(`team-memory-sync: skipping "${M}" — detected ${P.label}`,{level:"warn"});return}_[M]=J}catch{}}))}catch(O){if(eXK(O)){if(O.code!=="ENOENT"&&O.code!=="EACCES"&&O.code!=="EPERM")throw O}else throw O}}await Y(K);let $=Object.keys(_).sort();if(q!==null&&$.length>q){let A=$.slice(q);N(`team-memory-sync: ${$.length} local entries exceeds server cap of ${q}; ${A.length} file(s) will NOT sync: ${A.join(", ")}. Consider consolidating or removing some team memory files.`,{level:"warn"}),d("tengu_team_mem_entries_capped",{total_entries:$.length,dropped_count:A.length,max_entries:q});let O={};for(let w of $.slice(0,q))O[w]=_[w];return{entries:O,skippedSecrets:z}}return{entries:_,skippedSecrets:z}}async function vKY(q){let K=await Promise.all(Object.entries(q).map(async([_,z])=>{let Y;try{Y=await aV1(_)}catch(A){if(A instanceof lW)return N(`team-memory-sync: ${A.message}`,{level:"warn"}),!1;throw A}if(Buffer.byteLength(z,"utf8")>b67)return N(`team-memory-sync: skipping oversized remote entry "${_}"`,{level:"info"}),!1;try{if(await sXK(Y,"utf8")===z)return!1}catch(A){if(eXK(A)&&A.code!=="ENOENT"&&A.code!=="ENOTDIR")N(`team-memory-sync: unexpected read error for "${_}": ${A.code}`,{level:"debug"})}try{let A=Y.substring(0,Y.lastIndexOf(MKY));return await AKY(A,{recursive:!0}),await jKY(Y,z,"utf8"),!0}catch(A){return N(`team-memory-sync: failed to write "${_}": ${A}`,{level:"warn"}),!1}}));return $7(K,Boolean)}function qPK(){return I67()}async function KPK(q,K){let _=K?.skipEtagCache??!1,z=Date.now();if(!I67())return UR6(z,{success:!1,errorType:"no_oauth"}),{success:!1,filesWritten:0,entryCount:0,error:"OAuth not available"};let Y=await Fe();if(!Y)return UR6(z,{success:!1,errorType:"no_repo"}),{success:!1,filesWritten:0,entryCount:0,error:"No git remote found"};let $=_?null:q.lastKnownChecksum,A=await fKY(q,Y,$);if(!A.success)return UR6(z,{success:!1,errorType:A.errorType,status:A.httpStatus}),{success:!1,filesWritten:0,entryCount:0,error:A.error};if(A.notModified)return UR6(z,{success:!0,notModified:!0}),{success:!0,filesWritten:0,entryCount:0,notModified:!0};if(A.isEmpty||!A.data)return q.serverChecksums.clear(),UR6(z,{success:!0}),{success:!0,filesWritten:0,entryCount:0};let O=A.data.content.entries,w=A.data.content.entryChecksums;if(q.serverChecksums.clear(),w)for(let[H,J]of Object.entries(w))q.serverChecksums.set(H,J);else N("team-memory-sync: server response missing entryChecksums (pre-#283027 deploy) — next push will be full, not delta",{level:"debug"});let j=await vKY(O);if(j>0){let{clearMemoryFileCaches:H}=await Promise.resolve().then(() => (wM(),EH4));H()}return N(`team-memory-sync: pulled ${j} files`,{level:"info"}),UR6(z,{success:!0,filesWritten:j}),{success:!0,filesWritten:j,entryCount:Object.keys(O).length}}async function p67(q){let K=Date.now(),_=0;if(!I67())return dK6(K,{success:!1,errorType:"no_oauth"}),{success:!1,filesUploaded:0,error:"OAuth not available",errorType:"no_oauth"};let z=await Fe();if(!z)return dK6(K,{success:!1,errorType:"no_repo"}),{success:!1,filesUploaded:0,error:"No git remote found",errorType:"no_repo"};let Y=await TKY(q.serverMaxEntries),$=Y.entries,A=Y.skippedSecrets;if(A.length>0){let j=A.map((H)=>`"${H.path}" (${H.label})`).join(", ");N(`team-memory-sync: ${A.length} file(s) skipped due to detected secrets: ${j}. Remove the secret(s) to enable sync for these files.`,{level:"warn"}),d("tengu_team_mem_secret_skipped",{file_count:A.length,rule_ids:A.map((H)=>H.ruleId).join(",")})}let O=new Map;for(let[j,H]of Object.entries($))O.set(j,PKY(H));let w=!1;for(let j=0;j<=im8;j++){let H={};for(let[D,f]of O)if(q.serverChecksums.get(D)!==f)H[D]=$[D];if(Object.keys(H).length===0)return dK6(K,{success:!0,conflict:w,conflictRetries:_}),{success:!0,filesUploaded:0,...A.length>0&&{skippedSecrets:A}};let M=ZKY(H),X=0,P;for(let D of M){if(P=await GKY(q,z,D,q.lastKnownChecksum),!P.success)break;for(let f of Object.keys(D))q.serverChecksums.set(f,O.get(f));X+=Object.keys(D).length}if(P=P,P.success)return N(M.length>1?`team-memory-sync: pushed ${X} of ${O.size} files in ${M.length} batches`:`team-memory-sync: pushed ${X} of ${O.size} files (delta)`,{level:"info"}),dK6(K,{success:!0,filesUploaded:X,conflict:w,conflictRetries:_,putBatches:M.length>1?M.length:void 0}),{success:!0,filesUploaded:X,checksum:P.checksum,...A.length>0&&{skippedSecrets:A}};if(!P.conflict){if(P.serverMaxEntries!==void 0)q.serverMaxEntries=P.serverMaxEntries,N(`team-memory-sync: learned server max_entries=${P.serverMaxEntries} from 413; next push will truncate to this`,{level:"warn"});return dK6(K,{success:!1,filesUploaded:X,conflictRetries:_,putBatches:M.length>1?M.length:void 0,errorType:P.errorType,status:P.httpStatus,errorCode:P.serverErrorCode,serverMaxEntries:P.serverMaxEntries,serverReceivedEntries:P.serverReceivedEntries}),{success:!1,filesUploaded:X,error:P.error,errorType:P.errorType,httpStatus:P.httpStatus}}if(w=!0,j>=im8)return N(`team-memory-sync: giving up after ${im8} conflict retries`,{level:"warn"}),dK6(K,{success:!1,conflict:!0,conflictRetries:_,errorType:"conflict"}),{success:!1,filesUploaded:0,conflict:!0,error:"Conflict resolution failed after retries"};_++,N(`team-memory-sync: conflict (412), probing server hashes (attempt ${j+1}/${im8})`,{level:"info"});let W=await DKY(q,z);if(!W.success||!W.entryChecksums)return dK6(K,{success:!1,conflict:!0,conflictRetries:_,errorType:"conflict"}),{success:!1,filesUploaded:0,conflict:!0,error:`Conflict resolution hashes probe failed: ${W.error}`};q.serverChecksums.clear();for(let[D,f]of Object.entries(W.entryChecksums))q.serverChecksums.set(D,f)}return dK6(K,{success:!1,conflictRetries:_}),{success:!1,filesUploaded:0,error:"Unexpected end of conflict resolution loop"}}function UR6(q,K){d("tengu_team_mem_sync_pull",{success:K.success,files_written:K.filesWritten??0,not_modified:K.notModified??!1,duration_ms:Date.now()-q,...K.errorType&&{errorType:K.errorType},...K.status&&{status:K.status}})}function dK6(q,K){d("tengu_team_mem_sync_push",{success:K.success,files_uploaded:K.filesUploaded??0,conflict:K.conflict??!1,conflict_retries:K.conflictRetries??0,duration_ms:Date.now()-q,...K.errorType&&{errorType:K.errorType},...K.status&&{status:K.status},...K.putBatches&&{put_batches:K.putBatches},...K.errorCode&&{error_code:K.errorCode},...K.serverMaxEntries!==void 0&&{server_max_entries:K.serverMaxEntries},...K.serverReceivedEntries!==void 0&&{server_received_entries:K.serverReceivedEntries}})}var x67=30000,b67=250000,XKY=200000,C67=3,im8=2;var _PK=y(()=>{CK();H3();YL();G7();_8();y8();E5();Az();l8();k8();Wr();Aa1();aXK()});var g67={};T8(g67,{stopTeamMemoryWatcher:()=>$PK,startTeamMemoryWatcher:()=>RKY,notifyTeamMemoryWrite:()=>hKY,isPermanentFailure:()=>zPK,_startFileWatcherForTesting:()=>CKY,_resetWatcherStateForTesting:()=>SKY});import{watch as kKY}from"fs";import{mkdir as VKY,stat as NKY}from"fs/promises";import{join as yKY}from"path";function zPK(q){if(q.errorType==="no_oauth"||q.errorType==="no_repo")return!0;if(q.httpStatus!==void 0&&q.httpStatus>=400&&q.httpStatus<500&&q.httpStatus!==409&&q.httpStatus!==429)return!0;return!1}async function LKY(){if(!cK6)return;rm8=!0;try{let q=await p67(cK6);if(q.success)om8=!1;if(q.success&&q.filesUploaded>0)N(`team-memory-watcher: pushed ${q.filesUploaded} files`,{level:"info"});else if(!q.success){if(N(`team-memory-watcher: push failed: ${q.error}`,{level:"warn"}),zPK(q)&&Op===null)Op=q.httpStatus!==void 0?`http_${q.httpStatus}`:q.errorType??"unknown",N(`team-memory-watcher: suppressing retry until next unlink or session restart (${Op})`,{level:"warn"}),d("tengu_team_mem_push_suppressed",{reason:Op,...q.httpStatus&&{status:q.httpStatus}})}}catch(q){N(`team-memory-watcher: push error: ${d6(q)}`,{level:"warn"})}finally{rm8=!1,a88=null}}function o88(){if(Op!==null)return;if(om8=!0,wH6)clearTimeout(wH6);wH6=setTimeout(()=>{if(rm8){o88();return}a88=LKY()},EKY)}async function YPK(q){if(B67)return;B67=!0;try{await VKY(q,{recursive:!0}),QR6=kKY(q,{persistent:!0,recursive:!0},(K,_)=>{if(_===null){o88();return}if(Op!==null){NKY(yKY(q,_)).catch((z)=>{if(z.code!=="ENOENT")return;if(Op!==null)N(`team-memory-watcher: unlink cleared suppression (was: ${Op})`,{level:"info"}),Op=null;o88()});return}o88()}),QR6.on("error",(K)=>{N(`team-memory-watcher: fs.watch error: ${d6(K)}`,{level:"warn"})}),N(`team-memory-watcher: watching ${q}`,{level:"debug"})}catch(K){N(`team-memory-watcher: failed to watch ${q}: ${d6(K)}`,{level:"warn"})}pq(async()=>$PK())}async function RKY(){if(!Nf8()||!qPK())return;if(!await Fe()){N("team-memory-watcher: no github.com remote, skipping sync",{level:"debug"});return}cK6=tXK();let K=!1,_=0,z=!1;try{let Y=await KPK(cK6);if(K=Y.success,z=Y.entryCount>0,Y.success&&Y.filesWritten>0)_=Y.filesWritten,N(`team-memory-watcher: initial pull got ${Y.filesWritten} files`,{level:"info"})}catch(Y){N(`team-memory-watcher: initial pull failed: ${d6(Y)}`,{level:"warn"})}await YPK(wu()),d("tengu_team_mem_sync_started",{initial_pull_success:K,initial_files_pulled:_,watcher_started:!0,server_has_content:z})}async function hKY(){if(!cK6)return;o88()}async function $PK(){if(wH6)clearTimeout(wH6),wH6=null;if(QR6)QR6.close(),QR6=null;if(a88)try{await a88}catch{}if(om8&&cK6&&Op===null)try{await p67(cK6)}catch{}}function SKY(q){QR6=null,wH6=null,rm8=!1,om8=!1,a88=null,B67=q?.skipWatcher??!1,Op=q?.pushSuppressedReason??null,cK6=q?.syncState??null}function CKY(q){return YPK(q)}var EKY=2000,QR6=null,wH6=null,rm8=!1,om8=!1,a88=null,B67=!1,Op=null,cK6=null;var F67=y(()=>{YL();c9();_8();y8();E5();k8();_PK()});var HPK={};T8(HPK,{registerSessionFileAccessHooks:()=>xKY,isMemoryFileAccess:()=>U67});function wPK(q,K){switch(q){case Cq:{let _=i_.inputSchema.safeParse(K);return _.success?_.data.file_path:null}case X4:{let _=Ou8().safeParse(K);return _.success?_.data.file_path:null}case tK:{let _=QX.inputSchema.safeParse(K);return _.success?_.data.file_path:null}default:return null}}function jPK(q,K){switch(q){case Cq:{let _=i_.inputSchema.safeParse(K);if(!_.success)return null;return l88(_.data.file_path)}case n3:{let _=$R.inputSchema.safeParse(K);if(!_.success)return null;if(_.data.path){let z=l88(_.data.path);if(z)return z}if(_.data.glob){let z=cm8(_.data.glob);if(z)return z}return null}case i9:{let _=kb.inputSchema.safeParse(K);if(!_.success)return null;if(_.data.path){let Y=l88(_.data.path);if(Y)return Y}let z=cm8(_.data.pattern);if(z)return z;return null}default:return null}}function U67(q,K){if(jPK(q,K)==="session_memory")return!0;let _=wPK(q,K);if(_&&(pR6(_)||OPK.isTeamMemFile(_)))return!0;return!1}async function bKY(q,K,_){if(q.hook_event_name!=="PostToolUse")return{};let z=jPK(q.tool_name,q.tool_input),Y=zrq(),$=Y?{subagent_name:Y}:{};if(z==="session_memory")d("tengu_session_memory_accessed",{...$});else if(z==="session_transcript")d("tengu_transcript_accessed",{...$});let A=wPK(q.tool_name,q.tool_input);if(A&&pR6(A))switch(d("tengu_memdir_accessed",{tool:q.tool_name,...$}),q.tool_name){case Cq:d("tengu_memdir_file_read",{...$});break;case X4:d("tengu_memdir_file_edit",{...$});break;case tK:d("tengu_memdir_file_write",{...$});break}if(A&&OPK.isTeamMemFile(A))switch(d("tengu_team_mem_accessed",{tool:q.tool_name,...$}),q.tool_name){case Cq:d("tengu_team_mem_file_read",{...$});break;case X4:d("tengu_team_mem_file_edit",{...$}),APK?.notifyTeamMemoryWrite();break;case tK:d("tengu_team_mem_file_write",{...$}),APK?.notifyTeamMemoryWrite();break}return{}}function xKY(){let q={type:"callback",callback:bKY,timeout:1,internal:!0};It({PostToolUse:[{matcher:Cq,hooks:[q]},{matcher:n3,hooks:[q]},{matcher:i9,hooks:[q]},{matcher:X4,hooks:[q]},{matcher:tK,hooks:[q]}]})}var OPK,APK;var Q67=y(()=>{v8();k8();wu8();$p();IY();ka();E2();tL6();lj6();qM();n88();Ou();OPK=(YL(),Eq(Pi)),APK=(F67(),Eq(g67))});function JPK(){return!1}var jH6=y(()=>{xr();V1();m8()});import{stat as IKY}from"fs/promises";function dR6(){if(xX6()==="remote"){let A=process.env.CLAUDE_CODE_REMOTE_SESSION_ID;if(A){let O=process.env.SESSION_INGRESS_URL;if(!fy8(A,O)){let w=MM(A,O);return{commit:w,pr:w}}}return{commit:"",pr:""}}let q=D5(),K=dF6(q)!==null,_=IN4()||K?gX1(q):"Claude Opus 4.6",z=`\uD83E\uDD16 Generated with [Claude Code](${Zw6})`,Y=`Co-Authored-By: ${_} <noreply@anthropic.com>`,$=N7();if($.attribution)return{commit:$.attribution.commit??Y,pr:$.attribution.pr??z};if($.includeCoAuthoredBy===!1)return{commit:"",pr:""};return{commit:Y,pr:z}}function MPK(q){for(let K of AL7)if(q.includes(`<${K}>`))return!0;return!1}function uKY(q){let K=0;for(let _ of q){if(_.type!=="user")continue;let z=_.message?.content;if(!z)continue;let Y=!1;if(typeof z==="string"){if(MPK(z))continue;Y=z.trim().length>0}else if(Array.isArray(z))Y=z.some(($)=>{if(!$||typeof $!=="object"||!("type"in $))return!1;return $.type==="text"&&typeof $.text==="string"&&!MPK($.text)||$.type==="image"||$.type==="document"});if(Y)K++}return K}function mKY(q){let K=q.filter((_)=>_.type==="user"&&!(("isSidechain"in _)&&_.isSidechain));return uKY(K)}async function pKY(q){let K=q.attribution;if(!K)return null;let _=K.fileStates,Y=_ instanceof Map?Array.from(_.keys()):Object.keys(_);if(Y.length===0)return null;try{return await pN4([K],Y)}catch($){return H6($),null}}function gKY(q){let K=0;for(let _ of q){if(_.type!=="assistant")continue;let z=_.message?.content;if(!Array.isArray(z))continue;for(let Y of z){if(Y.type!=="tool_use"||!BKY.has(Y.name))continue;if(U67(Y.name,Y.input))K++}}return K}async function FKY(){try{let q=Y$(),K=(await IKY(q)).size,z=(await g$8(q,K)).postBoundaryBuf,Y=LB(z),$=Y.findLastIndex((O)=>O.type==="system"&&("subtype"in O)&&O.subtype==="compact_boundary"),A=$>=0?Y.slice($+1):Y;return{promptCount:mKY(A),memoryAccessCount:gKY(A)}}catch{return{promptCount:0,memoryAccessCount:0}}}async function XPK(q){if(xX6()==="remote"){let X=process.env.CLAUDE_CODE_REMOTE_SESSION_ID;if(X){let P=process.env.SESSION_INGRESS_URL;if(!fy8(X,P))return MM(X,P)}return""}let K=N7();if(K.attribution?.pr)return K.attribution.pr;if(K.includeCoAuthoredBy===!1)return"";let _=`\uD83E\uDD16 Generated with [Claude Code](${Zw6})`,z=q();if(N(`PR Attribution: appState.attribution exists: ${!!z.attribution}`),z.attribution){let X=z.attribution.fileStates,W=X instanceof Map?X.size:Object.keys(X).length;N(`PR Attribution: fileStates count: ${W}`)}let[Y,{promptCount:$,memoryAccessCount:A},O]=await Promise.all([pKY(z),FKY(),uN4()]),w=Y?.summary.claudePercent??0;N(`PR Attribution: claudePercent: ${w}, promptCount: ${$}, memoryAccessCount: ${A}`);let j=bY(D5()),H=O?j:mN4(j);if(w===0&&$===0&&A===0)return N("PR Attribution: returning default (no data)"),_;let J=A>0?`, ${A} ${A===1?"memory":"memories"} recalled`:"",M=`\uD83E\uDD16 Generated with [Claude Code](${Zw6}) (${w}% ${$}-shotted by ${H}${J})`;return N(`PR Attribution: returning summary: ${M}`),M}var BKY;var sm8=y(()=>{v8();RY();IY();E2();qM();xr();_8();vO();E8();aq();Q67();_K();QW6();U1();jH6();BKY=new Set([Cq,n3,i9,X4,tK])});function tm8(){return bL6()}function em8(){return BI8()}function QKY(){if(i6(process.env.CLAUDE_CODE_DISABLE_BACKGROUND_TASKS))return null;return"You can use the `run_in_background` parameter to run the command in the background. Only use this if you don't need the result immediately and are OK being notified when the command completes later. You do not need to check the output right away - you'll be notified when it finishes. You do not need to use '&' at the end of the command when using this parameter."}function PPK(){if(!Ik8())return"";let{commit:K,pr:_}=dR6();return`# Committing changes with git
3990
3991Only create commits when requested by the user. If unclear, ask first. When the user asks you to create a new git commit, follow these steps carefully:
3992
3993You can call multiple tools in a single response. When multiple independent pieces of information are requested and all commands are likely to succeed, run multiple tool calls in parallel for optimal performance. The numbered steps below indicate which commands should be batched in parallel.
3994
3995Git Safety Protocol:
3996- NEVER update the git config
3997- NEVER run destructive git commands (push --force, reset --hard, checkout ., restore ., clean -f, branch -D) unless the user explicitly requests these actions. Taking unauthorized destructive actions is unhelpful and can result in lost work, so it's best to ONLY run these commands when given direct instructions
3998- NEVER skip hooks (--no-verify, --no-gpg-sign, etc) unless the user explicitly requests it
3999- NEVER run force push to main/master, warn the user if they request it
4000- CRITICAL: Always create NEW commits rather than amending, unless the user explicitly requests a git amend. When a pre-commit hook fails, the commit did NOT happen — so --amend would modify the PREVIOUS commit, which may result in destroying work or losing previous changes. Instead, after hook failure, fix the issue, re-stage, and create a NEW commit
4001- When staging files, prefer adding specific files by name rather than using "git add -A" or "git add .", which can accidentally include sensitive files (.env, credentials) or large binaries
4002- NEVER commit changes unless the user explicitly asks you to. It is VERY IMPORTANT to only commit when explicitly asked, otherwise the user will feel that you are being too proactive
4003
40041. Run the following bash commands in parallel, each using the ${_q} tool:
4005 - Run a git status command to see all untracked files. IMPORTANT: Never use the -uall flag as it can cause memory issues on large repos.
4006 - Run a git diff command to see both staged and unstaged changes that will be committed.
4007 - Run a git log command to see recent commit messages, so that you can follow this repository's commit message style.
40082. Analyze all staged changes (both previously staged and newly added) and draft a commit message:
4009 - Summarize the nature of the changes (eg. new feature, enhancement to an existing feature, bug fix, refactoring, test, docs, etc.). Ensure the message accurately reflects the changes and their purpose (i.e. "add" means a wholly new feature, "update" means an enhancement to an existing feature, "fix" means a bug fix, etc.).
4010 - Do not commit files that likely contain secrets (.env, credentials.json, etc). Warn the user if they specifically request to commit those files
4011 - Draft a concise (1-2 sentences) commit message that focuses on the "why" rather than the "what"
4012 - Ensure it accurately reflects the changes and their purpose
40133. Run the following commands in parallel:
4014 - Add relevant untracked files to the staging area.
4015 - Create the commit with a message${K?` ending with:
4016 ${K}`:"."}
4017 - Run git status after the commit completes to verify success.
4018 Note: git status depends on the commit completing, so run it sequentially after the commit.
40194. If the commit fails due to pre-commit hook: fix the issue and create a NEW commit
4020
4021Important notes:
4022- NEVER run additional commands to read or explore code, besides git bash commands
4023- NEVER use the ${im.name} or ${v4} tools
4024- DO NOT push to the remote repository unless the user explicitly asks you to do so
4025- IMPORTANT: Never use git commands with the -i flag (like git rebase -i or git add -i) since they require interactive input which is not supported.
4026- IMPORTANT: Do not use --no-edit with git rebase commands, as the --no-edit flag is not a valid option for git rebase.
4027- If there are no changes to commit (i.e., no untracked files and no modifications), do not create an empty commit
4028- In order to ensure good formatting, ALWAYS pass the commit message via a HEREDOC, a la this example:
4029<example>
4030git commit -m "$(cat <<'EOF'
4031 Commit message here.${K?`
4032
4033 ${K}`:""}
4034 EOF
4035 )"
4036</example>
4037
4038# Creating pull requests
4039Use the gh command via the Bash tool for ALL GitHub-related tasks including working with issues, pull requests, checks, and releases. If given a Github URL use the gh command to get the information needed.
4040
4041IMPORTANT: When the user asks you to create a pull request, follow these steps carefully:
4042
40431. Run the following bash commands in parallel using the ${_q} tool, in order to understand the current state of the branch since it diverged from the main branch:
4044 - Run a git status command to see all untracked files (never use -uall flag)
4045 - Run a git diff command to see both staged and unstaged changes that will be committed

Callers 1

WPKFunction · 0.85

Calls 2

Ik8Function · 0.85
dR6Function · 0.85

Tested by

no test coverage detected