diff --git a/plugins/codeman/skills/codeman/SKILL.md b/plugins/codeman/skills/codeman/SKILL.md index f8d67f51..f1416871 100644 --- a/plugins/codeman/skills/codeman/SKILL.md +++ b/plugins/codeman/skills/codeman/SKILL.md @@ -106,7 +106,7 @@ later call opens with, and your first REAL call performs them anyway: ```bash . "${XDG_CACHE_HOME:-$HOME/.cache}/codeman-agent-$CODEMAN_SESSION_ID.sh" 2>/dev/null -[ "${CODEMAN_PREAMBLE:-}" = 1.44.0 ] || { echo "preamble missing or stale; run the full §0 block"; exit 1; } +[ "${CODEMAN_PREAMBLE:-}" = 1.50.0 ] || { echo "preamble missing or stale; run the full §0 block"; exit 1; } ``` ⚠️ **Never spend a Bash call on this check alone.** §1's block opens with this same @@ -134,8 +134,8 @@ PRE="${XDG_CACHE_HOME:-$HOME/.cache}/codeman-agent-$CODEMAN_SESSION_ID.sh" mkdir -p "$(dirname "$PRE")" # Rewrite unless the file already ends with THIS version's stamp, so a stale or a # half-written file self-heals here instead of costing you a round trip to rm it. -grep -qs '^CODEMAN_PREAMBLE=1.44.0$' "$PRE" || (umask 077; cat > "$PRE" <<'PREAMBLE' -# ---- Codeman agent preamble 1.44.0 (seeded by Codeman at session spawn; the SKILL.md §0 bootstrap rewrites it when missing or stale) ---- +grep -qs '^CODEMAN_PREAMBLE=1.50.0$' "$PRE" || (umask 077; cat > "$PRE" <<'PREAMBLE' +# ---- Codeman agent preamble 1.50.0 (seeded by Codeman at session spawn; the SKILL.md §0 bootstrap rewrites it when missing or stale) ---- # Positional parameters are always written with braces, ${1} and never a bare dollar-digit: Claude Code # replaces a bare one in a skill body with the matching word of the skill's arguments, and §0 is pasted # from that body (test/agent-skill.test.ts pins it). @@ -186,11 +186,15 @@ _composer_up() { # -> "true"/"false". `shift+tab` is the one --data-urlencode 'match=shift+tab' --data-urlencode 'from=buffer' \ --data-urlencode "timeout=${2}" | jq -r '.data.wait.matched // false' } +_mark_up() { # -> "true"/"false": a literal, space-free token + # in the pane's output, read from the buffer so a composer drawn before the wait counts. + "${CURL[@]}" -G "$API/api/v1/sessions/${1}/wait-output" \ + --data-urlencode "match=${2}" --data-urlencode 'from=buffer' \ + --data-urlencode "timeout=${3}" | jq -r '.data.wait.matched // false' +} _dsh_up() { # -> "true"/"false". The DeepSeek Harness TUI's # composer glyph. Override with DSH_READY_MARK for a profile that draws another one. - "${CURL[@]}" -G "$API/api/v1/sessions/${1}/wait-output" \ - --data-urlencode "match=${DSH_READY_MARK:-❯}" --data-urlencode 'from=buffer' \ - --data-urlencode "timeout=${2}" | jq -r '.data.wait.matched // false' + _mark_up "${1}" "${DSH_READY_MARK:-❯}" "${2}" } # ---- the workspace-trust dialog: READ the screen, never press Enter blind ---- # Claude Code 2.1.252 dropped the option numbers, REVERSED them, and highlights @@ -250,21 +254,123 @@ _accept_trust() { # -> 0 once it has answered the dialog, 1 if it could n done return 1 } +# ---- the local model: the model Codeman installed on this Mac, as a worker ---- +# local_model -> ONE compact JSON object on stdout. rc 0 only when a `local` worker can be +# spawned now (`running:true`) or once spawn_worker has started the runtime (`running:false`): +# {"spawnable":true,"state":"installed","running":true,"cli":"opencode","cliLabel":"OpenCode", +# "endpointId":"local-ollama","modelId":"","modelLabel":"