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,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())