| #!/usr/bin/env zsh |
|
|
| |
|
|
| |
| |
| function _forge_get_commands() { |
| if [[ -z "$_FORGE_COMMANDS" ]]; then |
| _FORGE_COMMANDS="$(CLICOLOR_FORCE=0 $_FORGE_BIN list commands --porcelain 2>/dev/null)" |
| fi |
| echo "$_FORGE_COMMANDS" |
| } |
|
|
| |
| |
| function _forge_exec() { |
| local agent_id="${_FORGE_ACTIVE_AGENT:-forge}" |
| local -a cmd |
| cmd=($_FORGE_BIN --agent "$agent_id") |
|
|
| |
| |
| |
| |
| |
| |
| if [[ "$_FORGE_TERM" == "true" && ${#_FORGE_TERM_COMMANDS} -gt 0 ]]; then |
| |
| |
| |
| local _old_ifs="$IFS" _sep=$'\x1f' |
| IFS="$_sep" |
| local -x _FORGE_TERM_COMMANDS="${_FORGE_TERM_COMMANDS[*]}" |
| local -x _FORGE_TERM_EXIT_CODES="${_FORGE_TERM_EXIT_CODES[*]}" |
| local -x _FORGE_TERM_TIMESTAMPS="${_FORGE_TERM_TIMESTAMPS[*]}" |
| IFS="$_old_ifs" |
| fi |
|
|
| cmd+=("$@") |
| [[ -n "$_FORGE_SESSION_MODEL" ]] && local -x FORGE_SESSION__MODEL_ID="$_FORGE_SESSION_MODEL" |
| [[ -n "$_FORGE_SESSION_PROVIDER" ]] && local -x FORGE_SESSION__PROVIDER_ID="$_FORGE_SESSION_PROVIDER" |
| [[ -n "$_FORGE_SESSION_REASONING_EFFORT" ]] && local -x FORGE_REASONING__EFFORT="$_FORGE_SESSION_REASONING_EFFORT" |
| "${cmd[@]}" |
| } |
|
|
| |
| |
| |
| |
| |
| |
| function _forge_exec_interactive() { |
| local agent_id="${_FORGE_ACTIVE_AGENT:-forge}" |
| local -a cmd |
| cmd=($_FORGE_BIN --agent "$agent_id") |
|
|
| |
| |
| |
| |
| |
| |
| |
| if [[ "$_FORGE_TERM" == "true" && ${#_FORGE_TERM_COMMANDS} -gt 0 ]]; then |
| local _old_ifs="$IFS" _sep=$'\x1f' |
| IFS="$_sep" |
| local -x _FORGE_TERM_COMMANDS="${_FORGE_TERM_COMMANDS[*]}" |
| local -x _FORGE_TERM_EXIT_CODES="${_FORGE_TERM_EXIT_CODES[*]}" |
| local -x _FORGE_TERM_TIMESTAMPS="${_FORGE_TERM_TIMESTAMPS[*]}" |
| IFS="$_old_ifs" |
| fi |
|
|
| cmd+=("$@") |
| [[ -n "$_FORGE_SESSION_MODEL" ]] && local -x FORGE_SESSION__MODEL_ID="$_FORGE_SESSION_MODEL" |
| [[ -n "$_FORGE_SESSION_PROVIDER" ]] && local -x FORGE_SESSION__PROVIDER_ID="$_FORGE_SESSION_PROVIDER" |
| [[ -n "$_FORGE_SESSION_REASONING_EFFORT" ]] && local -x FORGE_REASONING__EFFORT="$_FORGE_SESSION_REASONING_EFFORT" |
| "${cmd[@]}" </dev/tty >/dev/tty |
| } |
|
|
| function _forge_select() { |
| [[ -n "$_FORGE_SESSION_MODEL" ]] && local -x FORGE_SESSION__MODEL_ID="$_FORGE_SESSION_MODEL" |
| [[ -n "$_FORGE_SESSION_PROVIDER" ]] && local -x FORGE_SESSION__PROVIDER_ID="$_FORGE_SESSION_PROVIDER" |
| [[ -n "$_FORGE_SESSION_REASONING_EFFORT" ]] && local -x FORGE_REASONING__EFFORT="$_FORGE_SESSION_REASONING_EFFORT" |
| CLICOLOR_FORCE=0 $_FORGE_BIN select "$@" </dev/tty 2>/dev/tty |
| } |
|
|
| function _forge_select_global() { |
| CLICOLOR_FORCE=0 $_FORGE_BIN select "$@" </dev/tty 2>/dev/tty |
| } |
|
|
| function _forge_select_with_query() { |
| local query="$1" |
| shift |
|
|
| if [[ -n "$query" ]]; then |
| _forge_select "$@" --query "$query" |
| else |
| _forge_select "$@" |
| fi |
| } |
|
|
| function _forge_select_with_query_global() { |
| local query="$1" |
| shift |
|
|
| if [[ -n "$query" ]]; then |
| _forge_select_global "$@" --query "$query" |
| else |
| _forge_select_global "$@" |
| fi |
| } |
|
|
| function _forge_select_model_pair() { |
| local result |
| result=$(_forge_select_with_query "$1" model) |
|
|
| if [[ -z "$result" ]]; then |
| reply=() |
| return 1 |
| fi |
|
|
| reply=("${(@f)result}") |
| [[ ${#reply[@]} -ge 2 ]] |
| } |
|
|
| function _forge_select_model_pair_global() { |
| local result |
| result=$(_forge_select_with_query_global "$1" model) |
|
|
| if [[ -z "$result" ]]; then |
| reply=() |
| return 1 |
| fi |
|
|
| reply=("${(@f)result}") |
| [[ ${#reply[@]} -ge 2 ]] |
| } |
|
|
| function _forge_reset() { |
| |
| |
| |
| |
| |
| |
| |
| |
| local pad="${BUFFERLINES:-1}" _i |
| for ((_i=1; _i<pad; _i++)); do print; done |
|
|
| |
| BUFFER="" |
| CURSOR=0 |
| |
| zle -I |
| zle reset-prompt |
| } |
|
|
| |
| |
| |
| |
| function _forge_log() { |
| local level="$1" |
| local message="$2" |
| local timestamp="\033[90m[$(date '+%H:%M:%S')]\033[0m" |
| |
| case "$level" in |
| error) |
| |
| echo "\033[31m⏺\033[0m ${timestamp} \033[31m${message}\033[0m" |
| ;; |
| info) |
| |
| echo "\033[37m⏺\033[0m ${timestamp} \033[37m${message}\033[0m" |
| ;; |
| success) |
| |
| echo "\033[33m⏺\033[0m ${timestamp} \033[37m${message}\033[0m" |
| ;; |
| warning) |
| |
| echo "\033[93m⚠️\033[0m ${timestamp} \033[93m${message}\033[0m" |
| ;; |
| debug) |
| |
| echo "\033[36m⏺\033[0m ${timestamp} \033[90m${message}\033[0m" |
| ;; |
| *) |
| echo "${message}" |
| ;; |
| esac |
| } |
|
|
| |
| |
| |
| function _forge_is_workspace_indexed() { |
| local workspace_path="$1" |
| $_FORGE_BIN workspace info "$workspace_path" >/dev/null 2>&1 |
| return $? |
| } |
|
|
| |
| |
| function _forge_start_background_sync() { |
| |
| local sync_enabled="${FORGE_SYNC_ENABLED:-true}" |
| if [[ "$sync_enabled" != "true" ]]; then |
| return 0 |
| fi |
|
|
| |
| local workspace_path=$(pwd -P) |
|
|
| |
| { |
| |
| |
| |
| exec >/dev/null 2>&1 </dev/null |
| setopt NO_NOTIFY NO_MONITOR |
| if ! _forge_is_workspace_indexed "$workspace_path"; then |
| return 0 |
| fi |
| |
| $_FORGE_BIN workspace sync "$workspace_path" |
| } &! |
| } |
|
|
| |
| |
| function _forge_start_background_update() { |
| { |
| |
| |
| |
| exec >/dev/null 2>&1 </dev/null |
| setopt NO_NOTIFY NO_MONITOR |
| $_FORGE_BIN update --no-confirm |
| } &! |
| } |
|
|
|
|