arkaos 2.64.0 → 2.65.0

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/VERSION CHANGED
@@ -1 +1 @@
1
- 2.64.0
1
+ 2.65.0
@@ -19,12 +19,25 @@ SESSION_ID=""
19
19
  TRANSCRIPT_PATH=""
20
20
  STOP_HOOK_ACTIVE=""
21
21
  CWD=""
22
+ EFFORT_LEVEL=""
22
23
  if command -v jq &>/dev/null; then
23
24
  SESSION_ID=$(echo "$input" | jq -r '.session_id // ""' 2>/dev/null)
24
25
  TRANSCRIPT_PATH=$(echo "$input" | jq -r '.transcript_path // ""' 2>/dev/null)
25
26
  STOP_HOOK_ACTIVE=$(echo "$input" | jq -r '.stop_hook_active // ""' 2>/dev/null)
26
27
  CWD=$(echo "$input" | jq -r '.cwd // ""' 2>/dev/null)
28
+ # PR46 v2.65.0 — Claude Code W19 ships effort.level in hook stdin and
29
+ # $CLAUDE_EFFORT env var. Soft-block checks (kb-cite, meta-tag) only
30
+ # run at high|xhigh; hard enforcement runs regardless.
31
+ EFFORT_LEVEL=$(echo "$input" | jq -r '.effort.level // ""' 2>/dev/null)
27
32
  fi
33
+ # Fallback to env var if stdin didn't carry it
34
+ [ -z "$EFFORT_LEVEL" ] && EFFORT_LEVEL="${CLAUDE_EFFORT:-}"
35
+
36
+ # Telemetry-only signal. Soft-block checks (kb_cite, meta_tag, sycophancy)
37
+ # always run here because they're cheap and feed /arka compliance.
38
+ # What is effort-gated is the NUDGE SURFACING in user-prompt-submit.sh
39
+ # (whether the next turn sees a [arka:suggest] line). Record the level
40
+ # on the telemetry row so we can later analyze suppression rates.
28
41
 
29
42
  # Prevent infinite loops when Stop hook was triggered by its own decision.
30
43
  if [ "$STOP_HOOK_ACTIVE" = "true" ]; then
@@ -60,6 +73,7 @@ SESSION_ID_VAL="$SESSION_ID" \
60
73
  TRANSCRIPT_PATH_VAL="$TRANSCRIPT_PATH" \
61
74
  CWD_VAL="$CWD" \
62
75
  ARKAOS_ROOT_VAL="$ARKAOS_ROOT" \
76
+ EFFORT_LEVEL_VAL="$EFFORT_LEVEL" \
63
77
  python3 - <<'PY' 2>/dev/null
64
78
  import json
65
79
  import os
@@ -223,6 +237,9 @@ entry = {
223
237
  "kb_cite_topic_score": cite_topic_score,
224
238
  "meta_tag_check_passed": meta_passed,
225
239
  "meta_tag_check_reason": meta_reason,
240
+ # PR46 v2.65.0 — Claude Code effort level captured for later analysis
241
+ # of nudge-suppression rates. Unset / unknown values land as "".
242
+ "effort_level": os.environ.get("EFFORT_LEVEL_VAL", ""),
226
243
  "mode": "warn",
227
244
  }
228
245
 
@@ -84,10 +84,25 @@ mkdir -p "$CACHE_DIR" 2>/dev/null
84
84
  # ─── Extract user input from hook JSON ───────────────────────────────────
85
85
  user_input=""
86
86
  SESSION_ID=""
87
+ EFFORT_LEVEL=""
87
88
  if command -v jq &>/dev/null; then
88
89
  user_input=$(echo "$input" | jq -r '.userInput // .message // ""' 2>/dev/null)
89
90
  SESSION_ID=$(echo "$input" | jq -r '.session_id // ""' 2>/dev/null)
91
+ # PR46 v2.65.0 — Claude Code W19 ships effort.level in hook stdin.
92
+ # Soft-block nudges (KB-first + meta-tag) are gated by effort: only
93
+ # surfaced at high|xhigh; low/medium skip the nudge to avoid forcing
94
+ # the model to comply with full contracts during cheap exploratory
95
+ # turns. Hard enforcement (PreToolUse flow_enforcer) runs regardless.
96
+ EFFORT_LEVEL=$(echo "$input" | jq -r '.effort.level // ""' 2>/dev/null)
90
97
  fi
98
+ [ -z "$EFFORT_LEVEL" ] && EFFORT_LEVEL="${CLAUDE_EFFORT:-}"
99
+
100
+ # Decide whether soft-block nudges surface to the next turn.
101
+ _ARKA_SURFACE_NUDGES="true"
102
+ case "${EFFORT_LEVEL:-high}" in
103
+ low|medium) _ARKA_SURFACE_NUDGES="false" ;;
104
+ *) _ARKA_SURFACE_NUDGES="true" ;;
105
+ esac
91
106
 
92
107
  # ─── Flow marker cache invalidation (v2 — new turn, reset ALLOW cache) ──
93
108
  # Cheap, non-blocking, runs before Synapse so a stuck Python later cannot
@@ -376,7 +391,7 @@ fi
376
391
  # the suggestion to the model in this turn's additionalContext. One-shot:
377
392
  # the file is deleted after read so the nudge does not repeat across turns.
378
393
  _KB_CITE_NUDGE=""
379
- if [ -n "$SESSION_ID" ]; then
394
+ if [ -n "$SESSION_ID" ] && [ "$_ARKA_SURFACE_NUDGES" = "true" ]; then
380
395
  _CITE_FILE="/tmp/arkaos-cite/${SESSION_ID}.json"
381
396
  if [ -f "$_CITE_FILE" ]; then
382
397
  if command -v jq &>/dev/null; then
@@ -397,7 +412,7 @@ fi
397
412
  # Mirror of the KB citation nudge but for the [arka:meta] one-liner
398
413
  # contract. One-shot; deleted after read.
399
414
  _META_TAG_NUDGE=""
400
- if [ -n "$SESSION_ID" ]; then
415
+ if [ -n "$SESSION_ID" ] && [ "$_ARKA_SURFACE_NUDGES" = "true" ]; then
401
416
  _META_FILE="/tmp/arkaos-meta/${SESSION_ID}.json"
402
417
  if [ -f "$_META_FILE" ]; then
403
418
  if command -v jq &>/dev/null; then
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arkaos",
3
- "version": "2.64.0",
3
+ "version": "2.65.0",
4
4
  "description": "The Operating System for AI Agent Teams",
5
5
  "type": "module",
6
6
  "bin": {
package/pyproject.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "arkaos-core"
3
- version = "2.64.0"
3
+ version = "2.65.0"
4
4
  description = "Core engine for ArkaOS — The Operating System for AI Agent Teams"
5
5
  readme = "README.md"
6
6
  license = {text = "MIT"}