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.
Files changed (113) hide show
  1. codex_flow/__init__.py +28 -0
  2. codex_flow/__main__.py +9 -0
  3. codex_flow/cli.py +242 -0
  4. codex_flow/data/LICENSE +21 -0
  5. codex_flow/data/README.en.md +303 -0
  6. codex_flow/data/README.md +305 -0
  7. codex_flow/data/VERSION +1 -0
  8. codex_flow/data/apps/chatgpt-mcp/README.md +86 -0
  9. codex_flow/data/apps/chatgpt-mcp/__init__.py +1 -0
  10. codex_flow/data/apps/chatgpt-mcp/adapter.py +458 -0
  11. codex_flow/data/apps/chatgpt-mcp/server.py +358 -0
  12. codex_flow/data/apps/chatgpt-mcp/widget.html +927 -0
  13. codex_flow/data/apps/macos-overlay/README.en.md +121 -0
  14. codex_flow/data/apps/macos-overlay/README.md +123 -0
  15. codex_flow/data/apps/macos-overlay/Sources/Controllers/OverlayRuntimeState.swift +126 -0
  16. codex_flow/data/apps/macos-overlay/Sources/Controllers/OverlayScreenGeometry.swift +82 -0
  17. codex_flow/data/apps/macos-overlay/Sources/Controllers/OverlayWindowController.swift +1052 -0
  18. codex_flow/data/apps/macos-overlay/Sources/Localization.swift +197 -0
  19. codex_flow/data/apps/macos-overlay/Sources/Models/TelemetryData.swift +1557 -0
  20. codex_flow/data/apps/macos-overlay/Sources/Services/AccountSnapshotService.swift +1101 -0
  21. codex_flow/data/apps/macos-overlay/Sources/Services/FlowPilotInstanceLock.swift +153 -0
  22. codex_flow/data/apps/macos-overlay/Sources/Services/IPCServer.swift +298 -0
  23. codex_flow/data/apps/macos-overlay/Sources/Services/TelemetryQueryEngine.swift +800 -0
  24. codex_flow/data/apps/macos-overlay/Sources/Services/TelemetryWatcher.swift +135 -0
  25. codex_flow/data/apps/macos-overlay/Sources/Services/UpdateService.swift +610 -0
  26. codex_flow/data/apps/macos-overlay/Sources/Views/AccountView.swift +610 -0
  27. codex_flow/data/apps/macos-overlay/Sources/Views/AnalyticsView.swift +566 -0
  28. codex_flow/data/apps/macos-overlay/Sources/Views/AutostartView.swift +293 -0
  29. codex_flow/data/apps/macos-overlay/Sources/Views/BubbleView.swift +317 -0
  30. codex_flow/data/apps/macos-overlay/Sources/Views/HistoryView.swift +1124 -0
  31. codex_flow/data/apps/macos-overlay/Sources/Views/HoverRevealText.swift +165 -0
  32. codex_flow/data/apps/macos-overlay/Sources/Views/InspectorSkillsToolsView.swift +121 -0
  33. codex_flow/data/apps/macos-overlay/Sources/Views/LogoView.swift +182 -0
  34. codex_flow/data/apps/macos-overlay/Sources/Views/SleekSwitch.swift +117 -0
  35. codex_flow/data/apps/macos-overlay/Sources/Views/StrategyModeView.swift +561 -0
  36. codex_flow/data/apps/macos-overlay/Sources/Views/SummaryView.swift +1273 -0
  37. codex_flow/data/apps/macos-overlay/Sources/Views/UpdateView.swift +352 -0
  38. codex_flow/data/apps/macos-overlay/Sources/main.swift +340 -0
  39. codex_flow/data/apps/macos-overlay/Tests/OverlayScreenGeometryTests.swift +163 -0
  40. codex_flow/data/apps/macos-overlay/Tests/TelemetryPhase1ContractTests.swift +357 -0
  41. codex_flow/data/apps/macos-overlay/Tests/TelemetryQueryEngineConcurrencyTests.swift +221 -0
  42. codex_flow/data/apps/macos-overlay/Tests/TelemetryQuotaSelectionTests.swift +158 -0
  43. codex_flow/data/apps/macos-overlay/Tests/TelemetryWorkerTokenTests.swift +122 -0
  44. codex_flow/data/apps/macos-overlay/build.sh +75 -0
  45. codex_flow/data/benchmark/corpus.json +103 -0
  46. codex_flow/data/benchmark/manifest.example.json +41 -0
  47. codex_flow/data/benchmark/manifest.schema.json +137 -0
  48. codex_flow/data/benchmark/prices/gpt-5.6-2026-08-30.json +5 -0
  49. codex_flow/data/benchmark/profiles.json +90 -0
  50. codex_flow/data/benchmark/schema.json +77 -0
  51. codex_flow/data/benchmark/tasks.json +50 -0
  52. codex_flow/data/completions/codex-flow.bash +34 -0
  53. codex_flow/data/completions/codex-flow.zsh +52 -0
  54. codex_flow/data/glama.json +6 -0
  55. codex_flow/data/install-release.ps1 +126 -0
  56. codex_flow/data/install-release.sh +155 -0
  57. codex_flow/data/install.ps1 +349 -0
  58. codex_flow/data/install.sh +362 -0
  59. codex_flow/data/policy/benchmark.toml +49 -0
  60. codex_flow/data/policy/defaults.toml +70 -0
  61. codex_flow/data/scripts/analyze-benchmark.py +510 -0
  62. codex_flow/data/scripts/benchmark-local.py +171 -0
  63. codex_flow/data/scripts/check-recommendation.py +277 -0
  64. codex_flow/data/scripts/doctor.py +449 -0
  65. codex_flow/data/scripts/generate-release-manifest.py +74 -0
  66. codex_flow/data/scripts/localization.py +192 -0
  67. codex_flow/data/scripts/manage-hooks.py +448 -0
  68. codex_flow/data/scripts/manage-instructions.py +389 -0
  69. codex_flow/data/scripts/manage-shell.py +151 -0
  70. codex_flow/data/scripts/materialize-corpus.py +193 -0
  71. codex_flow/data/scripts/menu.py +646 -0
  72. codex_flow/data/scripts/migrations/0001_update_settings.py +80 -0
  73. codex_flow/data/scripts/package-release.py +132 -0
  74. codex_flow/data/scripts/render-benchmark-report.py +292 -0
  75. codex_flow/data/scripts/run-benchmark.py +829 -0
  76. codex_flow/data/scripts/strategies/__init__.py +28 -0
  77. codex_flow/data/scripts/strategies/balanced.py +115 -0
  78. codex_flow/data/scripts/strategies/base.py +363 -0
  79. codex_flow/data/scripts/strategies/efficient.py +158 -0
  80. codex_flow/data/scripts/strategies/lifecycle_runtime.py +590 -0
  81. codex_flow/data/scripts/strategies/quality.py +209 -0
  82. codex_flow/data/scripts/strategies/speed.py +108 -0
  83. codex_flow/data/scripts/strategies/task_budget_runtime.py +644 -0
  84. codex_flow/data/scripts/strategies/task_phase_runtime.py +341 -0
  85. codex_flow/data/scripts/strategies/work_unit_runtime.py +421 -0
  86. codex_flow/data/scripts/strategy_runtime.py +1091 -0
  87. codex_flow/data/scripts/telemetry.py +400 -0
  88. codex_flow/data/scripts/telemetry_core/__init__.py +192 -0
  89. codex_flow/data/scripts/telemetry_core/app_server.py +1192 -0
  90. codex_flow/data/scripts/telemetry_core/collector.py +1247 -0
  91. codex_flow/data/scripts/telemetry_core/common.py +421 -0
  92. codex_flow/data/scripts/telemetry_core/latency.py +593 -0
  93. codex_flow/data/scripts/telemetry_core/query.py +427 -0
  94. codex_flow/data/scripts/telemetry_core/quota_ledger.py +598 -0
  95. codex_flow/data/scripts/telemetry_core/render.py +460 -0
  96. codex_flow/data/scripts/telemetry_core/repair.py +223 -0
  97. codex_flow/data/scripts/ui.py +266 -0
  98. codex_flow/data/scripts/update-homebrew-formula.py +146 -0
  99. codex_flow/data/scripts/update_runtime_config.py +134 -0
  100. codex_flow/data/scripts/updater.py +1718 -0
  101. codex_flow/data/smithery.yaml +18 -0
  102. codex_flow/data/templates/agents/worker-explorer.toml +24 -0
  103. codex_flow/data/templates/agents/worker-implementer.toml +49 -0
  104. codex_flow/data/templates/agents/worker-reviewer.toml +25 -0
  105. codex_flow/data/templates/flow-pilot-instructions.md +35 -0
  106. codex_flow/data/templates/skills/flow-pilot/SKILL.md +577 -0
  107. codex_flow/mcp.py +35 -0
  108. codex_flow-2.1.13.dist-info/METADATA +342 -0
  109. codex_flow-2.1.13.dist-info/RECORD +113 -0
  110. codex_flow-2.1.13.dist-info/WHEEL +5 -0
  111. codex_flow-2.1.13.dist-info/entry_points.txt +3 -0
  112. codex_flow-2.1.13.dist-info/licenses/LICENSE +21 -0
  113. 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