agent-control-plane 0.4.9 → 0.7.0

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 (87) hide show
  1. package/README.md +109 -13
  2. package/npm/bin/agent-control-plane.js +1 -1
  3. package/package.json +39 -33
  4. package/tools/bin/debug-session.sh +106 -0
  5. package/tools/bin/flow-config-lib.sh +13 -3508
  6. package/tools/bin/flow-execution-lib.sh +243 -0
  7. package/tools/bin/flow-forge-lib.sh +1770 -0
  8. package/tools/bin/flow-profile-lib.sh +335 -0
  9. package/tools/bin/flow-provider-lib.sh +981 -0
  10. package/tools/bin/flow-runtime-doctor-linux.sh +136 -0
  11. package/tools/bin/flow-runtime-doctor.sh +5 -1
  12. package/tools/bin/flow-session-lib.sh +317 -0
  13. package/tools/bin/install-project-systemd.sh +255 -0
  14. package/tools/bin/project-runtimectl.sh +45 -0
  15. package/tools/bin/project-systemd-bootstrap.sh +74 -0
  16. package/tools/bin/uninstall-project-systemd.sh +87 -0
  17. package/tools/dashboard/app.js +238 -8
  18. package/tools/dashboard/issue_queue_state.py +101 -0
  19. package/tools/dashboard/requirements.txt +3 -0
  20. package/tools/dashboard/server.py +250 -30
  21. package/tools/dashboard/styles.css +526 -455
  22. package/tools/bin/agent-cleanup-worktree +0 -247
  23. package/tools/bin/agent-github-update-labels +0 -105
  24. package/tools/bin/agent-init-worktree +0 -216
  25. package/tools/bin/agent-project-archive-run +0 -52
  26. package/tools/bin/agent-project-capture-worker +0 -46
  27. package/tools/bin/agent-project-catch-up-issue-pr-links +0 -118
  28. package/tools/bin/agent-project-catch-up-merged-prs +0 -195
  29. package/tools/bin/agent-project-catch-up-scheduled-issue-retries +0 -123
  30. package/tools/bin/agent-project-cleanup-session +0 -513
  31. package/tools/bin/agent-project-detached-launch +0 -127
  32. package/tools/bin/agent-project-heartbeat-loop +0 -1029
  33. package/tools/bin/agent-project-open-issue-worktree +0 -89
  34. package/tools/bin/agent-project-open-pr-worktree +0 -80
  35. package/tools/bin/agent-project-publish-issue-pr +0 -468
  36. package/tools/bin/agent-project-reconcile-issue-session +0 -1409
  37. package/tools/bin/agent-project-reconcile-pr-session +0 -1288
  38. package/tools/bin/agent-project-retry-state +0 -158
  39. package/tools/bin/agent-project-run-claude-session +0 -805
  40. package/tools/bin/agent-project-run-codex-resilient +0 -963
  41. package/tools/bin/agent-project-run-codex-session +0 -435
  42. package/tools/bin/agent-project-run-kilo-session +0 -369
  43. package/tools/bin/agent-project-run-ollama-session +0 -658
  44. package/tools/bin/agent-project-run-openclaw-session +0 -1309
  45. package/tools/bin/agent-project-run-opencode-session +0 -377
  46. package/tools/bin/agent-project-run-pi-session +0 -479
  47. package/tools/bin/agent-project-sync-anchor-repo +0 -139
  48. package/tools/bin/agent-project-sync-source-repo-main +0 -163
  49. package/tools/bin/agent-project-worker-status +0 -188
  50. package/tools/bin/branch-verification-guard.sh +0 -364
  51. package/tools/bin/capture-worker.sh +0 -18
  52. package/tools/bin/cleanup-worktree.sh +0 -52
  53. package/tools/bin/codex-quota +0 -31
  54. package/tools/bin/create-follow-up-issue.sh +0 -114
  55. package/tools/bin/dashboard-launchd-bootstrap.sh +0 -50
  56. package/tools/bin/issue-publish-localization-guard.sh +0 -142
  57. package/tools/bin/issue-publish-scope-guard.sh +0 -242
  58. package/tools/bin/issue-requires-local-workspace-install.sh +0 -31
  59. package/tools/bin/issue-resource-class.sh +0 -12
  60. package/tools/bin/kick-scheduler.sh +0 -75
  61. package/tools/bin/label-follow-up-issues.sh +0 -14
  62. package/tools/bin/new-pr-worktree.sh +0 -50
  63. package/tools/bin/new-worktree.sh +0 -49
  64. package/tools/bin/pr-risk.sh +0 -12
  65. package/tools/bin/prepare-worktree.sh +0 -142
  66. package/tools/bin/provider-cooldown-state.sh +0 -204
  67. package/tools/bin/publish-issue-worker.sh +0 -31
  68. package/tools/bin/reconcile-bootstrap-lib.sh +0 -113
  69. package/tools/bin/reconcile-issue-worker.sh +0 -34
  70. package/tools/bin/reconcile-pr-worker.sh +0 -34
  71. package/tools/bin/record-verification.sh +0 -71
  72. package/tools/bin/render-flow-config.sh +0 -98
  73. package/tools/bin/resident-issue-controller-lib.sh +0 -448
  74. package/tools/bin/retry-state.sh +0 -31
  75. package/tools/bin/reuse-issue-worktree.sh +0 -121
  76. package/tools/bin/run-codex-bypass.sh +0 -3
  77. package/tools/bin/run-codex-safe.sh +0 -3
  78. package/tools/bin/run-codex-task.sh +0 -280
  79. package/tools/bin/serve-dashboard.sh +0 -5
  80. package/tools/bin/start-issue-worker.sh +0 -943
  81. package/tools/bin/start-pr-fix-worker.sh +0 -528
  82. package/tools/bin/start-pr-merge-repair-worker.sh +0 -8
  83. package/tools/bin/start-pr-review-worker.sh +0 -261
  84. package/tools/bin/start-resident-issue-loop.sh +0 -499
  85. package/tools/bin/update-github-labels.sh +0 -14
  86. package/tools/bin/worker-status.sh +0 -19
  87. package/tools/bin/workflow-catalog.sh +0 -77
@@ -0,0 +1,243 @@
1
+ flow_export_execution_env() {
2
+ local config_file="${1:-}"
3
+
4
+ if [[ -z "${config_file}" ]]; then
5
+ config_file="$(resolve_flow_config_yaml "${BASH_SOURCE[1]:-${BASH_SOURCE[0]}}")"
6
+ fi
7
+
8
+ [[ -f "${config_file}" ]] || return 0
9
+
10
+ local repo_id=""
11
+ local coding_worker=""
12
+ local provider_quota_cooldowns=""
13
+ local provider_pool_order=""
14
+ local provider_pool_selection=""
15
+ local explicit_coding_worker=""
16
+ local active_provider_pool_name=""
17
+ local active_provider_backend=""
18
+ local active_provider_model=""
19
+ local active_provider_key=""
20
+ local active_provider_next_attempt_epoch=""
21
+ local active_provider_next_attempt_at=""
22
+ local active_provider_last_reason=""
23
+ local active_provider_pools_exhausted="no"
24
+ local active_provider_selection_reason="legacy-config"
25
+ local safe_profile=""
26
+ local bypass_profile=""
27
+ local claude_model=""
28
+ local claude_permission_mode=""
29
+ local claude_effort=""
30
+ local claude_timeout=""
31
+ local claude_max_attempts=""
32
+ local claude_retry_backoff_seconds=""
33
+ local openclaw_model=""
34
+ local openclaw_thinking=""
35
+ local openclaw_timeout=""
36
+ local openclaw_stall=""
37
+ local ollama_model=""
38
+ local ollama_base_url=""
39
+ local ollama_timeout=""
40
+ local pi_model=""
41
+ local pi_thinking=""
42
+ local pi_timeout=""
43
+ local opencode_model=""
44
+ local opencode_timeout=""
45
+ local kilo_model=""
46
+ local kilo_timeout=""
47
+
48
+ repo_id="$(flow_resolve_repo_id "${config_file}")"
49
+ provider_quota_cooldowns="$(flow_resolve_provider_quota_cooldowns "${config_file}")"
50
+ provider_pool_order="$(flow_resolve_provider_pool_order "${config_file}")"
51
+ explicit_coding_worker="${ACP_CODING_WORKER:-}"
52
+ if [[ -z "${explicit_coding_worker}" && -n "${provider_pool_order}" ]]; then
53
+ provider_pool_selection="$(flow_selected_provider_pool_env "${config_file}" || true)"
54
+ fi
55
+
56
+ if [[ -n "${provider_pool_selection}" ]]; then
57
+ active_provider_pool_name="$(flow_kv_get "${provider_pool_selection}" "POOL_NAME")"
58
+ active_provider_backend="$(flow_kv_get "${provider_pool_selection}" "BACKEND")"
59
+ active_provider_model="$(flow_kv_get "${provider_pool_selection}" "MODEL")"
60
+ active_provider_key="$(flow_kv_get "${provider_pool_selection}" "PROVIDER_KEY")"
61
+ active_provider_next_attempt_epoch="$(flow_kv_get "${provider_pool_selection}" "NEXT_ATTEMPT_EPOCH")"
62
+ active_provider_next_attempt_at="$(flow_kv_get "${provider_pool_selection}" "NEXT_ATTEMPT_AT")"
63
+ active_provider_last_reason="$(flow_kv_get "${provider_pool_selection}" "LAST_REASON")"
64
+ active_provider_pools_exhausted="$(flow_kv_get "${provider_pool_selection}" "POOLS_EXHAUSTED")"
65
+ active_provider_selection_reason="$(flow_kv_get "${provider_pool_selection}" "SELECTION_REASON")"
66
+
67
+ coding_worker="${active_provider_backend}"
68
+ safe_profile="$(flow_kv_get "${provider_pool_selection}" "SAFE_PROFILE")"
69
+ bypass_profile="$(flow_kv_get "${provider_pool_selection}" "BYPASS_PROFILE")"
70
+ claude_model="$(flow_kv_get "${provider_pool_selection}" "CLAUDE_MODEL")"
71
+ claude_permission_mode="$(flow_kv_get "${provider_pool_selection}" "CLAUDE_PERMISSION_MODE")"
72
+ claude_effort="$(flow_kv_get "${provider_pool_selection}" "CLAUDE_EFFORT")"
73
+ claude_timeout="$(flow_kv_get "${provider_pool_selection}" "CLAUDE_TIMEOUT_SECONDS")"
74
+ claude_max_attempts="$(flow_kv_get "${provider_pool_selection}" "CLAUDE_MAX_ATTEMPTS")"
75
+ claude_retry_backoff_seconds="$(flow_kv_get "${provider_pool_selection}" "CLAUDE_RETRY_BACKOFF_SECONDS")"
76
+ openclaw_model="$(flow_kv_get "${provider_pool_selection}" "OPENCLAW_MODEL")"
77
+ openclaw_thinking="$(flow_kv_get "${provider_pool_selection}" "OPENCLAW_THINKING")"
78
+ openclaw_timeout="$(flow_kv_get "${provider_pool_selection}" "OPENCLAW_TIMEOUT_SECONDS")"
79
+ openclaw_stall="$(flow_kv_get "${provider_pool_selection}" "OPENCLAW_STALL_SECONDS")"
80
+ ollama_model="$(flow_kv_get "${provider_pool_selection}" "OLLAMA_MODEL")"
81
+ ollama_base_url="$(flow_kv_get "${provider_pool_selection}" "OLLAMA_BASE_URL")"
82
+ ollama_timeout="$(flow_kv_get "${provider_pool_selection}" "OLLAMA_TIMEOUT_SECONDS")"
83
+ pi_model="$(flow_kv_get "${provider_pool_selection}" "PI_MODEL")"
84
+ pi_thinking="$(flow_kv_get "${provider_pool_selection}" "PI_THINKING")"
85
+ pi_timeout="$(flow_kv_get "${provider_pool_selection}" "PI_TIMEOUT_SECONDS")"
86
+ opencode_model="$(flow_kv_get "${provider_pool_selection}" "OPENCODE_MODEL")"
87
+ opencode_timeout="$(flow_kv_get "${provider_pool_selection}" "OPENCODE_TIMEOUT_SECONDS")"
88
+ kilo_model="$(flow_kv_get "${provider_pool_selection}" "KILO_MODEL")"
89
+ kilo_timeout="$(flow_kv_get "${provider_pool_selection}" "KILO_TIMEOUT_SECONDS")"
90
+ else
91
+ if [[ -n "${explicit_coding_worker}" ]]; then
92
+ active_provider_selection_reason="env-override"
93
+ fi
94
+ coding_worker="$(flow_env_or_config "${config_file}" "ACP_CODING_WORKER" "execution.coding_worker" "")"
95
+ safe_profile="$(flow_env_or_config "${config_file}" "ACP_CODEX_PROFILE_SAFE F_LOSNING_CODEX_PROFILE_SAFE" "execution.safe_profile" "")"
96
+ bypass_profile="$(flow_env_or_config "${config_file}" "ACP_CODEX_PROFILE_BYPASS F_LOSNING_CODEX_PROFILE_BYPASS" "execution.bypass_profile" "")"
97
+ claude_model="$(flow_env_or_config "${config_file}" "ACP_CLAUDE_MODEL F_LOSNING_CLAUDE_MODEL" "execution.claude.model" "")"
98
+ claude_permission_mode="$(flow_env_or_config "${config_file}" "ACP_CLAUDE_PERMISSION_MODE F_LOSNING_CLAUDE_PERMISSION_MODE" "execution.claude.permission_mode" "")"
99
+ claude_effort="$(flow_env_or_config "${config_file}" "ACP_CLAUDE_EFFORT F_LOSNING_CLAUDE_EFFORT" "execution.claude.effort" "")"
100
+ claude_timeout="$(flow_env_or_config "${config_file}" "ACP_CLAUDE_TIMEOUT_SECONDS F_LOSNING_CLAUDE_TIMEOUT_SECONDS" "execution.claude.timeout_seconds" "")"
101
+ claude_max_attempts="$(flow_env_or_config "${config_file}" "ACP_CLAUDE_MAX_ATTEMPTS F_LOSNING_CLAUDE_MAX_ATTEMPTS" "execution.claude.max_attempts" "")"
102
+ claude_retry_backoff_seconds="$(flow_env_or_config "${config_file}" "ACP_CLAUDE_RETRY_BACKOFF_SECONDS F_LOSNING_CLAUDE_RETRY_BACKOFF_SECONDS" "execution.claude.retry_backoff_seconds" "")"
103
+ openclaw_model="$(flow_env_or_config "${config_file}" "ACP_OPENCLAW_MODEL F_LOSNING_OPENCLAW_MODEL" "execution.openclaw.model" "")"
104
+ openclaw_thinking="$(flow_env_or_config "${config_file}" "ACP_OPENCLAW_THINKING F_LOSNING_OPENCLAW_THINKING" "execution.openclaw.thinking" "")"
105
+ openclaw_timeout="$(flow_env_or_config "${config_file}" "ACP_OPENCLAW_TIMEOUT_SECONDS F_LOSNING_OPENCLAW_TIMEOUT_SECONDS" "execution.openclaw.timeout_seconds" "")"
106
+ openclaw_stall="$(flow_env_or_config "${config_file}" "ACP_OPENCLAW_STALL_SECONDS F_LOSNING_OPENCLAW_STALL_SECONDS" "execution.openclaw.stall_seconds" "")"
107
+ ollama_model="$(flow_env_or_config "${config_file}" "ACP_OLLAMA_MODEL F_LOSNING_OLLAMA_MODEL" "execution.ollama.model" "")"
108
+ ollama_base_url="$(flow_env_or_config "${config_file}" "ACP_OLLAMA_BASE_URL F_LOSNING_OLLAMA_BASE_URL" "execution.ollama.base_url" "")"
109
+ ollama_timeout="$(flow_env_or_config "${config_file}" "ACP_OLLAMA_TIMEOUT_SECONDS F_LOSNING_OLLAMA_TIMEOUT_SECONDS" "execution.ollama.timeout_seconds" "")"
110
+ pi_model="$(flow_env_or_config "${config_file}" "ACP_PI_MODEL F_LOSNING_PI_MODEL" "execution.pi.model" "")"
111
+ pi_thinking="$(flow_env_or_config "${config_file}" "ACP_PI_THINKING F_LOSNING_PI_THINKING" "execution.pi.thinking" "")"
112
+ pi_timeout="$(flow_env_or_config "${config_file}" "ACP_PI_TIMEOUT_SECONDS F_LOSNING_PI_TIMEOUT_SECONDS" "execution.pi.timeout_seconds" "")"
113
+ opencode_model="$(flow_env_or_config "${config_file}" "ACP_OPENCODE_MODEL F_LOSNING_OPENCODE_MODEL" "execution.opencode.model" "")"
114
+ opencode_timeout="$(flow_env_or_config "${config_file}" "ACP_OPENCODE_TIMEOUT_SECONDS F_LOSNING_OPENCODE_TIMEOUT_SECONDS" "execution.opencode.timeout_seconds" "")"
115
+ kilo_model="$(flow_env_or_config "${config_file}" "ACP_KILO_MODEL F_LOSNING_KILO_MODEL" "execution.kilo.model" "")"
116
+ kilo_timeout="$(flow_env_or_config "${config_file}" "ACP_KILO_TIMEOUT_SECONDS F_LOSNING_KILO_TIMEOUT_SECONDS" "execution.kilo.timeout_seconds" "")"
117
+ fi
118
+
119
+ if [[ -n "${coding_worker}" ]]; then
120
+ export ACP_CODING_WORKER="${coding_worker}"
121
+ fi
122
+ if [[ -n "${repo_id}" ]]; then
123
+ export F_LOSNING_REPO_ID="${repo_id}"
124
+ export ACP_REPO_ID="${repo_id}"
125
+ export F_LOSNING_GITHUB_REPOSITORY_ID="${repo_id}"
126
+ export ACP_GITHUB_REPOSITORY_ID="${repo_id}"
127
+ fi
128
+ if [[ -n "${provider_quota_cooldowns}" ]]; then
129
+ export F_LOSNING_PROVIDER_QUOTA_COOLDOWNS="${provider_quota_cooldowns}"
130
+ export ACP_PROVIDER_QUOTA_COOLDOWNS="${provider_quota_cooldowns}"
131
+ fi
132
+ export F_LOSNING_PROVIDER_POOL_ORDER="${provider_pool_order}"
133
+ export ACP_PROVIDER_POOL_ORDER="${provider_pool_order}"
134
+ export F_LOSNING_ACTIVE_PROVIDER_POOL_NAME="${active_provider_pool_name}"
135
+ export ACP_ACTIVE_PROVIDER_POOL_NAME="${active_provider_pool_name}"
136
+ export F_LOSNING_ACTIVE_PROVIDER_BACKEND="${active_provider_backend}"
137
+ export ACP_ACTIVE_PROVIDER_BACKEND="${active_provider_backend}"
138
+ export F_LOSNING_ACTIVE_PROVIDER_MODEL="${active_provider_model}"
139
+ export ACP_ACTIVE_PROVIDER_MODEL="${active_provider_model}"
140
+ export F_LOSNING_ACTIVE_PROVIDER_KEY="${active_provider_key}"
141
+ export ACP_ACTIVE_PROVIDER_KEY="${active_provider_key}"
142
+ export F_LOSNING_PROVIDER_POOLS_EXHAUSTED="${active_provider_pools_exhausted}"
143
+ export ACP_PROVIDER_POOLS_EXHAUSTED="${active_provider_pools_exhausted}"
144
+ export F_LOSNING_PROVIDER_POOL_SELECTION_REASON="${active_provider_selection_reason}"
145
+ export ACP_PROVIDER_POOL_SELECTION_REASON="${active_provider_selection_reason}"
146
+ export F_LOSNING_PROVIDER_POOL_NEXT_ATTEMPT_EPOCH="${active_provider_next_attempt_epoch}"
147
+ export ACP_PROVIDER_POOL_NEXT_ATTEMPT_EPOCH="${active_provider_next_attempt_epoch}"
148
+ export F_LOSNING_PROVIDER_POOL_NEXT_ATTEMPT_AT="${active_provider_next_attempt_at}"
149
+ export ACP_PROVIDER_POOL_NEXT_ATTEMPT_AT="${active_provider_next_attempt_at}"
150
+ export F_LOSNING_PROVIDER_POOL_LAST_REASON="${active_provider_last_reason}"
151
+ export ACP_PROVIDER_POOL_LAST_REASON="${active_provider_last_reason}"
152
+ if [[ -n "${safe_profile}" ]]; then
153
+ export F_LOSNING_CODEX_PROFILE_SAFE="${safe_profile}"
154
+ export ACP_CODEX_PROFILE_SAFE="${safe_profile}"
155
+ fi
156
+ if [[ -n "${bypass_profile}" ]]; then
157
+ export F_LOSNING_CODEX_PROFILE_BYPASS="${bypass_profile}"
158
+ export ACP_CODEX_PROFILE_BYPASS="${bypass_profile}"
159
+ fi
160
+ if [[ -n "${claude_model}" ]]; then
161
+ export F_LOSNING_CLAUDE_MODEL="${claude_model}"
162
+ export ACP_CLAUDE_MODEL="${claude_model}"
163
+ fi
164
+ if [[ -n "${claude_permission_mode}" ]]; then
165
+ export F_LOSNING_CLAUDE_PERMISSION_MODE="${claude_permission_mode}"
166
+ export ACP_CLAUDE_PERMISSION_MODE="${claude_permission_mode}"
167
+ fi
168
+ if [[ -n "${claude_effort}" ]]; then
169
+ export F_LOSNING_CLAUDE_EFFORT="${claude_effort}"
170
+ export ACP_CLAUDE_EFFORT="${claude_effort}"
171
+ fi
172
+ if [[ -n "${claude_timeout}" ]]; then
173
+ export F_LOSNING_CLAUDE_TIMEOUT_SECONDS="${claude_timeout}"
174
+ export ACP_CLAUDE_TIMEOUT_SECONDS="${claude_timeout}"
175
+ fi
176
+ if [[ -n "${claude_max_attempts}" ]]; then
177
+ export F_LOSNING_CLAUDE_MAX_ATTEMPTS="${claude_max_attempts}"
178
+ export ACP_CLAUDE_MAX_ATTEMPTS="${claude_max_attempts}"
179
+ fi
180
+ if [[ -n "${claude_retry_backoff_seconds}" ]]; then
181
+ export F_LOSNING_CLAUDE_RETRY_BACKOFF_SECONDS="${claude_retry_backoff_seconds}"
182
+ export ACP_CLAUDE_RETRY_BACKOFF_SECONDS="${claude_retry_backoff_seconds}"
183
+ fi
184
+ if [[ -n "${openclaw_model}" ]]; then
185
+ export F_LOSNING_OPENCLAW_MODEL="${openclaw_model}"
186
+ export ACP_OPENCLAW_MODEL="${openclaw_model}"
187
+ fi
188
+ if [[ -n "${openclaw_thinking}" ]]; then
189
+ export F_LOSNING_OPENCLAW_THINKING="${openclaw_thinking}"
190
+ export ACP_OPENCLAW_THINKING="${openclaw_thinking}"
191
+ fi
192
+ if [[ -n "${openclaw_timeout}" ]]; then
193
+ export F_LOSNING_OPENCLAW_TIMEOUT_SECONDS="${openclaw_timeout}"
194
+ export ACP_OPENCLAW_TIMEOUT_SECONDS="${openclaw_timeout}"
195
+ fi
196
+ if [[ -n "${openclaw_stall}" ]]; then
197
+ export F_LOSNING_OPENCLAW_STALL_SECONDS="${openclaw_stall}"
198
+ export ACP_OPENCLAW_STALL_SECONDS="${openclaw_stall}"
199
+ fi
200
+ if [[ -n "${ollama_model}" ]]; then
201
+ export F_LOSNING_OLLAMA_MODEL="${ollama_model}"
202
+ export ACP_OLLAMA_MODEL="${ollama_model}"
203
+ fi
204
+ if [[ -n "${ollama_base_url}" ]]; then
205
+ export F_LOSNING_OLLAMA_BASE_URL="${ollama_base_url}"
206
+ export ACP_OLLAMA_BASE_URL="${ollama_base_url}"
207
+ fi
208
+ if [[ -n "${ollama_timeout}" ]]; then
209
+ export F_LOSNING_OLLAMA_TIMEOUT_SECONDS="${ollama_timeout}"
210
+ export ACP_OLLAMA_TIMEOUT_SECONDS="${ollama_timeout}"
211
+ fi
212
+ if [[ -n "${pi_model}" ]]; then
213
+ export F_LOSNING_PI_MODEL="${pi_model}"
214
+ export ACP_PI_MODEL="${pi_model}"
215
+ fi
216
+ if [[ -n "${pi_thinking}" ]]; then
217
+ export F_LOSNING_PI_THINKING="${pi_thinking}"
218
+ export ACP_PI_THINKING="${pi_thinking}"
219
+ fi
220
+ if [[ -n "${pi_timeout}" ]]; then
221
+ export F_LOSNING_PI_TIMEOUT_SECONDS="${pi_timeout}"
222
+ export ACP_PI_TIMEOUT_SECONDS="${pi_timeout}"
223
+ fi
224
+ if [[ -n "${opencode_model}" ]]; then
225
+ export F_LOSNING_OPENCODE_MODEL="${opencode_model}"
226
+ export ACP_OPENCODE_MODEL="${opencode_model}"
227
+ fi
228
+ if [[ -n "${opencode_timeout}" ]]; then
229
+ export F_LOSNING_OPENCODE_TIMEOUT_SECONDS="${opencode_timeout}"
230
+ export ACP_OPENCODE_TIMEOUT_SECONDS="${opencode_timeout}"
231
+ fi
232
+ if [[ -n "${kilo_model}" ]]; then
233
+ export F_LOSNING_KILO_MODEL="${kilo_model}"
234
+ export ACP_KILO_MODEL="${kilo_model}"
235
+ fi
236
+ if [[ -n "${kilo_timeout}" ]]; then
237
+ export F_LOSNING_KILO_TIMEOUT_SECONDS="${kilo_timeout}"
238
+ export ACP_KILO_TIMEOUT_SECONDS="${kilo_timeout}"
239
+ fi
240
+
241
+ flow_export_github_cli_auth_env "$(flow_resolve_repo_slug "${config_file}")"
242
+ flow_export_project_env_aliases
243
+ }