@synkro-sh/cli 1.4.25 → 1.4.27
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/bootstrap.js +33 -16
- package/dist/bootstrap.js.map +1 -1
- package/package.json +1 -1
package/dist/bootstrap.js
CHANGED
|
@@ -516,23 +516,28 @@ synkro_route() {
|
|
|
516
516
|
echo "cloud"
|
|
517
517
|
}
|
|
518
518
|
|
|
519
|
-
# Grade locally via synkro CLI
|
|
519
|
+
# Grade locally via synkro CLI channel. Reads prompt from stdin.
|
|
520
520
|
synkro_local_grade() {
|
|
521
521
|
local surface="$1"
|
|
522
|
-
if synkro_channel_up
|
|
522
|
+
if ! synkro_channel_up; then
|
|
523
|
+
echo "SYNKRO_CHANNEL_DOWN" >&2
|
|
524
|
+
return 1
|
|
525
|
+
fi
|
|
526
|
+
if [ -n "\${SYNKRO_CLI_BIN:-}" ] && [ -f "$SYNKRO_CLI_BIN" ] && command -v node >/dev/null 2>&1; then
|
|
523
527
|
node "$SYNKRO_CLI_BIN" grade "$surface" 2>/dev/null
|
|
524
|
-
elif
|
|
528
|
+
elif command -v synkro >/dev/null 2>&1; then
|
|
525
529
|
synkro grade "$surface" 2>/dev/null
|
|
526
|
-
|
|
527
|
-
|
|
530
|
+
else
|
|
531
|
+
echo "SYNKRO_CLI_NOT_FOUND" >&2
|
|
532
|
+
return 1
|
|
528
533
|
fi
|
|
529
534
|
}
|
|
530
535
|
|
|
531
536
|
# Parse <synkro-verdict>...</synkro-verdict> XML from local grader output.
|
|
532
|
-
# Sets LOCAL_OK, LOCAL_REASON, LOCAL_RULE_ID, LOCAL_SEV, LOCAL_CAT.
|
|
537
|
+
# Sets LOCAL_OK, LOCAL_REASON, LOCAL_RULE_ID, LOCAL_RULE_MODE, LOCAL_SEV, LOCAL_CAT.
|
|
533
538
|
synkro_parse_local_verdict() {
|
|
534
539
|
local resp="$1"
|
|
535
|
-
LOCAL_OK="true"; LOCAL_REASON=""; LOCAL_RULE_ID=""; LOCAL_SEV="low"; LOCAL_CAT="general"
|
|
540
|
+
LOCAL_OK="true"; LOCAL_REASON=""; LOCAL_RULE_ID=""; LOCAL_RULE_MODE=""; LOCAL_SEV="low"; LOCAL_CAT="general"
|
|
536
541
|
local inner
|
|
537
542
|
inner=$(printf '%s' "$resp" | tr '\\n' ' ' | sed -nE 's|.*<synkro-verdict>(.*)</synkro-verdict>.*|\\1|p' | tail -1)
|
|
538
543
|
[ -z "$inner" ] && return
|
|
@@ -543,6 +548,7 @@ synkro_parse_local_verdict() {
|
|
|
543
548
|
[ -z "$LOCAL_REASON" ] && LOCAL_REASON=$(printf '%s' "$inner" | sed -nE 's|.*<reasoning>(.*)</reasoning>.*|\\1|p' | head -1)
|
|
544
549
|
if [ "$LOCAL_OK" = "false" ]; then
|
|
545
550
|
LOCAL_RULE_ID=$(printf '%s' "$inner" | sed -nE 's|.*<rule_id>(.*)</rule_id>.*|\\1|p' | head -1)
|
|
551
|
+
LOCAL_RULE_MODE=$(printf '%s' "$inner" | sed -nE 's|.*<rule_mode>(.*)</rule_mode>.*|\\1|p' | head -1)
|
|
546
552
|
LOCAL_SEV=$(printf '%s' "$inner" | sed -nE 's|.*<risk_level>(.*)</risk_level>.*|\\1|p' | head -1)
|
|
547
553
|
LOCAL_CAT=$(printf '%s' "$inner" | sed -nE 's|.*<category>(.*)</category>.*|\\1|p' | head -1)
|
|
548
554
|
if [ -z "$LOCAL_RULE_ID" ]; then
|
|
@@ -580,7 +586,7 @@ synkro_rule_mode() {
|
|
|
580
586
|
local rid="$1"
|
|
581
587
|
[ -z "$rid" ] || [ -z "\${SYNKRO_RULES:-}" ] && echo "blocking" && return
|
|
582
588
|
local m
|
|
583
|
-
m=$(printf '%s' "$SYNKRO_RULES" | jq -r --arg r "$rid" '[.[] | select(.rule_id == $r) | .mode] | .[0] // "blocking"' 2>/dev/null)
|
|
589
|
+
m=$(printf '%s' "$SYNKRO_RULES" | jq -r --arg r "$rid" '[.[] | select(.rule_id == $r) | .mode] | if any(. == "blocking") then "blocking" else .[0] // "blocking" end' 2>/dev/null)
|
|
584
590
|
[ -z "$m" ] || [ "$m" = "null" ] && m="blocking"
|
|
585
591
|
echo "$m"
|
|
586
592
|
}
|
|
@@ -687,11 +693,15 @@ if [ "$ROUTE" = "local" ]; then
|
|
|
687
693
|
trap "rm -f \\"$GRADER_FILE\\"" EXIT
|
|
688
694
|
printf 'Command: %s\\nUser intent: %s\\nOrg rules: %s\\n' "$COMMAND" "\${USER_INTENT:-none stated}" "\${SYNKRO_RULES:-[]}" > "$GRADER_FILE"
|
|
689
695
|
|
|
690
|
-
CC_RESP=$(synkro_local_grade bash < "$GRADER_FILE"
|
|
696
|
+
CC_RESP=$(synkro_local_grade bash < "$GRADER_FILE" 2>&1)
|
|
697
|
+
if [ $? -ne 0 ]; then
|
|
698
|
+
jq -n --arg m "[synkro:local] bashGuard \u2192 pass: local grader unavailable (run synkro local-cc start)" '{systemMessage: $m}'
|
|
699
|
+
exit 0
|
|
700
|
+
fi
|
|
691
701
|
synkro_parse_local_verdict "$CC_RESP"
|
|
692
702
|
|
|
693
703
|
if [ "$LOCAL_OK" = "false" ]; then
|
|
694
|
-
RULE_MODE
|
|
704
|
+
RULE_MODE="\${LOCAL_RULE_MODE:-$(synkro_rule_mode "\${LOCAL_RULE_ID}")}"
|
|
695
705
|
if [ "$RULE_MODE" = "audit" ]; then
|
|
696
706
|
REASON="[synkro:local] bashGuard \u2192 warning\${LOCAL_RULE_ID:+ ($LOCAL_RULE_ID)}: \${LOCAL_REASON:-policy violation}"
|
|
697
707
|
jq -n --arg m "$REASON" '{systemMessage: $m}'
|
|
@@ -709,7 +719,7 @@ if [ "$ROUTE" = "local" ]; then
|
|
|
709
719
|
if [ "$IS_HEADLESS" = "1" ]; then DEC="deny"; else DEC="ask"; fi
|
|
710
720
|
REASON="[synkro:local] bashGuard \u2192 block\${LOCAL_RULE_ID:+ ($LOCAL_RULE_ID)}: \${LOCAL_REASON:-policy violation}"
|
|
711
721
|
jq -n --arg dec "$DEC" --arg reason "$REASON" --arg ctx "$REASON" \\
|
|
712
|
-
'{
|
|
722
|
+
'{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:$dec,permissionDecisionReason:$reason,additionalContext:$ctx}}'
|
|
713
723
|
synkro_capture_local "bash" "block" "\${LOCAL_SEV}" "\${LOCAL_CAT}" "$TOOL_NAME" "$GIT_REPO" "$SESSION_ID"
|
|
714
724
|
fi
|
|
715
725
|
fi
|
|
@@ -876,11 +886,15 @@ if [ "$ROUTE" = "local" ]; then
|
|
|
876
886
|
trap "rm -f \\"$GRADER_FILE\\"" EXIT
|
|
877
887
|
printf 'File: %s\\nProposed content (first 4000 chars):\\n%s\\nUser intent: %s\\nOrg rules: %s\\n' "$FILE_PATH" "$(printf '%s' "$PROPOSED" | head -c 4000)" "\${USER_INTENT:-none stated}" "\${SYNKRO_RULES:-[]}" > "$GRADER_FILE"
|
|
878
888
|
|
|
879
|
-
CC_RESP=$(synkro_local_grade edit < "$GRADER_FILE"
|
|
889
|
+
CC_RESP=$(synkro_local_grade edit < "$GRADER_FILE" 2>&1)
|
|
890
|
+
if [ $? -ne 0 ]; then
|
|
891
|
+
jq -n --arg m "[synkro:local] editGuard \u2192 pass: local grader unavailable (run synkro local-cc start)" '{systemMessage: $m}'
|
|
892
|
+
exit 0
|
|
893
|
+
fi
|
|
880
894
|
synkro_parse_local_verdict "$CC_RESP"
|
|
881
895
|
|
|
882
896
|
if [ "$LOCAL_OK" = "false" ]; then
|
|
883
|
-
RULE_MODE
|
|
897
|
+
RULE_MODE="\${LOCAL_RULE_MODE:-$(synkro_rule_mode "\${LOCAL_RULE_ID}")}"
|
|
884
898
|
if [ "$RULE_MODE" = "audit" ]; then
|
|
885
899
|
REASON="[synkro:local] editGuard $FILE_SHORT \u2192 warning\${LOCAL_RULE_ID:+ ($LOCAL_RULE_ID)}: \${LOCAL_REASON:-policy violation}"
|
|
886
900
|
jq -n --arg m "$REASON" '{systemMessage: $m}'
|
|
@@ -1025,11 +1039,14 @@ if [ "$ROUTE" = "local" ]; then
|
|
|
1025
1039
|
trap "rm -f \\"$GRADER_FILE\\"" EXIT
|
|
1026
1040
|
printf 'File: %s\\nContent (first 4000 chars):\\n%s\\nOrg rules: %s\\n' "$FILE_PATH" "$(printf '%s' "$FILE_CONTENT" | head -c 4000)" "\${SYNKRO_RULES:-[]}" > "$GRADER_FILE"
|
|
1027
1041
|
|
|
1028
|
-
CC_RESP=$(synkro_local_grade edit < "$GRADER_FILE"
|
|
1042
|
+
CC_RESP=$(synkro_local_grade edit < "$GRADER_FILE" 2>&1)
|
|
1043
|
+
if [ $? -ne 0 ]; then
|
|
1044
|
+
echo '{}'; exit 0
|
|
1045
|
+
fi
|
|
1029
1046
|
synkro_parse_local_verdict "$CC_RESP"
|
|
1030
1047
|
|
|
1031
1048
|
if [ "$LOCAL_OK" = "false" ]; then
|
|
1032
|
-
RULE_MODE
|
|
1049
|
+
RULE_MODE="\${LOCAL_RULE_MODE:-$(synkro_rule_mode "\${LOCAL_RULE_ID}")}"
|
|
1033
1050
|
if [ "$RULE_MODE" = "audit" ]; then
|
|
1034
1051
|
REASON="[synkro:local] editScan $BASENAME \u2192 warning\${LOCAL_RULE_ID:+ ($LOCAL_RULE_ID)}: \${LOCAL_REASON:-policy violation}"
|
|
1035
1052
|
jq -n --arg m "$REASON" '{systemMessage: $m}'
|
|
@@ -3669,7 +3686,7 @@ function writeConfigEnv(opts) {
|
|
|
3669
3686
|
`SYNKRO_CREDENTIALS_PATH=${shellQuoteSingle(credsPath)}`,
|
|
3670
3687
|
`SYNKRO_TIER=${shellQuoteSingle(safeTier)}`,
|
|
3671
3688
|
`SYNKRO_INFERENCE=${shellQuoteSingle(safeInference)}`,
|
|
3672
|
-
`SYNKRO_VERSION=${shellQuoteSingle("1.4.
|
|
3689
|
+
`SYNKRO_VERSION=${shellQuoteSingle("1.4.27")}`
|
|
3673
3690
|
];
|
|
3674
3691
|
if (safeSynkroBin) lines.push(`SYNKRO_CLI_BIN=${shellQuoteSingle(safeSynkroBin)}`);
|
|
3675
3692
|
if (safeUserId) lines.push(`SYNKRO_USER_ID=${shellQuoteSingle(safeUserId)}`);
|