codex-flow 2.1.13__py3-none-any.whl
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.
- codex_flow/__init__.py +28 -0
- codex_flow/__main__.py +9 -0
- codex_flow/cli.py +242 -0
- codex_flow/data/LICENSE +21 -0
- codex_flow/data/README.en.md +303 -0
- codex_flow/data/README.md +305 -0
- codex_flow/data/VERSION +1 -0
- codex_flow/data/apps/chatgpt-mcp/README.md +86 -0
- codex_flow/data/apps/chatgpt-mcp/__init__.py +1 -0
- codex_flow/data/apps/chatgpt-mcp/adapter.py +458 -0
- codex_flow/data/apps/chatgpt-mcp/server.py +358 -0
- codex_flow/data/apps/chatgpt-mcp/widget.html +927 -0
- codex_flow/data/apps/macos-overlay/README.en.md +121 -0
- codex_flow/data/apps/macos-overlay/README.md +123 -0
- codex_flow/data/apps/macos-overlay/Sources/Controllers/OverlayRuntimeState.swift +126 -0
- codex_flow/data/apps/macos-overlay/Sources/Controllers/OverlayScreenGeometry.swift +82 -0
- codex_flow/data/apps/macos-overlay/Sources/Controllers/OverlayWindowController.swift +1052 -0
- codex_flow/data/apps/macos-overlay/Sources/Localization.swift +197 -0
- codex_flow/data/apps/macos-overlay/Sources/Models/TelemetryData.swift +1557 -0
- codex_flow/data/apps/macos-overlay/Sources/Services/AccountSnapshotService.swift +1101 -0
- codex_flow/data/apps/macos-overlay/Sources/Services/FlowPilotInstanceLock.swift +153 -0
- codex_flow/data/apps/macos-overlay/Sources/Services/IPCServer.swift +298 -0
- codex_flow/data/apps/macos-overlay/Sources/Services/TelemetryQueryEngine.swift +800 -0
- codex_flow/data/apps/macos-overlay/Sources/Services/TelemetryWatcher.swift +135 -0
- codex_flow/data/apps/macos-overlay/Sources/Services/UpdateService.swift +610 -0
- codex_flow/data/apps/macos-overlay/Sources/Views/AccountView.swift +610 -0
- codex_flow/data/apps/macos-overlay/Sources/Views/AnalyticsView.swift +566 -0
- codex_flow/data/apps/macos-overlay/Sources/Views/AutostartView.swift +293 -0
- codex_flow/data/apps/macos-overlay/Sources/Views/BubbleView.swift +317 -0
- codex_flow/data/apps/macos-overlay/Sources/Views/HistoryView.swift +1124 -0
- codex_flow/data/apps/macos-overlay/Sources/Views/HoverRevealText.swift +165 -0
- codex_flow/data/apps/macos-overlay/Sources/Views/InspectorSkillsToolsView.swift +121 -0
- codex_flow/data/apps/macos-overlay/Sources/Views/LogoView.swift +182 -0
- codex_flow/data/apps/macos-overlay/Sources/Views/SleekSwitch.swift +117 -0
- codex_flow/data/apps/macos-overlay/Sources/Views/StrategyModeView.swift +561 -0
- codex_flow/data/apps/macos-overlay/Sources/Views/SummaryView.swift +1273 -0
- codex_flow/data/apps/macos-overlay/Sources/Views/UpdateView.swift +352 -0
- codex_flow/data/apps/macos-overlay/Sources/main.swift +340 -0
- codex_flow/data/apps/macos-overlay/Tests/OverlayScreenGeometryTests.swift +163 -0
- codex_flow/data/apps/macos-overlay/Tests/TelemetryPhase1ContractTests.swift +357 -0
- codex_flow/data/apps/macos-overlay/Tests/TelemetryQueryEngineConcurrencyTests.swift +221 -0
- codex_flow/data/apps/macos-overlay/Tests/TelemetryQuotaSelectionTests.swift +158 -0
- codex_flow/data/apps/macos-overlay/Tests/TelemetryWorkerTokenTests.swift +122 -0
- codex_flow/data/apps/macos-overlay/build.sh +75 -0
- codex_flow/data/benchmark/corpus.json +103 -0
- codex_flow/data/benchmark/manifest.example.json +41 -0
- codex_flow/data/benchmark/manifest.schema.json +137 -0
- codex_flow/data/benchmark/prices/gpt-5.6-2026-08-30.json +5 -0
- codex_flow/data/benchmark/profiles.json +90 -0
- codex_flow/data/benchmark/schema.json +77 -0
- codex_flow/data/benchmark/tasks.json +50 -0
- codex_flow/data/completions/codex-flow.bash +34 -0
- codex_flow/data/completions/codex-flow.zsh +52 -0
- codex_flow/data/glama.json +6 -0
- codex_flow/data/install-release.ps1 +126 -0
- codex_flow/data/install-release.sh +155 -0
- codex_flow/data/install.ps1 +349 -0
- codex_flow/data/install.sh +362 -0
- codex_flow/data/policy/benchmark.toml +49 -0
- codex_flow/data/policy/defaults.toml +70 -0
- codex_flow/data/scripts/analyze-benchmark.py +510 -0
- codex_flow/data/scripts/benchmark-local.py +171 -0
- codex_flow/data/scripts/check-recommendation.py +277 -0
- codex_flow/data/scripts/doctor.py +449 -0
- codex_flow/data/scripts/generate-release-manifest.py +74 -0
- codex_flow/data/scripts/localization.py +192 -0
- codex_flow/data/scripts/manage-hooks.py +448 -0
- codex_flow/data/scripts/manage-instructions.py +389 -0
- codex_flow/data/scripts/manage-shell.py +151 -0
- codex_flow/data/scripts/materialize-corpus.py +193 -0
- codex_flow/data/scripts/menu.py +646 -0
- codex_flow/data/scripts/migrations/0001_update_settings.py +80 -0
- codex_flow/data/scripts/package-release.py +132 -0
- codex_flow/data/scripts/render-benchmark-report.py +292 -0
- codex_flow/data/scripts/run-benchmark.py +829 -0
- codex_flow/data/scripts/strategies/__init__.py +28 -0
- codex_flow/data/scripts/strategies/balanced.py +115 -0
- codex_flow/data/scripts/strategies/base.py +363 -0
- codex_flow/data/scripts/strategies/efficient.py +158 -0
- codex_flow/data/scripts/strategies/lifecycle_runtime.py +590 -0
- codex_flow/data/scripts/strategies/quality.py +209 -0
- codex_flow/data/scripts/strategies/speed.py +108 -0
- codex_flow/data/scripts/strategies/task_budget_runtime.py +644 -0
- codex_flow/data/scripts/strategies/task_phase_runtime.py +341 -0
- codex_flow/data/scripts/strategies/work_unit_runtime.py +421 -0
- codex_flow/data/scripts/strategy_runtime.py +1091 -0
- codex_flow/data/scripts/telemetry.py +400 -0
- codex_flow/data/scripts/telemetry_core/__init__.py +192 -0
- codex_flow/data/scripts/telemetry_core/app_server.py +1192 -0
- codex_flow/data/scripts/telemetry_core/collector.py +1247 -0
- codex_flow/data/scripts/telemetry_core/common.py +421 -0
- codex_flow/data/scripts/telemetry_core/latency.py +593 -0
- codex_flow/data/scripts/telemetry_core/query.py +427 -0
- codex_flow/data/scripts/telemetry_core/quota_ledger.py +598 -0
- codex_flow/data/scripts/telemetry_core/render.py +460 -0
- codex_flow/data/scripts/telemetry_core/repair.py +223 -0
- codex_flow/data/scripts/ui.py +266 -0
- codex_flow/data/scripts/update-homebrew-formula.py +146 -0
- codex_flow/data/scripts/update_runtime_config.py +134 -0
- codex_flow/data/scripts/updater.py +1718 -0
- codex_flow/data/smithery.yaml +18 -0
- codex_flow/data/templates/agents/worker-explorer.toml +24 -0
- codex_flow/data/templates/agents/worker-implementer.toml +49 -0
- codex_flow/data/templates/agents/worker-reviewer.toml +25 -0
- codex_flow/data/templates/flow-pilot-instructions.md +35 -0
- codex_flow/data/templates/skills/flow-pilot/SKILL.md +577 -0
- codex_flow/mcp.py +35 -0
- codex_flow-2.1.13.dist-info/METADATA +342 -0
- codex_flow-2.1.13.dist-info/RECORD +113 -0
- codex_flow-2.1.13.dist-info/WHEEL +5 -0
- codex_flow-2.1.13.dist-info/entry_points.txt +3 -0
- codex_flow-2.1.13.dist-info/licenses/LICENSE +21 -0
- codex_flow-2.1.13.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
|
+
CODEX_HOME="${CODEX_HOME:-$HOME/.codex}"
|
|
6
|
+
CONFIG="$CODEX_HOME/config.toml"
|
|
7
|
+
POLICY="$CODEX_HOME/codex-flow.toml"
|
|
8
|
+
HOOKS="$CODEX_HOME/hooks.json"
|
|
9
|
+
DEFAULTS="$ROOT_DIR/policy/defaults.toml"
|
|
10
|
+
STATE_DIR="$CODEX_HOME/codex-flow"
|
|
11
|
+
BIN_DIR="${CODEX_FLOW_BIN_DIR:-$HOME/.local/bin}"
|
|
12
|
+
SHELL_VALUE="${CODEX_FLOW_SHELL:-${SHELL:-}}"
|
|
13
|
+
SHELL_NAME="${SHELL_VALUE##*/}"
|
|
14
|
+
SHELL_CONFIG_DIR="${CODEX_FLOW_SHELL_CONFIG_DIR:-$HOME}"
|
|
15
|
+
STAMP="$(date +%Y%m%d-%H%M%S)"
|
|
16
|
+
VERSION="$(cat "$ROOT_DIR/VERSION" 2>/dev/null || echo dev)"
|
|
17
|
+
LOCALIZATION="$ROOT_DIR/scripts/localization.py"
|
|
18
|
+
|
|
19
|
+
command -v python3 >/dev/null 2>&1 || { echo "python3 is required" >&2; exit 1; }
|
|
20
|
+
|
|
21
|
+
read_toml_value() {
|
|
22
|
+
local section="$1" key="$2" file="$3"
|
|
23
|
+
awk -v section="[$section]" -v key="$key" '
|
|
24
|
+
$0 == section { in_section=1; next }
|
|
25
|
+
/^\[/ { in_section=0 }
|
|
26
|
+
in_section && $0 ~ "^[[:space:]]*" key "[[:space:]]*=" {
|
|
27
|
+
value=$0; sub(/^[^=]*=[[:space:]]*/, "", value); sub(/[[:space:]]+#.*$/, "", value)
|
|
28
|
+
gsub(/^[[:space:]]+|[[:space:]]+$/, "", value)
|
|
29
|
+
if (value ~ /^".*"$/) { sub(/^"/, "", value); sub(/"$/, "", value) }
|
|
30
|
+
print value; found=1; exit
|
|
31
|
+
}
|
|
32
|
+
END { if (!found) exit 1 }
|
|
33
|
+
' "$file"
|
|
34
|
+
}
|
|
35
|
+
read_default() {
|
|
36
|
+
local section="$1" key="$2" value
|
|
37
|
+
if ! value="$(read_toml_value "$section" "$key" "$DEFAULTS")" || [[ -z "$value" ]]; then
|
|
38
|
+
printf 'missing [%s].%s in %s\n' "$section" "$key" "$DEFAULTS" >&2; exit 1
|
|
39
|
+
fi
|
|
40
|
+
printf '%s\n' "$value"
|
|
41
|
+
}
|
|
42
|
+
policy_or_default() {
|
|
43
|
+
local section="$1" key="$2" fallback="$3" value=""
|
|
44
|
+
if [[ -f "$POLICY" ]]; then
|
|
45
|
+
value="$(read_toml_value "$section" "$key" "$POLICY" 2>/dev/null || true)"
|
|
46
|
+
fi
|
|
47
|
+
printf '%s\n' "${value:-$fallback}"
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
DEFAULT_WORKER_MODEL="$(read_default models worker_model)"
|
|
51
|
+
DEFAULT_WORKER_POLICY="$(read_default models worker_policy)"
|
|
52
|
+
DEFAULT_PARENT_POLICY="$(read_default models parent_policy)"
|
|
53
|
+
DEFAULT_PARENT_MIN_MODEL="$(read_default models parent_min_model)"
|
|
54
|
+
DEFAULT_STRATEGY_ENABLED="$(read_default strategy enabled)"
|
|
55
|
+
DEFAULT_STRATEGY="$(read_default strategy profile)"
|
|
56
|
+
DEFAULT_ROUTING_MODE="$(read_default routing mode)"
|
|
57
|
+
DEFAULT_REVIEW_MODIFIER="$(read_default modifiers review)"
|
|
58
|
+
DEFAULT_FANOUT_MODIFIER="$(read_default modifiers fanout)"
|
|
59
|
+
DEFAULT_PARENT_MIN_EFFORT="$(read_default reasoning.parent minimum)"
|
|
60
|
+
DEFAULT_PARENT_ROUTINE_EFFORT="$(read_default reasoning.parent routine)"
|
|
61
|
+
DEFAULT_PARENT_COMPLEX_EFFORT="$(read_default reasoning.parent complex)"
|
|
62
|
+
DEFAULT_PARENT_CRITICAL_EFFORT="$(read_default reasoning.parent critical)"
|
|
63
|
+
DEFAULT_WORKER_MIN_EFFORT="$(read_default reasoning.worker minimum)"
|
|
64
|
+
DEFAULT_WORKER_ROUTINE_EFFORT="$(read_default reasoning.worker routine)"
|
|
65
|
+
DEFAULT_WORKER_COMPLEX_EFFORT="$(read_default reasoning.worker complex)"
|
|
66
|
+
DEFAULT_WORKER_CRITICAL_EFFORT="$(read_default reasoning.worker critical)"
|
|
67
|
+
DEFAULT_ROLLOUT_MODE="$(read_default reasoning.rollout mode)"
|
|
68
|
+
DEFAULT_ROLLOUT_MINIMUM="$(read_default reasoning.rollout minimum)"
|
|
69
|
+
DEFAULT_ROLLOUT_ROUTINE="$(read_default reasoning.rollout routine)"
|
|
70
|
+
DEFAULT_ROLLOUT_COMPLEX="$(read_default reasoning.rollout complex)"
|
|
71
|
+
DEFAULT_ROLLOUT_CRITICAL="$(read_default reasoning.rollout critical)"
|
|
72
|
+
DEFAULT_MAX_THREADS="$(read_default runtime max_concurrent_threads)"
|
|
73
|
+
DEFAULT_MAX_REPAIRS="$(read_default runtime max_repair_cycles)"
|
|
74
|
+
DEFAULT_TELEMETRY_ENABLED="$(read_default telemetry enabled)"
|
|
75
|
+
DEFAULT_TELEMETRY_NOTIFICATIONS="$(read_default telemetry notifications)"
|
|
76
|
+
DEFAULT_TELEMETRY_RETENTION_DAYS="$(read_default telemetry retention_days)"
|
|
77
|
+
|
|
78
|
+
EXISTING_STRATEGY_ENABLED="$(policy_or_default strategy enabled "$DEFAULT_STRATEGY_ENABLED")"
|
|
79
|
+
EXISTING_STRATEGY="$(policy_or_default strategy profile "$DEFAULT_STRATEGY")"
|
|
80
|
+
EXISTING_ROUTING="$(policy_or_default routing mode "$DEFAULT_ROUTING_MODE")"
|
|
81
|
+
EXISTING_REVIEW="$(policy_or_default modifiers review "$DEFAULT_REVIEW_MODIFIER")"
|
|
82
|
+
EXISTING_FANOUT="$(policy_or_default modifiers fanout "$DEFAULT_FANOUT_MODIFIER")"
|
|
83
|
+
EXISTING_PARENT_POLICY="$(policy_or_default parent model_policy "$DEFAULT_PARENT_POLICY")"
|
|
84
|
+
EXISTING_PARENT_MIN_MODEL="$(policy_or_default parent min_model "$DEFAULT_PARENT_MIN_MODEL")"
|
|
85
|
+
EXISTING_PARENT_MIN_EFFORT="$(policy_or_default parent min_reasoning_effort "$DEFAULT_PARENT_MIN_EFFORT")"
|
|
86
|
+
EXISTING_PARENT_ROUTINE_EFFORT="$(policy_or_default parent routine_effort "$DEFAULT_PARENT_ROUTINE_EFFORT")"
|
|
87
|
+
EXISTING_PARENT_COMPLEX_EFFORT="$(policy_or_default parent complex_effort "$DEFAULT_PARENT_COMPLEX_EFFORT")"
|
|
88
|
+
EXISTING_PARENT_CRITICAL_EFFORT="$(policy_or_default parent critical_effort "$DEFAULT_PARENT_CRITICAL_EFFORT")"
|
|
89
|
+
EXISTING_WORKER_POLICY="$(policy_or_default worker model_policy "$DEFAULT_WORKER_POLICY")"
|
|
90
|
+
EXISTING_WORKER_MODEL="$(policy_or_default worker model auto)"
|
|
91
|
+
EXISTING_WORKER_MIN_EFFORT="$(policy_or_default worker min_reasoning_effort "$DEFAULT_WORKER_MIN_EFFORT")"
|
|
92
|
+
EXISTING_WORKER_ROUTINE_EFFORT="$(policy_or_default worker routine_effort "$DEFAULT_WORKER_ROUTINE_EFFORT")"
|
|
93
|
+
EXISTING_WORKER_COMPLEX_EFFORT="$(policy_or_default worker complex_effort "$DEFAULT_WORKER_COMPLEX_EFFORT")"
|
|
94
|
+
EXISTING_WORKER_CRITICAL_EFFORT="$(policy_or_default worker critical_effort "$DEFAULT_WORKER_CRITICAL_EFFORT")"
|
|
95
|
+
EXISTING_ROLLOUT_MODE="$(policy_or_default reasoning.rollout mode "$DEFAULT_ROLLOUT_MODE")"
|
|
96
|
+
EXISTING_ROLLOUT_MINIMUM="$(policy_or_default reasoning.rollout minimum "$DEFAULT_ROLLOUT_MINIMUM")"
|
|
97
|
+
EXISTING_ROLLOUT_ROUTINE="$(policy_or_default reasoning.rollout routine "$DEFAULT_ROLLOUT_ROUTINE")"
|
|
98
|
+
EXISTING_ROLLOUT_COMPLEX="$(policy_or_default reasoning.rollout complex "$DEFAULT_ROLLOUT_COMPLEX")"
|
|
99
|
+
EXISTING_ROLLOUT_CRITICAL="$(policy_or_default reasoning.rollout critical "$DEFAULT_ROLLOUT_CRITICAL")"
|
|
100
|
+
EXISTING_MAX_THREADS="$(policy_or_default runtime max_concurrent_threads "$DEFAULT_MAX_THREADS")"
|
|
101
|
+
EXISTING_MAX_REPAIRS="$(policy_or_default runtime max_repair_cycles "$DEFAULT_MAX_REPAIRS")"
|
|
102
|
+
EXISTING_TELEMETRY_ENABLED="$(policy_or_default telemetry enabled "$DEFAULT_TELEMETRY_ENABLED")"
|
|
103
|
+
EXISTING_TELEMETRY_NOTIFICATIONS="$(policy_or_default telemetry notifications "$DEFAULT_TELEMETRY_NOTIFICATIONS")"
|
|
104
|
+
EXISTING_TELEMETRY_RETENTION_DAYS="$(policy_or_default telemetry retention_days "$DEFAULT_TELEMETRY_RETENTION_DAYS")"
|
|
105
|
+
EXISTING_UPDATE_CHANNEL="$(policy_or_default update channel stable)"
|
|
106
|
+
EXISTING_UPDATE_CHECK="$(policy_or_default update check true)"
|
|
107
|
+
EXISTING_UPDATE_INTERVAL="$(policy_or_default update check_interval_hours 24)"
|
|
108
|
+
EXISTING_UPDATE_NOTIFY_CLI="$(policy_or_default update notify_cli true)"
|
|
109
|
+
EXISTING_UPDATE_NOTIFY_APP="$(policy_or_default update notify_app true)"
|
|
110
|
+
EXISTING_UPDATE_AUTO_INSTALL="$(policy_or_default update auto_install true)"
|
|
111
|
+
|
|
112
|
+
STRATEGY_ENABLED="${CODEX_FLOW_STRATEGY_ENABLED:-$EXISTING_STRATEGY_ENABLED}"
|
|
113
|
+
STRATEGY_PROFILE="${CODEX_FLOW_STRATEGY:-$EXISTING_STRATEGY}"
|
|
114
|
+
ROUTING_MODE="${CODEX_FLOW_ROUTING_MODE:-$EXISTING_ROUTING}"
|
|
115
|
+
REVIEW_MODIFIER="${CODEX_FLOW_REVIEW_MODIFIER:-$EXISTING_REVIEW}"
|
|
116
|
+
FANOUT_MODIFIER="${CODEX_FLOW_FANOUT_MODIFIER:-$EXISTING_FANOUT}"
|
|
117
|
+
PARENT_MODEL_POLICY="${CODEX_FLOW_PARENT_MODEL_POLICY:-$EXISTING_PARENT_POLICY}"
|
|
118
|
+
PARENT_MIN_MODEL="${CODEX_FLOW_PARENT_MIN_MODEL:-$EXISTING_PARENT_MIN_MODEL}"
|
|
119
|
+
PARENT_MIN_EFFORT="${CODEX_FLOW_PARENT_MIN_EFFORT:-$EXISTING_PARENT_MIN_EFFORT}"
|
|
120
|
+
PARENT_ROUTINE_EFFORT="${CODEX_FLOW_PARENT_ROUTINE_EFFORT:-$EXISTING_PARENT_ROUTINE_EFFORT}"
|
|
121
|
+
PARENT_COMPLEX_EFFORT="${CODEX_FLOW_PARENT_COMPLEX_EFFORT:-$EXISTING_PARENT_COMPLEX_EFFORT}"
|
|
122
|
+
PARENT_CRITICAL_EFFORT="${CODEX_FLOW_PARENT_CRITICAL_EFFORT:-$EXISTING_PARENT_CRITICAL_EFFORT}"
|
|
123
|
+
WORKER_MODEL_POLICY="${CODEX_FLOW_WORKER_MODEL_POLICY:-$EXISTING_WORKER_POLICY}"
|
|
124
|
+
WORKER_MODEL_REQUESTED="${CODEX_FLOW_WORKER_MODEL:-$EXISTING_WORKER_MODEL}"
|
|
125
|
+
WORKER_MODEL="$WORKER_MODEL_REQUESTED"; [[ "$WORKER_MODEL" == "auto" ]] && WORKER_MODEL="$DEFAULT_WORKER_MODEL"
|
|
126
|
+
WORKER_MIN_EFFORT="${CODEX_FLOW_WORKER_MIN_EFFORT:-$EXISTING_WORKER_MIN_EFFORT}"
|
|
127
|
+
WORKER_ROUTINE_EFFORT="${CODEX_FLOW_WORKER_ROUTINE_EFFORT:-$EXISTING_WORKER_ROUTINE_EFFORT}"
|
|
128
|
+
WORKER_COMPLEX_EFFORT="${CODEX_FLOW_WORKER_COMPLEX_EFFORT:-$EXISTING_WORKER_COMPLEX_EFFORT}"
|
|
129
|
+
WORKER_CRITICAL_EFFORT="${CODEX_FLOW_WORKER_CRITICAL_EFFORT:-$EXISTING_WORKER_CRITICAL_EFFORT}"
|
|
130
|
+
ROLLOUT_MODE="${CODEX_FLOW_REASONING_ROLLOUT_MODE:-$EXISTING_ROLLOUT_MODE}"
|
|
131
|
+
ROLLOUT_MINIMUM="${CODEX_FLOW_REASONING_ROLLOUT_MINIMUM:-$EXISTING_ROLLOUT_MINIMUM}"
|
|
132
|
+
ROLLOUT_ROUTINE="${CODEX_FLOW_REASONING_ROLLOUT_ROUTINE:-$EXISTING_ROLLOUT_ROUTINE}"
|
|
133
|
+
ROLLOUT_COMPLEX="${CODEX_FLOW_REASONING_ROLLOUT_COMPLEX:-$EXISTING_ROLLOUT_COMPLEX}"
|
|
134
|
+
ROLLOUT_CRITICAL="${CODEX_FLOW_REASONING_ROLLOUT_CRITICAL:-$EXISTING_ROLLOUT_CRITICAL}"
|
|
135
|
+
MAX_THREADS="${CODEX_FLOW_MAX_THREADS:-$EXISTING_MAX_THREADS}"
|
|
136
|
+
MAX_REPAIRS="${CODEX_FLOW_MAX_REPAIR_CYCLES:-$EXISTING_MAX_REPAIRS}"
|
|
137
|
+
TELEMETRY_ENABLED="${CODEX_FLOW_TELEMETRY_ENABLED:-$EXISTING_TELEMETRY_ENABLED}"
|
|
138
|
+
TELEMETRY_NOTIFICATIONS="${CODEX_FLOW_TELEMETRY_NOTIFICATIONS:-$EXISTING_TELEMETRY_NOTIFICATIONS}"
|
|
139
|
+
TELEMETRY_RETENTION_DAYS="${CODEX_FLOW_TELEMETRY_RETENTION_DAYS:-$EXISTING_TELEMETRY_RETENTION_DAYS}"
|
|
140
|
+
UPDATE_CHANNEL="${CODEX_FLOW_UPDATE_CHANNEL:-$EXISTING_UPDATE_CHANNEL}"
|
|
141
|
+
UPDATE_CHECK="${CODEX_FLOW_UPDATE_CHECK:-$EXISTING_UPDATE_CHECK}"
|
|
142
|
+
UPDATE_INTERVAL="${CODEX_FLOW_UPDATE_CHECK_INTERVAL_HOURS:-$EXISTING_UPDATE_INTERVAL}"
|
|
143
|
+
UPDATE_NOTIFY_CLI="${CODEX_FLOW_UPDATE_NOTIFY_CLI:-$EXISTING_UPDATE_NOTIFY_CLI}"
|
|
144
|
+
UPDATE_NOTIFY_APP="${CODEX_FLOW_UPDATE_NOTIFY_APP:-$EXISTING_UPDATE_NOTIFY_APP}"
|
|
145
|
+
UPDATE_AUTO_INSTALL="${CODEX_FLOW_UPDATE_AUTO_INSTALL:-$EXISTING_UPDATE_AUTO_INSTALL}"
|
|
146
|
+
UI_LANGUAGE="auto"
|
|
147
|
+
if [[ -f "$POLICY" ]]; then UI_LANGUAGE="$(python3 "$LOCALIZATION" --policy "$POLICY" --configured 2>/dev/null || echo auto)"; fi
|
|
148
|
+
UI_LANGUAGE="$(python3 "$LOCALIZATION" --normalize "$UI_LANGUAGE")"
|
|
149
|
+
|
|
150
|
+
case "$STRATEGY_ENABLED" in true|false) ;; *) echo "CODEX_FLOW_STRATEGY_ENABLED must be true or false" >&2; exit 2 ;; esac
|
|
151
|
+
case "$STRATEGY_PROFILE" in efficient|balanced|quality|speed) ;; *) echo "CODEX_FLOW_STRATEGY must be efficient, balanced, quality, or speed" >&2; exit 2 ;; esac
|
|
152
|
+
case "$ROUTING_MODE" in adaptive|direct|delegate) ;; *) echo "CODEX_FLOW_ROUTING_MODE must be adaptive, direct, or delegate" >&2; exit 2 ;; esac
|
|
153
|
+
case "$REVIEW_MODIFIER" in auto|standard|strict) ;; *) echo "CODEX_FLOW_REVIEW_MODIFIER must be auto, standard, or strict" >&2; exit 2 ;; esac
|
|
154
|
+
case "$FANOUT_MODIFIER" in auto|conservative|aggressive) ;; *) echo "CODEX_FLOW_FANOUT_MODIFIER must be auto, conservative, or aggressive" >&2; exit 2 ;; esac
|
|
155
|
+
for effort in "$PARENT_MIN_EFFORT" "$PARENT_ROUTINE_EFFORT" "$PARENT_COMPLEX_EFFORT" "$PARENT_CRITICAL_EFFORT" "$WORKER_MIN_EFFORT" "$WORKER_ROUTINE_EFFORT" "$WORKER_COMPLEX_EFFORT" "$WORKER_CRITICAL_EFFORT"; do
|
|
156
|
+
case "$effort" in high|xhigh|max) ;; *) echo "reasoning efforts must be high, xhigh, or max" >&2; exit 2 ;; esac
|
|
157
|
+
done
|
|
158
|
+
case "$ROLLOUT_MODE" in legacy|shadow|adaptive) ;; *) echo "CODEX_FLOW_REASONING_ROLLOUT_MODE must be legacy, shadow, or adaptive" >&2; exit 2 ;; esac
|
|
159
|
+
for effort in "$ROLLOUT_MINIMUM" "$ROLLOUT_ROUTINE" "$ROLLOUT_COMPLEX" "$ROLLOUT_CRITICAL"; do
|
|
160
|
+
case "$effort" in high|xhigh|max) ;; *) echo "reasoning rollout efforts must be high, xhigh, or max" >&2; exit 2 ;; esac
|
|
161
|
+
done
|
|
162
|
+
case "$TELEMETRY_ENABLED" in true|false) ;; *) echo "CODEX_FLOW_TELEMETRY_ENABLED must be true or false" >&2; exit 2 ;; esac
|
|
163
|
+
case "$TELEMETRY_NOTIFICATIONS" in true|false) ;; *) echo "CODEX_FLOW_TELEMETRY_NOTIFICATIONS must be true or false" >&2; exit 2 ;; esac
|
|
164
|
+
[[ "$MAX_THREADS" =~ ^[1-9][0-9]*$ ]] || { echo "CODEX_FLOW_MAX_THREADS must be a positive integer" >&2; exit 2; }
|
|
165
|
+
[[ "$MAX_REPAIRS" =~ ^[0-9]+$ ]] || { echo "CODEX_FLOW_MAX_REPAIR_CYCLES must be a non-negative integer" >&2; exit 2; }
|
|
166
|
+
[[ "$TELEMETRY_RETENTION_DAYS" =~ ^[1-9][0-9]*$ ]] || { echo "CODEX_FLOW_TELEMETRY_RETENTION_DAYS must be a positive integer" >&2; exit 2; }
|
|
167
|
+
case "$UPDATE_CHANNEL" in stable|beta|nightly) ;; *) echo "CODEX_FLOW_UPDATE_CHANNEL must be stable, beta, or nightly" >&2; exit 2 ;; esac
|
|
168
|
+
case "$UPDATE_CHECK" in true|false) ;; *) echo "CODEX_FLOW_UPDATE_CHECK must be true or false" >&2; exit 2 ;; esac
|
|
169
|
+
case "$UPDATE_NOTIFY_CLI" in true|false) ;; *) echo "CODEX_FLOW_UPDATE_NOTIFY_CLI must be true or false" >&2; exit 2 ;; esac
|
|
170
|
+
case "$UPDATE_NOTIFY_APP" in true|false) ;; *) echo "CODEX_FLOW_UPDATE_NOTIFY_APP must be true or false" >&2; exit 2 ;; esac
|
|
171
|
+
case "$UPDATE_AUTO_INSTALL" in true|false) ;; *) echo "CODEX_FLOW_UPDATE_AUTO_INSTALL must be true or false" >&2; exit 2 ;; esac
|
|
172
|
+
[[ "$UPDATE_INTERVAL" =~ ^[1-9][0-9]*$ ]] || { echo "CODEX_FLOW_UPDATE_CHECK_INTERVAL_HOURS must be a positive integer" >&2; exit 2; }
|
|
173
|
+
|
|
174
|
+
mkdir -p "$CODEX_HOME/agents" "$CODEX_HOME/skills/flow-pilot" "$STATE_DIR" "$STATE_DIR/state" "$STATE_DIR/versions" "$BIN_DIR"
|
|
175
|
+
# Validate and install the prompt entry before changing policy/configuration.
|
|
176
|
+
# The helper owns only its marked block and refuses malformed markers or
|
|
177
|
+
# symlinks instead of replacing an unexpected target.
|
|
178
|
+
INSTRUCTION_HELPER="$STATE_DIR/manage-instructions.py"
|
|
179
|
+
INSTRUCTION_TEMPLATE="$STATE_DIR/flow-pilot-instructions.md"
|
|
180
|
+
cp "$ROOT_DIR/scripts/manage-instructions.py" "$INSTRUCTION_HELPER"
|
|
181
|
+
cp "$ROOT_DIR/templates/flow-pilot-instructions.md" "$INSTRUCTION_TEMPLATE"
|
|
182
|
+
chmod +x "$INSTRUCTION_HELPER"
|
|
183
|
+
python3 "$INSTRUCTION_HELPER" --codex-home "$CODEX_HOME" --template "$INSTRUCTION_TEMPLATE" install >/dev/null
|
|
184
|
+
if [[ -f "$CONFIG" ]]; then cp "$CONFIG" "$CONFIG.codex-flow.$STAMP.bak"; else touch "$CONFIG"; fi
|
|
185
|
+
|
|
186
|
+
python3 - "$CONFIG" "$WORKER_MODEL" "$WORKER_MIN_EFFORT" "$MAX_THREADS" <<'PY'
|
|
187
|
+
from pathlib import Path
|
|
188
|
+
import re, sys
|
|
189
|
+
path = Path(sys.argv[1]); worker_model, worker_effort, max_threads = sys.argv[2:5]
|
|
190
|
+
text = path.read_text() if path.exists() else ""
|
|
191
|
+
managed = {"enabled":"true","max_concurrent_threads_per_session":max_threads,"default_subagent_model":f'"{worker_model}"',"default_subagent_reasoning_effort":f'"{worker_effort}"'}
|
|
192
|
+
section_re = re.compile(r"(?ms)^\[agents\]\s*\n(.*?)(?=^\[[^\n]+\]\s*$|\Z)")
|
|
193
|
+
m = section_re.search(text)
|
|
194
|
+
if m:
|
|
195
|
+
body=m.group(1)
|
|
196
|
+
for key,value in managed.items():
|
|
197
|
+
rx=re.compile(rf"(?m)^\s*{re.escape(key)}\s*=.*$"); line=f"{key} = {value}"
|
|
198
|
+
if rx.search(body): body=rx.sub(line,body)
|
|
199
|
+
else:
|
|
200
|
+
if body and not body.endswith("\n"): body += "\n"
|
|
201
|
+
body += line + "\n"
|
|
202
|
+
text=text[:m.start(1)] + body + text[m.end(1):]
|
|
203
|
+
else:
|
|
204
|
+
if text and not text.endswith("\n"): text += "\n"
|
|
205
|
+
if text and not text.endswith("\n\n"): text += "\n"
|
|
206
|
+
text += "[agents]\n" + "".join(f"{k} = {v}\n" for k,v in managed.items())
|
|
207
|
+
path.write_text(text)
|
|
208
|
+
PY
|
|
209
|
+
|
|
210
|
+
cat > "$POLICY" <<EOF
|
|
211
|
+
schema_version = 4
|
|
212
|
+
|
|
213
|
+
[ui]
|
|
214
|
+
language = "$UI_LANGUAGE"
|
|
215
|
+
|
|
216
|
+
[strategy]
|
|
217
|
+
enabled = $STRATEGY_ENABLED
|
|
218
|
+
profile = "$STRATEGY_PROFILE"
|
|
219
|
+
|
|
220
|
+
[routing]
|
|
221
|
+
mode = "$ROUTING_MODE"
|
|
222
|
+
|
|
223
|
+
[modifiers]
|
|
224
|
+
review = "$REVIEW_MODIFIER"
|
|
225
|
+
fanout = "$FANOUT_MODIFIER"
|
|
226
|
+
|
|
227
|
+
[parent]
|
|
228
|
+
model_policy = "$PARENT_MODEL_POLICY"
|
|
229
|
+
min_model = "$PARENT_MIN_MODEL"
|
|
230
|
+
min_reasoning_effort = "$PARENT_MIN_EFFORT"
|
|
231
|
+
reasoning_policy = "adaptive"
|
|
232
|
+
routine_effort = "$PARENT_ROUTINE_EFFORT"
|
|
233
|
+
complex_effort = "$PARENT_COMPLEX_EFFORT"
|
|
234
|
+
critical_effort = "$PARENT_CRITICAL_EFFORT"
|
|
235
|
+
|
|
236
|
+
[worker]
|
|
237
|
+
model_policy = "$WORKER_MODEL_POLICY"
|
|
238
|
+
model = "$WORKER_MODEL_REQUESTED"
|
|
239
|
+
resolved_model = "$WORKER_MODEL"
|
|
240
|
+
min_reasoning_effort = "$WORKER_MIN_EFFORT"
|
|
241
|
+
reasoning_policy = "adaptive"
|
|
242
|
+
routine_effort = "$WORKER_ROUTINE_EFFORT"
|
|
243
|
+
complex_effort = "$WORKER_COMPLEX_EFFORT"
|
|
244
|
+
critical_effort = "$WORKER_CRITICAL_EFFORT"
|
|
245
|
+
|
|
246
|
+
[reasoning.rollout]
|
|
247
|
+
mode = "$ROLLOUT_MODE"
|
|
248
|
+
minimum = "$ROLLOUT_MINIMUM"
|
|
249
|
+
routine = "$ROLLOUT_ROUTINE"
|
|
250
|
+
complex = "$ROLLOUT_COMPLEX"
|
|
251
|
+
critical = "$ROLLOUT_CRITICAL"
|
|
252
|
+
|
|
253
|
+
[runtime]
|
|
254
|
+
max_concurrent_threads = $MAX_THREADS
|
|
255
|
+
max_repair_cycles = $MAX_REPAIRS
|
|
256
|
+
|
|
257
|
+
[telemetry]
|
|
258
|
+
enabled = $TELEMETRY_ENABLED
|
|
259
|
+
summary = true
|
|
260
|
+
notifications = $TELEMETRY_NOTIFICATIONS
|
|
261
|
+
retention_days = $TELEMETRY_RETENTION_DAYS
|
|
262
|
+
source = "hooks+app-server"
|
|
263
|
+
|
|
264
|
+
[update]
|
|
265
|
+
channel = "$UPDATE_CHANNEL"
|
|
266
|
+
check = $UPDATE_CHECK
|
|
267
|
+
check_interval_hours = $UPDATE_INTERVAL
|
|
268
|
+
notify_cli = $UPDATE_NOTIFY_CLI
|
|
269
|
+
notify_app = $UPDATE_NOTIFY_APP
|
|
270
|
+
auto_install = $UPDATE_AUTO_INSTALL
|
|
271
|
+
EOF
|
|
272
|
+
|
|
273
|
+
cp "$ROOT_DIR/templates/agents/worker-explorer.toml" "$CODEX_HOME/agents/worker-explorer.toml"
|
|
274
|
+
cp "$ROOT_DIR/templates/agents/worker-implementer.toml" "$CODEX_HOME/agents/worker-implementer.toml"
|
|
275
|
+
cp "$ROOT_DIR/templates/agents/worker-reviewer.toml" "$CODEX_HOME/agents/worker-reviewer.toml"
|
|
276
|
+
cp "$ROOT_DIR/templates/skills/flow-pilot/SKILL.md" "$CODEX_HOME/skills/flow-pilot/SKILL.md"
|
|
277
|
+
rm -f "$CODEX_HOME/agents/luna-explorer.toml" "$CODEX_HOME/agents/luna-implementer.toml"
|
|
278
|
+
|
|
279
|
+
printf '%s\n' "$ROOT_DIR" > "$STATE_DIR/source"
|
|
280
|
+
printf '%s\n' "$VERSION" > "$STATE_DIR/version"
|
|
281
|
+
printf '%s\n' "$BIN_DIR" > "$STATE_DIR/bin_dir"
|
|
282
|
+
cp "$DEFAULTS" "$STATE_DIR/defaults.toml"
|
|
283
|
+
cp "$ROOT_DIR/bin/codex-flow" "$BIN_DIR/codex-flow"; chmod +x "$BIN_DIR/codex-flow"
|
|
284
|
+
for file in updater.py update_runtime_config.py telemetry.py manage-hooks.py manage-instructions.py menu.py localization.py ui.py doctor.py strategy_runtime.py; do cp "$ROOT_DIR/scripts/$file" "$STATE_DIR/$file"; done
|
|
285
|
+
cp "$ROOT_DIR/templates/flow-pilot-instructions.md" "$STATE_DIR/flow-pilot-instructions.md"
|
|
286
|
+
rm -rf "$STATE_DIR/strategies" "$STATE_DIR/telemetry_core"
|
|
287
|
+
cp -r "$ROOT_DIR/scripts/strategies" "$STATE_DIR/strategies"
|
|
288
|
+
cp -r "$ROOT_DIR/scripts/telemetry_core" "$STATE_DIR/telemetry_core"
|
|
289
|
+
chmod +x "$STATE_DIR/updater.py" "$STATE_DIR/telemetry.py" "$STATE_DIR/manage-hooks.py" "$STATE_DIR/manage-instructions.py" "$STATE_DIR/menu.py" "$STATE_DIR/localization.py" "$STATE_DIR/ui.py" "$STATE_DIR/doctor.py" "$STATE_DIR/strategy_runtime.py"
|
|
290
|
+
|
|
291
|
+
if [[ "$TELEMETRY_ENABLED" == "true" ]]; then python3 "$STATE_DIR/manage-hooks.py" install --hooks "$HOOKS" --script "$STATE_DIR/telemetry.py"; else python3 "$STATE_DIR/manage-hooks.py" uninstall --hooks "$HOOKS"; fi
|
|
292
|
+
|
|
293
|
+
if [[ "$SHELL_NAME" == "bash" || "$SHELL_NAME" == "zsh" ]]; then
|
|
294
|
+
mkdir -p "$STATE_DIR/shell"
|
|
295
|
+
cp "$ROOT_DIR/scripts/manage-shell.py" "$STATE_DIR/shell/manage-shell.py"
|
|
296
|
+
cp "$ROOT_DIR/completions/codex-flow.$SHELL_NAME" "$STATE_DIR/shell/codex-flow.$SHELL_NAME"
|
|
297
|
+
python3 "$STATE_DIR/shell/manage-shell.py" install --state-dir "$STATE_DIR" --shell "$SHELL_NAME" --config-dir "$SHELL_CONFIG_DIR" --bin-dir "$BIN_DIR"
|
|
298
|
+
fi
|
|
299
|
+
|
|
300
|
+
if [[ "$(uname -s)" == "Darwin" && -d "$ROOT_DIR/apps/macos-overlay" ]]; then
|
|
301
|
+
mkdir -p "$STATE_DIR/bin"
|
|
302
|
+
[[ -f "$ROOT_DIR/apps/macos-overlay/bin/FlowPilot" ]] && { cp "$ROOT_DIR/apps/macos-overlay/bin/FlowPilot" "$STATE_DIR/bin/FlowPilot"; chmod +x "$STATE_DIR/bin/FlowPilot"; }
|
|
303
|
+
[[ -f "$ROOT_DIR/apps/macos-overlay/bin/codex-flow-overlay" ]] && { cp "$ROOT_DIR/apps/macos-overlay/bin/codex-flow-overlay" "$STATE_DIR/bin/codex-flow-overlay"; chmod +x "$STATE_DIR/bin/codex-flow-overlay"; }
|
|
304
|
+
if [[ -f "$STATE_DIR/autostart-preference" ]] && grep -qiE '^(enabled|true|1|yes)$' "$STATE_DIR/autostart-preference" 2>/dev/null; then
|
|
305
|
+
[[ -x "$STATE_DIR/bin/FlowPilot" ]] && "$STATE_DIR/bin/FlowPilot" autostart enable >/dev/null 2>&1 || true
|
|
306
|
+
fi
|
|
307
|
+
fi
|
|
308
|
+
|
|
309
|
+
UI_LANG="$(python3 "$LOCALIZATION" --policy "$POLICY" --resolved 2>/dev/null || echo en)"
|
|
310
|
+
cf_t() { if [[ "$UI_LANG" == "zh" ]]; then printf '%s' "$2"; else printf '%s' "$1"; fi; }
|
|
311
|
+
display_path() { local p="$1"; if [[ -n "${HOME:-}" && "$p" == "$HOME"* ]]; then printf '~%s' "${p#$HOME}"; else printf '%s' "$p"; fi; }
|
|
312
|
+
disp_policy="$(display_path "$POLICY")"; disp_cli="$(display_path "$BIN_DIR/codex-flow")"; disp_shell_rc="$(display_path "$SHELL_CONFIG_DIR/.${SHELL_NAME}rc")"
|
|
313
|
+
|
|
314
|
+
printf '\n🚀 %s\n\n' "$(cf_t "codex-flow v$VERSION installed successfully" "codex-flow v$VERSION 安装成功")"
|
|
315
|
+
printf ' ╭─ %s ──────────────────────────────────────────────────────────╮\n' "$(cf_t 'Summary' '安装摘要')"
|
|
316
|
+
printf ' │ • %s: %s\n' "$(cf_t 'Policy' '策略文件')" "$disp_policy"
|
|
317
|
+
printf ' │ • CLI: %s\n' "$disp_cli"
|
|
318
|
+
printf ' │ • Skill: FlowPilot (flow-pilot)\n'
|
|
319
|
+
printf ' │ • Entry: global AGENTS.md instructions installed\n'
|
|
320
|
+
printf ' │ • %s: %s / %s\n' "$(cf_t 'Strategy' '执行策略')" "$STRATEGY_PROFILE" "$ROUTING_MODE"
|
|
321
|
+
printf ' │ • %s: %s (%s / %s / %s / %s)\n' "$(cf_t 'Reasoning rollout' '推理 rollout')" "$ROLLOUT_MODE" "$ROLLOUT_MINIMUM" "$ROLLOUT_ROUTINE" "$ROLLOUT_COMPLEX" "$ROLLOUT_CRITICAL"
|
|
322
|
+
printf ' │ • %s: review=%s / fanout=%s\n' "$(cf_t 'Modifiers' '修饰策略')" "$REVIEW_MODIFIER" "$FANOUT_MODIFIER"
|
|
323
|
+
printf ' │ • %s: parent (%s) -> worker (%s)\n' "$(cf_t 'Models' '模型')" "$PARENT_MODEL_POLICY" "$WORKER_MODEL"
|
|
324
|
+
printf ' │ • %s: %s (%s: %s)\n' "$(cf_t 'Language' '语言')" "$UI_LANGUAGE" "$(cf_t 'configured' '配置')" "$UI_LANG"
|
|
325
|
+
if [[ "$TELEMETRY_ENABLED" == "true" ]]; then printf ' │ • Telemetry: ● enabled (%sd retention)\n' "$TELEMETRY_RETENTION_DAYS"; else printf ' │ • Telemetry: ○ disabled\n'; fi
|
|
326
|
+
printf ' ╰────────────────────────────────────────────────────────────────────╯\n\n'
|
|
327
|
+
|
|
328
|
+
if [[ "$UI_LANG" == "zh" ]]; then
|
|
329
|
+
printf ' ┌─ ⚠️ 必须完成的后续步骤 ───────────────────────────────────────────┐\n'
|
|
330
|
+
if [[ "$SHELL_NAME" == "bash" || "$SHELL_NAME" == "zsh" ]]; then
|
|
331
|
+
printf ' │ [1/3] Shell 补全:执行 source %s(或打开新终端)\n' "$disp_shell_rc"
|
|
332
|
+
else
|
|
333
|
+
printf ' │ [1/3] PATH:确保 %s 所在目录已加入 PATH\n' "$disp_cli"
|
|
334
|
+
fi
|
|
335
|
+
printf ' │ [2/3] 完整重启 Codex:完全退出后重新启动,仅新建任务不够。\n'
|
|
336
|
+
if [[ "$TELEMETRY_ENABLED" == "true" ]]; then
|
|
337
|
+
printf ' │ [3/3] 授权 Hooks:在 Codex 中运行 /hooks,并批准 FlowPilot telemetry。\n'
|
|
338
|
+
else
|
|
339
|
+
printf ' │ [3/3] Hooks:遥测已关闭,无需进行 hook 授权。\n'
|
|
340
|
+
fi
|
|
341
|
+
printf ' └────────────────────────────────────────────────────────────────────┘\n\n'
|
|
342
|
+
else
|
|
343
|
+
printf ' ┌─ ⚠️ REQUIRED NEXT STEPS ───────────────────────────────────────────┐\n'
|
|
344
|
+
if [[ "$SHELL_NAME" == "bash" || "$SHELL_NAME" == "zsh" ]]; then
|
|
345
|
+
printf ' │ [1/3] Shell Completion\n'
|
|
346
|
+
printf ' │ Run: source %s (or open a new terminal)\n' "$disp_shell_rc"
|
|
347
|
+
else
|
|
348
|
+
printf ' │ [1/3] PATH Configuration\n'
|
|
349
|
+
printf ' │ Add %s to PATH to run codex-flow status\n' "${disp_cli%/*}"
|
|
350
|
+
fi
|
|
351
|
+
printf ' │ [2/3] Complete Codex Restart\n'
|
|
352
|
+
printf ' │ Fully quit Codex and relaunch it. Starting a new task\n'
|
|
353
|
+
printf ' │ alone is NOT enough to load new hooks and snapshots.\n'
|
|
354
|
+
if [[ "$TELEMETRY_ENABLED" == "true" ]]; then
|
|
355
|
+
printf ' │ [3/3] Authorize Hooks\n'
|
|
356
|
+
printf ' │ Run /hooks in Codex and approve FlowPilot telemetry if it is pending approval.\n'
|
|
357
|
+
else
|
|
358
|
+
printf ' │ [3/3] Hooks Status\n'
|
|
359
|
+
printf ' │ Telemetry is disabled: no hook authorization is required.\n'
|
|
360
|
+
fi
|
|
361
|
+
printf ' └────────────────────────────────────────────────────────────────────┘\n\n'
|
|
362
|
+
fi
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
schema_version = 2
|
|
2
|
+
|
|
3
|
+
[quality]
|
|
4
|
+
routine_min_pass_rate = 0.90
|
|
5
|
+
complex_min_pass_rate = 0.95
|
|
6
|
+
critical_min_pass_rate = 1.00
|
|
7
|
+
min_samples_per_configuration = 3
|
|
8
|
+
max_average_repair_cycles = 1.0
|
|
9
|
+
|
|
10
|
+
[comparison]
|
|
11
|
+
# The three direct strategies and codex-flow-high use the same `high` effort.
|
|
12
|
+
# codex-flow-adaptive is reported separately so its extra reasoning is never
|
|
13
|
+
# mistaken for a model or fixed-flow advantage.
|
|
14
|
+
sol_strategy_id = "sol-direct"
|
|
15
|
+
worker_strategy_id = "luna-direct"
|
|
16
|
+
flow_strategy_id = "codex-flow-high"
|
|
17
|
+
adaptive_flow_strategy_id = "codex-flow-adaptive"
|
|
18
|
+
min_samples = 3
|
|
19
|
+
|
|
20
|
+
# Sol must be no worse on final quality and materially improve at least one
|
|
21
|
+
# quality dimension over the strongest other direct model.
|
|
22
|
+
sol_min_pass_rate_gain = 0.05
|
|
23
|
+
sol_min_first_pass_rate_gain = 0.10
|
|
24
|
+
sol_min_repair_reduction = 0.25
|
|
25
|
+
|
|
26
|
+
# Fixed-high flow must preserve Sol quality, reduce total mixed-model cost, and
|
|
27
|
+
# improve over using the worker model directly.
|
|
28
|
+
flow_max_pass_rate_regression_vs_sol = 0.02
|
|
29
|
+
flow_min_cost_reduction_vs_sol = 0.30
|
|
30
|
+
flow_min_pass_rate_gain_vs_worker = 0.05
|
|
31
|
+
flow_min_first_pass_rate_gain_vs_worker = 0.10
|
|
32
|
+
flow_min_repair_reduction_vs_worker = 0.25
|
|
33
|
+
|
|
34
|
+
# Adaptive reasoning is valuable only when it produces a measurable quality or
|
|
35
|
+
# repair gain over fixed-high flow without more than a 50% cost increase.
|
|
36
|
+
adaptive_min_pass_rate_gain = 0.05
|
|
37
|
+
adaptive_min_first_pass_rate_gain = 0.10
|
|
38
|
+
adaptive_min_repair_reduction = 0.25
|
|
39
|
+
adaptive_max_cost_increase = 0.50
|
|
40
|
+
|
|
41
|
+
[cost]
|
|
42
|
+
# Used only after the quality gate passes. Prices are supplied by the benchmark
|
|
43
|
+
# snapshot so historical runs remain reproducible.
|
|
44
|
+
prefer_cached_input = true
|
|
45
|
+
|
|
46
|
+
[promotion]
|
|
47
|
+
# Benchmark output is advisory by default. A routing change must be reviewed
|
|
48
|
+
# before it is merged into release policy.
|
|
49
|
+
auto_apply = false
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
schema_version = 4
|
|
2
|
+
|
|
3
|
+
# Release-time recommendations. `auto` policy values resolve through this file.
|
|
4
|
+
# Keep workflow semantics model-agnostic; update only these recommendations as
|
|
5
|
+
# Codex model generations change.
|
|
6
|
+
[models]
|
|
7
|
+
parent_policy = "latest-capable"
|
|
8
|
+
parent_min_model = "auto"
|
|
9
|
+
parent_recommended_model = "gpt-5.6-sol"
|
|
10
|
+
worker_policy = "latest-efficient"
|
|
11
|
+
worker_model = "gpt-5.6-luna"
|
|
12
|
+
|
|
13
|
+
# FlowPilot is the strategy runtime. The default profile preserves the historical
|
|
14
|
+
# codex-flow objective while offloading more deep execution to cheap workers.
|
|
15
|
+
[strategy]
|
|
16
|
+
enabled = true
|
|
17
|
+
profile = "efficient"
|
|
18
|
+
|
|
19
|
+
# Routing is an execution constraint, not a strategy. Prompt-level explicit
|
|
20
|
+
# direct/delegate/adaptive instructions may override this for one task only.
|
|
21
|
+
[routing]
|
|
22
|
+
mode = "adaptive"
|
|
23
|
+
|
|
24
|
+
# Orthogonal behavior modifiers avoid combinatorial strategy names.
|
|
25
|
+
[modifiers]
|
|
26
|
+
review = "auto"
|
|
27
|
+
fanout = "auto"
|
|
28
|
+
|
|
29
|
+
# This is the single release-time source of truth for reasoning defaults. Parent
|
|
30
|
+
# reasoning is intentionally economical because the capable parent model is much
|
|
31
|
+
# more expensive. Efficient workers receive one higher effort tier by default.
|
|
32
|
+
[reasoning.parent]
|
|
33
|
+
minimum = "high"
|
|
34
|
+
routine = "high"
|
|
35
|
+
complex = "high"
|
|
36
|
+
critical = "xhigh"
|
|
37
|
+
|
|
38
|
+
[reasoning.worker]
|
|
39
|
+
minimum = "xhigh"
|
|
40
|
+
routine = "xhigh"
|
|
41
|
+
complex = "xhigh"
|
|
42
|
+
critical = "max"
|
|
43
|
+
|
|
44
|
+
# Efficient-only reasoning rollout. Shadow reports the proposed effort without
|
|
45
|
+
# changing the legacy runtime selection; adaptive applies the proposal.
|
|
46
|
+
[reasoning.rollout]
|
|
47
|
+
mode = "shadow"
|
|
48
|
+
minimum = "high"
|
|
49
|
+
routine = "high"
|
|
50
|
+
complex = "xhigh"
|
|
51
|
+
critical = "max"
|
|
52
|
+
|
|
53
|
+
[runtime]
|
|
54
|
+
max_concurrent_threads = 4
|
|
55
|
+
max_repair_cycles = 2
|
|
56
|
+
|
|
57
|
+
[telemetry]
|
|
58
|
+
enabled = true
|
|
59
|
+
summary = true
|
|
60
|
+
notifications = false
|
|
61
|
+
retention_days = 30
|
|
62
|
+
source = "hooks+app-server"
|
|
63
|
+
|
|
64
|
+
[update]
|
|
65
|
+
channel = "stable"
|
|
66
|
+
check = true
|
|
67
|
+
check_interval_hours = 24
|
|
68
|
+
notify_cli = true
|
|
69
|
+
notify_app = true
|
|
70
|
+
auto_install = true
|