@a-company/paradigm 5.37.4 → 5.37.7
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/ambient-76YMUA5Q.js +2 -0
- package/dist/ambient-WTLYUAQM.js +35 -0
- package/dist/{chunk-FILLU77P.js → chunk-3TR6LLXP.js} +2 -2
- package/dist/{chunk-WN74JUZA.js → chunk-3VF3CMCF.js} +40 -40
- package/dist/{chunk-22ISTMKI.js → chunk-46ZCEIF6.js} +1 -1
- package/dist/chunk-AGFPVSX5.js +14 -0
- package/dist/{chunk-4Q7XYPL4.js → chunk-BOYQAMGC.js} +3 -3
- package/dist/{chunk-D6ZXAI26.js → chunk-CHVQNRRT.js} +60 -20
- package/dist/{chunk-JOHAOLEC.js → chunk-G7XFK2GI.js} +4 -4
- package/dist/chunk-MQIG6SMF.js +3 -0
- package/dist/chunk-NEJ4ZLCY.js +14 -0
- package/dist/chunk-RLCH7DXQ.js +4 -0
- package/dist/{chunk-SXO7NC6A.js → chunk-SI6SV76D.js} +108 -23
- package/dist/{compliance-BPGQMQAX.js → compliance-WJINB5DM.js} +1 -1
- package/dist/doctor-QJ47XAUP.js +2 -0
- package/dist/{hooks-BNWRGACA.js → hooks-IG2GOAHP.js} +1 -1
- package/dist/index.js +4 -4
- package/dist/{init-EHVSM7YY.js → init-HIBRSVUB.js} +1 -1
- package/dist/mcp.js +1 -1
- package/dist/{migrate-YQG2FG3J.js → migrate-IBDE7VK4.js} +1 -1
- package/dist/{nomination-engine-KNSOAT4W.js → nomination-engine-EALA5MGI.js} +1 -1
- package/dist/notebook-loader-PXNRBBXD.js +2 -0
- package/dist/{promote-NJQDZBZA.js → promote-KU2ECEXX.js} +1 -1
- package/dist/reindex-FO5VMZVQ.js +2 -0
- package/dist/session-tracker-MWJAJA6Z.js +2 -0
- package/dist/session-work-log-PAKXOFGL.js +2 -0
- package/dist/session-work-log-ZP45TREI.js +2 -0
- package/dist/{setup-KPIMRZ4Q.js → setup-6SRJHDA7.js} +1 -1
- package/dist/{shift-RRNL6E4O.js → shift-CZMQWZWP.js} +2 -2
- package/dist/{switch-CTW4PDGI.js → switch-RXEXXIN7.js} +1 -1
- package/dist/tools-BZUAEUSQ.js +2 -0
- package/package.json +1 -1
- package/dist/ambient-GJAEXF7B.js +0 -35
- package/dist/chunk-4SCKMGTB.js +0 -9
- package/dist/chunk-UNHTQLYO.js +0 -9
- package/dist/chunk-UPFCBVXY.js +0 -3
- package/dist/chunk-VG7FN2TU.js +0 -4
- package/dist/doctor-G37LCXG5.js +0 -2
- package/dist/notebook-loader-CENTDDUJ.js +0 -2
- package/dist/reindex-O3WUCEE2.js +0 -2
- package/dist/session-tracker-D2CH7RJF.js +0 -2
- package/dist/session-work-log-BX434ZLK.js +0 -2
- package/dist/session-work-log-NQA7WJEC.js +0 -2
- package/dist/tools-ZHOHGFXD.js +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import*as e from'fs';import*as r from'path';import*as
|
|
2
|
+
import*as e from'fs';import*as r from'path';import*as S from'os';import {execSync}from'child_process';import o from'chalk';var y=`#!/bin/sh
|
|
3
3
|
# paradigm-common.sh \u2014 Shared compliance checks for Paradigm stop hooks
|
|
4
4
|
# Sourced by claude-code-stop.sh and cursor-stop.sh
|
|
5
5
|
#
|
|
@@ -831,7 +831,7 @@ _compliance_snapshot() {
|
|
|
831
831
|
"$_ts" "$VIOLATION_COUNT" "$_checks" >> "$_dir/compliance-history.jsonl" 2>/dev/null || true
|
|
832
832
|
}
|
|
833
833
|
_compliance_snapshot
|
|
834
|
-
`,
|
|
834
|
+
`,U=`#!/bin/sh
|
|
835
835
|
# Paradigm Claude Code Stop Hook (v2)
|
|
836
836
|
# Validates paradigm compliance before allowing the agent to finish.
|
|
837
837
|
# Installed by: paradigm hooks install --claude-code
|
|
@@ -907,6 +907,7 @@ if [ "$VIOLATION_COUNT" -gt 0 ]; then
|
|
|
907
907
|
echo " 6. paradigm_habits_check \u2014 evaluate habit compliance" >&2
|
|
908
908
|
echo "" >&2
|
|
909
909
|
echo "Tip: Set PARADIGM_AUTO_FIX=1 to auto-fix trivial violations (missing .purpose stubs, missing lore)." >&2
|
|
910
|
+
echo "Help: See .paradigm/docs/troubleshooting.md for step-by-step resolution guides." >&2
|
|
910
911
|
exit 2
|
|
911
912
|
fi
|
|
912
913
|
|
|
@@ -941,12 +942,17 @@ rm -f ".paradigm/.session-started"
|
|
|
941
942
|
rm -f ".paradigm/.purpose-paths"
|
|
942
943
|
rm -f ".paradigm/.orchestrated"
|
|
943
944
|
|
|
945
|
+
# Auto-run postflight learning if there are pending verdicts (fire-and-forget, non-blocking)
|
|
946
|
+
if command -v paradigm >/dev/null 2>&1 && [ -f ".paradigm/events/verdicts.jsonl" ]; then
|
|
947
|
+
paradigm ambient postflight 2>/dev/null &
|
|
948
|
+
fi
|
|
949
|
+
|
|
944
950
|
exit 0
|
|
945
|
-
`,
|
|
951
|
+
`,D=`#!/bin/sh
|
|
946
952
|
# Legacy afterFileEdit hook \u2014 replaced by paradigm-posttooluse.sh (postToolUse)
|
|
947
953
|
# Kept as a no-op because Claude Code expects the file to exist.
|
|
948
954
|
exit 0
|
|
949
|
-
`,
|
|
955
|
+
`,v=`#!/bin/sh
|
|
950
956
|
# Paradigm Claude Code Pre-Commit Hook
|
|
951
957
|
# Intercepts git commit Bash calls and auto-rebuilds the index.
|
|
952
958
|
# Installed by: paradigm hooks install --claude-code
|
|
@@ -991,7 +997,85 @@ done
|
|
|
991
997
|
|
|
992
998
|
# Never block \u2014 exit 0
|
|
993
999
|
exit 0
|
|
994
|
-
`,
|
|
1000
|
+
`,P=`#!/bin/sh
|
|
1001
|
+
# Paradigm Claude Code PreToolUse \u2014 Navigation Reminder
|
|
1002
|
+
# Fires before Glob/Grep tool calls to inject scan-index context and prompt
|
|
1003
|
+
# paradigm_navigate usage before broad file searches.
|
|
1004
|
+
# Installed by: paradigm hooks install --claude-code
|
|
1005
|
+
#
|
|
1006
|
+
# Hook type: PreToolUse (matcher: Glob|Grep)
|
|
1007
|
+
# Exit 0 = always allows (advisory only \u2014 never blocks)
|
|
1008
|
+
#
|
|
1009
|
+
# Advisory model: lightweight context injection that fires once per session.
|
|
1010
|
+
# Unlike a pure text reminder, this reads the scan-index $meta and surfaces
|
|
1011
|
+
# the symbol counts directly \u2014 agents can act on the context immediately
|
|
1012
|
+
# without a separate tool call.
|
|
1013
|
+
# Uses a session marker (.paradigm/.nav-reminded) to fire at most once.
|
|
1014
|
+
|
|
1015
|
+
# Read JSON from stdin (hook input)
|
|
1016
|
+
INPUT=$(cat)
|
|
1017
|
+
|
|
1018
|
+
# Extract cwd from input
|
|
1019
|
+
if command -v jq >/dev/null 2>&1; then
|
|
1020
|
+
CWD=$(echo "$INPUT" | jq -r '.cwd // empty' 2>/dev/null)
|
|
1021
|
+
else
|
|
1022
|
+
CWD=$(echo "$INPUT" | grep -o '"cwd"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*"cwd"[[:space:]]*:[[:space:]]*"//' | sed 's/"$//')
|
|
1023
|
+
fi
|
|
1024
|
+
|
|
1025
|
+
if [ -z "$CWD" ]; then
|
|
1026
|
+
CWD="$(pwd)"
|
|
1027
|
+
fi
|
|
1028
|
+
|
|
1029
|
+
# Not a paradigm project \u2014 pass
|
|
1030
|
+
if [ ! -d "$CWD/.paradigm" ]; then
|
|
1031
|
+
exit 0
|
|
1032
|
+
fi
|
|
1033
|
+
|
|
1034
|
+
# Only remind once per session
|
|
1035
|
+
MARKER="$CWD/.paradigm/.nav-reminded"
|
|
1036
|
+
if [ -f "$MARKER" ]; then
|
|
1037
|
+
exit 0
|
|
1038
|
+
fi
|
|
1039
|
+
|
|
1040
|
+
# Extract tool name to check we're in a search/read context
|
|
1041
|
+
if command -v jq >/dev/null 2>&1; then
|
|
1042
|
+
TOOL_NAME=$(echo "$INPUT" | jq -r '.tool_name // empty' 2>/dev/null)
|
|
1043
|
+
else
|
|
1044
|
+
TOOL_NAME=$(echo "$INPUT" | grep -o '"tool_name"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"tool_name"[[:space:]]*:[[:space:]]*"//' | sed 's/"$//')
|
|
1045
|
+
fi
|
|
1046
|
+
|
|
1047
|
+
# Only fire for broad exploration tools (Glob/Grep) \u2014 not targeted Read calls
|
|
1048
|
+
case "$TOOL_NAME" in
|
|
1049
|
+
Glob|Grep) ;;
|
|
1050
|
+
*) exit 0 ;;
|
|
1051
|
+
esac
|
|
1052
|
+
|
|
1053
|
+
# Mark as reminded so this only fires once per session
|
|
1054
|
+
touch "$MARKER" 2>/dev/null
|
|
1055
|
+
|
|
1056
|
+
# Read scan-index $meta for symbol counts (optional \u2014 graceful fallback)
|
|
1057
|
+
SCAN_INDEX="$CWD/.paradigm/scan-index.json"
|
|
1058
|
+
SYMBOL_SUMMARY=""
|
|
1059
|
+
if [ -f "$SCAN_INDEX" ] && command -v jq >/dev/null 2>&1; then
|
|
1060
|
+
COMP_COUNT=$(jq '(.components // {}) | length' "$SCAN_INDEX" 2>/dev/null)
|
|
1061
|
+
FEAT_COUNT=$(jq '(.features // {}) | length' "$SCAN_INDEX" 2>/dev/null)
|
|
1062
|
+
FLOW_COUNT=$(jq '(.flows // {}) | length' "$SCAN_INDEX" 2>/dev/null)
|
|
1063
|
+
GATE_COUNT=$(jq '(.gates // {}) | length' "$SCAN_INDEX" 2>/dev/null)
|
|
1064
|
+
if [ -n "$COMP_COUNT" ] && [ -n "$FEAT_COUNT" ]; then
|
|
1065
|
+
SYMBOL_SUMMARY=" ($COMP_COUNT components, $FEAT_COUNT features, $FLOW_COUNT flows, $GATE_COUNT gates indexed)"
|
|
1066
|
+
fi
|
|
1067
|
+
fi
|
|
1068
|
+
|
|
1069
|
+
# Emit context injection (non-blocking)
|
|
1070
|
+
echo "" >&2
|
|
1071
|
+
echo "[paradigm] Context available \u2014 use paradigm_navigate before searching.$SYMBOL_SUMMARY" >&2
|
|
1072
|
+
echo " paradigm_navigate({ intent: \\"context\\", task: \\"<your task>\\" })" >&2
|
|
1073
|
+
echo " Returns relevant .purpose files, symbols, and file paths \u2014 skips blind Glob/Grep." >&2
|
|
1074
|
+
echo " Scan index: $SCAN_INDEX" >&2
|
|
1075
|
+
echo " Navigator: $CWD/.paradigm/navigator.yaml" >&2
|
|
1076
|
+
|
|
1077
|
+
exit 0
|
|
1078
|
+
`,b=`#!/bin/sh
|
|
995
1079
|
# Paradigm Cursor Session Start Hook
|
|
996
1080
|
# Fires before the agent does anything \u2014 injects additional_context
|
|
997
1081
|
# that acts as a deterministic system prompt (not subject to context compaction).
|
|
@@ -1091,7 +1175,7 @@ fi
|
|
|
1091
1175
|
printf '{"additional_context":"%s","continue":true}\\n' "$CONTEXT"
|
|
1092
1176
|
|
|
1093
1177
|
exit 0
|
|
1094
|
-
`,
|
|
1178
|
+
`,L=`#!/bin/sh
|
|
1095
1179
|
# Paradigm Cursor Stop Hook (v2)
|
|
1096
1180
|
# Validates paradigm compliance before allowing the agent to finish.
|
|
1097
1181
|
# Installed by: paradigm hooks install --cursor
|
|
@@ -1182,6 +1266,7 @@ if [ "$VIOLATION_COUNT" -gt 0 ]; then
|
|
|
1182
1266
|
echo " 6. paradigm_habits_check \u2014 evaluate habit compliance" >&2
|
|
1183
1267
|
echo "" >&2
|
|
1184
1268
|
echo "Tip: Set PARADIGM_AUTO_FIX=1 to auto-fix trivial violations (missing .purpose stubs, missing lore)." >&2
|
|
1269
|
+
echo "Help: See .paradigm/docs/troubleshooting.md for step-by-step resolution guides." >&2
|
|
1185
1270
|
|
|
1186
1271
|
# Output followup_message JSON to stdout for Cursor's compliance loop.
|
|
1187
1272
|
# Cursor auto-submits this as the next user message, creating a retry loop.
|
|
@@ -1224,11 +1309,11 @@ rm -f ".paradigm/.purpose-paths"
|
|
|
1224
1309
|
rm -f ".paradigm/.orchestrated"
|
|
1225
1310
|
|
|
1226
1311
|
exit 0
|
|
1227
|
-
`,
|
|
1312
|
+
`,w=`#!/bin/sh
|
|
1228
1313
|
# Legacy afterFileEdit hook \u2014 replaced by paradigm-posttooluse.sh (postToolUse)
|
|
1229
1314
|
# Kept as a no-op because Cursor expects the file to exist.
|
|
1230
1315
|
exit 0
|
|
1231
|
-
`,
|
|
1316
|
+
`,x=`#!/bin/sh
|
|
1232
1317
|
# Paradigm Cursor Pre-Commit Hook
|
|
1233
1318
|
# Intercepts git commit shell executions and auto-rebuilds the index.
|
|
1234
1319
|
# Installed by: paradigm hooks install --cursor
|
|
@@ -1273,7 +1358,7 @@ done
|
|
|
1273
1358
|
|
|
1274
1359
|
# Never block \u2014 exit 0
|
|
1275
1360
|
exit 0
|
|
1276
|
-
`,
|
|
1361
|
+
`,M=`#!/bin/sh
|
|
1277
1362
|
# Paradigm Cursor PreToolUse Hook \u2014 Graduated Blocking
|
|
1278
1363
|
# Fires BEFORE the agent calls Edit or Write.
|
|
1279
1364
|
# Uses graduated enforcement based on uncovered source edits.
|
|
@@ -1418,7 +1503,7 @@ else
|
|
|
1418
1503
|
echo " Then retry your edit." >&2
|
|
1419
1504
|
exit 2
|
|
1420
1505
|
fi
|
|
1421
|
-
`,
|
|
1506
|
+
`,F=`#!/bin/sh
|
|
1422
1507
|
# Paradigm Cursor PostToolUse Hook \u2014 Advisory Feedback
|
|
1423
1508
|
# Fires AFTER the agent calls Edit or Write.
|
|
1424
1509
|
# Tracks modified source files and outputs advisory the agent can see.
|
|
@@ -1542,9 +1627,9 @@ if [ "$PENDING_COUNT" -ge 30 ]; then
|
|
|
1542
1627
|
fi
|
|
1543
1628
|
|
|
1544
1629
|
exit 0
|
|
1545
|
-
`;function
|
|
1546
|
-
`,"utf8"),h.push("settings.json hooks"));}}catch{}return {cleaned:h.length>0,removed:h}}function
|
|
1547
|
-
`)[0]||"unknown error"}`}finally{try{e.unlinkSync(c);}catch{}}}catch{return null}}var
|
|
1630
|
+
`;function H(){try{let i=r.join(S.homedir(),".claude","settings.json");if(!e.existsSync(i))return {active:!1};if(!JSON.parse(e.readFileSync(i,"utf8")).enabledPlugins?.["paradigm@a-paradigm"])return {active:!1};let d=r.join(S.homedir(),".claude","plugins","cache","a-paradigm","paradigm");if(!e.existsSync(d))return {active:!1};let a=e.readdirSync(d).filter(s=>e.statSync(r.join(d,s)).isDirectory()).sort().reverse();if(a.length===0)return {active:!1};let p=r.join(d,a[0]),l=r.join(p,"hooks","hooks.json");return e.existsSync(l)?{active:!0,cacheVersion:a[0]}:{active:!1}}catch{return {active:false}}}function W(){try{let i=H();if(!i.active||!i.cacheVersion)return {compatible:!0};let h=r.join(S.homedir(),".claude","plugins","cache","a-paradigm","paradigm",i.cacheVersion,"hooks.json");if(!e.existsSync(h))return {compatible:!0};let d=JSON.parse(e.readFileSync(h,"utf8")).compatibleVersions;if(!d)return {compatible:!0};let a=q();if(!a)return {compatible:!0};let p=d.split(/\s+/);for(let l of p){let s=l.match(/^(>=?|<=?)\s*(\d+\.\d+\.\d+)/);if(!s)continue;let[,t,n]=s,f=J(a,n);if(t===">="&&f<0)return {compatible:!1,message:`Plugin requires paradigm ${d}, current: ${a}`};if(t===">"&&f<=0)return {compatible:!1,message:`Plugin requires paradigm ${d}, current: ${a}`};if(t==="<="&&f>0)return {compatible:!1,message:`Plugin requires paradigm ${d}, current: ${a}`};if(t==="<"&&f>=0)return {compatible:!1,message:`Plugin requires paradigm ${d}, current: ${a}`}}return {compatible:!0}}catch{return {compatible:true}}}function q(){try{let i=r.join(r.dirname(new URL(import.meta.url).pathname),"..","..","package.json");return JSON.parse(e.readFileSync(i,"utf8")).version||null}catch{return null}}function J(i,h){let c=i.split(".").map(Number),d=h.split(".").map(Number);for(let a=0;a<3;a++){if((c[a]||0)<(d[a]||0))return -1;if((c[a]||0)>(d[a]||0))return 1}return 0}function B(i){let h=[],c=r.join(i,".claude","hooks");if(e.existsSync(c)){for(let a of ["paradigm-common.sh","paradigm-stop.sh","paradigm-precommit.sh","paradigm-postwrite.sh","paradigm-navigate-remind.sh"]){let p=r.join(c,a);e.existsSync(p)&&(e.unlinkSync(p),h.push(a));}try{e.readdirSync(c).length===0&&e.rmdirSync(c);}catch{}}let d=r.join(i,".claude","settings.json");if(e.existsSync(d))try{let a=JSON.parse(e.readFileSync(d,"utf8")),p=a.hooks;if(p){let l=!1;for(let[s,t]of Object.entries(p)){if(!Array.isArray(t))continue;let n=t.filter(f=>!JSON.stringify(f).includes("paradigm-"));n.length!==t.length&&(l=!0,n.length===0?delete p[s]:p[s]=n);}l&&(Object.keys(p).length===0?delete a.hooks:a.hooks=p,e.writeFileSync(d,JSON.stringify(a,null,2)+`
|
|
1631
|
+
`,"utf8"),h.push("settings.json hooks"));}}catch{}return {cleaned:h.length>0,removed:h}}function K(i,h){try{let c=r.join(S.tmpdir(),`paradigm-hook-validate-${Date.now()}.sh`);e.writeFileSync(c,i,"utf8");try{return execSync(`bash -n "${c}" 2>&1`,{encoding:"utf-8"}),null}catch(d){return `${h}: bash syntax error \u2014 ${d.message?.split(`
|
|
1632
|
+
`)[0]||"unknown error"}`}finally{try{e.unlinkSync(c);}catch{}}}catch{return null}}var G=`#!/bin/sh
|
|
1548
1633
|
# Paradigm post-commit hook - captures history from commits
|
|
1549
1634
|
# Installed by: paradigm hooks install
|
|
1550
1635
|
|
|
@@ -1628,7 +1713,7 @@ if [ -n "$SYMBOLS" ] && [ -d ".paradigm/history" ]; then
|
|
|
1628
1713
|
|
|
1629
1714
|
echo "[paradigm] History entry $ID recorded"
|
|
1630
1715
|
fi
|
|
1631
|
-
`,
|
|
1716
|
+
`,Y=`#!/bin/sh
|
|
1632
1717
|
# Paradigm pre-push hook - reindex history before pushing
|
|
1633
1718
|
# Installed by: paradigm hooks install
|
|
1634
1719
|
|
|
@@ -1636,25 +1721,25 @@ if [ -d ".paradigm/history" ] && [ -f ".paradigm/history/log.jsonl" ]; then
|
|
|
1636
1721
|
echo "[paradigm] Reindexing history..."
|
|
1637
1722
|
npx paradigm history reindex 2>/dev/null || true
|
|
1638
1723
|
fi
|
|
1639
|
-
`;async function
|
|
1724
|
+
`;async function re(i={}){let h=process.cwd(),c=i.dryRun||false;c&&console.log(o.cyan(`
|
|
1640
1725
|
[dry-run] Showing what would be installed:
|
|
1641
|
-
`));let d=i.claudeCode&&!i.postCommit&&!i.prePush&&!i.cursor,a=i.cursor&&!i.postCommit&&!i.prePush&&!i.claudeCode;if(!c){let s=[{name:"post-commit",content:
|
|
1726
|
+
`));let d=i.claudeCode&&!i.postCommit&&!i.prePush&&!i.cursor,a=i.cursor&&!i.postCommit&&!i.prePush&&!i.claudeCode;if(!c){let s=[{name:"post-commit",content:G},{name:"pre-push",content:Y},{name:"paradigm-common",content:y},{name:"claude-code-stop",content:U},{name:"claude-code-precommit",content:v},{name:"claude-code-postwrite",content:D},{name:"claude-code-navigate-remind",content:P},{name:"cursor-session-start",content:b},{name:"cursor-stop",content:L},{name:"cursor-precommit",content:x},{name:"cursor-postwrite",content:w},{name:"cursor-pretooluse",content:M},{name:"cursor-posttooluse",content:F}];for(let t of s){let n=K(t.content,t.name);if(n){console.log(o.red(`Hook syntax error: ${n}`)),console.log(o.gray("Aborting installation. Fix the hook script and try again."));return}}}let p=W();if(p.compatible||(console.log(o.yellow(`
|
|
1642
1727
|
\u26A0 ${p.message}`)),console.log(o.gray(` Hook installation will continue, but behavior may differ from plugin expectations.
|
|
1643
|
-
`))),!d&&!a){let s=r.join(h,".git");if(!e.existsSync(s)){console.log(o.red("Not a git repository."));return}let t=r.join(s,"hooks"),n=!i.postCommit&&!i.prePush&&!i.claudeCode,f=[];if(n||i.postCommit){let u=r.join(t,"post-commit");if(c){let
|
|
1728
|
+
`))),!d&&!a){let s=r.join(h,".git");if(!e.existsSync(s)){console.log(o.red("Not a git repository."));return}let t=r.join(s,"hooks"),n=!i.postCommit&&!i.prePush&&!i.claudeCode,f=[];if(n||i.postCommit){let u=r.join(t,"post-commit");if(c){let _=e.existsSync(u)&&!i.force?"skip (exists)":"install";console.log(o.gray(` post-commit: ${_} \u2192 ${u}`));}else e.existsSync(u)&&!i.force?e.readFileSync(u,"utf8").includes("paradigm")?console.log(o.gray("post-commit hook already installed by paradigm")):console.log(o.yellow("post-commit hook exists. Use --force to overwrite.")):(e.mkdirSync(t,{recursive:true}),e.writeFileSync(u,G),e.chmodSync(u,"755"),f.push("post-commit"));}if(n||i.prePush){let u=r.join(t,"pre-push");if(c){let _=e.existsSync(u)&&!i.force?"skip (exists)":"install";console.log(o.gray(` pre-push: ${_} \u2192 ${u}`));}else e.existsSync(u)&&!i.force?e.readFileSync(u,"utf8").includes("paradigm")?console.log(o.gray("pre-push hook already installed by paradigm")):console.log(o.yellow("pre-push hook exists. Use --force to overwrite.")):(e.mkdirSync(t,{recursive:true}),e.writeFileSync(u,Y),e.chmodSync(u,"755"),f.push("pre-push"));}!c&&f.length>0&&console.log(o.green(`Git hooks installed: ${f.join(", ")}`));let O=r.join(h,".paradigm/history");!e.existsSync(O)&&!c&&console.log(o.gray("Tip: Run `paradigm history init` to initialize history tracking"));}let l=!i.postCommit&&!i.prePush&&!i.claudeCode&&!i.cursor;(l||i.claudeCode)&&(c?(console.log(o.gray(" Claude Code hooks: would install paradigm-stop.sh, paradigm-precommit.sh, paradigm-postwrite.sh, paradigm-navigate-remind.sh")),console.log(o.gray(` \u2192 ${r.join(h,".claude","hooks")}/`)),console.log(o.gray(" \u2192 Update .claude/settings.json with hook configuration"))):await z(h,i.force)),(l||i.cursor)&&(c?(console.log(o.gray(" Cursor hooks: would install paradigm-session-start.sh, paradigm-stop.sh, paradigm-precommit.sh, paradigm-postwrite.sh, paradigm-pretooluse.sh, paradigm-posttooluse.sh")),console.log(o.gray(` \u2192 ${r.join(h,".cursor","hooks")}/`)),console.log(o.gray(" \u2192 Update .cursor/hooks.json"))):await Q(h,i.force)),c&&console.log(o.cyan(`
|
|
1644
1729
|
[dry-run] No changes made.
|
|
1645
|
-
`));}async function
|
|
1646
|
-
`,"utf8"),a.length>0&&console.log(o.green(`Claude Code hooks installed: ${a.join(", ")}`)),console.log(o.green("Claude Code settings.json updated with hook configuration"));}async function
|
|
1647
|
-
`,"utf8"),d.length>0&&console.log(o.green(`Cursor hooks installed: ${d.join(", ")}`)),console.log(o.green("Cursor hooks.json updated with hook configuration"));}async function
|
|
1730
|
+
`));}async function z(i,h){let c=H();if(c.active){console.log(o.cyan(` Paradigm plugin v${c.cacheVersion} is active \u2014 hooks are managed by the plugin.`));let{cleaned:g,removed:E}=B(i);console.log(g?o.green(` Cleaned up stale project hooks: ${E.join(", ")}`):o.gray(" No stale project hooks to clean up.")),console.log(o.gray(" Plugin hooks auto-update with each session \u2014 no manual install needed."));return}let d=r.join(i,".claude","hooks");e.mkdirSync(d,{recursive:true});let a=[],p=r.join(d,"paradigm-common.sh");e.writeFileSync(p,y,"utf8"),e.chmodSync(p,"755");let l=[{name:"paradigm-stop.sh",content:U},{name:"paradigm-precommit.sh",content:v},{name:"paradigm-postwrite.sh",content:D},{name:"paradigm-navigate-remind.sh",content:P}];for(let g of l){let E=r.join(d,g.name);if(e.existsSync(E)&&!h){console.log(o.gray(` ${g.name}: already installed`));continue}e.writeFileSync(E,g.content,"utf8"),e.chmodSync(E,"755"),a.push(g.name);}let s=r.join(i,".claude","settings.json"),t={};if(e.existsSync(s))try{t=JSON.parse(e.readFileSync(s,"utf8"));}catch{}let n=t.hooks||{},f={hooks:[{type:"command",command:'bash "$CLAUDE_PROJECT_DIR/.claude/hooks/paradigm-stop.sh"',timeout:10}]},O={matcher:"Bash",hooks:[{type:"command",command:'bash "$CLAUDE_PROJECT_DIR/.claude/hooks/paradigm-precommit.sh"',timeout:30}]},u=n.Stop||[];u.some(g=>JSON.stringify(g).includes("paradigm-stop.sh"))||u.push(f),n.Stop=u;let $=n.PreToolUse||[];$.some(g=>JSON.stringify(g).includes("paradigm-precommit.sh"))||$.push(O),n.PreToolUse=$;let V={matcher:"Glob|Grep",hooks:[{type:"command",command:'bash "$CLAUDE_PROJECT_DIR/.claude/hooks/paradigm-navigate-remind.sh"',timeout:5}]};$.some(g=>JSON.stringify(g).includes("paradigm-navigate-remind.sh"))||$.push(V),n.PreToolUse=$;let j={matcher:"Edit,Write",hooks:[{type:"command",command:'bash "$CLAUDE_PROJECT_DIR/.claude/hooks/paradigm-postwrite.sh"',timeout:5}]},T=n.PostToolUse||[];T.some(g=>JSON.stringify(g).includes("paradigm-postwrite.sh"))||T.push(j),n.PostToolUse=T,t.hooks=n,e.writeFileSync(s,JSON.stringify(t,null,2)+`
|
|
1731
|
+
`,"utf8"),a.length>0&&console.log(o.green(`Claude Code hooks installed: ${a.join(", ")}`)),console.log(o.green("Claude Code settings.json updated with hook configuration"));}async function Q(i,h){let c=r.join(i,".cursor","hooks");e.mkdirSync(c,{recursive:true});let d=[],a=r.join(c,"paradigm-common.sh");e.writeFileSync(a,y,"utf8"),e.chmodSync(a,"755");let p=[{name:"paradigm-session-start.sh",content:b},{name:"paradigm-stop.sh",content:L},{name:"paradigm-precommit.sh",content:x},{name:"paradigm-postwrite.sh",content:w},{name:"paradigm-pretooluse.sh",content:M},{name:"paradigm-posttooluse.sh",content:F}];for(let m of p){let A=r.join(c,m.name);if(e.existsSync(A)&&!h){console.log(o.gray(` ${m.name}: already installed (Cursor)`));continue}e.writeFileSync(A,m.content,"utf8"),e.chmodSync(A,"755"),d.push(m.name);}let l=r.join(i,".cursor","hooks.json"),s={};if(e.existsSync(l))try{s=JSON.parse(e.readFileSync(l,"utf8"));}catch{}s.version=1;let t=s.hooks||{},n={command:".cursor/hooks/paradigm-session-start.sh",timeout:5},f={command:".cursor/hooks/paradigm-stop.sh",timeout:10,loop_limit:3},O={command:".cursor/hooks/paradigm-postwrite.sh",timeout:5},u={command:".cursor/hooks/paradigm-precommit.sh",matcher:"git commit",timeout:30},_=t.sessionStart||[];_.some(m=>JSON.stringify(m).includes("paradigm-session-start.sh"))||_.push(n),t.sessionStart=_;let I=t.stop||[];I.some(m=>JSON.stringify(m).includes("paradigm-stop.sh"))||I.push(f),t.stop=I;let N=t.afterFileEdit||[];N.some(m=>JSON.stringify(m).includes("paradigm-postwrite.sh"))||N.push(O),t.afterFileEdit=N;let T={command:".cursor/hooks/paradigm-pretooluse.sh",matcher:"Edit|Write",timeout:5},C=t.preToolUse||[];C.some(m=>JSON.stringify(m).includes("paradigm-pretooluse.sh"))||C.push(T),t.preToolUse=C;let E={command:".cursor/hooks/paradigm-posttooluse.sh",matcher:"Edit|Write",timeout:5},k=t.postToolUse||[];k.some(m=>JSON.stringify(m).includes("paradigm-posttooluse.sh"))||k.push(E),t.postToolUse=k;let R=t.beforeShellExecution||[];R.some(m=>JSON.stringify(m).includes("paradigm-precommit.sh"))||R.push(u),t.beforeShellExecution=R,s.hooks=t,e.writeFileSync(l,JSON.stringify(s,null,2)+`
|
|
1732
|
+
`,"utf8"),d.length>0&&console.log(o.green(`Cursor hooks installed: ${d.join(", ")}`)),console.log(o.green("Cursor hooks.json updated with hook configuration"));}async function ae(i={}){let h=process.cwd(),c=i.dryRun||false;if(c&&console.log(o.cyan(`
|
|
1648
1733
|
[dry-run] Showing what would be removed:
|
|
1649
1734
|
`)),!i.cursor){let d=r.join(h,".git");if(!e.existsSync(d)){console.log(o.red("Not a git repository."));return}let a=r.join(d,"hooks"),p=[];for(let l of ["post-commit","pre-push"]){let s=r.join(a,l);e.existsSync(s)&&e.readFileSync(s,"utf8").includes("paradigm")&&(c?console.log(o.gray(` Would remove: ${s}`)):e.unlinkSync(s),p.push(l));}c?p.length===0&&console.log(o.gray(" No paradigm git hooks to remove")):p.length>0?console.log(o.green(`Git hooks removed: ${p.join(", ")}`)):console.log(o.gray("No paradigm git hooks found to remove"));}if(i.cursor){let d=r.join(h,".cursor","hooks"),a=[];for(let l of ["paradigm-session-start.sh","paradigm-stop.sh","paradigm-precommit.sh","paradigm-postwrite.sh","paradigm-pretooluse.sh","paradigm-posttooluse.sh"]){let s=r.join(d,l);e.existsSync(s)&&(c?console.log(o.gray(` Would remove: ${s}`)):e.unlinkSync(s),a.push(l));}let p=r.join(h,".cursor","hooks.json");if(e.existsSync(p))if(c)console.log(o.gray(` Would clean paradigm entries from: ${p}`));else try{let l=JSON.parse(e.readFileSync(p,"utf8")),s=l.hooks||{};for(let t of ["sessionStart","stop","afterFileEdit","beforeShellExecution","preToolUse","postToolUse"])Array.isArray(s[t])&&(s[t]=s[t].filter(n=>!JSON.stringify(n).includes("paradigm-")),s[t].length===0&&delete s[t]);l.hooks=s,e.writeFileSync(p,JSON.stringify(l,null,2)+`
|
|
1650
1735
|
`,"utf8");}catch{}c?a.length===0&&console.log(o.gray(" No paradigm Cursor hooks to remove")):a.length>0?console.log(o.green(`Cursor hooks removed: ${a.join(", ")}`)):console.log(o.gray("No paradigm Cursor hooks found to remove"));}c&&console.log(o.cyan(`
|
|
1651
1736
|
[dry-run] No changes made.
|
|
1652
|
-
`));}async function
|
|
1737
|
+
`));}async function ne(){let i=process.cwd(),h=r.join(i,".git");if(e.existsSync(h)){console.log(o.magenta(`
|
|
1653
1738
|
Git Hooks Status
|
|
1654
1739
|
`));let l=r.join(h,"hooks"),s=["post-commit","pre-push"];for(let n of s){let f=r.join(l,n);e.existsSync(f)?e.readFileSync(f,"utf8").includes("paradigm")?console.log(o.green(` ${n}: installed (paradigm)`)):console.log(o.yellow(` ${n}: exists (other)`)):console.log(o.gray(` ${n}: not installed`));}console.log();let t=r.join(i,".paradigm/history");if(e.existsSync(t)){let n=r.join(t,"log.jsonl");if(e.existsSync(n)){let O=e.readFileSync(n,"utf8").split(`
|
|
1655
1740
|
`).filter(u=>u.trim()).length;console.log(o.white(` History entries: ${O}`));}}else console.log(o.gray(" History: not initialized")),console.log(o.gray(" Run `paradigm history init` to enable"));}else console.log(o.gray(`
|
|
1656
1741
|
Not a git repository (git hooks N/A)
|
|
1657
1742
|
`));console.log(o.magenta(` Claude Code Hooks Status
|
|
1658
|
-
`));let c=
|
|
1743
|
+
`));let c=H();if(c.active){console.log(o.cyan(` Plugin: paradigm v${c.cacheVersion} (active)`)),console.log(o.green(" Hooks are managed by the plugin \u2014 auto-updates with each session."));let l=r.join(i,".claude","hooks"),s=[];for(let f of ["paradigm-common.sh","paradigm-stop.sh","paradigm-precommit.sh","paradigm-postwrite.sh","paradigm-navigate-remind.sh"])e.existsSync(r.join(l,f))&&s.push(f);let t=r.join(i,".claude","settings.json"),n=false;if(e.existsSync(t))try{let f=JSON.parse(e.readFileSync(t,"utf8"));n=JSON.stringify(f.hooks||{}).includes("paradigm-");}catch{}(s.length>0||n)&&(console.log(o.yellow(` WARNING: Stale project hooks detected (${s.join(", ")}${n?", settings.json entries":""})`)),console.log(o.yellow(" These shadow the plugin hooks and may run outdated logic.")),console.log(o.gray(" Run `paradigm hooks install --claude-code` to clean them up.")));}else {console.log(o.gray(" Plugin: not active (using project-level hooks)"));let l=r.join(i,".claude","hooks"),s=["paradigm-stop.sh","paradigm-precommit.sh","paradigm-postwrite.sh","paradigm-navigate-remind.sh"];for(let n of s){let f=r.join(l,n);e.existsSync(f)?console.log(o.green(` ${n}: installed`)):console.log(o.gray(` ${n}: not installed`));}let t=r.join(i,".claude","settings.json");if(e.existsSync(t))try{let f=JSON.parse(e.readFileSync(t,"utf8")).hooks||{},O=JSON.stringify(f.Stop||[]).includes("paradigm-stop.sh"),u=JSON.stringify(f.PreToolUse||[]).includes("paradigm-precommit.sh"),_=JSON.stringify(f.PostToolUse||[]).includes("paradigm-postwrite.sh");console.log(o.gray(` settings.json Stop hook: ${O?"configured":"missing"}`)),console.log(o.gray(` settings.json PreToolUse hook: ${u?"configured":"missing"}`)),console.log(o.gray(` settings.json PostToolUse hook: ${_?"configured":"missing"}`));}catch{console.log(o.yellow(" settings.json: parse error"));}else console.log(o.gray(" settings.json: not found"));}console.log(o.magenta(`
|
|
1659
1744
|
Cursor Hooks Status
|
|
1660
|
-
`));let d=r.join(i,".cursor","hooks"),a=["paradigm-session-start.sh","paradigm-stop.sh","paradigm-precommit.sh","paradigm-postwrite.sh","paradigm-pretooluse.sh","paradigm-posttooluse.sh"];for(let l of a){let s=r.join(d,l);e.existsSync(s)?console.log(o.green(` ${l}: installed`)):console.log(o.gray(` ${l}: not installed`));}let p=r.join(i,".cursor","hooks.json");if(e.existsSync(p))try{let s=JSON.parse(e.readFileSync(p,"utf8")).hooks||{},t=JSON.stringify(s.sessionStart||[]).includes("paradigm-session-start.sh"),n=JSON.stringify(s.stop||[]).includes("paradigm-stop.sh"),f=JSON.stringify(s.afterFileEdit||[]).includes("paradigm-postwrite.sh"),O=JSON.stringify(s.beforeShellExecution||[]).includes("paradigm-precommit.sh"),u=JSON.stringify(s.preToolUse||[]).includes("paradigm-pretooluse.sh"),
|
|
1745
|
+
`));let d=r.join(i,".cursor","hooks"),a=["paradigm-session-start.sh","paradigm-stop.sh","paradigm-precommit.sh","paradigm-postwrite.sh","paradigm-pretooluse.sh","paradigm-posttooluse.sh"];for(let l of a){let s=r.join(d,l);e.existsSync(s)?console.log(o.green(` ${l}: installed`)):console.log(o.gray(` ${l}: not installed`));}let p=r.join(i,".cursor","hooks.json");if(e.existsSync(p))try{let s=JSON.parse(e.readFileSync(p,"utf8")).hooks||{},t=JSON.stringify(s.sessionStart||[]).includes("paradigm-session-start.sh"),n=JSON.stringify(s.stop||[]).includes("paradigm-stop.sh"),f=JSON.stringify(s.afterFileEdit||[]).includes("paradigm-postwrite.sh"),O=JSON.stringify(s.beforeShellExecution||[]).includes("paradigm-precommit.sh"),u=JSON.stringify(s.preToolUse||[]).includes("paradigm-pretooluse.sh"),_=JSON.stringify(s.postToolUse||[]).includes("paradigm-posttooluse.sh");console.log(o.gray(` hooks.json sessionStart: ${t?"configured":"missing"}`)),console.log(o.gray(` hooks.json stop: ${n?"configured":"missing"}`)),console.log(o.gray(` hooks.json afterFileEdit: ${f?"configured":"missing"}`)),console.log(o.gray(` hooks.json preToolUse: ${u?"configured":"missing"}`)),console.log(o.gray(` hooks.json postToolUse: ${_?"configured":"missing"}`)),console.log(o.gray(` hooks.json beforeShellExecution: ${O?"configured":"missing"}`));}catch{console.log(o.yellow(" hooks.json: parse error"));}else console.log(o.gray(" hooks.json: not found"));console.log();}export{re as a,ae as b,ne as c};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {a,e,d}from'./chunk-QO7YPQXC.js';import'./chunk-5TAVYPOV.js';import*as c from'fs';import*as p from'path';import {execSync}from'child_process';import n from'chalk';import*as w from'js-yaml';function R(s){return s.match(/(?:^|\s)((?:\/|\.\/|[a-zA-Z0-9_-]+\/)[^\s,;:'"]+\.[a-zA-Z]{1,10})\b/)?.[1]}async function $(s,l){try{let a$1=a(s),f=[];try{f=execSync("git diff --name-only HEAD",{cwd:s,encoding:"utf8",timeout:5e3}).trim().split(`
|
|
3
3
|
`).filter(Boolean);}catch{}let i;try{i=execSync("git status --porcelain",{cwd:s,encoding:"utf8",timeout:5e3}).trim()==="";}catch{}let u=p.join(s,"portal.yaml"),g=!1;if(c.existsSync(u))try{let t=c.readFileSync(u,"utf8"),e=w.load(t);g=e?.routes!=null&&Object.keys(e.routes).length>0;}catch{}let r=e({toolsCalled:[],filesModified:f,symbolsTouched:[],loreRecorded:!1,hasPortalRoutes:g,taskAddsRoutes:!1,gitClean:i}),o=d(a$1,l,r),d$1=0;if(o.evaluations.length>0)try{let t=p.join(s,".paradigm","sentinel");if(c.existsSync(t)){let{SentinelStorage:e}=await import('./dist-VGFSP3XM.js'),m=new e(t);for(let b of o.evaluations)m.recordPracticeEvent({habitId:b.habit.id,habitCategory:b.habit.category,result:b.result,engineer:"agent",sessionId:`cli-${Date.now().toString(36)}`,symbolsTouched:[],filesModified:f,notes:b.reason}),d$1++;}}catch{}let h=p.join(s,".paradigm",".habits-blocking");try{if(l==="on-stop"&&o.blocksCompletion){let t=o.evaluations.filter(e=>e.result==="skipped"&&e.habit.severity==="block").map(e=>`${e.habit.name}: ${e.reason}`);c.writeFileSync(h,t.join(`
|
|
4
|
-
`),"utf8");}else l==="on-stop"&&c.existsSync(h)&&c.unlinkSync(h);}catch{}return {trigger:l,evaluation:{total:o.summary.total,followed:o.summary.followed,skipped:o.summary.skipped,partial:o.summary.partial,blockingViolations:o.summary.blockingViolations,blocksCompletion:o.blocksCompletion},habits:o.evaluations.map(t=>({id:t.habit.id,name:t.habit.name,category:t.habit.category,severity:t.habit.severity,result:t.result,reason:t.reason,evidence:t.evidence})),recorded:d$1}}catch{return null}}async function P(s,l){let a=p.join(s,".paradigm","aspect-graph.db");if(!c.existsSync(a))return {driftedCount:0,healedCount:0,cleanCount:0,missingCount:0,details:[]};try{let{driftCheckCommand:f}=await import('./drift-ILZE5BFJ.js'),i="",u=console.log;console.log=g=>{i=g;};try{await f({json:!0,autoHeal:l});}finally{console.log=u;}return i?JSON.parse(i):null}catch{return null}}async function B(s){if(!c.existsSync(p.join(s,"portal.yaml")))return null;try{let{checkPortalCompliance:l}=await import('./portal-compliance-4MG5F2GI.js'),a=await l(s);return {status:a.status,declaredButUnusedCount:a.declaredButUnused.length,usedButUndeclaredCount:a.usedButUndeclared.length,properlyDeclaredCount:a.properlyDeclared.length,declaredButUnused:a.declaredButUnused,usedButUndeclared:a.usedButUndeclared,properlyDeclared:a.properlyDeclared}}catch{return null}}async function j(s){try{let{runPostflightLearning:l}=await import('./ambient-
|
|
4
|
+
`),"utf8");}else l==="on-stop"&&c.existsSync(h)&&c.unlinkSync(h);}catch{}return {trigger:l,evaluation:{total:o.summary.total,followed:o.summary.followed,skipped:o.summary.skipped,partial:o.summary.partial,blockingViolations:o.summary.blockingViolations,blocksCompletion:o.blocksCompletion},habits:o.evaluations.map(t=>({id:t.habit.id,name:t.habit.name,category:t.habit.category,severity:t.habit.severity,result:t.result,reason:t.reason,evidence:t.evidence})),recorded:d$1}}catch{return null}}async function P(s,l){let a=p.join(s,".paradigm","aspect-graph.db");if(!c.existsSync(a))return {driftedCount:0,healedCount:0,cleanCount:0,missingCount:0,details:[]};try{let{driftCheckCommand:f}=await import('./drift-ILZE5BFJ.js'),i="",u=console.log;console.log=g=>{i=g;};try{await f({json:!0,autoHeal:l});}finally{console.log=u;}return i?JSON.parse(i):null}catch{return null}}async function B(s){if(!c.existsSync(p.join(s,"portal.yaml")))return null;try{let{checkPortalCompliance:l}=await import('./portal-compliance-4MG5F2GI.js'),a=await l(s);return {status:a.status,declaredButUnusedCount:a.declaredButUnused.length,usedButUndeclaredCount:a.usedButUndeclared.length,properlyDeclaredCount:a.properlyDeclared.length,declaredButUnused:a.declaredButUnused,usedButUndeclared:a.usedButUndeclared,properlyDeclared:a.properlyDeclared}}catch{return null}}async function j(s){try{let{runPostflightLearning:l}=await import('./ambient-WTLYUAQM.js');return await l(s)}catch{return null}}async function A(s){let l=process.cwd(),a=s.trigger||"on-stop",f=s.autoHeal!==false,i=[],u=[],g=await $(l,a),r=await P(l,f),o=await B(l);if(g?.evaluation.blocksCompletion){let t=g.habits.filter(e=>e.result==="skipped"&&e.severity==="block");for(let e of t){let m=`Blocking habit not satisfied: ${e.name} \u2014 ${e.reason}`;i.push(m),u.push({message:m,source:"habits",file:R(e.reason),severity:"blocking"});}}if(r&&r.driftedCount>0){let t=`${r.driftedCount} aspect anchor(s) have drifted (content genuinely changed). Run paradigm_aspect_check to review.`;i.push(t);for(let e of r.details.filter(m=>m.status==="drifted"))u.push({message:`Aspect ~${e.aspectId} drifted at lines ${e.startLine}-${e.endLine}`,source:"drift",file:e.path,severity:"advisory"});u.filter(e=>e.source==="drift").length===0&&u.push({message:t,source:"drift",severity:"advisory"});}if(o&&o.usedButUndeclaredCount>0){let t=`${o.usedButUndeclaredCount} gate(s) used in code but not declared in portal.yaml: ${o.usedButUndeclared.join(", ")}`;i.push(t);for(let e of o.usedButUndeclared)u.push({message:`Gate ^${e} used in code but not declared in portal.yaml`,source:"portal",file:"portal.yaml",severity:"blocking"});}let d=null;s.learn&&(d=await j(l));let h={habits:g,drift:r,portal:o,violations:i,structuredViolations:u,postflight:s.learn?d:void 0};if(s.json)console.log(JSON.stringify(h));else {if(console.log(n.magenta(`
|
|
5
5
|
Paradigm Compliance Check
|
|
6
6
|
`)),g){let{evaluation:t}=g,e=t.blocksCompletion?n.red:n.green;console.log(n.white(" Habits:")),console.log(` ${e(`${t.followed} followed, ${t.skipped} skipped, ${t.partial} partial`)}`),t.blockingViolations>0&&console.log(n.red(` ${t.blockingViolations} blocking violation(s)`)),console.log();}if(r&&(console.log(n.white(" Drift:")),r.healedCount>0&&console.log(n.green(` Auto-healed: ${r.healedCount} shifted anchor(s)`)),r.cleanCount>0&&console.log(n.green(` Clean: ${r.cleanCount} anchor(s)`)),r.driftedCount>0&&console.log(n.red(` Drifted: ${r.driftedCount} anchor(s)`)),r.missingCount>0&&console.log(n.yellow(` Missing: ${r.missingCount} anchor file(s)`)),console.log()),o){console.log(n.white(" Portal:"));let t=o.status==="compliant"?n.green:o.status==="warnings"?n.yellow:n.red;console.log(` Status: ${t(o.status)}`),o.usedButUndeclaredCount>0&&console.log(n.red(` ${o.usedButUndeclaredCount} undeclared gate(s)`)),console.log();}if(d){if(console.log(n.white(" Postflight Learning:")),d.journalsWritten>0){console.log(n.green(` Journals written: ${d.journalsWritten}`));for(let[t,e]of Object.entries(d.journalsByAgent))e>0&&console.log(n.gray(` ${t}: ${e} entries`));}else console.log(n.gray(" No verdicts to learn from"));d.promoted>0&&console.log(n.green(` Promoted to notebooks: ${d.promoted}`)),console.log();}if(i.length>0){console.log(n.red(` ${i.length} violation(s):`));for(let t of i)console.log(n.red(` - ${t}`));}else console.log(n.green(" All checks passed."));console.log();}i.length>0&&(process.exitCode=1);}export{A as complianceCheckCommand};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
export{a as hooksInstallCommand,c as hooksStatusCommand,b as hooksUninstallCommand}from'./chunk-
|
|
2
|
+
export{a as hooksInstallCommand,c as hooksStatusCommand,b as hooksUninstallCommand}from'./chunk-SI6SV76D.js';import'./chunk-5TAVYPOV.js';
|