@tech-leads-club/harness-toolkit 0.16.2 → 0.16.3

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/support.mjs CHANGED
@@ -150,7 +150,7 @@ ${$.body.trim()}`}function D8($,Z,J){let Q=[];for(let q of $){let X=L7(q,Z,J);if
150
150
  `:"",X=J.length>0?`${J}${q}
151
151
  ${c9}
152
152
  `:`${c9}
153
- `;return yY(A3(Z),{recursive:!0}),vY(Z,X,"utf8"),Z}var uY={"session.start":"SessionStart","session.end":"SessionEnd","prompt.submit":"UserPromptSubmit","tool.before":"PreToolUse","tool.after":"PostToolUse","tool.failure":"PostToolUseFailure","shell.before":"PreToolUse","shell.after":"PostToolUse","mcp.before":"PreToolUse","mcp.after":"PostToolUse","read.before":"PreToolUse","edit.after":"PostToolUse","subagent.start":"SubagentStart","subagent.stop":"SubagentStop",stop:"Stop","compact.before":"PreCompact","response.after":"MessageDisplay","thought.after":"MessageDisplay"};function d9($,Z,J){let Q={hookEventName:Z,permissionDecision:$};if(J!==void 0)Q.permissionDecisionReason=J;return JSON.stringify({hookSpecificOutput:Q})}function E3($,Z){let J=uY[Z.event];switch($.kind){case"abstain":return{stdout:null,exitCode:0};case"allow":return{stdout:d9("allow",J,void 0),exitCode:0};case"deny":return{stdout:d9("deny",J,$.reason),exitCode:0};case"ask":return{stdout:d9("ask",J,$.reason),exitCode:0};case"context":return{stdout:JSON.stringify({hookSpecificOutput:{hookEventName:J,additionalContext:$.text}}),exitCode:0};case"continue":return{stdout:JSON.stringify({decision:"block",reason:$.text}),exitCode:0};case"rewriteInput":return{stdout:JSON.stringify({hookSpecificOutput:{hookEventName:J,updatedInput:$.input}}),exitCode:0};case"rewriteOutput":return{stdout:JSON.stringify({updatedToolOutput:$.output}),exitCode:0};default:throw Error(`unreachable decision kind: ${JSON.stringify($)}`)}}function R3(){return{blockedPatterns:[],minEffort:null,untrustedTools:["WebFetch","WebSearch"]}}var k3={name:"claude",detect:_3,capabilities:O3,policyDefaults:R3,toEvent:L3,render:E3,wiring:p9,wiringTargets:C3,lessonsView:T3};function x3(){return{enforcesHooks:!0,askSupportedOn:["shell.before","mcp.before"],sessionEnv:!0,nativeLoopCounter:!0,dedicatedShellEvent:!0,toolInputRewrite:!0,toolOutputRewriteOn:["mcp.after"],contextAtToolBefore:!1,contextAtToolAfter:!0,contextAtStop:!1,sessionStartContextReliable:!1,toolOutputAtAfter:!0,usageInPayload:!1,effortSignal:!1,thoughtEvent:!0}}var hY=/^[a-z][a-zA-Z0-9]*$/;function S3($){if($===null||typeof $!=="object"||Array.isArray($))return!1;let Z=$,J=Z.hook_event_name;if(typeof J!=="string"||!hY.test(J))return!1;return Array.isArray(Z.workspace_roots)}var pY={sessionStart:"session.start",sessionEnd:"session.end",beforeSubmitPrompt:"prompt.submit",preToolUse:"tool.before",postToolUse:"tool.after",postToolUseFailure:"tool.failure",beforeShellExecution:"shell.before",afterShellExecution:"shell.after",beforeMCPExecution:"mcp.before",afterMCPExecution:"mcp.after",beforeReadFile:"read.before",afterFileEdit:"edit.after",subagentStart:"subagent.start",subagentStop:"subagent.stop",stop:"stop",preCompact:"compact.before",afterAgentResponse:"response.after",afterAgentThought:"thought.after"};function F($){return typeof $==="string"?$:void 0}function b3($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function l9($){return $!==null&&typeof $==="object"&&!Array.isArray($)?$:void 0}function cY($){let Z=l9($);if(Z)return Z;if(typeof $!=="string")return;try{return l9(JSON.parse($))}catch{return}}function dY($){return $==="completed"||$==="aborted"||$==="error"?$:void 0}function lY($){let Z=F($.conversation_id)||F($.session_id)||"default";return`cursor-${C(Z)}`}function iY($){let Z=process.env.CURSOR_PROJECT_DIR;if(Z)return Z;let J=$.workspace_roots;if(Array.isArray(J)){let Q=F(J[0]);if(Q)return Q}return process.cwd()}function f3($){let Z=F($.hook_event_name),J=Z?pY[Z]:void 0;if(!J)return null;let Q={provider:"cursor",event:J,sessionKey:lY($),projectDir:iY($),raw:$},q=F($.model);if(q)Q.model=q;let X=b3($.context_usage_percent);if(X!==void 0)Q.contextUsagePercent=X;switch(J){case"prompt.submit":{let W=F($.prompt);if(W!==void 0)Q.text=W;break}case"response.after":{let W=F($.text);if(W!==void 0)Q.text=W;break}case"thought.after":{let W=F($.thought)??F($.text);if(W!==void 0)Q.text=W;break}case"tool.before":case"tool.after":case"tool.failure":{let W=F($.tool_name);if(W)Q.toolName=W;let z=l9($.tool_input);if(z)Q.toolInput=z;let Y=F($.subagent_type);if(Y)Q.subagentType=Y;let V=z?F(z.model):void 0;if(V)Q.spawnModel=V;let G=z?F(z.subagent_type):void 0;if(G)Q.spawnSubagentType=G;if(W==="Write"){let B=z?F(z.content):void 0;if(B!==void 0)Q.proposedContent=B}break}case"shell.before":case"shell.after":{let W=F($.command);if(W!==void 0)Q.command=W;let z=F($.output);if(z!==void 0)Q.toolOutput=z;if(J==="shell.before"){let Y=F($.cwd);if(Y)Q.cwd=Y}break}case"mcp.before":case"mcp.after":{let W=F($.result_json);if(W!==void 0)Q.toolOutput=W;let z=F($.tool_name);if(z)Q.toolName=z;let Y=cY($.tool_input);if(Y)Q.toolInput=Y;let V=F($.command);if(V!==void 0)Q.command=V;break}case"read.before":case"edit.after":{let W=F($.file_path);if(W!==void 0)Q.filePath=W;break}case"subagent.start":case"subagent.stop":{let W=F($.subagent_type);if(W)Q.spawnSubagentType=W;let z=F($.subagent_model);if(z)Q.spawnModel=z;break}case"stop":{let W=dY($.status);if(W)Q.status=W;let z=b3($.loop_count);if(z!==void 0)Q.loopCount=z;break}default:break}return Q}import{existsSync as nY,mkdirSync as aY,readFileSync as rY,writeFileSync as sY}from"node:fs";import{dirname as y3,join as w3}from"node:path";function oY($){return w3(y3(_($)),"lessons.md")}function tY($){return w3($,".cursor","rules","harness-lessons.mdc")}function v3($){let Z=oY($);if(!nY(Z))return null;let J=rY(Z,"utf8"),Q=tY($);aY(y3(Q),{recursive:!0});let q=`---
153
+ `;return yY(A3(Z),{recursive:!0}),vY(Z,X,"utf8"),Z}var uY={"session.start":"SessionStart","session.end":"SessionEnd","prompt.submit":"UserPromptSubmit","tool.before":"PreToolUse","tool.after":"PostToolUse","tool.failure":"PostToolUseFailure","shell.before":"PreToolUse","shell.after":"PostToolUse","mcp.before":"PreToolUse","mcp.after":"PostToolUse","read.before":"PreToolUse","edit.after":"PostToolUse","subagent.start":"SubagentStart","subagent.stop":"SubagentStop",stop:"Stop","compact.before":"PreCompact","response.after":"MessageDisplay","thought.after":"MessageDisplay"};function d9($,Z,J){let Q={hookEventName:Z,permissionDecision:$};if(J!==void 0)Q.permissionDecisionReason=J;return JSON.stringify({hookSpecificOutput:Q})}function E3($,Z){let J=uY[Z.event];switch($.kind){case"abstain":return{stdout:null,exitCode:0};case"allow":return{stdout:d9("allow",J,void 0),exitCode:0};case"deny":return{stdout:d9("deny",J,$.reason),exitCode:0};case"ask":return{stdout:d9("ask",J,$.reason),exitCode:0};case"context":return{stdout:JSON.stringify({hookSpecificOutput:{hookEventName:J,additionalContext:$.text}}),exitCode:0};case"continue":return{stdout:JSON.stringify({decision:"block",reason:$.text}),exitCode:0};case"rewriteInput":return{stdout:JSON.stringify({hookSpecificOutput:{hookEventName:J,updatedInput:$.input}}),exitCode:0};case"rewriteOutput":return{stdout:JSON.stringify({updatedToolOutput:$.output}),exitCode:0};default:throw Error(`unreachable decision kind: ${JSON.stringify($)}`)}}function R3(){return{blockedPatterns:[],minEffort:null,untrustedTools:["WebFetch","WebSearch"]}}var k3={name:"claude",detect:_3,capabilities:O3,policyDefaults:R3,toEvent:L3,render:E3,wiring:p9,wiringTargets:C3,lessonsView:T3};function x3(){return{enforcesHooks:!0,askSupportedOn:["shell.before","mcp.before"],sessionEnv:!0,nativeLoopCounter:!0,dedicatedShellEvent:!0,toolInputRewrite:!0,toolOutputRewriteOn:["mcp.after"],contextAtToolBefore:!1,contextAtToolAfter:!0,contextAtStop:!1,sessionStartContextReliable:!1,toolOutputAtAfter:!0,usageInPayload:!1,effortSignal:!1,thoughtEvent:!0}}var hY=/^[a-z][a-zA-Z0-9]*$/;function S3($){if($===null||typeof $!=="object"||Array.isArray($))return!1;let J=$.hook_event_name;return typeof J==="string"&&hY.test(J)}var pY={sessionStart:"session.start",sessionEnd:"session.end",beforeSubmitPrompt:"prompt.submit",preToolUse:"tool.before",postToolUse:"tool.after",postToolUseFailure:"tool.failure",beforeShellExecution:"shell.before",afterShellExecution:"shell.after",beforeMCPExecution:"mcp.before",afterMCPExecution:"mcp.after",beforeReadFile:"read.before",afterFileEdit:"edit.after",subagentStart:"subagent.start",subagentStop:"subagent.stop",stop:"stop",preCompact:"compact.before",afterAgentResponse:"response.after",afterAgentThought:"thought.after"};function F($){return typeof $==="string"?$:void 0}function b3($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function l9($){return $!==null&&typeof $==="object"&&!Array.isArray($)?$:void 0}function cY($){let Z=l9($);if(Z)return Z;if(typeof $!=="string")return;try{return l9(JSON.parse($))}catch{return}}function dY($){return $==="completed"||$==="aborted"||$==="error"?$:void 0}function lY($){let Z=F($.conversation_id)||F($.session_id)||"default";return`cursor-${C(Z)}`}function iY($){let Z=process.env.CURSOR_PROJECT_DIR;if(Z)return Z;let J=$.workspace_roots;if(Array.isArray(J)){let Q=F(J[0]);if(Q)return Q}return process.cwd()}function f3($){let Z=F($.hook_event_name),J=Z?pY[Z]:void 0;if(!J)return null;let Q={provider:"cursor",event:J,sessionKey:lY($),projectDir:iY($),raw:$},q=F($.model);if(q)Q.model=q;let X=b3($.context_usage_percent);if(X!==void 0)Q.contextUsagePercent=X;switch(J){case"prompt.submit":{let W=F($.prompt);if(W!==void 0)Q.text=W;break}case"response.after":{let W=F($.text);if(W!==void 0)Q.text=W;break}case"thought.after":{let W=F($.thought)??F($.text);if(W!==void 0)Q.text=W;break}case"tool.before":case"tool.after":case"tool.failure":{let W=F($.tool_name);if(W)Q.toolName=W;let z=l9($.tool_input);if(z)Q.toolInput=z;let Y=F($.subagent_type);if(Y)Q.subagentType=Y;let V=z?F(z.model):void 0;if(V)Q.spawnModel=V;let G=z?F(z.subagent_type):void 0;if(G)Q.spawnSubagentType=G;if(W==="Write"){let B=z?F(z.content):void 0;if(B!==void 0)Q.proposedContent=B}break}case"shell.before":case"shell.after":{let W=F($.command);if(W!==void 0)Q.command=W;let z=F($.output);if(z!==void 0)Q.toolOutput=z;if(J==="shell.before"){let Y=F($.cwd);if(Y)Q.cwd=Y}break}case"mcp.before":case"mcp.after":{let W=F($.result_json);if(W!==void 0)Q.toolOutput=W;let z=F($.tool_name);if(z)Q.toolName=z;let Y=cY($.tool_input);if(Y)Q.toolInput=Y;let V=F($.command);if(V!==void 0)Q.command=V;break}case"read.before":case"edit.after":{let W=F($.file_path);if(W!==void 0)Q.filePath=W;break}case"subagent.start":case"subagent.stop":{let W=F($.subagent_type);if(W)Q.spawnSubagentType=W;let z=F($.subagent_model);if(z)Q.spawnModel=z;break}case"stop":{let W=dY($.status);if(W)Q.status=W;let z=b3($.loop_count);if(z!==void 0)Q.loopCount=z;break}default:break}return Q}import{existsSync as nY,mkdirSync as aY,readFileSync as rY,writeFileSync as sY}from"node:fs";import{dirname as y3,join as w3}from"node:path";function oY($){return w3(y3(_($)),"lessons.md")}function tY($){return w3($,".cursor","rules","harness-lessons.mdc")}function v3($){let Z=oY($);if(!nY(Z))return null;let J=rY(Z,"utf8"),Q=tY($);aY(y3(Q),{recursive:!0});let q=`---
154
154
  description: Harness-learned lessons (auto-synced from gate failures)
155
155
  alwaysApply: true
156
156
  ---
@@ -152,11 +152,11 @@ ${$.body.trim()}`}function T8($,Z,J){let Q=[];for(let q of $){let X=S7(q,Z,J);if
152
152
  `:"",X=J.length>0?`${J}${q}
153
153
  ${$9}
154
154
  `:`${$9}
155
- `;return jz(h3(Z),{recursive:!0}),Lz(Z,X,"utf8"),Z}var Az={"session.start":"SessionStart","session.end":"SessionEnd","prompt.submit":"UserPromptSubmit","tool.before":"PreToolUse","tool.after":"PostToolUse","tool.failure":"PostToolUseFailure","shell.before":"PreToolUse","shell.after":"PostToolUse","mcp.before":"PreToolUse","mcp.after":"PostToolUse","read.before":"PreToolUse","edit.after":"PostToolUse","subagent.start":"SubagentStart","subagent.stop":"SubagentStop",stop:"Stop","compact.before":"PreCompact","response.after":"MessageDisplay","thought.after":"MessageDisplay"};function Z9($,Z,J){let Q={hookEventName:Z,permissionDecision:$};if(J!==void 0)Q.permissionDecisionReason=J;return JSON.stringify({hookSpecificOutput:Q})}function d3($,Z){let J=Az[Z.event];switch($.kind){case"abstain":return{stdout:null,exitCode:0};case"allow":return{stdout:Z9("allow",J,void 0),exitCode:0};case"deny":return{stdout:Z9("deny",J,$.reason),exitCode:0};case"ask":return{stdout:Z9("ask",J,$.reason),exitCode:0};case"context":return{stdout:JSON.stringify({hookSpecificOutput:{hookEventName:J,additionalContext:$.text}}),exitCode:0};case"continue":return{stdout:JSON.stringify({decision:"block",reason:$.text}),exitCode:0};case"rewriteInput":return{stdout:JSON.stringify({hookSpecificOutput:{hookEventName:J,updatedInput:$.input}}),exitCode:0};case"rewriteOutput":return{stdout:JSON.stringify({updatedToolOutput:$.output}),exitCode:0};default:throw Error(`unreachable decision kind: ${JSON.stringify($)}`)}}function l3(){return{blockedPatterns:[],minEffort:null,untrustedTools:["WebFetch","WebSearch"]}}var i3={name:"claude",detect:w3,capabilities:f3,policyDefaults:l3,toEvent:g3,render:d3,wiring:t5,wiringTargets:S3,lessonsView:c3};function n3(){return{enforcesHooks:!0,askSupportedOn:["shell.before","mcp.before"],sessionEnv:!0,nativeLoopCounter:!0,dedicatedShellEvent:!0,toolInputRewrite:!0,toolOutputRewriteOn:["mcp.after"],contextAtToolBefore:!1,contextAtToolAfter:!0,contextAtStop:!1,sessionStartContextReliable:!1,toolOutputAtAfter:!0,usageInPayload:!1,effortSignal:!1,thoughtEvent:!0}}var Tz=/^[a-z][a-zA-Z0-9]*$/;function a3($){if($===null||typeof $!=="object"||Array.isArray($))return!1;let Z=$,J=Z.hook_event_name;if(typeof J!=="string"||!Tz.test(J))return!1;return Array.isArray(Z.workspace_roots)}var Ez={sessionStart:"session.start",sessionEnd:"session.end",beforeSubmitPrompt:"prompt.submit",preToolUse:"tool.before",postToolUse:"tool.after",postToolUseFailure:"tool.failure",beforeShellExecution:"shell.before",afterShellExecution:"shell.after",beforeMCPExecution:"mcp.before",afterMCPExecution:"mcp.after",beforeReadFile:"read.before",afterFileEdit:"edit.after",subagentStart:"subagent.start",subagentStop:"subagent.stop",stop:"stop",preCompact:"compact.before",afterAgentResponse:"response.after",afterAgentThought:"thought.after"};function C($){return typeof $==="string"?$:void 0}function r3($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function J9($){return $!==null&&typeof $==="object"&&!Array.isArray($)?$:void 0}function Rz($){let Z=J9($);if(Z)return Z;if(typeof $!=="string")return;try{return J9(JSON.parse($))}catch{return}}function kz($){return $==="completed"||$==="aborted"||$==="error"?$:void 0}function xz($){let Z=C($.conversation_id)||C($.session_id)||"default";return`cursor-${O(Z)}`}function Sz($){let Z=process.env.CURSOR_PROJECT_DIR;if(Z)return Z;let J=$.workspace_roots;if(Array.isArray(J)){let Q=C(J[0]);if(Q)return Q}return process.cwd()}function s3($){let Z=C($.hook_event_name),J=Z?Ez[Z]:void 0;if(!J)return null;let Q={provider:"cursor",event:J,sessionKey:xz($),projectDir:Sz($),raw:$},q=C($.model);if(q)Q.model=q;let X=r3($.context_usage_percent);if(X!==void 0)Q.contextUsagePercent=X;switch(J){case"prompt.submit":{let W=C($.prompt);if(W!==void 0)Q.text=W;break}case"response.after":{let W=C($.text);if(W!==void 0)Q.text=W;break}case"thought.after":{let W=C($.thought)??C($.text);if(W!==void 0)Q.text=W;break}case"tool.before":case"tool.after":case"tool.failure":{let W=C($.tool_name);if(W)Q.toolName=W;let Y=J9($.tool_input);if(Y)Q.toolInput=Y;let V=C($.subagent_type);if(V)Q.subagentType=V;let z=Y?C(Y.model):void 0;if(z)Q.spawnModel=z;let G=Y?C(Y.subagent_type):void 0;if(G)Q.spawnSubagentType=G;if(W==="Write"){let U=Y?C(Y.content):void 0;if(U!==void 0)Q.proposedContent=U}break}case"shell.before":case"shell.after":{let W=C($.command);if(W!==void 0)Q.command=W;let Y=C($.output);if(Y!==void 0)Q.toolOutput=Y;if(J==="shell.before"){let V=C($.cwd);if(V)Q.cwd=V}break}case"mcp.before":case"mcp.after":{let W=C($.result_json);if(W!==void 0)Q.toolOutput=W;let Y=C($.tool_name);if(Y)Q.toolName=Y;let V=Rz($.tool_input);if(V)Q.toolInput=V;let z=C($.command);if(z!==void 0)Q.command=z;break}case"read.before":case"edit.after":{let W=C($.file_path);if(W!==void 0)Q.filePath=W;break}case"subagent.start":case"subagent.stop":{let W=C($.subagent_type);if(W)Q.spawnSubagentType=W;let Y=C($.subagent_model);if(Y)Q.spawnModel=Y;break}case"stop":{let W=kz($.status);if(W)Q.status=W;let Y=r3($.loop_count);if(Y!==void 0)Q.loopCount=Y;break}default:break}return Q}import{existsSync as bz,mkdirSync as fz,readFileSync as wz,writeFileSync as yz}from"node:fs";import{dirname as o3,join as t3}from"node:path";function vz($){return t3(o3(I($)),"lessons.md")}function mz($){return t3($,".cursor","rules","harness-lessons.mdc")}function e3($){let Z=vz($);if(!bz(Z))return null;let J=wz(Z,"utf8"),Q=mz($);fz(o3(Q),{recursive:!0});let q=`---
155
+ `;return jz(h3(Z),{recursive:!0}),Lz(Z,X,"utf8"),Z}var Az={"session.start":"SessionStart","session.end":"SessionEnd","prompt.submit":"UserPromptSubmit","tool.before":"PreToolUse","tool.after":"PostToolUse","tool.failure":"PostToolUseFailure","shell.before":"PreToolUse","shell.after":"PostToolUse","mcp.before":"PreToolUse","mcp.after":"PostToolUse","read.before":"PreToolUse","edit.after":"PostToolUse","subagent.start":"SubagentStart","subagent.stop":"SubagentStop",stop:"Stop","compact.before":"PreCompact","response.after":"MessageDisplay","thought.after":"MessageDisplay"};function Z9($,Z,J){let Q={hookEventName:Z,permissionDecision:$};if(J!==void 0)Q.permissionDecisionReason=J;return JSON.stringify({hookSpecificOutput:Q})}function d3($,Z){let J=Az[Z.event];switch($.kind){case"abstain":return{stdout:null,exitCode:0};case"allow":return{stdout:Z9("allow",J,void 0),exitCode:0};case"deny":return{stdout:Z9("deny",J,$.reason),exitCode:0};case"ask":return{stdout:Z9("ask",J,$.reason),exitCode:0};case"context":return{stdout:JSON.stringify({hookSpecificOutput:{hookEventName:J,additionalContext:$.text}}),exitCode:0};case"continue":return{stdout:JSON.stringify({decision:"block",reason:$.text}),exitCode:0};case"rewriteInput":return{stdout:JSON.stringify({hookSpecificOutput:{hookEventName:J,updatedInput:$.input}}),exitCode:0};case"rewriteOutput":return{stdout:JSON.stringify({updatedToolOutput:$.output}),exitCode:0};default:throw Error(`unreachable decision kind: ${JSON.stringify($)}`)}}function l3(){return{blockedPatterns:[],minEffort:null,untrustedTools:["WebFetch","WebSearch"]}}var i3={name:"claude",detect:w3,capabilities:f3,policyDefaults:l3,toEvent:g3,render:d3,wiring:t5,wiringTargets:S3,lessonsView:c3};function n3(){return{enforcesHooks:!0,askSupportedOn:["shell.before","mcp.before"],sessionEnv:!0,nativeLoopCounter:!0,dedicatedShellEvent:!0,toolInputRewrite:!0,toolOutputRewriteOn:["mcp.after"],contextAtToolBefore:!1,contextAtToolAfter:!0,contextAtStop:!1,sessionStartContextReliable:!1,toolOutputAtAfter:!0,usageInPayload:!1,effortSignal:!1,thoughtEvent:!0}}var Tz=/^[a-z][a-zA-Z0-9]*$/;function a3($){if($===null||typeof $!=="object"||Array.isArray($))return!1;let J=$.hook_event_name;return typeof J==="string"&&Tz.test(J)}var Ez={sessionStart:"session.start",sessionEnd:"session.end",beforeSubmitPrompt:"prompt.submit",preToolUse:"tool.before",postToolUse:"tool.after",postToolUseFailure:"tool.failure",beforeShellExecution:"shell.before",afterShellExecution:"shell.after",beforeMCPExecution:"mcp.before",afterMCPExecution:"mcp.after",beforeReadFile:"read.before",afterFileEdit:"edit.after",subagentStart:"subagent.start",subagentStop:"subagent.stop",stop:"stop",preCompact:"compact.before",afterAgentResponse:"response.after",afterAgentThought:"thought.after"};function C($){return typeof $==="string"?$:void 0}function r3($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function J9($){return $!==null&&typeof $==="object"&&!Array.isArray($)?$:void 0}function Rz($){let Z=J9($);if(Z)return Z;if(typeof $!=="string")return;try{return J9(JSON.parse($))}catch{return}}function kz($){return $==="completed"||$==="aborted"||$==="error"?$:void 0}function xz($){let Z=C($.conversation_id)||C($.session_id)||"default";return`cursor-${O(Z)}`}function Sz($){let Z=process.env.CURSOR_PROJECT_DIR;if(Z)return Z;let J=$.workspace_roots;if(Array.isArray(J)){let Q=C(J[0]);if(Q)return Q}return process.cwd()}function s3($){let Z=C($.hook_event_name),J=Z?Ez[Z]:void 0;if(!J)return null;let Q={provider:"cursor",event:J,sessionKey:xz($),projectDir:Sz($),raw:$},q=C($.model);if(q)Q.model=q;let X=r3($.context_usage_percent);if(X!==void 0)Q.contextUsagePercent=X;switch(J){case"prompt.submit":{let W=C($.prompt);if(W!==void 0)Q.text=W;break}case"response.after":{let W=C($.text);if(W!==void 0)Q.text=W;break}case"thought.after":{let W=C($.thought)??C($.text);if(W!==void 0)Q.text=W;break}case"tool.before":case"tool.after":case"tool.failure":{let W=C($.tool_name);if(W)Q.toolName=W;let Y=J9($.tool_input);if(Y)Q.toolInput=Y;let V=C($.subagent_type);if(V)Q.subagentType=V;let z=Y?C(Y.model):void 0;if(z)Q.spawnModel=z;let G=Y?C(Y.subagent_type):void 0;if(G)Q.spawnSubagentType=G;if(W==="Write"){let U=Y?C(Y.content):void 0;if(U!==void 0)Q.proposedContent=U}break}case"shell.before":case"shell.after":{let W=C($.command);if(W!==void 0)Q.command=W;let Y=C($.output);if(Y!==void 0)Q.toolOutput=Y;if(J==="shell.before"){let V=C($.cwd);if(V)Q.cwd=V}break}case"mcp.before":case"mcp.after":{let W=C($.result_json);if(W!==void 0)Q.toolOutput=W;let Y=C($.tool_name);if(Y)Q.toolName=Y;let V=Rz($.tool_input);if(V)Q.toolInput=V;let z=C($.command);if(z!==void 0)Q.command=z;break}case"read.before":case"edit.after":{let W=C($.file_path);if(W!==void 0)Q.filePath=W;break}case"subagent.start":case"subagent.stop":{let W=C($.subagent_type);if(W)Q.spawnSubagentType=W;let Y=C($.subagent_model);if(Y)Q.spawnModel=Y;break}case"stop":{let W=kz($.status);if(W)Q.status=W;let Y=r3($.loop_count);if(Y!==void 0)Q.loopCount=Y;break}default:break}return Q}import{existsSync as bz,mkdirSync as fz,readFileSync as wz,writeFileSync as yz}from"node:fs";import{dirname as o3,join as t3}from"node:path";function vz($){return t3(o3(I($)),"lessons.md")}function mz($){return t3($,".cursor","rules","harness-lessons.mdc")}function e3($){let Z=vz($);if(!bz(Z))return null;let J=wz(Z,"utf8"),Q=mz($);fz(o3(Q),{recursive:!0});let q=`---
156
156
  description: Harness-learned lessons (auto-synced from gate failures)
157
157
  alwaysApply: true
158
158
  ---
159
159
 
160
- ${J}`;return yz(Q,q,"utf8"),Q}function $1($,Z){let J={permission:$};if(Z.userNote!==void 0)J.user_message=Z.userNote;return J.agent_message=Z.reason,JSON.stringify(J)}function Z1($,Z){switch($.kind){case"abstain":return{stdout:"{}",exitCode:0};case"allow":return{stdout:JSON.stringify({permission:"allow"}),exitCode:0};case"deny":return{stdout:$1("deny",$),exitCode:0};case"ask":return{stdout:$1("ask",$),exitCode:0};case"context":{let J={};if($.env!==void 0)J.env=$.env;return J.additional_context=$.text,{stdout:JSON.stringify(J),exitCode:0}}case"continue":return{stdout:JSON.stringify({followup_message:$.text}),exitCode:0};case"rewriteInput":return{stdout:JSON.stringify({updated_input:$.input}),exitCode:0};case"rewriteOutput":return{stdout:JSON.stringify({updated_mcp_tool_output:{result_json:$.output}}),exitCode:0};default:throw Error(`unreachable decision kind: ${JSON.stringify($)}`)}}function J1(){return{blockedPatterns:["-fast(?:$|[^a-z0-9])","/fast(?:$|[^a-z0-9])","composer-2\\.5-fast"],minEffort:null,untrustedTools:["Fetch","WebSearch"]}}import{join as gz}from"node:path";function Q1(){return gz(z9(),"hooks.json")}function q1(){return[Q1()]}var uz=[{hookEvent:"sessionStart",handler:"session-start",timeoutSeconds:10},{hookEvent:"sessionEnd",handler:"session-end",timeoutSeconds:10},{hookEvent:"beforeSubmitPrompt",handler:"prompt-submit",timeoutSeconds:5},{hookEvent:"afterAgentThought",handler:"tool-after",timeoutSeconds:5},{hookEvent:"preCompact",handler:"compact-before",timeoutSeconds:5},{hookEvent:"subagentStart",handler:"subagent-start",timeoutSeconds:5,failClosed:!0},{hookEvent:"subagentStop",handler:"subagent-stop",timeoutSeconds:5},{hookEvent:"preToolUse",handler:"tool-before",timeoutSeconds:10,failClosed:!0},{hookEvent:"postToolUse",handler:"tool-after",timeoutSeconds:5},{hookEvent:"postToolUseFailure",handler:"tool-failure",timeoutSeconds:5},{hookEvent:"beforeShellExecution",handler:"tool-before",timeoutSeconds:10,failClosed:!0},{hookEvent:"afterShellExecution",handler:"tool-after",timeoutSeconds:10},{hookEvent:"beforeMCPExecution",handler:"tool-before",timeoutSeconds:10},{hookEvent:"afterMCPExecution",handler:"tool-after",timeoutSeconds:5},{hookEvent:"beforeReadFile",handler:"tool-before",timeoutSeconds:5},{hookEvent:"afterFileEdit",handler:"tool-after",timeoutSeconds:30,matcher:"Write"},{hookEvent:"stop",handler:"stop",timeoutSeconds:120,loopLimit:5},{hookEvent:"afterAgentResponse",handler:"response-after",timeoutSeconds:5,matcher:"AgentResponse"}];function X1($){let J=[$.launcherPath],Q=uz.map((q)=>({hookEvent:q.hookEvent,handler:q.handler,command:"node",args:[...J,q.handler],timeoutSeconds:q.timeoutSeconds,...q.failClosed!==void 0?{failClosed:q.failClosed}:{},...q.matcher!==void 0?{matcher:q.matcher}:{},...q.loopLimit!==void 0?{loopLimit:q.loopLimit}:{}}));return{target:Q1(),strategy:"replace",entries:Q}}var W1={name:"cursor",detect:a3,capabilities:n3,policyDefaults:J1,toEvent:s3,render:Z1,wiring:X1,wiringTargets:q1,lessonsView:e3};var v$=[W1,i3];function Q9($,Z){let J=Z.filter((Q)=>Q.detect($));if(J.length===0)return{provider:null,ambiguous:!1,matchedNames:[]};return{provider:J[0]??null,ambiguous:J.length>1,matchedNames:J.map((Q)=>Q.name)}}import{join as lz}from"node:path";import{existsSync as hz,statSync as rO}from"node:fs";var Y1=F.observability.DEFAULT_OBS,V1={...Y1,debugEnabled:!0};function a8($,Z=Y1){return{...Z,globalSpool:$.obs.globalSpool,includePayloads:$.obs.includePayloads,maxAttrChars:$.obs.maxAttrChars,sessionCostAlertUsd:$.obs.sessionCostAlertUsd,retentionDays:$.obs.retentionDays}}function z1($){let Z=`${$.provider}-`;return $.sessionKey.startsWith(Z)?$.sessionKey.slice(Z.length):$.sessionKey}async function pz($){if($.cwd)return $.cwd;let Z=F.handoff.readHandoff($.projectDir,$.provider,$.sessionKey).last_shell_cwd;return cz(Z,$.projectDir)}async function cz($,Z){if(!$||$===Z||!hz($))return Z;let[J,Q]=await Promise.all([XZ($),XZ(Z)]);return J!==null&&J===Q?$:Z}async function G1($,Z){if(!$?.turn_base_sha||!$.turn_base_root)return"HEAD";let J=await y(Z);return J!==null&&J===$.turn_base_root?$.turn_base_sha:"HEAD"}async function dz($){let Z=await y($);if(Z===null)return null;let J=await a({command:["git","rev-parse","--short","HEAD"],cwd:Z});if(J.exitCode!==0)return null;let Q=J.stdout.trim();return Q.length>0?Q:null}function B1($,Z){return[...F.policy.forProvider($,Z.name)??[],...Z.policyDefaults().blockedPatterns]}async function U1($,Z){let J=Z.policy.rules;if(!F.rules.wants($.projectDir,J,$))return;let Q=await dz(await pz($));F.rules.observe($.projectDir,J,$,{sha:Q,sessionKey:$.sessionKey,at:new Date().toISOString()})}var iz=6000;function nz($){if($.filePath===void 0)return!1;if($.event==="edit.after")return!0;return I8($.toolName)}function az($){return $ instanceof Error?$.message:String($)}function t($,Z,J,Q="unknown",q={}){try{D(lz(H($),"obs.jsonl"),{schema:"harness.observability.v1",provider:Q,kind:Z,level:"signal",ts:new Date().toISOString(),...q,attrs:J})}catch{}}function rz($){return $.event==="shell.before"||$.event==="mcp.before"}function sz($){if(!rz($))return;t($.projectDir,"hook.enter",{event:$.event,toolName:$.toolName??"none",sessionKey:$.sessionKey},$.provider,{trace_id:F.observability.deriveTraceId($.sessionKey),session_id:$.sessionKey})}function oz($,Z,J){if(J.kind!=="deny"&&J.kind!=="ask")return;if($.event==="shell.before")return;F.observability.recordObs($.projectDir,a8(Z),{provider:$.provider,kind:"policy.deny",sessionKey:$.sessionKey,attrs:{event:$.event,tool_name:$.toolName,permission:J.kind,rule:J.rule??"none",diagnostic:J.diagnostic??"none"}})}function tz($){return $!==null&&typeof $==="object"&&!Array.isArray($)?$:{}}async function ez($,Z={}){let J=Z.readStdin??y9,Q=Z.now?Z.now():new Date,q={stdout:null,exitCode:0},W=(await J()).trim();if(!W)return t(process.cwd(),"adapter.unrecognized",{reason:"empty-stdin"}),{event:null,decision:{kind:"abstain"},rendered:q};let Y;try{Y=JSON.parse(W)}catch{return t(process.cwd(),"adapter.unrecognized",{reason:"invalid-json"}),{event:null,decision:{kind:"abstain"},rendered:q}}let V=Q9(Y,v$);if(!V.provider)return t(process.cwd(),"adapter.unrecognized",{reason:"no-provider-match"}),{event:null,decision:{kind:"abstain"},rendered:q};if(V.ambiguous)t(process.cwd(),"adapter.ambiguous",{matched:V.matchedNames});let z=V.provider,G=z.toEvent(tz(Y));if(!G)return t(process.cwd(),"adapter.unrecognized",{reason:"unrecognized-event",provider:z.name}),{event:null,decision:{kind:"abstain"},rendered:q};let U=z.capabilities();sz(G);try{let M=F.policy.loadPolicy(G.projectDir);if(G.model)F.subagentPolicy.upsertParentModelState(G.projectDir,G.sessionKey,{model:G.model},B1(M.subagents.blockedPatterns,z));F.presence.heartbeat(G.projectDir,{provider:G.provider,session:z1(G),...nz(G)?{file:G.filePath}:{},now:Q});let B=v$.flatMap((k)=>k.wiringTargets()),T=await $(G,{policy:M,capabilities:U,provider:z,now:Q,protectedPaths:B}),b=n8(T,G,U,{contextBudgetChars:iz});oz(G,M,b);let l=z.render(b,G);return{event:G,decision:b,rendered:l}}catch(M){t(G.projectDir,"adapter.error",{provider:G.provider,event:G.event,message:az(M)});let B={kind:"abstain"};return{event:G,decision:B,rendered:z.render(B,G)}}}async function H1($){let Z=await ez($);if(Z.rendered.stdout!==null){let J=Z.rendered.stdout;process.stdout.write(J.endsWith(`
160
+ ${J}`;return yz(Q,q,"utf8"),Q}function $1($,Z){let J={permission:$};if(Z.userNote!==void 0)J.user_message=Z.userNote;return J.agent_message=Z.reason,JSON.stringify(J)}function Z1($,Z){switch($.kind){case"abstain":return{stdout:"{}",exitCode:0};case"allow":return{stdout:JSON.stringify({permission:"allow"}),exitCode:0};case"deny":return{stdout:$1("deny",$),exitCode:0};case"ask":return{stdout:$1("ask",$),exitCode:0};case"context":{let J={};if($.env!==void 0)J.env=$.env;return J.additional_context=$.text,{stdout:JSON.stringify(J),exitCode:0}}case"continue":return{stdout:JSON.stringify({followup_message:$.text}),exitCode:0};case"rewriteInput":return{stdout:JSON.stringify({updated_input:$.input}),exitCode:0};case"rewriteOutput":return{stdout:JSON.stringify({updated_mcp_tool_output:{result_json:$.output}}),exitCode:0};default:throw Error(`unreachable decision kind: ${JSON.stringify($)}`)}}function J1(){return{blockedPatterns:["-fast(?:$|[^a-z0-9])","/fast(?:$|[^a-z0-9])","composer-2\\.5-fast"],minEffort:null,untrustedTools:["Fetch","WebSearch"]}}import{join as gz}from"node:path";function Q1(){return gz(z9(),"hooks.json")}function q1(){return[Q1()]}var uz=[{hookEvent:"sessionStart",handler:"session-start",timeoutSeconds:10},{hookEvent:"sessionEnd",handler:"session-end",timeoutSeconds:10},{hookEvent:"beforeSubmitPrompt",handler:"prompt-submit",timeoutSeconds:5},{hookEvent:"afterAgentThought",handler:"tool-after",timeoutSeconds:5},{hookEvent:"preCompact",handler:"compact-before",timeoutSeconds:5},{hookEvent:"subagentStart",handler:"subagent-start",timeoutSeconds:5,failClosed:!0},{hookEvent:"subagentStop",handler:"subagent-stop",timeoutSeconds:5},{hookEvent:"preToolUse",handler:"tool-before",timeoutSeconds:10,failClosed:!0},{hookEvent:"postToolUse",handler:"tool-after",timeoutSeconds:5},{hookEvent:"postToolUseFailure",handler:"tool-failure",timeoutSeconds:5},{hookEvent:"beforeShellExecution",handler:"tool-before",timeoutSeconds:10,failClosed:!0},{hookEvent:"afterShellExecution",handler:"tool-after",timeoutSeconds:10},{hookEvent:"beforeMCPExecution",handler:"tool-before",timeoutSeconds:10},{hookEvent:"afterMCPExecution",handler:"tool-after",timeoutSeconds:5},{hookEvent:"beforeReadFile",handler:"tool-before",timeoutSeconds:5},{hookEvent:"afterFileEdit",handler:"tool-after",timeoutSeconds:30,matcher:"Write"},{hookEvent:"stop",handler:"stop",timeoutSeconds:120,loopLimit:5},{hookEvent:"afterAgentResponse",handler:"response-after",timeoutSeconds:5,matcher:"AgentResponse"}];function X1($){let J=[$.launcherPath],Q=uz.map((q)=>({hookEvent:q.hookEvent,handler:q.handler,command:"node",args:[...J,q.handler],timeoutSeconds:q.timeoutSeconds,...q.failClosed!==void 0?{failClosed:q.failClosed}:{},...q.matcher!==void 0?{matcher:q.matcher}:{},...q.loopLimit!==void 0?{loopLimit:q.loopLimit}:{}}));return{target:Q1(),strategy:"replace",entries:Q}}var W1={name:"cursor",detect:a3,capabilities:n3,policyDefaults:J1,toEvent:s3,render:Z1,wiring:X1,wiringTargets:q1,lessonsView:e3};var v$=[W1,i3];function Q9($,Z){let J=Z.filter((Q)=>Q.detect($));if(J.length===0)return{provider:null,ambiguous:!1,matchedNames:[]};return{provider:J[0]??null,ambiguous:J.length>1,matchedNames:J.map((Q)=>Q.name)}}import{join as lz}from"node:path";import{existsSync as hz,statSync as rO}from"node:fs";var Y1=F.observability.DEFAULT_OBS,V1={...Y1,debugEnabled:!0};function a8($,Z=Y1){return{...Z,globalSpool:$.obs.globalSpool,includePayloads:$.obs.includePayloads,maxAttrChars:$.obs.maxAttrChars,sessionCostAlertUsd:$.obs.sessionCostAlertUsd,retentionDays:$.obs.retentionDays}}function z1($){let Z=`${$.provider}-`;return $.sessionKey.startsWith(Z)?$.sessionKey.slice(Z.length):$.sessionKey}async function pz($){if($.cwd)return $.cwd;let Z=F.handoff.readHandoff($.projectDir,$.provider,$.sessionKey).last_shell_cwd;return cz(Z,$.projectDir)}async function cz($,Z){if(!$||$===Z||!hz($))return Z;let[J,Q]=await Promise.all([XZ($),XZ(Z)]);return J!==null&&J===Q?$:Z}async function G1($,Z){if(!$?.turn_base_sha||!$.turn_base_root)return"HEAD";let J=await y(Z);return J!==null&&J===$.turn_base_root?$.turn_base_sha:"HEAD"}async function dz($){let Z=await y($);if(Z===null)return null;let J=await a({command:["git","rev-parse","--short","HEAD"],cwd:Z});if(J.exitCode!==0)return null;let Q=J.stdout.trim();return Q.length>0?Q:null}function B1($,Z){return[...F.policy.forProvider($,Z.name)??[],...Z.policyDefaults().blockedPatterns]}async function U1($,Z){let J=Z.policy.rules;if(!F.rules.wants($.projectDir,J,$))return;let Q=await dz(await pz($));F.rules.observe($.projectDir,J,$,{sha:Q,sessionKey:$.sessionKey,at:new Date().toISOString()})}var iz=6000;function nz($){if($.filePath===void 0)return!1;if($.event==="edit.after")return!0;return I8($.toolName)}function az($){return $ instanceof Error?$.message:String($)}function t($,Z,J,Q="unknown",q={}){try{D(lz(H($),"obs.jsonl"),{schema:"harness.observability.v1",provider:Q,kind:Z,level:"signal",ts:new Date().toISOString(),...q,attrs:J})}catch{}}function rz($){return $.event==="shell.before"||$.event==="mcp.before"}function sz($){if(!rz($))return;t($.projectDir,"hook.enter",{event:$.event,toolName:$.toolName??"none",sessionKey:$.sessionKey},$.provider,{trace_id:F.observability.deriveTraceId($.sessionKey),session_id:$.sessionKey})}function oz($,Z,J){if(J.kind!=="deny"&&J.kind!=="ask")return;if($.event==="shell.before")return;F.observability.recordObs($.projectDir,a8(Z),{provider:$.provider,kind:"policy.deny",sessionKey:$.sessionKey,attrs:{event:$.event,tool_name:$.toolName,permission:J.kind,rule:J.rule??"none",diagnostic:J.diagnostic??"none"}})}function tz($){return $!==null&&typeof $==="object"&&!Array.isArray($)?$:{}}async function ez($,Z={}){let J=Z.readStdin??y9,Q=Z.now?Z.now():new Date,q={stdout:"{}",exitCode:0},W=(await J()).trim();if(!W)return t(process.cwd(),"adapter.unrecognized",{reason:"empty-stdin"}),{event:null,decision:{kind:"abstain"},rendered:q};let Y;try{Y=JSON.parse(W)}catch{return t(process.cwd(),"adapter.unrecognized",{reason:"invalid-json"}),{event:null,decision:{kind:"abstain"},rendered:q}}let V=Q9(Y,v$);if(!V.provider)return t(process.cwd(),"adapter.unrecognized",{reason:"no-provider-match"}),{event:null,decision:{kind:"abstain"},rendered:q};if(V.ambiguous)t(process.cwd(),"adapter.ambiguous",{matched:V.matchedNames});let z=V.provider,G=z.toEvent(tz(Y));if(!G)return t(process.cwd(),"adapter.unrecognized",{reason:"unrecognized-event",provider:z.name}),{event:null,decision:{kind:"abstain"},rendered:q};let U=z.capabilities();sz(G);try{let M=F.policy.loadPolicy(G.projectDir);if(G.model)F.subagentPolicy.upsertParentModelState(G.projectDir,G.sessionKey,{model:G.model},B1(M.subagents.blockedPatterns,z));F.presence.heartbeat(G.projectDir,{provider:G.provider,session:z1(G),...nz(G)?{file:G.filePath}:{},now:Q});let B=v$.flatMap((k)=>k.wiringTargets()),T=await $(G,{policy:M,capabilities:U,provider:z,now:Q,protectedPaths:B}),b=n8(T,G,U,{contextBudgetChars:iz});oz(G,M,b);let l=z.render(b,G);return{event:G,decision:b,rendered:l}}catch(M){t(G.projectDir,"adapter.error",{provider:G.provider,event:G.event,message:az(M)});let B={kind:"abstain"};return{event:G,decision:B,rendered:z.render(B,G)}}}async function H1($){let Z=await ez($);if(Z.rendered.stdout!==null){let J=Z.rendered.stdout;process.stdout.write(J.endsWith(`
161
161
  `)?J:`${J}
162
162
  `)}process.exit(Z.rendered.exitCode)}var ZG={"tool.after":"tool.end","shell.after":"shell.end","mcp.after":"mcp.end","edit.after":"file.edit"};function JG($,Z){let J=$[Z];return typeof J==="string"?J:void 0}function QG($,Z){let J=$[Z];return typeof J==="boolean"?J:void 0}function qG($,Z){if(Z.capabilities.usageInPayload||!$.transcriptPath)return;let J=o5($.transcriptPath);if(!J)return;let Q=k3($.provider,$.model,{inputTokens:J.inputTokens,outputTokens:J.outputTokens,cacheReadTokens:J.cacheReadTokens,cacheWriteTokens:J.cacheWriteTokens});return{input_tokens:J.inputTokens,output_tokens:J.outputTokens,cache_read_tokens:J.cacheReadTokens,cache_write_tokens:J.cacheWriteTokens,cost_usd:Q.costUsd,cost_source:Q.source,cost_pool:T3(Q.pool)}}async function XG($,Z){let{policy:J}=Z;if(!J.comments.enabled||J.comments.onViolation!=="followup"||!$.filePath)return null;let Q=N($G($.projectDir,$.filePath));if(Q.startsWith("..")||!F.policy.isUnderCodePaths(Q,J.codePaths))return null;let q=F.commentPolicy.filterCommentTargets([Q]);if(q.length===0)return null;let X=F.handoff.readHandoff($.projectDir,$.provider,$.sessionKey),W=await F.commentPolicy.scanAddedComments($.projectDir,q,J.comments.mode,await G1(X,$.projectDir));if(W.length===0)return null;return{kind:"context",text:F.commentPolicy.commentEditAdvisory(W,J.comments.mode)}}var WG=async($,Z)=>{await U1($,Z),F.observability.recordAudit($.projectDir,$.event,$.raw,Z.policy.obs.globalSpool);let J=ZG[$.event];if(J){let q={tool_name:$.toolName,command:$.command,file_path:$.filePath};if($.event==="shell.after")q.cwd=JG($.raw,"cwd"),q.sandbox=QG($.raw,"sandbox");F.observability.recordObs($.projectDir,a8(Z.policy,V1),{provider:$.provider,kind:J,sessionKey:$.sessionKey,model:$.model,attrs:q,gen_ai:qG($,Z)})}if(!Z.capabilities.contextAtToolAfter)return{kind:"abstain"};if(Z.provider.capabilities().toolOutputAtAfter)F.untrusted.rememberUntrustedOutput({root:$.projectDir,sessionKey:$.sessionKey,event:$.event,toolName:$.toolName,command:$.command,toolOutput:$.toolOutput,config:Z.policy.untrustedContent,providerTools:Z.provider.policyDefaults().untrustedTools});if(Z.policy.secrets.redactOutput&&$.toolOutput){let q=$.toolOutput,X=F.secretScan.scanForSecrets(q);if(X.length>0){let W=q;for(let Y of[...X].reverse()){let V=F.secretScan.placeholderFor($.projectDir,$.sessionKey,q.slice(Y.start,Y.end),Y.kind);W=`${W.slice(0,Y.start)}${V}${W.slice(Y.end)}`}return{kind:"rewriteOutput",output:W}}}let Q=F.untrusted.evaluateUntrustedContent({root:$.projectDir,sessionKey:$.sessionKey,event:$.event,toolName:$.toolName,command:$.command,config:Z.policy.untrustedContent,providerTools:Z.provider.policyDefaults().untrustedTools});if(Q.kind!=="abstain")return Q;if($.event==="edit.after"){let q=await XG($,Z);if(q)return q}return{kind:"abstain"}};if(X9.main==X9.module)await H1(WG);export{WG as toolAfterHandler};
@@ -153,12 +153,12 @@ ${$.body.trim()}`}function f8($,Z,J){let Q=[];for(let q of $){let X=r7(q,Z,J);if
153
153
  `:"",X=J.length>0?`${J}${q}
154
154
  ${U9}
155
155
  `:`${U9}
156
- `;return DV(t3(Z),{recursive:!0}),FV(Z,X,"utf8"),Z}var EV={"session.start":"SessionStart","session.end":"SessionEnd","prompt.submit":"UserPromptSubmit","tool.before":"PreToolUse","tool.after":"PostToolUse","tool.failure":"PostToolUseFailure","shell.before":"PreToolUse","shell.after":"PostToolUse","mcp.before":"PreToolUse","mcp.after":"PostToolUse","read.before":"PreToolUse","edit.after":"PostToolUse","subagent.start":"SubagentStart","subagent.stop":"SubagentStop",stop:"Stop","compact.before":"PreCompact","response.after":"MessageDisplay","thought.after":"MessageDisplay"};function B9($,Z,J){let Q={hookEventName:Z,permissionDecision:$};if(J!==void 0)Q.permissionDecisionReason=J;return JSON.stringify({hookSpecificOutput:Q})}function Zq($,Z){let J=EV[Z.event];switch($.kind){case"abstain":return{stdout:null,exitCode:0};case"allow":return{stdout:B9("allow",J,void 0),exitCode:0};case"deny":return{stdout:B9("deny",J,$.reason),exitCode:0};case"ask":return{stdout:B9("ask",J,$.reason),exitCode:0};case"context":return{stdout:JSON.stringify({hookSpecificOutput:{hookEventName:J,additionalContext:$.text}}),exitCode:0};case"continue":return{stdout:JSON.stringify({decision:"block",reason:$.text}),exitCode:0};case"rewriteInput":return{stdout:JSON.stringify({hookSpecificOutput:{hookEventName:J,updatedInput:$.input}}),exitCode:0};case"rewriteOutput":return{stdout:JSON.stringify({updatedToolOutput:$.output}),exitCode:0};default:throw Error(`unreachable decision kind: ${JSON.stringify($)}`)}}function Jq(){return{blockedPatterns:[],minEffort:null,untrustedTools:["WebFetch","WebSearch"]}}var Qq={name:"claude",detect:i3,capabilities:l3,policyDefaults:Jq,toEvent:s3,render:Zq,wiring:V9,wiringTargets:c3,lessonsView:$q};function qq(){return{enforcesHooks:!0,askSupportedOn:["shell.before","mcp.before"],sessionEnv:!0,nativeLoopCounter:!0,dedicatedShellEvent:!0,toolInputRewrite:!0,toolOutputRewriteOn:["mcp.after"],contextAtToolBefore:!1,contextAtToolAfter:!0,contextAtStop:!1,sessionStartContextReliable:!1,toolOutputAtAfter:!0,usageInPayload:!1,effortSignal:!1,thoughtEvent:!0}}var RV=/^[a-z][a-zA-Z0-9]*$/;function Xq($){if($===null||typeof $!=="object"||Array.isArray($))return!1;let Z=$,J=Z.hook_event_name;if(typeof J!=="string"||!RV.test(J))return!1;return Array.isArray(Z.workspace_roots)}var kV={sessionStart:"session.start",sessionEnd:"session.end",beforeSubmitPrompt:"prompt.submit",preToolUse:"tool.before",postToolUse:"tool.after",postToolUseFailure:"tool.failure",beforeShellExecution:"shell.before",afterShellExecution:"shell.after",beforeMCPExecution:"mcp.before",afterMCPExecution:"mcp.after",beforeReadFile:"read.before",afterFileEdit:"edit.after",subagentStart:"subagent.start",subagentStop:"subagent.stop",stop:"stop",preCompact:"compact.before",afterAgentResponse:"response.after",afterAgentThought:"thought.after"};function C($){return typeof $==="string"?$:void 0}function Wq($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function H9($){return $!==null&&typeof $==="object"&&!Array.isArray($)?$:void 0}function xV($){let Z=H9($);if(Z)return Z;if(typeof $!=="string")return;try{return H9(JSON.parse($))}catch{return}}function SV($){return $==="completed"||$==="aborted"||$==="error"?$:void 0}function bV($){let Z=C($.conversation_id)||C($.session_id)||"default";return`cursor-${j(Z)}`}function wV($){let Z=process.env.CURSOR_PROJECT_DIR;if(Z)return Z;let J=$.workspace_roots;if(Array.isArray(J)){let Q=C(J[0]);if(Q)return Q}return process.cwd()}function zq($){let Z=C($.hook_event_name),J=Z?kV[Z]:void 0;if(!J)return null;let Q={provider:"cursor",event:J,sessionKey:bV($),projectDir:wV($),raw:$},q=C($.model);if(q)Q.model=q;let X=Wq($.context_usage_percent);if(X!==void 0)Q.contextUsagePercent=X;switch(J){case"prompt.submit":{let W=C($.prompt);if(W!==void 0)Q.text=W;break}case"response.after":{let W=C($.text);if(W!==void 0)Q.text=W;break}case"thought.after":{let W=C($.thought)??C($.text);if(W!==void 0)Q.text=W;break}case"tool.before":case"tool.after":case"tool.failure":{let W=C($.tool_name);if(W)Q.toolName=W;let z=H9($.tool_input);if(z)Q.toolInput=z;let Y=C($.subagent_type);if(Y)Q.subagentType=Y;let V=z?C(z.model):void 0;if(V)Q.spawnModel=V;let G=z?C(z.subagent_type):void 0;if(G)Q.spawnSubagentType=G;if(W==="Write"){let B=z?C(z.content):void 0;if(B!==void 0)Q.proposedContent=B}break}case"shell.before":case"shell.after":{let W=C($.command);if(W!==void 0)Q.command=W;let z=C($.output);if(z!==void 0)Q.toolOutput=z;if(J==="shell.before"){let Y=C($.cwd);if(Y)Q.cwd=Y}break}case"mcp.before":case"mcp.after":{let W=C($.result_json);if(W!==void 0)Q.toolOutput=W;let z=C($.tool_name);if(z)Q.toolName=z;let Y=xV($.tool_input);if(Y)Q.toolInput=Y;let V=C($.command);if(V!==void 0)Q.command=V;break}case"read.before":case"edit.after":{let W=C($.file_path);if(W!==void 0)Q.filePath=W;break}case"subagent.start":case"subagent.stop":{let W=C($.subagent_type);if(W)Q.spawnSubagentType=W;let z=C($.subagent_model);if(z)Q.spawnModel=z;break}case"stop":{let W=SV($.status);if(W)Q.status=W;let z=Wq($.loop_count);if(z!==void 0)Q.loopCount=z;break}default:break}return Q}import{existsSync as fV,mkdirSync as yV,readFileSync as mV,writeFileSync as vV}from"node:fs";import{dirname as Yq,join as Vq}from"node:path";function uV($){return Vq(Yq(L($)),"lessons.md")}function gV($){return Vq($,".cursor","rules","harness-lessons.mdc")}function Gq($){let Z=uV($);if(!fV(Z))return null;let J=mV(Z,"utf8"),Q=gV($);yV(Yq(Q),{recursive:!0});let q=`---
156
+ `;return DV(t3(Z),{recursive:!0}),FV(Z,X,"utf8"),Z}var EV={"session.start":"SessionStart","session.end":"SessionEnd","prompt.submit":"UserPromptSubmit","tool.before":"PreToolUse","tool.after":"PostToolUse","tool.failure":"PostToolUseFailure","shell.before":"PreToolUse","shell.after":"PostToolUse","mcp.before":"PreToolUse","mcp.after":"PostToolUse","read.before":"PreToolUse","edit.after":"PostToolUse","subagent.start":"SubagentStart","subagent.stop":"SubagentStop",stop:"Stop","compact.before":"PreCompact","response.after":"MessageDisplay","thought.after":"MessageDisplay"};function B9($,Z,J){let Q={hookEventName:Z,permissionDecision:$};if(J!==void 0)Q.permissionDecisionReason=J;return JSON.stringify({hookSpecificOutput:Q})}function Zq($,Z){let J=EV[Z.event];switch($.kind){case"abstain":return{stdout:null,exitCode:0};case"allow":return{stdout:B9("allow",J,void 0),exitCode:0};case"deny":return{stdout:B9("deny",J,$.reason),exitCode:0};case"ask":return{stdout:B9("ask",J,$.reason),exitCode:0};case"context":return{stdout:JSON.stringify({hookSpecificOutput:{hookEventName:J,additionalContext:$.text}}),exitCode:0};case"continue":return{stdout:JSON.stringify({decision:"block",reason:$.text}),exitCode:0};case"rewriteInput":return{stdout:JSON.stringify({hookSpecificOutput:{hookEventName:J,updatedInput:$.input}}),exitCode:0};case"rewriteOutput":return{stdout:JSON.stringify({updatedToolOutput:$.output}),exitCode:0};default:throw Error(`unreachable decision kind: ${JSON.stringify($)}`)}}function Jq(){return{blockedPatterns:[],minEffort:null,untrustedTools:["WebFetch","WebSearch"]}}var Qq={name:"claude",detect:i3,capabilities:l3,policyDefaults:Jq,toEvent:s3,render:Zq,wiring:V9,wiringTargets:c3,lessonsView:$q};function qq(){return{enforcesHooks:!0,askSupportedOn:["shell.before","mcp.before"],sessionEnv:!0,nativeLoopCounter:!0,dedicatedShellEvent:!0,toolInputRewrite:!0,toolOutputRewriteOn:["mcp.after"],contextAtToolBefore:!1,contextAtToolAfter:!0,contextAtStop:!1,sessionStartContextReliable:!1,toolOutputAtAfter:!0,usageInPayload:!1,effortSignal:!1,thoughtEvent:!0}}var RV=/^[a-z][a-zA-Z0-9]*$/;function Xq($){if($===null||typeof $!=="object"||Array.isArray($))return!1;let J=$.hook_event_name;return typeof J==="string"&&RV.test(J)}var kV={sessionStart:"session.start",sessionEnd:"session.end",beforeSubmitPrompt:"prompt.submit",preToolUse:"tool.before",postToolUse:"tool.after",postToolUseFailure:"tool.failure",beforeShellExecution:"shell.before",afterShellExecution:"shell.after",beforeMCPExecution:"mcp.before",afterMCPExecution:"mcp.after",beforeReadFile:"read.before",afterFileEdit:"edit.after",subagentStart:"subagent.start",subagentStop:"subagent.stop",stop:"stop",preCompact:"compact.before",afterAgentResponse:"response.after",afterAgentThought:"thought.after"};function C($){return typeof $==="string"?$:void 0}function Wq($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function H9($){return $!==null&&typeof $==="object"&&!Array.isArray($)?$:void 0}function xV($){let Z=H9($);if(Z)return Z;if(typeof $!=="string")return;try{return H9(JSON.parse($))}catch{return}}function SV($){return $==="completed"||$==="aborted"||$==="error"?$:void 0}function bV($){let Z=C($.conversation_id)||C($.session_id)||"default";return`cursor-${j(Z)}`}function wV($){let Z=process.env.CURSOR_PROJECT_DIR;if(Z)return Z;let J=$.workspace_roots;if(Array.isArray(J)){let Q=C(J[0]);if(Q)return Q}return process.cwd()}function zq($){let Z=C($.hook_event_name),J=Z?kV[Z]:void 0;if(!J)return null;let Q={provider:"cursor",event:J,sessionKey:bV($),projectDir:wV($),raw:$},q=C($.model);if(q)Q.model=q;let X=Wq($.context_usage_percent);if(X!==void 0)Q.contextUsagePercent=X;switch(J){case"prompt.submit":{let W=C($.prompt);if(W!==void 0)Q.text=W;break}case"response.after":{let W=C($.text);if(W!==void 0)Q.text=W;break}case"thought.after":{let W=C($.thought)??C($.text);if(W!==void 0)Q.text=W;break}case"tool.before":case"tool.after":case"tool.failure":{let W=C($.tool_name);if(W)Q.toolName=W;let z=H9($.tool_input);if(z)Q.toolInput=z;let Y=C($.subagent_type);if(Y)Q.subagentType=Y;let V=z?C(z.model):void 0;if(V)Q.spawnModel=V;let G=z?C(z.subagent_type):void 0;if(G)Q.spawnSubagentType=G;if(W==="Write"){let B=z?C(z.content):void 0;if(B!==void 0)Q.proposedContent=B}break}case"shell.before":case"shell.after":{let W=C($.command);if(W!==void 0)Q.command=W;let z=C($.output);if(z!==void 0)Q.toolOutput=z;if(J==="shell.before"){let Y=C($.cwd);if(Y)Q.cwd=Y}break}case"mcp.before":case"mcp.after":{let W=C($.result_json);if(W!==void 0)Q.toolOutput=W;let z=C($.tool_name);if(z)Q.toolName=z;let Y=xV($.tool_input);if(Y)Q.toolInput=Y;let V=C($.command);if(V!==void 0)Q.command=V;break}case"read.before":case"edit.after":{let W=C($.file_path);if(W!==void 0)Q.filePath=W;break}case"subagent.start":case"subagent.stop":{let W=C($.subagent_type);if(W)Q.spawnSubagentType=W;let z=C($.subagent_model);if(z)Q.spawnModel=z;break}case"stop":{let W=SV($.status);if(W)Q.status=W;let z=Wq($.loop_count);if(z!==void 0)Q.loopCount=z;break}default:break}return Q}import{existsSync as fV,mkdirSync as yV,readFileSync as mV,writeFileSync as vV}from"node:fs";import{dirname as Yq,join as Vq}from"node:path";function uV($){return Vq(Yq(L($)),"lessons.md")}function gV($){return Vq($,".cursor","rules","harness-lessons.mdc")}function Gq($){let Z=uV($);if(!fV(Z))return null;let J=mV(Z,"utf8"),Q=gV($);yV(Yq(Q),{recursive:!0});let q=`---
157
157
  description: Harness-learned lessons (auto-synced from gate failures)
158
158
  alwaysApply: true
159
159
  ---
160
160
 
161
- ${J}`;return vV(Q,q,"utf8"),Q}function Uq($,Z){let J={permission:$};if(Z.userNote!==void 0)J.user_message=Z.userNote;return J.agent_message=Z.reason,JSON.stringify(J)}function Bq($,Z){switch($.kind){case"abstain":return{stdout:"{}",exitCode:0};case"allow":return{stdout:JSON.stringify({permission:"allow"}),exitCode:0};case"deny":return{stdout:Uq("deny",$),exitCode:0};case"ask":return{stdout:Uq("ask",$),exitCode:0};case"context":{let J={};if($.env!==void 0)J.env=$.env;return J.additional_context=$.text,{stdout:JSON.stringify(J),exitCode:0}}case"continue":return{stdout:JSON.stringify({followup_message:$.text}),exitCode:0};case"rewriteInput":return{stdout:JSON.stringify({updated_input:$.input}),exitCode:0};case"rewriteOutput":return{stdout:JSON.stringify({updated_mcp_tool_output:{result_json:$.output}}),exitCode:0};default:throw Error(`unreachable decision kind: ${JSON.stringify($)}`)}}function Hq(){return{blockedPatterns:["-fast(?:$|[^a-z0-9])","/fast(?:$|[^a-z0-9])","composer-2\\.5-fast"],minEffort:null,untrustedTools:["Fetch","WebSearch"]}}import{join as hV}from"node:path";function Mq(){return hV(D9(),"hooks.json")}function Kq(){return[Mq()]}var pV=[{hookEvent:"sessionStart",handler:"session-start",timeoutSeconds:10},{hookEvent:"sessionEnd",handler:"session-end",timeoutSeconds:10},{hookEvent:"beforeSubmitPrompt",handler:"prompt-submit",timeoutSeconds:5},{hookEvent:"afterAgentThought",handler:"tool-after",timeoutSeconds:5},{hookEvent:"preCompact",handler:"compact-before",timeoutSeconds:5},{hookEvent:"subagentStart",handler:"subagent-start",timeoutSeconds:5,failClosed:!0},{hookEvent:"subagentStop",handler:"subagent-stop",timeoutSeconds:5},{hookEvent:"preToolUse",handler:"tool-before",timeoutSeconds:10,failClosed:!0},{hookEvent:"postToolUse",handler:"tool-after",timeoutSeconds:5},{hookEvent:"postToolUseFailure",handler:"tool-failure",timeoutSeconds:5},{hookEvent:"beforeShellExecution",handler:"tool-before",timeoutSeconds:10,failClosed:!0},{hookEvent:"afterShellExecution",handler:"tool-after",timeoutSeconds:10},{hookEvent:"beforeMCPExecution",handler:"tool-before",timeoutSeconds:10},{hookEvent:"afterMCPExecution",handler:"tool-after",timeoutSeconds:5},{hookEvent:"beforeReadFile",handler:"tool-before",timeoutSeconds:5},{hookEvent:"afterFileEdit",handler:"tool-after",timeoutSeconds:30,matcher:"Write"},{hookEvent:"stop",handler:"stop",timeoutSeconds:120,loopLimit:5},{hookEvent:"afterAgentResponse",handler:"response-after",timeoutSeconds:5,matcher:"AgentResponse"}];function _q($){let J=[$.launcherPath],Q=pV.map((q)=>({hookEvent:q.hookEvent,handler:q.handler,command:"node",args:[...J,q.handler],timeoutSeconds:q.timeoutSeconds,...q.failClosed!==void 0?{failClosed:q.failClosed}:{},...q.matcher!==void 0?{matcher:q.matcher}:{},...q.loopLimit!==void 0?{loopLimit:q.loopLimit}:{}}));return{target:Mq(),strategy:"replace",entries:Q}}var Oq={name:"cursor",detect:Xq,capabilities:qq,policyDefaults:Hq,toEvent:zq,render:Bq,wiring:_q,wiringTargets:Kq,lessonsView:Gq};var h$=[Oq,Qq];function M9($,Z){let J=Z.filter((Q)=>Q.detect($));if(J.length===0)return{provider:null,ambiguous:!1,matchedNames:[]};return{provider:J[0]??null,ambiguous:J.length>1,matchedNames:J.map((Q)=>Q.name)}}import{existsSync as cV,statSync as WI}from"node:fs";var Cq=H.observability.DEFAULT_OBS,UI={...Cq,debugEnabled:!0};function e($,Z=Cq){return{...Z,globalSpool:$.obs.globalSpool,includePayloads:$.obs.includePayloads,maxAttrChars:$.obs.maxAttrChars,sessionCostAlertUsd:$.obs.sessionCostAlertUsd,retentionDays:$.obs.retentionDays}}function p$($){let Z=`${$.provider}-`;return $.sessionKey.startsWith(Z)?$.sessionKey.slice(Z.length):$.sessionKey}async function M$($){if($.cwd)return $.cwd;let Z=H.handoff.readHandoff($.projectDir,$.provider,$.sessionKey).last_shell_cwd;return dV(Z,$.projectDir)}async function dV($,Z){if(!$||$===Z||!cV($))return Z;let[J,Q]=await Promise.all([MZ($),MZ(Z)]);return J!==null&&J===Q?$:Z}async function K9($,Z,J,Q,q){let W=H.handoff.handoffInjectable($,Q).ok?H.handoff.readHandoff($,J,Q):void 0,z=await Iq(W,Z),Y=await KZ(Z,z),V=await H.presence.filesClaimedByOtherLiveSessions($,Z,J,Q),G=Y.filter((I)=>!V.has(I)),B=OZ(G,q.codePaths),K=CZ(G),U=G.filter((I)=>H.policy.isUnderCodePaths(I,q.codePaths)),_=H.commentPolicy.filterCommentTargets(U);return{turnBase:z,changedFiles:G,codeTargets:B,testTargets:K,commentTargets:_,pendingCredit:W?.pending_lesson_credit}}async function $Z($,Z,J,Q,q){if(!q.comments.enabled||q.comments.onViolation!=="followup")return[];let X=await K9($,Z,J,Q,q);if(X.commentTargets.length===0)return[];return H.commentPolicy.scanAddedComments(Z,X.commentTargets,q.comments.mode,X.turnBase)}async function Iq($,Z){if(!$?.turn_base_sha||!$.turn_base_root)return"HEAD";let J=await P(Z);return J!==null&&J===$.turn_base_root?$.turn_base_sha:"HEAD"}async function u($){let Z=await P($);if(Z===null)return null;let J=await w({command:["git","rev-parse","--short","HEAD"],cwd:Z});if(J.exitCode!==0)return null;let Q=J.stdout.trim();return Q.length>0?Q:null}function lV($,Z){return H.policy.forProvider($,Z.name)??[]}function _9($,Z){return[...H.policy.forProvider($,Z.name)??[],...Z.policyDefaults().blockedPatterns]}function iV($,Z){return $??Z.policyDefaults().minEffort}function jq($,Z,J,Q){return{provider:J.name,sessionKey:$.sessionKey,projectDir:$.projectDir,model:Q,effort:$.effort,allowedModels:lV(Z.subagents.allowedModels,J),blockedPatterns:_9(Z.subagents.blockedPatterns,J),minEffort:iV(Z.subagents.minEffort,J),requireModel:Z.subagents.requireModel,enforceAllowlist:Z.subagents.enforceAllowlist,blockParentFast:Z.subagents.blockParentFast,blockMode:Z.subagents.blockMode}}function Nq($){if(!$)return"";let Z=$.model??$.Model;return typeof Z==="string"?Z:""}var aV=6000;function rV($){if($.filePath===void 0)return!1;if($.event==="edit.after")return!0;return E8($.toolName)}function sV($){return $ instanceof Error?$.message:String($)}function $$($,Z,J,Q="unknown",q={}){try{E(nV(M($),"obs.jsonl"),{schema:"harness.observability.v1",provider:Q,kind:Z,level:"signal",ts:new Date().toISOString(),...q,attrs:J})}catch{}}function oV($){return $.event==="shell.before"||$.event==="mcp.before"}function tV($){if(!oV($))return;$$($.projectDir,"hook.enter",{event:$.event,toolName:$.toolName??"none",sessionKey:$.sessionKey},$.provider,{trace_id:H.observability.deriveTraceId($.sessionKey),session_id:$.sessionKey})}function eV($,Z,J){if(J.kind!=="deny"&&J.kind!=="ask")return;if($.event==="shell.before")return;H.observability.recordObs($.projectDir,e(Z),{provider:$.provider,kind:"policy.deny",sessionKey:$.sessionKey,attrs:{event:$.event,tool_name:$.toolName,permission:J.kind,rule:J.rule??"none",diagnostic:J.diagnostic??"none"}})}function $G($){return $!==null&&typeof $==="object"&&!Array.isArray($)?$:{}}async function ZG($,Z={}){let J=Z.readStdin??s9,Q=Z.now?Z.now():new Date,q={stdout:null,exitCode:0},W=(await J()).trim();if(!W)return $$(process.cwd(),"adapter.unrecognized",{reason:"empty-stdin"}),{event:null,decision:{kind:"abstain"},rendered:q};let z;try{z=JSON.parse(W)}catch{return $$(process.cwd(),"adapter.unrecognized",{reason:"invalid-json"}),{event:null,decision:{kind:"abstain"},rendered:q}}let Y=M9(z,h$);if(!Y.provider)return $$(process.cwd(),"adapter.unrecognized",{reason:"no-provider-match"}),{event:null,decision:{kind:"abstain"},rendered:q};if(Y.ambiguous)$$(process.cwd(),"adapter.ambiguous",{matched:Y.matchedNames});let V=Y.provider,G=V.toEvent($G(z));if(!G)return $$(process.cwd(),"adapter.unrecognized",{reason:"unrecognized-event",provider:V.name}),{event:null,decision:{kind:"abstain"},rendered:q};let B=V.capabilities();tV(G);try{let K=H.policy.loadPolicy(G.projectDir);if(G.model)H.subagentPolicy.upsertParentModelState(G.projectDir,G.sessionKey,{model:G.model},_9(K.subagents.blockedPatterns,V));H.presence.heartbeat(G.projectDir,{provider:G.provider,session:p$(G),...rV(G)?{file:G.filePath}:{},now:Q});let U=h$.flatMap((F)=>F.wiringTargets()),I=await $(G,{policy:K,capabilities:B,provider:V,now:Q,protectedPaths:U}),k=e8(I,G,B,{contextBudgetChars:aV});eV(G,K,k);let m=V.render(k,G);return{event:G,decision:k,rendered:m}}catch(K){$$(G.projectDir,"adapter.error",{provider:G.provider,event:G.event,message:sV(K)});let U={kind:"abstain"};return{event:G,decision:U,rendered:V.render(U,G)}}}async function Lq($){let Z=await ZG($);if(Z.rendered.stdout!==null){let J=Z.rendered.stdout;process.stdout.write(J.endsWith(`
161
+ ${J}`;return vV(Q,q,"utf8"),Q}function Uq($,Z){let J={permission:$};if(Z.userNote!==void 0)J.user_message=Z.userNote;return J.agent_message=Z.reason,JSON.stringify(J)}function Bq($,Z){switch($.kind){case"abstain":return{stdout:"{}",exitCode:0};case"allow":return{stdout:JSON.stringify({permission:"allow"}),exitCode:0};case"deny":return{stdout:Uq("deny",$),exitCode:0};case"ask":return{stdout:Uq("ask",$),exitCode:0};case"context":{let J={};if($.env!==void 0)J.env=$.env;return J.additional_context=$.text,{stdout:JSON.stringify(J),exitCode:0}}case"continue":return{stdout:JSON.stringify({followup_message:$.text}),exitCode:0};case"rewriteInput":return{stdout:JSON.stringify({updated_input:$.input}),exitCode:0};case"rewriteOutput":return{stdout:JSON.stringify({updated_mcp_tool_output:{result_json:$.output}}),exitCode:0};default:throw Error(`unreachable decision kind: ${JSON.stringify($)}`)}}function Hq(){return{blockedPatterns:["-fast(?:$|[^a-z0-9])","/fast(?:$|[^a-z0-9])","composer-2\\.5-fast"],minEffort:null,untrustedTools:["Fetch","WebSearch"]}}import{join as hV}from"node:path";function Mq(){return hV(D9(),"hooks.json")}function Kq(){return[Mq()]}var pV=[{hookEvent:"sessionStart",handler:"session-start",timeoutSeconds:10},{hookEvent:"sessionEnd",handler:"session-end",timeoutSeconds:10},{hookEvent:"beforeSubmitPrompt",handler:"prompt-submit",timeoutSeconds:5},{hookEvent:"afterAgentThought",handler:"tool-after",timeoutSeconds:5},{hookEvent:"preCompact",handler:"compact-before",timeoutSeconds:5},{hookEvent:"subagentStart",handler:"subagent-start",timeoutSeconds:5,failClosed:!0},{hookEvent:"subagentStop",handler:"subagent-stop",timeoutSeconds:5},{hookEvent:"preToolUse",handler:"tool-before",timeoutSeconds:10,failClosed:!0},{hookEvent:"postToolUse",handler:"tool-after",timeoutSeconds:5},{hookEvent:"postToolUseFailure",handler:"tool-failure",timeoutSeconds:5},{hookEvent:"beforeShellExecution",handler:"tool-before",timeoutSeconds:10,failClosed:!0},{hookEvent:"afterShellExecution",handler:"tool-after",timeoutSeconds:10},{hookEvent:"beforeMCPExecution",handler:"tool-before",timeoutSeconds:10},{hookEvent:"afterMCPExecution",handler:"tool-after",timeoutSeconds:5},{hookEvent:"beforeReadFile",handler:"tool-before",timeoutSeconds:5},{hookEvent:"afterFileEdit",handler:"tool-after",timeoutSeconds:30,matcher:"Write"},{hookEvent:"stop",handler:"stop",timeoutSeconds:120,loopLimit:5},{hookEvent:"afterAgentResponse",handler:"response-after",timeoutSeconds:5,matcher:"AgentResponse"}];function _q($){let J=[$.launcherPath],Q=pV.map((q)=>({hookEvent:q.hookEvent,handler:q.handler,command:"node",args:[...J,q.handler],timeoutSeconds:q.timeoutSeconds,...q.failClosed!==void 0?{failClosed:q.failClosed}:{},...q.matcher!==void 0?{matcher:q.matcher}:{},...q.loopLimit!==void 0?{loopLimit:q.loopLimit}:{}}));return{target:Mq(),strategy:"replace",entries:Q}}var Oq={name:"cursor",detect:Xq,capabilities:qq,policyDefaults:Hq,toEvent:zq,render:Bq,wiring:_q,wiringTargets:Kq,lessonsView:Gq};var h$=[Oq,Qq];function M9($,Z){let J=Z.filter((Q)=>Q.detect($));if(J.length===0)return{provider:null,ambiguous:!1,matchedNames:[]};return{provider:J[0]??null,ambiguous:J.length>1,matchedNames:J.map((Q)=>Q.name)}}import{existsSync as cV,statSync as WI}from"node:fs";var Cq=H.observability.DEFAULT_OBS,UI={...Cq,debugEnabled:!0};function e($,Z=Cq){return{...Z,globalSpool:$.obs.globalSpool,includePayloads:$.obs.includePayloads,maxAttrChars:$.obs.maxAttrChars,sessionCostAlertUsd:$.obs.sessionCostAlertUsd,retentionDays:$.obs.retentionDays}}function p$($){let Z=`${$.provider}-`;return $.sessionKey.startsWith(Z)?$.sessionKey.slice(Z.length):$.sessionKey}async function M$($){if($.cwd)return $.cwd;let Z=H.handoff.readHandoff($.projectDir,$.provider,$.sessionKey).last_shell_cwd;return dV(Z,$.projectDir)}async function dV($,Z){if(!$||$===Z||!cV($))return Z;let[J,Q]=await Promise.all([MZ($),MZ(Z)]);return J!==null&&J===Q?$:Z}async function K9($,Z,J,Q,q){let W=H.handoff.handoffInjectable($,Q).ok?H.handoff.readHandoff($,J,Q):void 0,z=await Iq(W,Z),Y=await KZ(Z,z),V=await H.presence.filesClaimedByOtherLiveSessions($,Z,J,Q),G=Y.filter((I)=>!V.has(I)),B=OZ(G,q.codePaths),K=CZ(G),U=G.filter((I)=>H.policy.isUnderCodePaths(I,q.codePaths)),_=H.commentPolicy.filterCommentTargets(U);return{turnBase:z,changedFiles:G,codeTargets:B,testTargets:K,commentTargets:_,pendingCredit:W?.pending_lesson_credit}}async function $Z($,Z,J,Q,q){if(!q.comments.enabled||q.comments.onViolation!=="followup")return[];let X=await K9($,Z,J,Q,q);if(X.commentTargets.length===0)return[];return H.commentPolicy.scanAddedComments(Z,X.commentTargets,q.comments.mode,X.turnBase)}async function Iq($,Z){if(!$?.turn_base_sha||!$.turn_base_root)return"HEAD";let J=await P(Z);return J!==null&&J===$.turn_base_root?$.turn_base_sha:"HEAD"}async function u($){let Z=await P($);if(Z===null)return null;let J=await w({command:["git","rev-parse","--short","HEAD"],cwd:Z});if(J.exitCode!==0)return null;let Q=J.stdout.trim();return Q.length>0?Q:null}function lV($,Z){return H.policy.forProvider($,Z.name)??[]}function _9($,Z){return[...H.policy.forProvider($,Z.name)??[],...Z.policyDefaults().blockedPatterns]}function iV($,Z){return $??Z.policyDefaults().minEffort}function jq($,Z,J,Q){return{provider:J.name,sessionKey:$.sessionKey,projectDir:$.projectDir,model:Q,effort:$.effort,allowedModels:lV(Z.subagents.allowedModels,J),blockedPatterns:_9(Z.subagents.blockedPatterns,J),minEffort:iV(Z.subagents.minEffort,J),requireModel:Z.subagents.requireModel,enforceAllowlist:Z.subagents.enforceAllowlist,blockParentFast:Z.subagents.blockParentFast,blockMode:Z.subagents.blockMode}}function Nq($){if(!$)return"";let Z=$.model??$.Model;return typeof Z==="string"?Z:""}var aV=6000;function rV($){if($.filePath===void 0)return!1;if($.event==="edit.after")return!0;return E8($.toolName)}function sV($){return $ instanceof Error?$.message:String($)}function $$($,Z,J,Q="unknown",q={}){try{E(nV(M($),"obs.jsonl"),{schema:"harness.observability.v1",provider:Q,kind:Z,level:"signal",ts:new Date().toISOString(),...q,attrs:J})}catch{}}function oV($){return $.event==="shell.before"||$.event==="mcp.before"}function tV($){if(!oV($))return;$$($.projectDir,"hook.enter",{event:$.event,toolName:$.toolName??"none",sessionKey:$.sessionKey},$.provider,{trace_id:H.observability.deriveTraceId($.sessionKey),session_id:$.sessionKey})}function eV($,Z,J){if(J.kind!=="deny"&&J.kind!=="ask")return;if($.event==="shell.before")return;H.observability.recordObs($.projectDir,e(Z),{provider:$.provider,kind:"policy.deny",sessionKey:$.sessionKey,attrs:{event:$.event,tool_name:$.toolName,permission:J.kind,rule:J.rule??"none",diagnostic:J.diagnostic??"none"}})}function $G($){return $!==null&&typeof $==="object"&&!Array.isArray($)?$:{}}async function ZG($,Z={}){let J=Z.readStdin??s9,Q=Z.now?Z.now():new Date,q={stdout:"{}",exitCode:0},W=(await J()).trim();if(!W)return $$(process.cwd(),"adapter.unrecognized",{reason:"empty-stdin"}),{event:null,decision:{kind:"abstain"},rendered:q};let z;try{z=JSON.parse(W)}catch{return $$(process.cwd(),"adapter.unrecognized",{reason:"invalid-json"}),{event:null,decision:{kind:"abstain"},rendered:q}}let Y=M9(z,h$);if(!Y.provider)return $$(process.cwd(),"adapter.unrecognized",{reason:"no-provider-match"}),{event:null,decision:{kind:"abstain"},rendered:q};if(Y.ambiguous)$$(process.cwd(),"adapter.ambiguous",{matched:Y.matchedNames});let V=Y.provider,G=V.toEvent($G(z));if(!G)return $$(process.cwd(),"adapter.unrecognized",{reason:"unrecognized-event",provider:V.name}),{event:null,decision:{kind:"abstain"},rendered:q};let B=V.capabilities();tV(G);try{let K=H.policy.loadPolicy(G.projectDir);if(G.model)H.subagentPolicy.upsertParentModelState(G.projectDir,G.sessionKey,{model:G.model},_9(K.subagents.blockedPatterns,V));H.presence.heartbeat(G.projectDir,{provider:G.provider,session:p$(G),...rV(G)?{file:G.filePath}:{},now:Q});let U=h$.flatMap((F)=>F.wiringTargets()),I=await $(G,{policy:K,capabilities:B,provider:V,now:Q,protectedPaths:U}),k=e8(I,G,B,{contextBudgetChars:aV});eV(G,K,k);let m=V.render(k,G);return{event:G,decision:k,rendered:m}}catch(K){$$(G.projectDir,"adapter.error",{provider:G.provider,event:G.event,message:sV(K)});let U={kind:"abstain"};return{event:G,decision:U,rendered:V.render(U,G)}}}async function Lq($){let Z=await ZG($);if(Z.rendered.stdout!==null){let J=Z.rendered.stdout;process.stdout.write(J.endsWith(`
162
162
  `)?J:`${J}
163
163
  `)}process.exit(Z.rendered.exitCode)}import{readFileSync as YG}from"node:fs";import{join as VG}from"node:path";var kI=["BLOCKED: identical validation fingerprint repeated — no progress between attempts.","TRIED: same gate failure signature as the previous stop loop.","NEED: change approach. Do not repeat the same fix. Inspect root cause, try a different path, or escalate with BLOCKED/TRIED/NEED."].join(`
164
164
  `);async function JG($){if(!$.passed||!H.rules.wantsGate($.root,$.policy.rules))return;H.rules.observeGate($.root,$.policy.rules,$.gate,{sha:await u($.shaRoot),sessionKey:$.sessionKey,at:new Date().toISOString()})}function QG($){H.observability.recordObs($.root,e($.policy),{provider:$.provider,kind:"gate.outcome",sessionKey:$.sessionKey,attrs:{gate:$.artifact.gate,passed:$.artifact.passed,exit_code:$.artifact.exitCode,duration_ms:$.artifact.durationMs,file_count:$.artifact.files.length,scoped_env:($.artifact.scopedEnv??[]).join(",")||"none",reused:$.reused}})}function qG($){H.observability.recordObs($.root,e($.policy),{provider:$.provider,kind:"gate.outcome",sessionKey:$.sessionKey,attrs:{gate:$.gate,deferred_to:$.holder,rule:"grind"}})}var XG=1e4;function WG($=process.env){let Z=Number($.TLC_TEST_GATE_LOCK_WAIT_MS);return Number.isFinite(Z)&&Z>0?Z:XG}async function zG($){let{pending:Z}=$;if(!Z||Z.gate!==$.gate||Z.ids.length===0)return;if(Z.sessionKey!==void 0&&Z.sessionKey!==$.sessionKey)return;await H.lesson.creditLessons($.root,Z.ids,$.passed?"helped":"neutral"),await H.handoff.patchHandoff($.root,$.provider,$.sessionKey,{slice:{pending_lesson_credit:void 0}})}async function ZZ($){let Z=[...$.command,...$.argvFiles],J=H.gate.computeInputsHash($.shaRoot,$.recordFiles,Z),Q=H.gate.cachedVerdict(H.gate.readLastGate($.root,$.sessionKey),$.gate,J),q;if(Q!==null)q=Q;else try{q=await H.gate.withGateLock($.root,$.provider,$.session,async()=>{let X=await o9($.shaRoot,$.command,$.argvFiles);return H.gate.writeLastGate({root:$.root,sessionKey:$.sessionKey,gate:$.gate,exitCode:X.exitCode,command:Z,files:$.recordFiles,durationMs:X.durationMs,output:X.output,...J.complete?{inputsHash:J.hash}:{}})},{waitMs:WG()})}catch(X){if(!(X instanceof H.gate.GateLockTimeoutError))throw X;let W=H.gate.describeHolder($.root)??"another session";return qG({...$,holder:W}),{kind:"deferred",holder:W}}return QG({...$,artifact:q,reused:Q!==null}),await JG({...$,gate:$.gate,passed:q.passed}),await zG({root:$.root,provider:$.provider,pending:$.pendingCredit,gate:$.gate,sessionKey:$.sessionKey,passed:q.passed}),{kind:"ran",artifact:q,reused:Q!==null}}var Dq=["push","pr-open","pr-merge"];async function GG($,Z){if($.command===void 0)return!1;let J={event:$.event,command:$.command};if(!Dq.some((q)=>H.rules.triggerMatches({kind:q},J)))return!1;if(!H.rules.mentionsGhApi($.command))return!0;let Q=await a$(Z);return Dq.some((q)=>H.rules.triggerMatches({kind:q},{...J,repoRemote:Q}))}function O9($,Z,J,Q){return[`BLOCKED: ${$} failed before shipping — a review or a deploy would have seen this next.`,`TRIED: ${Z.join(" ")}`,`NEED: fix the ${$} findings, then retry the commit/push/PR.`,"",J,"",Q.footer].join(`