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,134 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Reconcile codex-flow-owned runtime settings without rewriting user config."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import argparse
|
|
7
|
+
import json
|
|
8
|
+
import os
|
|
9
|
+
import re
|
|
10
|
+
import tempfile
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def read_value(text: str, section: str, key: str) -> str | None:
|
|
15
|
+
section_match = re.search(
|
|
16
|
+
rf"(?ms)^\[{re.escape(section)}\]\s*\n(.*?)(?=^\[[^\n]+\]\s*$|\Z)", text
|
|
17
|
+
)
|
|
18
|
+
if not section_match:
|
|
19
|
+
return None
|
|
20
|
+
key_match = re.search(rf"(?m)^\s*{re.escape(key)}\s*=\s*(.*?)\s*$", section_match.group(1))
|
|
21
|
+
if not key_match:
|
|
22
|
+
return None
|
|
23
|
+
value = re.sub(r"\s+#.*$", "", key_match.group(1)).strip()
|
|
24
|
+
if len(value) >= 2 and value[0] == value[-1] == '"':
|
|
25
|
+
return value[1:-1]
|
|
26
|
+
return value
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def atomic_write(path: Path, text: str) -> None:
|
|
30
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
31
|
+
fd, name = tempfile.mkstemp(prefix=f".{path.name}.", dir=str(path.parent))
|
|
32
|
+
try:
|
|
33
|
+
with os.fdopen(fd, "w", encoding="utf-8", newline="\n") as handle:
|
|
34
|
+
handle.write(text)
|
|
35
|
+
handle.flush()
|
|
36
|
+
os.fsync(handle.fileno())
|
|
37
|
+
os.replace(name, path)
|
|
38
|
+
finally:
|
|
39
|
+
try:
|
|
40
|
+
os.unlink(name)
|
|
41
|
+
except FileNotFoundError:
|
|
42
|
+
pass
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def set_section_values(text: str, section: str, values: dict[str, str]) -> str:
|
|
46
|
+
section_re = re.compile(
|
|
47
|
+
rf"(?ms)^\[{re.escape(section)}\]\s*\n(.*?)(?=^\[[^\n]+\]\s*$|\Z)"
|
|
48
|
+
)
|
|
49
|
+
match = section_re.search(text)
|
|
50
|
+
if match:
|
|
51
|
+
body = match.group(1)
|
|
52
|
+
for key, value in values.items():
|
|
53
|
+
line = f"{key} = {value}"
|
|
54
|
+
key_re = re.compile(rf"(?m)^\s*{re.escape(key)}\s*=.*$")
|
|
55
|
+
if key_re.search(body):
|
|
56
|
+
body = key_re.sub(line, body)
|
|
57
|
+
else:
|
|
58
|
+
if body and not body.endswith("\n"):
|
|
59
|
+
body += "\n"
|
|
60
|
+
body += line + "\n"
|
|
61
|
+
return text[: match.start(1)] + body + text[match.end(1) :]
|
|
62
|
+
|
|
63
|
+
if text and not text.endswith("\n"):
|
|
64
|
+
text += "\n"
|
|
65
|
+
if text and not text.endswith("\n\n"):
|
|
66
|
+
text += "\n"
|
|
67
|
+
text += f"[{section}]\n"
|
|
68
|
+
text += "".join(f"{key} = {value}\n" for key, value in values.items())
|
|
69
|
+
return text
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def quoted(value: str) -> str:
|
|
73
|
+
return json.dumps(value, ensure_ascii=False)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def reconcile(config: Path, policy: Path, defaults: Path) -> None:
|
|
77
|
+
policy_text = policy.read_text(encoding="utf-8-sig")
|
|
78
|
+
defaults_text = defaults.read_text(encoding="utf-8-sig")
|
|
79
|
+
try:
|
|
80
|
+
config_text = config.read_text(encoding="utf-8-sig")
|
|
81
|
+
except OSError:
|
|
82
|
+
config_text = ""
|
|
83
|
+
|
|
84
|
+
requested_model = read_value(policy_text, "worker", "model") or "auto"
|
|
85
|
+
default_model = read_value(defaults_text, "models", "worker_model")
|
|
86
|
+
if not default_model:
|
|
87
|
+
raise RuntimeError("release defaults are missing [models].worker_model")
|
|
88
|
+
resolved_model = default_model if requested_model == "auto" else requested_model
|
|
89
|
+
|
|
90
|
+
worker_effort = (
|
|
91
|
+
read_value(policy_text, "worker", "min_reasoning_effort")
|
|
92
|
+
or read_value(defaults_text, "reasoning.worker", "minimum")
|
|
93
|
+
)
|
|
94
|
+
max_threads = (
|
|
95
|
+
read_value(policy_text, "runtime", "max_concurrent_threads")
|
|
96
|
+
or read_value(defaults_text, "runtime", "max_concurrent_threads")
|
|
97
|
+
)
|
|
98
|
+
if not worker_effort or not max_threads:
|
|
99
|
+
raise RuntimeError("release policy is missing worker effort or max thread settings")
|
|
100
|
+
if not re.fullmatch(r"[1-9][0-9]*", max_threads):
|
|
101
|
+
raise RuntimeError("invalid max_concurrent_threads in policy")
|
|
102
|
+
|
|
103
|
+
policy_text = set_section_values(
|
|
104
|
+
policy_text,
|
|
105
|
+
"worker",
|
|
106
|
+
{"resolved_model": quoted(resolved_model)},
|
|
107
|
+
)
|
|
108
|
+
config_text = set_section_values(
|
|
109
|
+
config_text,
|
|
110
|
+
"agents",
|
|
111
|
+
{
|
|
112
|
+
"enabled": "true",
|
|
113
|
+
"max_concurrent_threads_per_session": max_threads,
|
|
114
|
+
"default_subagent_model": quoted(resolved_model),
|
|
115
|
+
"default_subagent_reasoning_effort": quoted(worker_effort),
|
|
116
|
+
},
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
atomic_write(policy, policy_text)
|
|
120
|
+
atomic_write(config, config_text)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def main() -> int:
|
|
124
|
+
parser = argparse.ArgumentParser()
|
|
125
|
+
parser.add_argument("--config", required=True, type=Path)
|
|
126
|
+
parser.add_argument("--policy", required=True, type=Path)
|
|
127
|
+
parser.add_argument("--defaults", required=True, type=Path)
|
|
128
|
+
args = parser.parse_args()
|
|
129
|
+
reconcile(args.config, args.policy, args.defaults)
|
|
130
|
+
return 0
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
if __name__ == "__main__":
|
|
134
|
+
raise SystemExit(main())
|