@openclaw/codex 2026.5.2 → 2026.5.3-beta.2

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 (622) hide show
  1. package/dist/capabilities-CYg1OFaL.js +22 -0
  2. package/dist/client-Bm5-MMSf.js +622 -0
  3. package/dist/client-factory-Bh5chnqU.js +18 -0
  4. package/dist/command-handlers-Dxx2slu2.js +992 -0
  5. package/dist/compact-CpZ5DNlM.js +260 -0
  6. package/dist/computer-use-BblypQuj.js +380 -0
  7. package/dist/config-CkkoMeqF.js +244 -0
  8. package/dist/conversation-binding-D12ISGdf.js +549 -0
  9. package/dist/harness.js +41 -0
  10. package/dist/index.js +351 -0
  11. package/dist/media-understanding-provider.js +234 -0
  12. package/dist/models-Ddmxtdog.js +108 -0
  13. package/dist/prompt-overlay.js +12 -0
  14. package/dist/protocol-C9UWI98H.js +9 -0
  15. package/dist/protocol-validators-Cpopom3_.js +5762 -0
  16. package/dist/provider-catalog.js +84 -0
  17. package/dist/provider-discovery.js +33 -0
  18. package/dist/provider.js +150 -0
  19. package/dist/rolldown-runtime-DUslC3ob.js +14 -0
  20. package/dist/run-attempt-C5v380B8.js +3541 -0
  21. package/dist/session-binding-C7Y7rY0i.js +95 -0
  22. package/dist/shared-client-DEzBJ9G1.js +434 -0
  23. package/dist/test-api.js +42 -0
  24. package/dist/thread-lifecycle-BKZiIxyU.js +460 -0
  25. package/package.json +18 -3
  26. package/harness.ts +0 -59
  27. package/index.test.ts +0 -106
  28. package/index.ts +0 -41
  29. package/media-understanding-provider.test.ts +0 -300
  30. package/media-understanding-provider.ts +0 -369
  31. package/prompt-overlay-runtime-contract.test.ts +0 -45
  32. package/prompt-overlay.ts +0 -19
  33. package/provider-catalog.ts +0 -83
  34. package/provider-discovery.ts +0 -45
  35. package/provider.test.ts +0 -350
  36. package/provider.ts +0 -223
  37. package/src/app-server/approval-bridge.test.ts +0 -838
  38. package/src/app-server/approval-bridge.ts +0 -731
  39. package/src/app-server/auth-bridge.test.ts +0 -922
  40. package/src/app-server/auth-bridge.ts +0 -345
  41. package/src/app-server/auth-profile-runtime-contract.test.ts +0 -218
  42. package/src/app-server/capabilities.ts +0 -27
  43. package/src/app-server/client-factory.ts +0 -30
  44. package/src/app-server/client.test.ts +0 -463
  45. package/src/app-server/client.ts +0 -675
  46. package/src/app-server/compact.test.ts +0 -452
  47. package/src/app-server/compact.ts +0 -375
  48. package/src/app-server/computer-use.test.ts +0 -790
  49. package/src/app-server/computer-use.ts +0 -682
  50. package/src/app-server/config.test.ts +0 -431
  51. package/src/app-server/config.ts +0 -486
  52. package/src/app-server/context-engine-projection.test.ts +0 -104
  53. package/src/app-server/context-engine-projection.ts +0 -147
  54. package/src/app-server/delivery-no-reply-runtime-contract.test.ts +0 -80
  55. package/src/app-server/dynamic-tool-profile.ts +0 -31
  56. package/src/app-server/dynamic-tools.test.ts +0 -781
  57. package/src/app-server/dynamic-tools.ts +0 -345
  58. package/src/app-server/elicitation-bridge.test.ts +0 -625
  59. package/src/app-server/elicitation-bridge.ts +0 -555
  60. package/src/app-server/event-projector.test.ts +0 -921
  61. package/src/app-server/event-projector.ts +0 -1161
  62. package/src/app-server/managed-binary.test.ts +0 -141
  63. package/src/app-server/managed-binary.ts +0 -192
  64. package/src/app-server/models.test.ts +0 -242
  65. package/src/app-server/models.ts +0 -168
  66. package/src/app-server/native-hook-relay.test.ts +0 -143
  67. package/src/app-server/native-hook-relay.ts +0 -64
  68. package/src/app-server/openclaw-owned-tool-runtime-contract.test.ts +0 -415
  69. package/src/app-server/outcome-fallback-runtime-contract.test.ts +0 -352
  70. package/src/app-server/plugin-approval-roundtrip.ts +0 -122
  71. package/src/app-server/protocol-generated/json/DynamicToolCallParams.json +0 -24
  72. package/src/app-server/protocol-generated/json/v2/ErrorNotification.json +0 -162
  73. package/src/app-server/protocol-generated/json/v2/GetAccountResponse.json +0 -86
  74. package/src/app-server/protocol-generated/json/v2/ModelListResponse.json +0 -162
  75. package/src/app-server/protocol-generated/json/v2/ThreadResumeResponse.json +0 -1994
  76. package/src/app-server/protocol-generated/json/v2/ThreadStartResponse.json +0 -1994
  77. package/src/app-server/protocol-generated/json/v2/TurnCompletedNotification.json +0 -1243
  78. package/src/app-server/protocol-generated/json/v2/TurnStartResponse.json +0 -1240
  79. package/src/app-server/protocol-generated/typescript/AbsolutePathBuf.ts +0 -14
  80. package/src/app-server/protocol-generated/typescript/AgentPath.ts +0 -5
  81. package/src/app-server/protocol-generated/typescript/ApplyPatchApprovalParams.ts +0 -24
  82. package/src/app-server/protocol-generated/typescript/ApplyPatchApprovalResponse.ts +0 -6
  83. package/src/app-server/protocol-generated/typescript/AuthMode.ts +0 -8
  84. package/src/app-server/protocol-generated/typescript/ClientInfo.ts +0 -5
  85. package/src/app-server/protocol-generated/typescript/ClientNotification.ts +0 -5
  86. package/src/app-server/protocol-generated/typescript/ClientRequest.ts +0 -165
  87. package/src/app-server/protocol-generated/typescript/CollaborationMode.ts +0 -10
  88. package/src/app-server/protocol-generated/typescript/ContentItem.ts +0 -9
  89. package/src/app-server/protocol-generated/typescript/ConversationGitInfo.ts +0 -9
  90. package/src/app-server/protocol-generated/typescript/ConversationSummary.ts +0 -19
  91. package/src/app-server/protocol-generated/typescript/ExecCommandApprovalParams.ts +0 -22
  92. package/src/app-server/protocol-generated/typescript/ExecCommandApprovalResponse.ts +0 -6
  93. package/src/app-server/protocol-generated/typescript/ExecPolicyAmendment.ts +0 -12
  94. package/src/app-server/protocol-generated/typescript/FileChange.ts +0 -8
  95. package/src/app-server/protocol-generated/typescript/ForcedLoginMethod.ts +0 -5
  96. package/src/app-server/protocol-generated/typescript/FunctionCallOutputBody.ts +0 -6
  97. package/src/app-server/protocol-generated/typescript/FunctionCallOutputContentItem.ts +0 -12
  98. package/src/app-server/protocol-generated/typescript/FuzzyFileSearchMatchType.ts +0 -5
  99. package/src/app-server/protocol-generated/typescript/FuzzyFileSearchParams.ts +0 -9
  100. package/src/app-server/protocol-generated/typescript/FuzzyFileSearchResponse.ts +0 -6
  101. package/src/app-server/protocol-generated/typescript/FuzzyFileSearchResult.ts +0 -16
  102. package/src/app-server/protocol-generated/typescript/FuzzyFileSearchSessionCompletedNotification.ts +0 -5
  103. package/src/app-server/protocol-generated/typescript/FuzzyFileSearchSessionUpdatedNotification.ts +0 -10
  104. package/src/app-server/protocol-generated/typescript/GetAuthStatusParams.ts +0 -5
  105. package/src/app-server/protocol-generated/typescript/GetAuthStatusResponse.ts +0 -10
  106. package/src/app-server/protocol-generated/typescript/GetConversationSummaryParams.ts +0 -6
  107. package/src/app-server/protocol-generated/typescript/GetConversationSummaryResponse.ts +0 -6
  108. package/src/app-server/protocol-generated/typescript/GhostCommit.ts +0 -13
  109. package/src/app-server/protocol-generated/typescript/GitDiffToRemoteParams.ts +0 -5
  110. package/src/app-server/protocol-generated/typescript/GitDiffToRemoteResponse.ts +0 -6
  111. package/src/app-server/protocol-generated/typescript/GitSha.ts +0 -5
  112. package/src/app-server/protocol-generated/typescript/ImageDetail.ts +0 -5
  113. package/src/app-server/protocol-generated/typescript/InitializeCapabilities.ts +0 -18
  114. package/src/app-server/protocol-generated/typescript/InitializeParams.ts +0 -10
  115. package/src/app-server/protocol-generated/typescript/InitializeResponse.ts +0 -22
  116. package/src/app-server/protocol-generated/typescript/InputModality.ts +0 -8
  117. package/src/app-server/protocol-generated/typescript/LocalShellAction.ts +0 -6
  118. package/src/app-server/protocol-generated/typescript/LocalShellExecAction.ts +0 -11
  119. package/src/app-server/protocol-generated/typescript/LocalShellStatus.ts +0 -5
  120. package/src/app-server/protocol-generated/typescript/MessagePhase.ts +0 -11
  121. package/src/app-server/protocol-generated/typescript/ModeKind.ts +0 -8
  122. package/src/app-server/protocol-generated/typescript/NetworkPolicyAmendment.ts +0 -6
  123. package/src/app-server/protocol-generated/typescript/NetworkPolicyRuleAction.ts +0 -5
  124. package/src/app-server/protocol-generated/typescript/ParsedCommand.ts +0 -20
  125. package/src/app-server/protocol-generated/typescript/Personality.ts +0 -5
  126. package/src/app-server/protocol-generated/typescript/PlanType.ts +0 -17
  127. package/src/app-server/protocol-generated/typescript/RealtimeConversationVersion.ts +0 -5
  128. package/src/app-server/protocol-generated/typescript/RealtimeOutputModality.ts +0 -5
  129. package/src/app-server/protocol-generated/typescript/RealtimeVoice.ts +0 -24
  130. package/src/app-server/protocol-generated/typescript/RealtimeVoicesList.ts +0 -11
  131. package/src/app-server/protocol-generated/typescript/ReasoningEffort.ts +0 -8
  132. package/src/app-server/protocol-generated/typescript/ReasoningItemContent.ts +0 -7
  133. package/src/app-server/protocol-generated/typescript/ReasoningItemReasoningSummary.ts +0 -5
  134. package/src/app-server/protocol-generated/typescript/ReasoningSummary.ts +0 -10
  135. package/src/app-server/protocol-generated/typescript/RequestId.ts +0 -5
  136. package/src/app-server/protocol-generated/typescript/Resource.ts +0 -19
  137. package/src/app-server/protocol-generated/typescript/ResourceContent.ts +0 -27
  138. package/src/app-server/protocol-generated/typescript/ResourceTemplate.ts +0 -16
  139. package/src/app-server/protocol-generated/typescript/ResponseItem.ts +0 -70
  140. package/src/app-server/protocol-generated/typescript/ReviewDecision.ts +0 -17
  141. package/src/app-server/protocol-generated/typescript/ServerNotification.ts +0 -144
  142. package/src/app-server/protocol-generated/typescript/ServerRequest.ts +0 -47
  143. package/src/app-server/protocol-generated/typescript/ServiceTier.ts +0 -5
  144. package/src/app-server/protocol-generated/typescript/SessionSource.ts +0 -13
  145. package/src/app-server/protocol-generated/typescript/Settings.ts +0 -13
  146. package/src/app-server/protocol-generated/typescript/SubAgentSource.ts +0 -20
  147. package/src/app-server/protocol-generated/typescript/ThreadId.ts +0 -5
  148. package/src/app-server/protocol-generated/typescript/ThreadMemoryMode.ts +0 -5
  149. package/src/app-server/protocol-generated/typescript/Tool.ts +0 -18
  150. package/src/app-server/protocol-generated/typescript/Verbosity.ts +0 -9
  151. package/src/app-server/protocol-generated/typescript/WebSearchAction.ts +0 -9
  152. package/src/app-server/protocol-generated/typescript/WebSearchContextSize.ts +0 -5
  153. package/src/app-server/protocol-generated/typescript/WebSearchLocation.ts +0 -10
  154. package/src/app-server/protocol-generated/typescript/WebSearchMode.ts +0 -5
  155. package/src/app-server/protocol-generated/typescript/WebSearchToolConfig.ts +0 -11
  156. package/src/app-server/protocol-generated/typescript/index.ts +0 -80
  157. package/src/app-server/protocol-generated/typescript/serde_json/JsonValue.ts +0 -11
  158. package/src/app-server/protocol-generated/typescript/v2/Account.ts +0 -9
  159. package/src/app-server/protocol-generated/typescript/v2/AccountLoginCompletedNotification.ts +0 -9
  160. package/src/app-server/protocol-generated/typescript/v2/AccountRateLimitsUpdatedNotification.ts +0 -6
  161. package/src/app-server/protocol-generated/typescript/v2/AccountUpdatedNotification.ts +0 -7
  162. package/src/app-server/protocol-generated/typescript/v2/AddCreditsNudgeCreditType.ts +0 -5
  163. package/src/app-server/protocol-generated/typescript/v2/AddCreditsNudgeEmailStatus.ts +0 -5
  164. package/src/app-server/protocol-generated/typescript/v2/AdditionalFileSystemPermissions.ts +0 -18
  165. package/src/app-server/protocol-generated/typescript/v2/AdditionalNetworkPermissions.ts +0 -5
  166. package/src/app-server/protocol-generated/typescript/v2/AdditionalPermissionProfile.ts +0 -10
  167. package/src/app-server/protocol-generated/typescript/v2/AgentMessageDeltaNotification.ts +0 -10
  168. package/src/app-server/protocol-generated/typescript/v2/AnalyticsConfig.ts +0 -14
  169. package/src/app-server/protocol-generated/typescript/v2/AppBranding.ts +0 -15
  170. package/src/app-server/protocol-generated/typescript/v2/AppInfo.ts +0 -32
  171. package/src/app-server/protocol-generated/typescript/v2/AppListUpdatedNotification.ts +0 -9
  172. package/src/app-server/protocol-generated/typescript/v2/AppMetadata.ts +0 -20
  173. package/src/app-server/protocol-generated/typescript/v2/AppReview.ts +0 -5
  174. package/src/app-server/protocol-generated/typescript/v2/AppScreenshot.ts +0 -5
  175. package/src/app-server/protocol-generated/typescript/v2/AppSummary.ts +0 -14
  176. package/src/app-server/protocol-generated/typescript/v2/AppToolApproval.ts +0 -5
  177. package/src/app-server/protocol-generated/typescript/v2/AppToolsConfig.ts +0 -8
  178. package/src/app-server/protocol-generated/typescript/v2/ApprovalsReviewer.ts +0 -12
  179. package/src/app-server/protocol-generated/typescript/v2/AppsConfig.ts +0 -17
  180. package/src/app-server/protocol-generated/typescript/v2/AppsDefaultConfig.ts +0 -9
  181. package/src/app-server/protocol-generated/typescript/v2/AppsListParams.ts +0 -25
  182. package/src/app-server/protocol-generated/typescript/v2/AppsListResponse.ts +0 -16
  183. package/src/app-server/protocol-generated/typescript/v2/AskForApproval.ts +0 -18
  184. package/src/app-server/protocol-generated/typescript/v2/AutoReviewDecisionSource.ts +0 -8
  185. package/src/app-server/protocol-generated/typescript/v2/ByteRange.ts +0 -5
  186. package/src/app-server/protocol-generated/typescript/v2/CancelLoginAccountParams.ts +0 -5
  187. package/src/app-server/protocol-generated/typescript/v2/CancelLoginAccountResponse.ts +0 -6
  188. package/src/app-server/protocol-generated/typescript/v2/CancelLoginAccountStatus.ts +0 -5
  189. package/src/app-server/protocol-generated/typescript/v2/ChatgptAuthTokensRefreshParams.ts +0 -18
  190. package/src/app-server/protocol-generated/typescript/v2/ChatgptAuthTokensRefreshReason.ts +0 -5
  191. package/src/app-server/protocol-generated/typescript/v2/ChatgptAuthTokensRefreshResponse.ts +0 -9
  192. package/src/app-server/protocol-generated/typescript/v2/CodexErrorInfo.ts +0 -27
  193. package/src/app-server/protocol-generated/typescript/v2/CollabAgentState.ts +0 -6
  194. package/src/app-server/protocol-generated/typescript/v2/CollabAgentStatus.ts +0 -12
  195. package/src/app-server/protocol-generated/typescript/v2/CollabAgentTool.ts +0 -5
  196. package/src/app-server/protocol-generated/typescript/v2/CollabAgentToolCallStatus.ts +0 -5
  197. package/src/app-server/protocol-generated/typescript/v2/CollaborationModeMask.ts +0 -15
  198. package/src/app-server/protocol-generated/typescript/v2/CommandAction.ts +0 -10
  199. package/src/app-server/protocol-generated/typescript/v2/CommandExecOutputDeltaNotification.ts +0 -31
  200. package/src/app-server/protocol-generated/typescript/v2/CommandExecOutputStream.ts +0 -8
  201. package/src/app-server/protocol-generated/typescript/v2/CommandExecParams.ts +0 -107
  202. package/src/app-server/protocol-generated/typescript/v2/CommandExecResizeParams.ts +0 -19
  203. package/src/app-server/protocol-generated/typescript/v2/CommandExecResizeResponse.ts +0 -8
  204. package/src/app-server/protocol-generated/typescript/v2/CommandExecResponse.ts +0 -25
  205. package/src/app-server/protocol-generated/typescript/v2/CommandExecTerminalSize.ts +0 -17
  206. package/src/app-server/protocol-generated/typescript/v2/CommandExecTerminateParams.ts +0 -14
  207. package/src/app-server/protocol-generated/typescript/v2/CommandExecTerminateResponse.ts +0 -8
  208. package/src/app-server/protocol-generated/typescript/v2/CommandExecWriteParams.ts +0 -23
  209. package/src/app-server/protocol-generated/typescript/v2/CommandExecWriteResponse.ts +0 -8
  210. package/src/app-server/protocol-generated/typescript/v2/CommandExecutionApprovalDecision.ts +0 -13
  211. package/src/app-server/protocol-generated/typescript/v2/CommandExecutionOutputDeltaNotification.ts +0 -10
  212. package/src/app-server/protocol-generated/typescript/v2/CommandExecutionRequestApprovalParams.ts +0 -62
  213. package/src/app-server/protocol-generated/typescript/v2/CommandExecutionRequestApprovalResponse.ts +0 -8
  214. package/src/app-server/protocol-generated/typescript/v2/CommandExecutionSource.ts +0 -9
  215. package/src/app-server/protocol-generated/typescript/v2/CommandExecutionStatus.ts +0 -5
  216. package/src/app-server/protocol-generated/typescript/v2/Config.ts +0 -54
  217. package/src/app-server/protocol-generated/typescript/v2/ConfigBatchWriteParams.ts +0 -17
  218. package/src/app-server/protocol-generated/typescript/v2/ConfigEdit.ts +0 -7
  219. package/src/app-server/protocol-generated/typescript/v2/ConfigLayer.ts +0 -12
  220. package/src/app-server/protocol-generated/typescript/v2/ConfigLayerMetadata.ts +0 -6
  221. package/src/app-server/protocol-generated/typescript/v2/ConfigLayerSource.ts +0 -27
  222. package/src/app-server/protocol-generated/typescript/v2/ConfigReadParams.ts +0 -13
  223. package/src/app-server/protocol-generated/typescript/v2/ConfigReadResponse.ts +0 -12
  224. package/src/app-server/protocol-generated/typescript/v2/ConfigRequirements.ts +0 -15
  225. package/src/app-server/protocol-generated/typescript/v2/ConfigRequirementsReadResponse.ts +0 -11
  226. package/src/app-server/protocol-generated/typescript/v2/ConfigValueWriteParams.ts +0 -16
  227. package/src/app-server/protocol-generated/typescript/v2/ConfigWarningNotification.ts +0 -23
  228. package/src/app-server/protocol-generated/typescript/v2/ConfigWriteResponse.ts +0 -16
  229. package/src/app-server/protocol-generated/typescript/v2/ConfiguredHookHandler.ts +0 -14
  230. package/src/app-server/protocol-generated/typescript/v2/ConfiguredHookMatcherGroup.ts +0 -9
  231. package/src/app-server/protocol-generated/typescript/v2/ContextCompactedNotification.ts +0 -8
  232. package/src/app-server/protocol-generated/typescript/v2/CreditsSnapshot.ts +0 -5
  233. package/src/app-server/protocol-generated/typescript/v2/DeprecationNoticeNotification.ts +0 -14
  234. package/src/app-server/protocol-generated/typescript/v2/DeviceKeyAlgorithm.ts +0 -8
  235. package/src/app-server/protocol-generated/typescript/v2/DeviceKeyCreateParams.ts +0 -16
  236. package/src/app-server/protocol-generated/typescript/v2/DeviceKeyCreateResponse.ts +0 -18
  237. package/src/app-server/protocol-generated/typescript/v2/DeviceKeyProtectionClass.ts +0 -11
  238. package/src/app-server/protocol-generated/typescript/v2/DeviceKeyProtectionPolicy.ts +0 -8
  239. package/src/app-server/protocol-generated/typescript/v2/DeviceKeyPublicParams.ts +0 -8
  240. package/src/app-server/protocol-generated/typescript/v2/DeviceKeyPublicResponse.ts +0 -18
  241. package/src/app-server/protocol-generated/typescript/v2/DeviceKeySignParams.ts +0 -9
  242. package/src/app-server/protocol-generated/typescript/v2/DeviceKeySignPayload.ts +0 -68
  243. package/src/app-server/protocol-generated/typescript/v2/DeviceKeySignResponse.ts +0 -20
  244. package/src/app-server/protocol-generated/typescript/v2/DynamicToolCallOutputContentItem.ts +0 -7
  245. package/src/app-server/protocol-generated/typescript/v2/DynamicToolCallParams.ts +0 -13
  246. package/src/app-server/protocol-generated/typescript/v2/DynamicToolCallResponse.ts +0 -9
  247. package/src/app-server/protocol-generated/typescript/v2/DynamicToolCallStatus.ts +0 -5
  248. package/src/app-server/protocol-generated/typescript/v2/DynamicToolSpec.ts +0 -12
  249. package/src/app-server/protocol-generated/typescript/v2/ErrorNotification.ts +0 -11
  250. package/src/app-server/protocol-generated/typescript/v2/ExecPolicyAmendment.ts +0 -5
  251. package/src/app-server/protocol-generated/typescript/v2/ExperimentalFeature.ts +0 -38
  252. package/src/app-server/protocol-generated/typescript/v2/ExperimentalFeatureEnablementSetParams.ts +0 -13
  253. package/src/app-server/protocol-generated/typescript/v2/ExperimentalFeatureEnablementSetResponse.ts +0 -10
  254. package/src/app-server/protocol-generated/typescript/v2/ExperimentalFeatureListParams.ts +0 -14
  255. package/src/app-server/protocol-generated/typescript/v2/ExperimentalFeatureListResponse.ts +0 -13
  256. package/src/app-server/protocol-generated/typescript/v2/ExperimentalFeatureStage.ts +0 -10
  257. package/src/app-server/protocol-generated/typescript/v2/ExternalAgentConfigDetectParams.ts +0 -14
  258. package/src/app-server/protocol-generated/typescript/v2/ExternalAgentConfigDetectResponse.ts +0 -6
  259. package/src/app-server/protocol-generated/typescript/v2/ExternalAgentConfigImportCompletedNotification.ts +0 -5
  260. package/src/app-server/protocol-generated/typescript/v2/ExternalAgentConfigImportParams.ts +0 -8
  261. package/src/app-server/protocol-generated/typescript/v2/ExternalAgentConfigImportResponse.ts +0 -5
  262. package/src/app-server/protocol-generated/typescript/v2/ExternalAgentConfigMigrationItem.ts +0 -15
  263. package/src/app-server/protocol-generated/typescript/v2/ExternalAgentConfigMigrationItemType.ts +0 -10
  264. package/src/app-server/protocol-generated/typescript/v2/FeedbackUploadParams.ts +0 -12
  265. package/src/app-server/protocol-generated/typescript/v2/FeedbackUploadResponse.ts +0 -5
  266. package/src/app-server/protocol-generated/typescript/v2/FileChangeApprovalDecision.ts +0 -5
  267. package/src/app-server/protocol-generated/typescript/v2/FileChangeOutputDeltaNotification.ts +0 -10
  268. package/src/app-server/protocol-generated/typescript/v2/FileChangePatchUpdatedNotification.ts +0 -11
  269. package/src/app-server/protocol-generated/typescript/v2/FileChangeRequestApprovalParams.ts +0 -18
  270. package/src/app-server/protocol-generated/typescript/v2/FileChangeRequestApprovalResponse.ts +0 -6
  271. package/src/app-server/protocol-generated/typescript/v2/FileSystemAccessMode.ts +0 -5
  272. package/src/app-server/protocol-generated/typescript/v2/FileSystemPath.ts +0 -10
  273. package/src/app-server/protocol-generated/typescript/v2/FileSystemSandboxEntry.ts +0 -7
  274. package/src/app-server/protocol-generated/typescript/v2/FileSystemSpecialPath.ts +0 -12
  275. package/src/app-server/protocol-generated/typescript/v2/FileUpdateChange.ts +0 -6
  276. package/src/app-server/protocol-generated/typescript/v2/FsChangedNotification.ts +0 -18
  277. package/src/app-server/protocol-generated/typescript/v2/FsCopyParams.ts +0 -22
  278. package/src/app-server/protocol-generated/typescript/v2/FsCopyResponse.ts +0 -8
  279. package/src/app-server/protocol-generated/typescript/v2/FsCreateDirectoryParams.ts +0 -18
  280. package/src/app-server/protocol-generated/typescript/v2/FsCreateDirectoryResponse.ts +0 -8
  281. package/src/app-server/protocol-generated/typescript/v2/FsGetMetadataParams.ts +0 -14
  282. package/src/app-server/protocol-generated/typescript/v2/FsGetMetadataResponse.ts +0 -29
  283. package/src/app-server/protocol-generated/typescript/v2/FsReadDirectoryEntry.ts +0 -21
  284. package/src/app-server/protocol-generated/typescript/v2/FsReadDirectoryParams.ts +0 -14
  285. package/src/app-server/protocol-generated/typescript/v2/FsReadDirectoryResponse.ts +0 -14
  286. package/src/app-server/protocol-generated/typescript/v2/FsReadFileParams.ts +0 -14
  287. package/src/app-server/protocol-generated/typescript/v2/FsReadFileResponse.ts +0 -13
  288. package/src/app-server/protocol-generated/typescript/v2/FsRemoveParams.ts +0 -22
  289. package/src/app-server/protocol-generated/typescript/v2/FsRemoveResponse.ts +0 -8
  290. package/src/app-server/protocol-generated/typescript/v2/FsUnwatchParams.ts +0 -13
  291. package/src/app-server/protocol-generated/typescript/v2/FsUnwatchResponse.ts +0 -8
  292. package/src/app-server/protocol-generated/typescript/v2/FsWatchParams.ts +0 -18
  293. package/src/app-server/protocol-generated/typescript/v2/FsWatchResponse.ts +0 -14
  294. package/src/app-server/protocol-generated/typescript/v2/FsWriteFileParams.ts +0 -18
  295. package/src/app-server/protocol-generated/typescript/v2/FsWriteFileResponse.ts +0 -8
  296. package/src/app-server/protocol-generated/typescript/v2/GetAccountParams.ts +0 -14
  297. package/src/app-server/protocol-generated/typescript/v2/GetAccountRateLimitsResponse.ts +0 -15
  298. package/src/app-server/protocol-generated/typescript/v2/GetAccountResponse.ts +0 -6
  299. package/src/app-server/protocol-generated/typescript/v2/GitInfo.ts +0 -5
  300. package/src/app-server/protocol-generated/typescript/v2/GrantedPermissionProfile.ts +0 -10
  301. package/src/app-server/protocol-generated/typescript/v2/GuardianApprovalReview.ts +0 -18
  302. package/src/app-server/protocol-generated/typescript/v2/GuardianApprovalReviewAction.ts +0 -34
  303. package/src/app-server/protocol-generated/typescript/v2/GuardianApprovalReviewStatus.ts +0 -13
  304. package/src/app-server/protocol-generated/typescript/v2/GuardianCommandSource.ts +0 -5
  305. package/src/app-server/protocol-generated/typescript/v2/GuardianRiskLevel.ts +0 -8
  306. package/src/app-server/protocol-generated/typescript/v2/GuardianUserAuthorization.ts +0 -8
  307. package/src/app-server/protocol-generated/typescript/v2/GuardianWarningNotification.ts +0 -14
  308. package/src/app-server/protocol-generated/typescript/v2/HookCompletedNotification.ts +0 -10
  309. package/src/app-server/protocol-generated/typescript/v2/HookEventName.ts +0 -11
  310. package/src/app-server/protocol-generated/typescript/v2/HookExecutionMode.ts +0 -5
  311. package/src/app-server/protocol-generated/typescript/v2/HookHandlerType.ts +0 -5
  312. package/src/app-server/protocol-generated/typescript/v2/HookOutputEntry.ts +0 -6
  313. package/src/app-server/protocol-generated/typescript/v2/HookOutputEntryKind.ts +0 -5
  314. package/src/app-server/protocol-generated/typescript/v2/HookPromptFragment.ts +0 -5
  315. package/src/app-server/protocol-generated/typescript/v2/HookRunStatus.ts +0 -5
  316. package/src/app-server/protocol-generated/typescript/v2/HookRunSummary.ts +0 -28
  317. package/src/app-server/protocol-generated/typescript/v2/HookScope.ts +0 -5
  318. package/src/app-server/protocol-generated/typescript/v2/HookSource.ts +0 -13
  319. package/src/app-server/protocol-generated/typescript/v2/HookStartedNotification.ts +0 -10
  320. package/src/app-server/protocol-generated/typescript/v2/ItemCompletedNotification.ts +0 -6
  321. package/src/app-server/protocol-generated/typescript/v2/ItemGuardianApprovalReviewCompletedNotification.ts +0 -36
  322. package/src/app-server/protocol-generated/typescript/v2/ItemGuardianApprovalReviewStartedNotification.ts +0 -34
  323. package/src/app-server/protocol-generated/typescript/v2/ItemStartedNotification.ts +0 -6
  324. package/src/app-server/protocol-generated/typescript/v2/ListMcpServerStatusParams.ts +0 -20
  325. package/src/app-server/protocol-generated/typescript/v2/ListMcpServerStatusResponse.ts +0 -13
  326. package/src/app-server/protocol-generated/typescript/v2/LoginAccountParams.ts +0 -27
  327. package/src/app-server/protocol-generated/typescript/v2/LoginAccountResponse.ts +0 -27
  328. package/src/app-server/protocol-generated/typescript/v2/LogoutAccountResponse.ts +0 -5
  329. package/src/app-server/protocol-generated/typescript/v2/ManagedHooksRequirements.ts +0 -15
  330. package/src/app-server/protocol-generated/typescript/v2/MarketplaceAddParams.ts +0 -9
  331. package/src/app-server/protocol-generated/typescript/v2/MarketplaceAddResponse.ts +0 -10
  332. package/src/app-server/protocol-generated/typescript/v2/MarketplaceInterface.ts +0 -5
  333. package/src/app-server/protocol-generated/typescript/v2/MarketplaceLoadErrorInfo.ts +0 -6
  334. package/src/app-server/protocol-generated/typescript/v2/MarketplaceRemoveParams.ts +0 -5
  335. package/src/app-server/protocol-generated/typescript/v2/MarketplaceRemoveResponse.ts +0 -9
  336. package/src/app-server/protocol-generated/typescript/v2/MarketplaceUpgradeErrorInfo.ts +0 -5
  337. package/src/app-server/protocol-generated/typescript/v2/MarketplaceUpgradeParams.ts +0 -5
  338. package/src/app-server/protocol-generated/typescript/v2/MarketplaceUpgradeResponse.ts +0 -11
  339. package/src/app-server/protocol-generated/typescript/v2/McpAuthStatus.ts +0 -5
  340. package/src/app-server/protocol-generated/typescript/v2/McpElicitationArrayType.ts +0 -5
  341. package/src/app-server/protocol-generated/typescript/v2/McpElicitationBooleanSchema.ts +0 -11
  342. package/src/app-server/protocol-generated/typescript/v2/McpElicitationBooleanType.ts +0 -5
  343. package/src/app-server/protocol-generated/typescript/v2/McpElicitationConstOption.ts +0 -5
  344. package/src/app-server/protocol-generated/typescript/v2/McpElicitationEnumSchema.ts +0 -11
  345. package/src/app-server/protocol-generated/typescript/v2/McpElicitationLegacyTitledEnumSchema.ts +0 -13
  346. package/src/app-server/protocol-generated/typescript/v2/McpElicitationMultiSelectEnumSchema.ts +0 -9
  347. package/src/app-server/protocol-generated/typescript/v2/McpElicitationNumberSchema.ts +0 -13
  348. package/src/app-server/protocol-generated/typescript/v2/McpElicitationNumberType.ts +0 -5
  349. package/src/app-server/protocol-generated/typescript/v2/McpElicitationObjectType.ts +0 -5
  350. package/src/app-server/protocol-generated/typescript/v2/McpElicitationPrimitiveSchema.ts +0 -13
  351. package/src/app-server/protocol-generated/typescript/v2/McpElicitationSchema.ts +0 -18
  352. package/src/app-server/protocol-generated/typescript/v2/McpElicitationSingleSelectEnumSchema.ts +0 -9
  353. package/src/app-server/protocol-generated/typescript/v2/McpElicitationStringFormat.ts +0 -5
  354. package/src/app-server/protocol-generated/typescript/v2/McpElicitationStringSchema.ts +0 -15
  355. package/src/app-server/protocol-generated/typescript/v2/McpElicitationStringType.ts +0 -5
  356. package/src/app-server/protocol-generated/typescript/v2/McpElicitationTitledEnumItems.ts +0 -6
  357. package/src/app-server/protocol-generated/typescript/v2/McpElicitationTitledMultiSelectEnumSchema.ts +0 -15
  358. package/src/app-server/protocol-generated/typescript/v2/McpElicitationTitledSingleSelectEnumSchema.ts +0 -13
  359. package/src/app-server/protocol-generated/typescript/v2/McpElicitationUntitledEnumItems.ts +0 -9
  360. package/src/app-server/protocol-generated/typescript/v2/McpElicitationUntitledMultiSelectEnumSchema.ts +0 -15
  361. package/src/app-server/protocol-generated/typescript/v2/McpElicitationUntitledSingleSelectEnumSchema.ts +0 -12
  362. package/src/app-server/protocol-generated/typescript/v2/McpResourceReadParams.ts +0 -5
  363. package/src/app-server/protocol-generated/typescript/v2/McpResourceReadResponse.ts +0 -6
  364. package/src/app-server/protocol-generated/typescript/v2/McpServerElicitationAction.ts +0 -5
  365. package/src/app-server/protocol-generated/typescript/v2/McpServerElicitationRequestParams.ts +0 -27
  366. package/src/app-server/protocol-generated/typescript/v2/McpServerElicitationRequestResponse.ts +0 -19
  367. package/src/app-server/protocol-generated/typescript/v2/McpServerOauthLoginCompletedNotification.ts +0 -9
  368. package/src/app-server/protocol-generated/typescript/v2/McpServerOauthLoginParams.ts +0 -9
  369. package/src/app-server/protocol-generated/typescript/v2/McpServerOauthLoginResponse.ts +0 -5
  370. package/src/app-server/protocol-generated/typescript/v2/McpServerRefreshResponse.ts +0 -5
  371. package/src/app-server/protocol-generated/typescript/v2/McpServerStartupState.ts +0 -5
  372. package/src/app-server/protocol-generated/typescript/v2/McpServerStatus.ts +0 -15
  373. package/src/app-server/protocol-generated/typescript/v2/McpServerStatusDetail.ts +0 -5
  374. package/src/app-server/protocol-generated/typescript/v2/McpServerStatusUpdatedNotification.ts +0 -10
  375. package/src/app-server/protocol-generated/typescript/v2/McpServerToolCallParams.ts +0 -12
  376. package/src/app-server/protocol-generated/typescript/v2/McpServerToolCallResponse.ts +0 -11
  377. package/src/app-server/protocol-generated/typescript/v2/McpToolCallError.ts +0 -5
  378. package/src/app-server/protocol-generated/typescript/v2/McpToolCallProgressNotification.ts +0 -10
  379. package/src/app-server/protocol-generated/typescript/v2/McpToolCallResult.ts +0 -10
  380. package/src/app-server/protocol-generated/typescript/v2/McpToolCallStatus.ts +0 -5
  381. package/src/app-server/protocol-generated/typescript/v2/MemoryCitation.ts +0 -6
  382. package/src/app-server/protocol-generated/typescript/v2/MemoryCitationEntry.ts +0 -10
  383. package/src/app-server/protocol-generated/typescript/v2/MergeStrategy.ts +0 -5
  384. package/src/app-server/protocol-generated/typescript/v2/MigrationDetails.ts +0 -6
  385. package/src/app-server/protocol-generated/typescript/v2/Model.ts +0 -25
  386. package/src/app-server/protocol-generated/typescript/v2/ModelAvailabilityNux.ts +0 -5
  387. package/src/app-server/protocol-generated/typescript/v2/ModelListParams.ts +0 -18
  388. package/src/app-server/protocol-generated/typescript/v2/ModelListResponse.ts +0 -13
  389. package/src/app-server/protocol-generated/typescript/v2/ModelRerouteReason.ts +0 -5
  390. package/src/app-server/protocol-generated/typescript/v2/ModelReroutedNotification.ts +0 -12
  391. package/src/app-server/protocol-generated/typescript/v2/ModelUpgradeInfo.ts +0 -10
  392. package/src/app-server/protocol-generated/typescript/v2/ModelVerification.ts +0 -5
  393. package/src/app-server/protocol-generated/typescript/v2/ModelVerificationNotification.ts +0 -10
  394. package/src/app-server/protocol-generated/typescript/v2/NetworkAccess.ts +0 -5
  395. package/src/app-server/protocol-generated/typescript/v2/NetworkApprovalContext.ts +0 -6
  396. package/src/app-server/protocol-generated/typescript/v2/NetworkApprovalProtocol.ts +0 -5
  397. package/src/app-server/protocol-generated/typescript/v2/NetworkDomainPermission.ts +0 -5
  398. package/src/app-server/protocol-generated/typescript/v2/NetworkPolicyAmendment.ts +0 -6
  399. package/src/app-server/protocol-generated/typescript/v2/NetworkPolicyRuleAction.ts +0 -5
  400. package/src/app-server/protocol-generated/typescript/v2/NetworkRequirements.ts +0 -40
  401. package/src/app-server/protocol-generated/typescript/v2/NetworkUnixSocketPermission.ts +0 -5
  402. package/src/app-server/protocol-generated/typescript/v2/NonSteerableTurnKind.ts +0 -5
  403. package/src/app-server/protocol-generated/typescript/v2/OverriddenMetadata.ts +0 -11
  404. package/src/app-server/protocol-generated/typescript/v2/PatchApplyStatus.ts +0 -5
  405. package/src/app-server/protocol-generated/typescript/v2/PatchChangeKind.ts +0 -8
  406. package/src/app-server/protocol-generated/typescript/v2/PermissionGrantScope.ts +0 -5
  407. package/src/app-server/protocol-generated/typescript/v2/PermissionProfile.ts +0 -10
  408. package/src/app-server/protocol-generated/typescript/v2/PermissionProfileFileSystemPermissions.ts +0 -9
  409. package/src/app-server/protocol-generated/typescript/v2/PermissionProfileNetworkPermissions.ts +0 -5
  410. package/src/app-server/protocol-generated/typescript/v2/PermissionsRequestApprovalParams.ts +0 -14
  411. package/src/app-server/protocol-generated/typescript/v2/PermissionsRequestApprovalResponse.ts +0 -14
  412. package/src/app-server/protocol-generated/typescript/v2/PlanDeltaNotification.ts +0 -14
  413. package/src/app-server/protocol-generated/typescript/v2/PluginAuthPolicy.ts +0 -5
  414. package/src/app-server/protocol-generated/typescript/v2/PluginDetail.ts +0 -17
  415. package/src/app-server/protocol-generated/typescript/v2/PluginInstallParams.ts +0 -10
  416. package/src/app-server/protocol-generated/typescript/v2/PluginInstallPolicy.ts +0 -5
  417. package/src/app-server/protocol-generated/typescript/v2/PluginInstallResponse.ts +0 -10
  418. package/src/app-server/protocol-generated/typescript/v2/PluginInterface.ts +0 -46
  419. package/src/app-server/protocol-generated/typescript/v2/PluginListParams.ts +0 -12
  420. package/src/app-server/protocol-generated/typescript/v2/PluginListResponse.ts +0 -11
  421. package/src/app-server/protocol-generated/typescript/v2/PluginMarketplaceEntry.ts +0 -17
  422. package/src/app-server/protocol-generated/typescript/v2/PluginReadParams.ts +0 -10
  423. package/src/app-server/protocol-generated/typescript/v2/PluginReadResponse.ts +0 -6
  424. package/src/app-server/protocol-generated/typescript/v2/PluginSource.ts +0 -9
  425. package/src/app-server/protocol-generated/typescript/v2/PluginSummary.ts +0 -18
  426. package/src/app-server/protocol-generated/typescript/v2/PluginUninstallParams.ts +0 -5
  427. package/src/app-server/protocol-generated/typescript/v2/PluginUninstallResponse.ts +0 -5
  428. package/src/app-server/protocol-generated/typescript/v2/PluginsMigration.ts +0 -5
  429. package/src/app-server/protocol-generated/typescript/v2/ProfileV2.ts +0 -38
  430. package/src/app-server/protocol-generated/typescript/v2/RateLimitReachedType.ts +0 -10
  431. package/src/app-server/protocol-generated/typescript/v2/RateLimitSnapshot.ts +0 -17
  432. package/src/app-server/protocol-generated/typescript/v2/RateLimitWindow.ts +0 -9
  433. package/src/app-server/protocol-generated/typescript/v2/RawResponseItemCompletedNotification.ts +0 -10
  434. package/src/app-server/protocol-generated/typescript/v2/ReadOnlyAccess.ts +0 -8
  435. package/src/app-server/protocol-generated/typescript/v2/ReasoningEffortOption.ts +0 -6
  436. package/src/app-server/protocol-generated/typescript/v2/ReasoningSummaryPartAddedNotification.ts +0 -10
  437. package/src/app-server/protocol-generated/typescript/v2/ReasoningSummaryTextDeltaNotification.ts +0 -11
  438. package/src/app-server/protocol-generated/typescript/v2/ReasoningTextDeltaNotification.ts +0 -11
  439. package/src/app-server/protocol-generated/typescript/v2/RemoteControlClientConnectionAudience.ts +0 -8
  440. package/src/app-server/protocol-generated/typescript/v2/RemoteControlClientEnrollmentAudience.ts +0 -8
  441. package/src/app-server/protocol-generated/typescript/v2/RequestPermissionProfile.ts +0 -10
  442. package/src/app-server/protocol-generated/typescript/v2/ResidencyRequirement.ts +0 -5
  443. package/src/app-server/protocol-generated/typescript/v2/ReviewDelivery.ts +0 -5
  444. package/src/app-server/protocol-generated/typescript/v2/ReviewStartParams.ts +0 -15
  445. package/src/app-server/protocol-generated/typescript/v2/ReviewStartResponse.ts +0 -15
  446. package/src/app-server/protocol-generated/typescript/v2/ReviewTarget.ts +0 -16
  447. package/src/app-server/protocol-generated/typescript/v2/SandboxMode.ts +0 -5
  448. package/src/app-server/protocol-generated/typescript/v2/SandboxPolicy.ts +0 -19
  449. package/src/app-server/protocol-generated/typescript/v2/SandboxWorkspaceWrite.ts +0 -10
  450. package/src/app-server/protocol-generated/typescript/v2/SendAddCreditsNudgeEmailParams.ts +0 -6
  451. package/src/app-server/protocol-generated/typescript/v2/SendAddCreditsNudgeEmailResponse.ts +0 -6
  452. package/src/app-server/protocol-generated/typescript/v2/ServerRequestResolvedNotification.ts +0 -6
  453. package/src/app-server/protocol-generated/typescript/v2/SessionSource.ts +0 -13
  454. package/src/app-server/protocol-generated/typescript/v2/SkillDependencies.ts +0 -6
  455. package/src/app-server/protocol-generated/typescript/v2/SkillErrorInfo.ts +0 -5
  456. package/src/app-server/protocol-generated/typescript/v2/SkillInterface.ts +0 -13
  457. package/src/app-server/protocol-generated/typescript/v2/SkillMetadata.ts +0 -21
  458. package/src/app-server/protocol-generated/typescript/v2/SkillScope.ts +0 -5
  459. package/src/app-server/protocol-generated/typescript/v2/SkillSummary.ts +0 -14
  460. package/src/app-server/protocol-generated/typescript/v2/SkillToolDependency.ts +0 -12
  461. package/src/app-server/protocol-generated/typescript/v2/SkillsChangedNotification.ts +0 -11
  462. package/src/app-server/protocol-generated/typescript/v2/SkillsConfigWriteParams.ts +0 -16
  463. package/src/app-server/protocol-generated/typescript/v2/SkillsConfigWriteResponse.ts +0 -5
  464. package/src/app-server/protocol-generated/typescript/v2/SkillsListEntry.ts +0 -11
  465. package/src/app-server/protocol-generated/typescript/v2/SkillsListExtraRootsForCwd.ts +0 -5
  466. package/src/app-server/protocol-generated/typescript/v2/SkillsListParams.ts +0 -19
  467. package/src/app-server/protocol-generated/typescript/v2/SkillsListResponse.ts +0 -6
  468. package/src/app-server/protocol-generated/typescript/v2/SortDirection.ts +0 -5
  469. package/src/app-server/protocol-generated/typescript/v2/TerminalInteractionNotification.ts +0 -11
  470. package/src/app-server/protocol-generated/typescript/v2/TextElement.ts +0 -15
  471. package/src/app-server/protocol-generated/typescript/v2/TextPosition.ts +0 -14
  472. package/src/app-server/protocol-generated/typescript/v2/TextRange.ts +0 -6
  473. package/src/app-server/protocol-generated/typescript/v2/Thread.ts +0 -79
  474. package/src/app-server/protocol-generated/typescript/v2/ThreadActiveFlag.ts +0 -5
  475. package/src/app-server/protocol-generated/typescript/v2/ThreadApproveGuardianDeniedActionParams.ts +0 -12
  476. package/src/app-server/protocol-generated/typescript/v2/ThreadApproveGuardianDeniedActionResponse.ts +0 -5
  477. package/src/app-server/protocol-generated/typescript/v2/ThreadArchiveParams.ts +0 -5
  478. package/src/app-server/protocol-generated/typescript/v2/ThreadArchiveResponse.ts +0 -5
  479. package/src/app-server/protocol-generated/typescript/v2/ThreadArchivedNotification.ts +0 -5
  480. package/src/app-server/protocol-generated/typescript/v2/ThreadClosedNotification.ts +0 -5
  481. package/src/app-server/protocol-generated/typescript/v2/ThreadCompactStartParams.ts +0 -5
  482. package/src/app-server/protocol-generated/typescript/v2/ThreadCompactStartResponse.ts +0 -5
  483. package/src/app-server/protocol-generated/typescript/v2/ThreadForkParams.ts +0 -55
  484. package/src/app-server/protocol-generated/typescript/v2/ThreadForkResponse.ts +0 -41
  485. package/src/app-server/protocol-generated/typescript/v2/ThreadInjectItemsParams.ts +0 -12
  486. package/src/app-server/protocol-generated/typescript/v2/ThreadInjectItemsResponse.ts +0 -5
  487. package/src/app-server/protocol-generated/typescript/v2/ThreadItem.ts +0 -156
  488. package/src/app-server/protocol-generated/typescript/v2/ThreadListParams.ts +0 -55
  489. package/src/app-server/protocol-generated/typescript/v2/ThreadListResponse.ts +0 -20
  490. package/src/app-server/protocol-generated/typescript/v2/ThreadLoadedListParams.ts +0 -14
  491. package/src/app-server/protocol-generated/typescript/v2/ThreadLoadedListResponse.ts +0 -15
  492. package/src/app-server/protocol-generated/typescript/v2/ThreadMetadataGitInfoUpdateParams.ts +0 -21
  493. package/src/app-server/protocol-generated/typescript/v2/ThreadMetadataUpdateParams.ts +0 -14
  494. package/src/app-server/protocol-generated/typescript/v2/ThreadMetadataUpdateResponse.ts +0 -6
  495. package/src/app-server/protocol-generated/typescript/v2/ThreadNameUpdatedNotification.ts +0 -5
  496. package/src/app-server/protocol-generated/typescript/v2/ThreadReadParams.ts +0 -11
  497. package/src/app-server/protocol-generated/typescript/v2/ThreadReadResponse.ts +0 -6
  498. package/src/app-server/protocol-generated/typescript/v2/ThreadRealtimeAudioChunk.ts +0 -14
  499. package/src/app-server/protocol-generated/typescript/v2/ThreadRealtimeClosedNotification.ts +0 -8
  500. package/src/app-server/protocol-generated/typescript/v2/ThreadRealtimeErrorNotification.ts +0 -8
  501. package/src/app-server/protocol-generated/typescript/v2/ThreadRealtimeItemAddedNotification.ts +0 -9
  502. package/src/app-server/protocol-generated/typescript/v2/ThreadRealtimeOutputAudioDeltaNotification.ts +0 -12
  503. package/src/app-server/protocol-generated/typescript/v2/ThreadRealtimeSdpNotification.ts +0 -8
  504. package/src/app-server/protocol-generated/typescript/v2/ThreadRealtimeStartTransport.ts +0 -17
  505. package/src/app-server/protocol-generated/typescript/v2/ThreadRealtimeStartedNotification.ts +0 -13
  506. package/src/app-server/protocol-generated/typescript/v2/ThreadRealtimeTranscriptDeltaNotification.ts +0 -16
  507. package/src/app-server/protocol-generated/typescript/v2/ThreadRealtimeTranscriptDoneNotification.ts +0 -16
  508. package/src/app-server/protocol-generated/typescript/v2/ThreadResumeParams.ts +0 -64
  509. package/src/app-server/protocol-generated/typescript/v2/ThreadResumeResponse.ts +0 -41
  510. package/src/app-server/protocol-generated/typescript/v2/ThreadRollbackParams.ts +0 -14
  511. package/src/app-server/protocol-generated/typescript/v2/ThreadRollbackResponse.ts +0 -15
  512. package/src/app-server/protocol-generated/typescript/v2/ThreadSetNameParams.ts +0 -5
  513. package/src/app-server/protocol-generated/typescript/v2/ThreadSetNameResponse.ts +0 -5
  514. package/src/app-server/protocol-generated/typescript/v2/ThreadShellCommandParams.ts +0 -14
  515. package/src/app-server/protocol-generated/typescript/v2/ThreadShellCommandResponse.ts +0 -5
  516. package/src/app-server/protocol-generated/typescript/v2/ThreadSortKey.ts +0 -5
  517. package/src/app-server/protocol-generated/typescript/v2/ThreadSourceKind.ts +0 -15
  518. package/src/app-server/protocol-generated/typescript/v2/ThreadStartParams.ts +0 -43
  519. package/src/app-server/protocol-generated/typescript/v2/ThreadStartResponse.ts +0 -41
  520. package/src/app-server/protocol-generated/typescript/v2/ThreadStartSource.ts +0 -5
  521. package/src/app-server/protocol-generated/typescript/v2/ThreadStartedNotification.ts +0 -6
  522. package/src/app-server/protocol-generated/typescript/v2/ThreadStatus.ts +0 -10
  523. package/src/app-server/protocol-generated/typescript/v2/ThreadStatusChangedNotification.ts +0 -6
  524. package/src/app-server/protocol-generated/typescript/v2/ThreadTokenUsage.ts +0 -10
  525. package/src/app-server/protocol-generated/typescript/v2/ThreadTokenUsageUpdatedNotification.ts +0 -10
  526. package/src/app-server/protocol-generated/typescript/v2/ThreadTurnsListParams.ts +0 -20
  527. package/src/app-server/protocol-generated/typescript/v2/ThreadTurnsListResponse.ts +0 -20
  528. package/src/app-server/protocol-generated/typescript/v2/ThreadUnarchiveParams.ts +0 -5
  529. package/src/app-server/protocol-generated/typescript/v2/ThreadUnarchiveResponse.ts +0 -6
  530. package/src/app-server/protocol-generated/typescript/v2/ThreadUnarchivedNotification.ts +0 -5
  531. package/src/app-server/protocol-generated/typescript/v2/ThreadUnsubscribeParams.ts +0 -5
  532. package/src/app-server/protocol-generated/typescript/v2/ThreadUnsubscribeResponse.ts +0 -6
  533. package/src/app-server/protocol-generated/typescript/v2/ThreadUnsubscribeStatus.ts +0 -5
  534. package/src/app-server/protocol-generated/typescript/v2/TokenUsageBreakdown.ts +0 -11
  535. package/src/app-server/protocol-generated/typescript/v2/ToolRequestUserInputAnswer.ts +0 -8
  536. package/src/app-server/protocol-generated/typescript/v2/ToolRequestUserInputOption.ts +0 -8
  537. package/src/app-server/protocol-generated/typescript/v2/ToolRequestUserInputParams.ts +0 -14
  538. package/src/app-server/protocol-generated/typescript/v2/ToolRequestUserInputQuestion.ts +0 -16
  539. package/src/app-server/protocol-generated/typescript/v2/ToolRequestUserInputResponse.ts +0 -11
  540. package/src/app-server/protocol-generated/typescript/v2/ToolsV2.ts +0 -6
  541. package/src/app-server/protocol-generated/typescript/v2/Turn.ts +0 -33
  542. package/src/app-server/protocol-generated/typescript/v2/TurnCompletedNotification.ts +0 -6
  543. package/src/app-server/protocol-generated/typescript/v2/TurnDiffUpdatedNotification.ts +0 -9
  544. package/src/app-server/protocol-generated/typescript/v2/TurnEnvironmentParams.ts +0 -6
  545. package/src/app-server/protocol-generated/typescript/v2/TurnError.ts +0 -10
  546. package/src/app-server/protocol-generated/typescript/v2/TurnInterruptParams.ts +0 -5
  547. package/src/app-server/protocol-generated/typescript/v2/TurnInterruptResponse.ts +0 -5
  548. package/src/app-server/protocol-generated/typescript/v2/TurnPlanStep.ts +0 -6
  549. package/src/app-server/protocol-generated/typescript/v2/TurnPlanStepStatus.ts +0 -5
  550. package/src/app-server/protocol-generated/typescript/v2/TurnPlanUpdatedNotification.ts +0 -11
  551. package/src/app-server/protocol-generated/typescript/v2/TurnStartParams.ts +0 -62
  552. package/src/app-server/protocol-generated/typescript/v2/TurnStartResponse.ts +0 -6
  553. package/src/app-server/protocol-generated/typescript/v2/TurnStartedNotification.ts +0 -6
  554. package/src/app-server/protocol-generated/typescript/v2/TurnStatus.ts +0 -5
  555. package/src/app-server/protocol-generated/typescript/v2/TurnSteerParams.ts +0 -13
  556. package/src/app-server/protocol-generated/typescript/v2/TurnSteerResponse.ts +0 -5
  557. package/src/app-server/protocol-generated/typescript/v2/UserInput.ts +0 -18
  558. package/src/app-server/protocol-generated/typescript/v2/WarningNotification.ts +0 -14
  559. package/src/app-server/protocol-generated/typescript/v2/WebSearchAction.ts +0 -9
  560. package/src/app-server/protocol-generated/typescript/v2/WindowsSandboxSetupCompletedNotification.ts +0 -10
  561. package/src/app-server/protocol-generated/typescript/v2/WindowsSandboxSetupMode.ts +0 -5
  562. package/src/app-server/protocol-generated/typescript/v2/WindowsSandboxSetupStartParams.ts +0 -10
  563. package/src/app-server/protocol-generated/typescript/v2/WindowsSandboxSetupStartResponse.ts +0 -5
  564. package/src/app-server/protocol-generated/typescript/v2/WindowsWorldWritableWarningNotification.ts +0 -9
  565. package/src/app-server/protocol-generated/typescript/v2/WriteStatus.ts +0 -5
  566. package/src/app-server/protocol-generated/typescript/v2/index.ts +0 -410
  567. package/src/app-server/protocol-validators.ts +0 -167
  568. package/src/app-server/protocol.ts +0 -110
  569. package/src/app-server/request.ts +0 -45
  570. package/src/app-server/run-attempt.context-engine.test.ts +0 -423
  571. package/src/app-server/run-attempt.test.ts +0 -2354
  572. package/src/app-server/run-attempt.ts +0 -1671
  573. package/src/app-server/run-attempt.vision-tools.test.ts +0 -35
  574. package/src/app-server/schema-normalization-runtime-contract.test.ts +0 -169
  575. package/src/app-server/session-binding.test.ts +0 -52
  576. package/src/app-server/session-binding.ts +0 -131
  577. package/src/app-server/session-history.ts +0 -40
  578. package/src/app-server/shared-client.test.ts +0 -396
  579. package/src/app-server/shared-client.ts +0 -174
  580. package/src/app-server/test-support.ts +0 -48
  581. package/src/app-server/thread-lifecycle.test.ts +0 -59
  582. package/src/app-server/thread-lifecycle.ts +0 -336
  583. package/src/app-server/timeout.ts +0 -22
  584. package/src/app-server/trajectory.test.ts +0 -155
  585. package/src/app-server/trajectory.ts +0 -433
  586. package/src/app-server/transcript-mirror.test.ts +0 -265
  587. package/src/app-server/transcript-mirror.ts +0 -311
  588. package/src/app-server/transcript-repair-runtime-contract.test.ts +0 -44
  589. package/src/app-server/transport-stdio.test.ts +0 -171
  590. package/src/app-server/transport-stdio.ts +0 -107
  591. package/src/app-server/transport-websocket.test.ts +0 -71
  592. package/src/app-server/transport-websocket.ts +0 -90
  593. package/src/app-server/transport.ts +0 -117
  594. package/src/app-server/user-input-bridge.test.ts +0 -137
  595. package/src/app-server/user-input-bridge.ts +0 -294
  596. package/src/app-server/version.ts +0 -3
  597. package/src/app-server/vision-tools.ts +0 -12
  598. package/src/command-formatters.ts +0 -204
  599. package/src/command-handlers.ts +0 -1559
  600. package/src/command-rpc.test.ts +0 -16
  601. package/src/command-rpc.ts +0 -97
  602. package/src/commands.test.ts +0 -1716
  603. package/src/commands.ts +0 -32
  604. package/src/conversation-binding-data.ts +0 -72
  605. package/src/conversation-binding.test.ts +0 -76
  606. package/src/conversation-binding.ts +0 -351
  607. package/src/conversation-control.test.ts +0 -50
  608. package/src/conversation-control.ts +0 -255
  609. package/src/conversation-turn-collector.test.ts +0 -154
  610. package/src/conversation-turn-collector.ts +0 -158
  611. package/src/conversation-turn-input.test.ts +0 -44
  612. package/src/conversation-turn-input.ts +0 -80
  613. package/src/manifest.test.ts +0 -20
  614. package/src/migration/apply.ts +0 -43
  615. package/src/migration/helpers.ts +0 -60
  616. package/src/migration/plan.ts +0 -148
  617. package/src/migration/provider.test.ts +0 -219
  618. package/src/migration/provider.ts +0 -28
  619. package/src/migration/source.ts +0 -176
  620. package/src/migration/targets.ts +0 -25
  621. package/test-api.ts +0 -79
  622. package/tsconfig.json +0 -16
@@ -1,1671 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import fs from "node:fs/promises";
3
- import {
4
- assembleHarnessContextEngine,
5
- bootstrapHarnessContextEngine,
6
- buildHarnessContextEngineRuntimeContext,
7
- buildHarnessContextEngineRuntimeContextFromUsage,
8
- buildEmbeddedAttemptToolRunContext,
9
- clearActiveEmbeddedRun,
10
- embeddedAgentLog,
11
- emitAgentEvent as emitGlobalAgentEvent,
12
- finalizeHarnessContextEngineTurn,
13
- formatErrorMessage,
14
- isActiveHarnessContextEngine,
15
- isSubagentSessionKey,
16
- normalizeAgentRuntimeTools,
17
- resolveAttemptSpawnWorkspaceDir,
18
- resolveAgentHarnessBeforePromptBuildResult,
19
- resolveModelAuthMode,
20
- resolveOpenClawAgentDir,
21
- resolveSandboxContext,
22
- resolveSessionAgentIds,
23
- resolveUserPath,
24
- runAgentHarnessAgentEndHook,
25
- runAgentHarnessLlmInputHook,
26
- runAgentHarnessLlmOutputHook,
27
- runHarnessContextEngineMaintenance,
28
- registerNativeHookRelay,
29
- setActiveEmbeddedRun,
30
- supportsModelTools,
31
- runAgentCleanupStep,
32
- type AgentMessage,
33
- type EmbeddedRunAttemptParams,
34
- type EmbeddedRunAttemptResult,
35
- type NativeHookRelayEvent,
36
- type NativeHookRelayRegistrationHandle,
37
- } from "openclaw/plugin-sdk/agent-harness-runtime";
38
- import { emitTrustedDiagnosticEvent } from "openclaw/plugin-sdk/diagnostic-runtime";
39
- import { handleCodexAppServerApprovalRequest } from "./approval-bridge.js";
40
- import { refreshCodexAppServerAuthTokens } from "./auth-bridge.js";
41
- import {
42
- createCodexAppServerClientFactoryTestHooks,
43
- defaultCodexAppServerClientFactory,
44
- } from "./client-factory.js";
45
- import {
46
- isCodexAppServerApprovalRequest,
47
- isCodexAppServerConnectionClosedError,
48
- type CodexAppServerClient,
49
- } from "./client.js";
50
- import { ensureCodexComputerUse } from "./computer-use.js";
51
- import {
52
- readCodexPluginConfig,
53
- resolveCodexAppServerRuntimeOptions,
54
- type CodexPluginConfig,
55
- } from "./config.js";
56
- import { projectContextEngineAssemblyForCodex } from "./context-engine-projection.js";
57
- import { applyCodexDynamicToolProfile } from "./dynamic-tool-profile.js";
58
- import { createCodexDynamicToolBridge, type CodexDynamicToolBridge } from "./dynamic-tools.js";
59
- import { handleCodexAppServerElicitationRequest } from "./elicitation-bridge.js";
60
- import { CodexAppServerEventProjector } from "./event-projector.js";
61
- import {
62
- buildCodexNativeHookRelayDisabledConfig,
63
- buildCodexNativeHookRelayConfig,
64
- CODEX_NATIVE_HOOK_RELAY_EVENTS,
65
- } from "./native-hook-relay.js";
66
- import {
67
- assertCodexTurnStartResponse,
68
- readCodexDynamicToolCallParams,
69
- } from "./protocol-validators.js";
70
- import {
71
- type CodexUserInput,
72
- isJsonObject,
73
- type CodexServerNotification,
74
- type CodexDynamicToolCallParams,
75
- type CodexDynamicToolCallResponse,
76
- type CodexTurnStartResponse,
77
- type JsonObject,
78
- type JsonValue,
79
- } from "./protocol.js";
80
- import { readCodexAppServerBinding, type CodexAppServerThreadBinding } from "./session-binding.js";
81
- import { readCodexMirroredSessionHistoryMessages } from "./session-history.js";
82
- import { clearSharedCodexAppServerClientIfCurrent } from "./shared-client.js";
83
- import {
84
- buildDeveloperInstructions,
85
- buildTurnStartParams,
86
- startOrResumeThread,
87
- } from "./thread-lifecycle.js";
88
- import {
89
- createCodexTrajectoryRecorder,
90
- normalizeCodexTrajectoryError,
91
- recordCodexTrajectoryCompletion,
92
- recordCodexTrajectoryContext,
93
- } from "./trajectory.js";
94
- import { mirrorCodexAppServerTranscript } from "./transcript-mirror.js";
95
- import { createCodexUserInputBridge } from "./user-input-bridge.js";
96
- import { filterToolsForVisionInputs } from "./vision-tools.js";
97
-
98
- const CODEX_DYNAMIC_TOOL_TIMEOUT_MS = 30_000;
99
- const CODEX_APP_SERVER_STARTUP_CONNECTION_CLOSE_MAX_ATTEMPTS = 3;
100
- const CODEX_TURN_COMPLETION_IDLE_TIMEOUT_MS = 60_000;
101
- const CODEX_TURN_TERMINAL_IDLE_TIMEOUT_MS = 30 * 60_000;
102
- const CODEX_STEER_ALL_DEBOUNCE_MS = 500;
103
- const LOG_FIELD_MAX_LENGTH = 160;
104
-
105
- type OpenClawCodingToolsOptions = NonNullable<
106
- Parameters<(typeof import("openclaw/plugin-sdk/agent-harness"))["createOpenClawCodingTools"]>[0]
107
- >;
108
-
109
- let clientFactory = defaultCodexAppServerClientFactory;
110
-
111
- function emitCodexAppServerEvent(
112
- params: EmbeddedRunAttemptParams,
113
- event: Parameters<NonNullable<EmbeddedRunAttemptParams["onAgentEvent"]>>[0],
114
- ): void {
115
- try {
116
- emitGlobalAgentEvent({
117
- runId: params.runId,
118
- stream: event.stream,
119
- data: event.data,
120
- ...(params.sessionKey ? { sessionKey: params.sessionKey } : {}),
121
- });
122
- } catch (error) {
123
- embeddedAgentLog.debug("codex app-server global agent event emit failed", { error });
124
- }
125
- try {
126
- const maybePromise = params.onAgentEvent?.(event);
127
- void Promise.resolve(maybePromise).catch((error: unknown) => {
128
- embeddedAgentLog.debug("codex app-server agent event handler rejected", { error });
129
- });
130
- } catch (error) {
131
- // Event consumers are observational; they must not abort or strand the
132
- // canonical app-server turn lifecycle.
133
- embeddedAgentLog.debug("codex app-server agent event handler threw", { error });
134
- }
135
- }
136
-
137
- function collectTerminalAssistantText(result: EmbeddedRunAttemptResult): string {
138
- return result.assistantTexts.join("\n\n").trim();
139
- }
140
-
141
- type CodexSteeringQueueOptions = {
142
- steeringMode?: "all" | "one-at-a-time";
143
- debounceMs?: number;
144
- };
145
-
146
- type DynamicToolTimeoutDetails = {
147
- responseMessage: string;
148
- consoleMessage: string;
149
- meta: Record<string, unknown>;
150
- };
151
-
152
- function normalizeLogField(value: unknown): string | undefined {
153
- if (typeof value !== "string") {
154
- return undefined;
155
- }
156
- const normalized = value
157
- .replaceAll(String.fromCharCode(27), " ")
158
- .replaceAll("\r", " ")
159
- .replaceAll("\n", " ")
160
- .replaceAll("\t", " ")
161
- .trim();
162
- if (!normalized) {
163
- return undefined;
164
- }
165
- return normalized.length > LOG_FIELD_MAX_LENGTH
166
- ? `${normalized.slice(0, LOG_FIELD_MAX_LENGTH - 3)}...`
167
- : normalized;
168
- }
169
-
170
- function readNumericTimeoutMs(value: unknown): number | undefined {
171
- if (typeof value === "number" && Number.isFinite(value)) {
172
- return Math.max(0, Math.floor(value));
173
- }
174
- if (typeof value === "string") {
175
- const parsed = Number.parseInt(value.trim(), 10);
176
- if (Number.isFinite(parsed)) {
177
- return Math.max(0, Math.floor(parsed));
178
- }
179
- }
180
- return undefined;
181
- }
182
-
183
- function formatDynamicToolTimeoutDetails(params: {
184
- call: CodexDynamicToolCallParams;
185
- timeoutMs: number;
186
- }): DynamicToolTimeoutDetails {
187
- const tool = normalizeLogField(params.call.tool) ?? "unknown";
188
- const baseMeta: Record<string, unknown> = {
189
- tool: params.call.tool,
190
- toolCallId: params.call.callId,
191
- threadId: params.call.threadId,
192
- turnId: params.call.turnId,
193
- timeoutMs: params.timeoutMs,
194
- timeoutKind: "codex_dynamic_tool_rpc",
195
- };
196
-
197
- if (tool !== "process" || !isJsonObject(params.call.arguments)) {
198
- return {
199
- responseMessage: `OpenClaw dynamic tool call timed out after ${params.timeoutMs}ms while running tool ${tool}.`,
200
- consoleMessage: `codex dynamic tool timeout: tool=${tool} toolTimeoutMs=${params.timeoutMs}; per-tool-call watchdog, not session idle`,
201
- meta: baseMeta,
202
- };
203
- }
204
-
205
- const action = normalizeLogField(params.call.arguments.action);
206
- const sessionId = normalizeLogField(params.call.arguments.sessionId);
207
- const requestedTimeoutMs = readNumericTimeoutMs(params.call.arguments.timeout);
208
- const actionPart = action ? ` action=${action}` : "";
209
- const sessionPart = sessionId ? ` sessionId=${sessionId}` : "";
210
- const requestedPart =
211
- requestedTimeoutMs === undefined ? "" : ` requestedWaitMs=${requestedTimeoutMs}`;
212
- const retryHint =
213
- action === "poll"
214
- ? "; repeated lines usually mean process-poll retry churn, not model progress"
215
- : "";
216
- const responseTarget =
217
- action || sessionId
218
- ? ` while waiting for process${actionPart}${sessionPart}`
219
- : " while waiting for the process tool";
220
-
221
- return {
222
- responseMessage: `OpenClaw dynamic tool call timed out after ${params.timeoutMs}ms${responseTarget}. This is a tool RPC timeout, not a session idle timeout.`,
223
- consoleMessage: `codex process tool timeout:${actionPart}${sessionPart} toolTimeoutMs=${params.timeoutMs}${requestedPart}; per-tool-call watchdog, not session idle${retryHint}`,
224
- meta: {
225
- ...baseMeta,
226
- processAction: action,
227
- processSessionId: sessionId,
228
- processRequestedTimeoutMs: requestedTimeoutMs,
229
- },
230
- };
231
- }
232
-
233
- function createCodexSteeringQueue(params: {
234
- client: CodexAppServerClient;
235
- threadId: string;
236
- turnId: string;
237
- answerPendingUserInput: (text: string) => boolean;
238
- signal: AbortSignal;
239
- }) {
240
- let batchedTexts: string[] = [];
241
- let batchTimer: NodeJS.Timeout | undefined;
242
- let sendChain: Promise<void> = Promise.resolve();
243
-
244
- const clearBatchTimer = () => {
245
- if (batchTimer) {
246
- clearTimeout(batchTimer);
247
- batchTimer = undefined;
248
- }
249
- };
250
-
251
- const sendTexts = async (texts: string[]) => {
252
- if (texts.length === 0 || params.signal.aborted) {
253
- return;
254
- }
255
- await params.client.request("turn/steer", {
256
- threadId: params.threadId,
257
- expectedTurnId: params.turnId,
258
- input: texts.map(toCodexTextInput),
259
- });
260
- };
261
-
262
- const enqueueSend = (texts: string[]) => {
263
- sendChain = sendChain
264
- .then(() => sendTexts(texts))
265
- .catch((error: unknown) => {
266
- embeddedAgentLog.debug("codex app-server queued steer failed", { error });
267
- });
268
- return sendChain;
269
- };
270
-
271
- const flushBatch = () => {
272
- clearBatchTimer();
273
- const texts = batchedTexts;
274
- batchedTexts = [];
275
- return enqueueSend(texts);
276
- };
277
-
278
- return {
279
- async queue(text: string, options?: CodexSteeringQueueOptions) {
280
- if (params.answerPendingUserInput(text)) {
281
- return;
282
- }
283
- if (options?.steeringMode === "one-at-a-time") {
284
- await flushBatch();
285
- await enqueueSend([text]);
286
- return;
287
- }
288
- batchedTexts.push(text);
289
- clearBatchTimer();
290
- const debounceMs = normalizeCodexSteerDebounceMs(options?.debounceMs);
291
- batchTimer = setTimeout(() => {
292
- batchTimer = undefined;
293
- void flushBatch();
294
- }, debounceMs);
295
- },
296
- async flushPending() {
297
- await flushBatch();
298
- },
299
- cancel() {
300
- clearBatchTimer();
301
- batchedTexts = [];
302
- },
303
- };
304
- }
305
-
306
- function normalizeCodexSteerDebounceMs(value: number | undefined): number {
307
- return typeof value === "number" && Number.isFinite(value) && value >= 0
308
- ? Math.floor(value)
309
- : CODEX_STEER_ALL_DEBOUNCE_MS;
310
- }
311
-
312
- function toCodexTextInput(text: string): CodexUserInput {
313
- return { type: "text", text, text_elements: [] };
314
- }
315
-
316
- export async function runCodexAppServerAttempt(
317
- params: EmbeddedRunAttemptParams,
318
- options: {
319
- pluginConfig?: unknown;
320
- startupTimeoutFloorMs?: number;
321
- nativeHookRelay?: {
322
- enabled?: boolean;
323
- events?: readonly NativeHookRelayEvent[];
324
- ttlMs?: number;
325
- gatewayTimeoutMs?: number;
326
- hookTimeoutSec?: number;
327
- };
328
- turnCompletionIdleTimeoutMs?: number;
329
- turnTerminalIdleTimeoutMs?: number;
330
- } = {},
331
- ): Promise<EmbeddedRunAttemptResult> {
332
- const attemptStartedAt = Date.now();
333
- const pluginConfig = readCodexPluginConfig(options.pluginConfig);
334
- const appServer = resolveCodexAppServerRuntimeOptions({ pluginConfig });
335
- const resolvedWorkspace = resolveUserPath(params.workspaceDir);
336
- await fs.mkdir(resolvedWorkspace, { recursive: true });
337
- const sandboxSessionKey = params.sessionKey?.trim() || params.sessionId;
338
- const sandbox = await resolveSandboxContext({
339
- config: params.config,
340
- sessionKey: sandboxSessionKey,
341
- workspaceDir: resolvedWorkspace,
342
- });
343
- const effectiveWorkspace = sandbox?.enabled
344
- ? sandbox.workspaceAccess === "rw"
345
- ? resolvedWorkspace
346
- : sandbox.workspaceDir
347
- : resolvedWorkspace;
348
- await fs.mkdir(effectiveWorkspace, { recursive: true });
349
-
350
- const runAbortController = new AbortController();
351
- const abortFromUpstream = () => {
352
- runAbortController.abort(params.abortSignal?.reason ?? "upstream_abort");
353
- };
354
- if (params.abortSignal?.aborted) {
355
- abortFromUpstream();
356
- } else {
357
- params.abortSignal?.addEventListener("abort", abortFromUpstream, { once: true });
358
- }
359
-
360
- const { sessionAgentId } = resolveSessionAgentIds({
361
- sessionKey: params.sessionKey,
362
- config: params.config,
363
- agentId: params.agentId,
364
- });
365
- const agentDir = params.agentDir ?? resolveOpenClawAgentDir();
366
- const runtimeParams = { ...params, sessionKey: sandboxSessionKey };
367
- const activeContextEngine = isActiveHarnessContextEngine(params.contextEngine)
368
- ? params.contextEngine
369
- : undefined;
370
- let yieldDetected = false;
371
- const startupBinding = await readCodexAppServerBinding(params.sessionFile);
372
- const startupAuthProfileId =
373
- params.runtimePlan?.auth.forwardedAuthProfileId ??
374
- params.authProfileId ??
375
- startupBinding?.authProfileId;
376
- const tools = await buildDynamicTools({
377
- params,
378
- resolvedWorkspace,
379
- effectiveWorkspace,
380
- sandboxSessionKey,
381
- sandbox,
382
- runAbortController,
383
- sessionAgentId,
384
- pluginConfig,
385
- onYieldDetected: () => {
386
- yieldDetected = true;
387
- },
388
- });
389
- const toolBridge = createCodexDynamicToolBridge({
390
- tools,
391
- signal: runAbortController.signal,
392
- hookContext: {
393
- agentId: sessionAgentId,
394
- sessionId: params.sessionId,
395
- sessionKey: sandboxSessionKey,
396
- runId: params.runId,
397
- },
398
- });
399
- const hadSessionFile = await fileExists(params.sessionFile);
400
- let historyMessages = (await readMirroredSessionHistoryMessages(params.sessionFile)) ?? [];
401
- const hookContext = {
402
- runId: params.runId,
403
- agentId: sessionAgentId,
404
- sessionKey: sandboxSessionKey,
405
- sessionId: params.sessionId,
406
- workspaceDir: params.workspaceDir,
407
- messageProvider: params.messageProvider ?? undefined,
408
- trigger: params.trigger,
409
- channelId: params.messageChannel ?? params.messageProvider ?? undefined,
410
- };
411
- if (activeContextEngine) {
412
- await bootstrapHarnessContextEngine({
413
- hadSessionFile,
414
- contextEngine: activeContextEngine,
415
- sessionId: params.sessionId,
416
- sessionKey: sandboxSessionKey,
417
- sessionFile: params.sessionFile,
418
- runtimeContext: buildHarnessContextEngineRuntimeContext({
419
- attempt: runtimeParams,
420
- workspaceDir: effectiveWorkspace,
421
- agentDir,
422
- tokenBudget: params.contextTokenBudget,
423
- }),
424
- runMaintenance: runHarnessContextEngineMaintenance,
425
- config: params.config,
426
- warn: (message) => embeddedAgentLog.warn(message),
427
- });
428
- historyMessages =
429
- (await readMirroredSessionHistoryMessages(params.sessionFile)) ?? historyMessages;
430
- }
431
- const baseDeveloperInstructions = buildDeveloperInstructions(params);
432
- let promptText = params.prompt;
433
- let developerInstructions = baseDeveloperInstructions;
434
- let prePromptMessageCount = historyMessages.length;
435
- if (activeContextEngine) {
436
- try {
437
- const assembled = await assembleHarnessContextEngine({
438
- contextEngine: activeContextEngine,
439
- sessionId: params.sessionId,
440
- sessionKey: sandboxSessionKey,
441
- messages: historyMessages,
442
- tokenBudget: params.contextTokenBudget,
443
- availableTools: new Set(toolBridge.specs.map((tool) => tool.name).filter(isNonEmptyString)),
444
- citationsMode: params.config?.memory?.citations,
445
- modelId: params.modelId,
446
- prompt: params.prompt,
447
- });
448
- if (!assembled) {
449
- throw new Error("context engine assemble returned no result");
450
- }
451
- const projection = projectContextEngineAssemblyForCodex({
452
- assembledMessages: assembled.messages,
453
- originalHistoryMessages: historyMessages,
454
- prompt: params.prompt,
455
- systemPromptAddition: assembled.systemPromptAddition,
456
- });
457
- promptText = projection.promptText;
458
- developerInstructions = joinPresentSections(
459
- baseDeveloperInstructions,
460
- projection.developerInstructionAddition,
461
- );
462
- prePromptMessageCount = projection.prePromptMessageCount;
463
- } catch (assembleErr) {
464
- embeddedAgentLog.warn("context engine assemble failed; using Codex baseline prompt", {
465
- error: formatErrorMessage(assembleErr),
466
- });
467
- }
468
- }
469
- const promptBuild = await resolveAgentHarnessBeforePromptBuildResult({
470
- prompt: promptText,
471
- developerInstructions,
472
- messages: historyMessages,
473
- ctx: hookContext,
474
- });
475
- const trajectoryRecorder = createCodexTrajectoryRecorder({
476
- attempt: params,
477
- cwd: effectiveWorkspace,
478
- developerInstructions: promptBuild.developerInstructions,
479
- prompt: promptBuild.prompt,
480
- tools: toolBridge.specs,
481
- });
482
- let client: CodexAppServerClient;
483
- let thread: CodexAppServerThreadBinding;
484
- let trajectoryEndRecorded = false;
485
- let nativeHookRelay: NativeHookRelayRegistrationHandle | undefined;
486
- let startupClientForCleanup: CodexAppServerClient | undefined;
487
- try {
488
- emitCodexAppServerEvent(params, {
489
- stream: "codex_app_server.lifecycle",
490
- data: { phase: "startup" },
491
- });
492
- nativeHookRelay = createCodexNativeHookRelay({
493
- options: options.nativeHookRelay,
494
- agentId: sessionAgentId,
495
- sessionId: params.sessionId,
496
- sessionKey: sandboxSessionKey,
497
- runId: params.runId,
498
- signal: runAbortController.signal,
499
- });
500
- const nativeHookRelayConfig = nativeHookRelay
501
- ? buildCodexNativeHookRelayConfig({
502
- relay: nativeHookRelay,
503
- events: options.nativeHookRelay?.events,
504
- hookTimeoutSec: options.nativeHookRelay?.hookTimeoutSec,
505
- })
506
- : options.nativeHookRelay?.enabled === false
507
- ? buildCodexNativeHookRelayDisabledConfig()
508
- : undefined;
509
- ({ client, thread } = await withCodexStartupTimeout({
510
- timeoutMs: params.timeoutMs,
511
- timeoutFloorMs: options.startupTimeoutFloorMs,
512
- signal: runAbortController.signal,
513
- operation: async () => {
514
- let attemptedClient: CodexAppServerClient | undefined;
515
- const startupAttempt = async () => {
516
- const startupClient = await clientFactory(
517
- appServer.start,
518
- startupAuthProfileId,
519
- agentDir,
520
- );
521
- attemptedClient = startupClient;
522
- startupClientForCleanup = startupClient;
523
- await ensureCodexComputerUse({
524
- client: startupClient,
525
- pluginConfig: options.pluginConfig,
526
- timeoutMs: appServer.requestTimeoutMs,
527
- signal: runAbortController.signal,
528
- });
529
- const startupThread = await startOrResumeThread({
530
- client: startupClient,
531
- params,
532
- cwd: effectiveWorkspace,
533
- dynamicTools: toolBridge.specs,
534
- appServer,
535
- developerInstructions: promptBuild.developerInstructions,
536
- config: nativeHookRelayConfig,
537
- });
538
- return { client: startupClient, thread: startupThread };
539
- };
540
- for (
541
- let attempt = 1;
542
- attempt <= CODEX_APP_SERVER_STARTUP_CONNECTION_CLOSE_MAX_ATTEMPTS;
543
- attempt += 1
544
- ) {
545
- try {
546
- return await startupAttempt();
547
- } catch (error) {
548
- if (
549
- runAbortController.signal.aborted ||
550
- !isCodexAppServerConnectionClosedError(error)
551
- ) {
552
- throw error;
553
- }
554
- const failedClient = attemptedClient;
555
- const clearedSharedClient = clearSharedCodexAppServerClientIfCurrent(failedClient);
556
- if (startupClientForCleanup === failedClient) {
557
- startupClientForCleanup = undefined;
558
- }
559
- attemptedClient = undefined;
560
- if (attempt >= CODEX_APP_SERVER_STARTUP_CONNECTION_CLOSE_MAX_ATTEMPTS) {
561
- embeddedAgentLog.warn(
562
- "codex app-server connection closed during startup; retries exhausted",
563
- {
564
- attempt,
565
- maxAttempts: CODEX_APP_SERVER_STARTUP_CONNECTION_CLOSE_MAX_ATTEMPTS,
566
- clearedSharedClient,
567
- error: formatErrorMessage(error),
568
- },
569
- );
570
- throw error;
571
- }
572
- embeddedAgentLog.warn(
573
- "codex app-server connection closed during startup; restarting app-server and retrying",
574
- {
575
- attempt,
576
- nextAttempt: attempt + 1,
577
- maxAttempts: CODEX_APP_SERVER_STARTUP_CONNECTION_CLOSE_MAX_ATTEMPTS,
578
- clearedSharedClient,
579
- error: formatErrorMessage(error),
580
- },
581
- );
582
- }
583
- }
584
- throw new Error("codex app-server startup retry loop exited unexpectedly");
585
- },
586
- }));
587
- startupClientForCleanup = undefined;
588
- emitCodexAppServerEvent(params, {
589
- stream: "codex_app_server.lifecycle",
590
- data: { phase: "thread_ready", threadId: thread.threadId },
591
- });
592
- } catch (error) {
593
- nativeHookRelay?.unregister();
594
- clearSharedCodexAppServerClientIfCurrent(startupClientForCleanup);
595
- params.abortSignal?.removeEventListener("abort", abortFromUpstream);
596
- throw error;
597
- }
598
- trajectoryRecorder?.recordEvent("session.started", {
599
- sessionFile: params.sessionFile,
600
- threadId: thread.threadId,
601
- authProfileId: startupAuthProfileId,
602
- workspaceDir: effectiveWorkspace,
603
- toolCount: toolBridge.specs.length,
604
- });
605
- recordCodexTrajectoryContext(trajectoryRecorder, {
606
- attempt: params,
607
- cwd: effectiveWorkspace,
608
- developerInstructions: promptBuild.developerInstructions,
609
- prompt: promptBuild.prompt,
610
- tools: toolBridge.specs,
611
- });
612
-
613
- let projector: CodexAppServerEventProjector | undefined;
614
- let turnId: string | undefined;
615
- const pendingNotifications: CodexServerNotification[] = [];
616
- let userInputBridge: ReturnType<typeof createCodexUserInputBridge> | undefined;
617
- let steeringQueue: ReturnType<typeof createCodexSteeringQueue> | undefined;
618
- let completed = false;
619
- let timedOut = false;
620
- let turnCompletionIdleTimedOut = false;
621
- let turnCompletionIdleTimeoutMessage: string | undefined;
622
- let lifecycleStarted = false;
623
- let lifecycleTerminalEmitted = false;
624
- let resolveCompletion: (() => void) | undefined;
625
- const completion = new Promise<void>((resolve) => {
626
- resolveCompletion = resolve;
627
- });
628
- let notificationQueue: Promise<void> = Promise.resolve();
629
- const turnCompletionIdleTimeoutMs = resolveCodexTurnCompletionIdleTimeoutMs(
630
- options.turnCompletionIdleTimeoutMs,
631
- );
632
- const turnTerminalIdleTimeoutMs = resolveCodexTurnTerminalIdleTimeoutMs(
633
- options.turnTerminalIdleTimeoutMs,
634
- );
635
- let turnCompletionIdleTimer: ReturnType<typeof setTimeout> | undefined;
636
- let turnCompletionIdleWatchArmed = false;
637
- let turnTerminalIdleTimer: ReturnType<typeof setTimeout> | undefined;
638
- let turnTerminalIdleWatchArmed = false;
639
- let turnCompletionLastActivityAt = Date.now();
640
- let turnCompletionLastActivityReason = "startup";
641
- let activeAppServerTurnRequests = 0;
642
-
643
- const clearTurnCompletionIdleTimer = () => {
644
- if (turnCompletionIdleTimer) {
645
- clearTimeout(turnCompletionIdleTimer);
646
- turnCompletionIdleTimer = undefined;
647
- }
648
- };
649
-
650
- const clearTurnTerminalIdleTimer = () => {
651
- if (turnTerminalIdleTimer) {
652
- clearTimeout(turnTerminalIdleTimer);
653
- turnTerminalIdleTimer = undefined;
654
- }
655
- };
656
-
657
- const fireTurnCompletionIdleTimeout = () => {
658
- if (
659
- completed ||
660
- runAbortController.signal.aborted ||
661
- !turnCompletionIdleWatchArmed ||
662
- activeAppServerTurnRequests > 0
663
- ) {
664
- return;
665
- }
666
- const idleMs = Math.max(0, Date.now() - turnCompletionLastActivityAt);
667
- if (idleMs < turnCompletionIdleTimeoutMs) {
668
- scheduleTurnCompletionIdleWatch();
669
- return;
670
- }
671
- timedOut = true;
672
- turnCompletionIdleTimedOut = true;
673
- turnCompletionIdleTimeoutMessage =
674
- "codex app-server turn idle timed out waiting for turn/completed";
675
- projector?.markTimedOut();
676
- trajectoryRecorder?.recordEvent("turn.completion_idle_timeout", {
677
- threadId: thread.threadId,
678
- turnId,
679
- idleMs,
680
- timeoutMs: turnCompletionIdleTimeoutMs,
681
- lastActivityReason: turnCompletionLastActivityReason,
682
- });
683
- embeddedAgentLog.warn("codex app-server turn idle timed out waiting for completion", {
684
- threadId: thread.threadId,
685
- turnId,
686
- idleMs,
687
- timeoutMs: turnCompletionIdleTimeoutMs,
688
- lastActivityReason: turnCompletionLastActivityReason,
689
- });
690
- runAbortController.abort("turn_completion_idle_timeout");
691
- };
692
-
693
- const fireTurnTerminalIdleTimeout = () => {
694
- if (
695
- completed ||
696
- runAbortController.signal.aborted ||
697
- !turnTerminalIdleWatchArmed ||
698
- activeAppServerTurnRequests > 0
699
- ) {
700
- return;
701
- }
702
- const idleMs = Math.max(0, Date.now() - turnCompletionLastActivityAt);
703
- if (idleMs < turnTerminalIdleTimeoutMs) {
704
- scheduleTurnTerminalIdleWatch();
705
- return;
706
- }
707
- timedOut = true;
708
- turnCompletionIdleTimedOut = true;
709
- turnCompletionIdleTimeoutMessage =
710
- "codex app-server turn idle timed out waiting for turn/completed";
711
- projector?.markTimedOut();
712
- trajectoryRecorder?.recordEvent("turn.terminal_idle_timeout", {
713
- threadId: thread.threadId,
714
- turnId,
715
- idleMs,
716
- timeoutMs: turnTerminalIdleTimeoutMs,
717
- lastActivityReason: turnCompletionLastActivityReason,
718
- });
719
- embeddedAgentLog.warn("codex app-server turn idle timed out waiting for terminal event", {
720
- threadId: thread.threadId,
721
- turnId,
722
- idleMs,
723
- timeoutMs: turnTerminalIdleTimeoutMs,
724
- lastActivityReason: turnCompletionLastActivityReason,
725
- });
726
- runAbortController.abort("turn_terminal_idle_timeout");
727
- };
728
-
729
- function scheduleTurnCompletionIdleWatch() {
730
- clearTurnCompletionIdleTimer();
731
- if (
732
- completed ||
733
- runAbortController.signal.aborted ||
734
- !turnCompletionIdleWatchArmed ||
735
- activeAppServerTurnRequests > 0
736
- ) {
737
- return;
738
- }
739
- const elapsedMs = Math.max(0, Date.now() - turnCompletionLastActivityAt);
740
- const delayMs = Math.max(1, turnCompletionIdleTimeoutMs - elapsedMs);
741
- turnCompletionIdleTimer = setTimeout(fireTurnCompletionIdleTimeout, delayMs);
742
- turnCompletionIdleTimer.unref?.();
743
- }
744
-
745
- function scheduleTurnTerminalIdleWatch() {
746
- clearTurnTerminalIdleTimer();
747
- if (
748
- completed ||
749
- runAbortController.signal.aborted ||
750
- !turnTerminalIdleWatchArmed ||
751
- activeAppServerTurnRequests > 0
752
- ) {
753
- return;
754
- }
755
- const elapsedMs = Math.max(0, Date.now() - turnCompletionLastActivityAt);
756
- const delayMs = Math.max(1, turnTerminalIdleTimeoutMs - elapsedMs);
757
- turnTerminalIdleTimer = setTimeout(fireTurnTerminalIdleTimeout, delayMs);
758
- turnTerminalIdleTimer.unref?.();
759
- }
760
-
761
- const touchTurnCompletionActivity = (reason: string, options?: { arm?: boolean }) => {
762
- turnCompletionLastActivityAt = Date.now();
763
- turnCompletionLastActivityReason = reason;
764
- emitTrustedDiagnosticEvent({
765
- type: "run.progress",
766
- runId: params.runId,
767
- sessionId: params.sessionId,
768
- sessionKey: params.sessionKey,
769
- reason: `codex_app_server:${reason}`,
770
- });
771
- if (options?.arm) {
772
- turnCompletionIdleWatchArmed = true;
773
- }
774
- scheduleTurnCompletionIdleWatch();
775
- scheduleTurnTerminalIdleWatch();
776
- };
777
-
778
- const emitLifecycleStart = () => {
779
- emitCodexAppServerEvent(params, {
780
- stream: "lifecycle",
781
- data: { phase: "start", startedAt: attemptStartedAt },
782
- });
783
- lifecycleStarted = true;
784
- };
785
-
786
- const emitLifecycleTerminal = (data: Record<string, unknown> & { phase: "end" | "error" }) => {
787
- if (!lifecycleStarted || lifecycleTerminalEmitted) {
788
- return;
789
- }
790
- emitCodexAppServerEvent(params, {
791
- stream: "lifecycle",
792
- data: {
793
- startedAt: attemptStartedAt,
794
- endedAt: Date.now(),
795
- ...data,
796
- },
797
- });
798
- lifecycleTerminalEmitted = true;
799
- };
800
-
801
- const handleNotification = async (notification: CodexServerNotification) => {
802
- touchTurnCompletionActivity(`notification:${notification.method}`);
803
- userInputBridge?.handleNotification(notification);
804
- if (!projector || !turnId) {
805
- pendingNotifications.push(notification);
806
- return;
807
- }
808
- // Determine terminal-turn status before invoking the projector so a throw
809
- // inside projector.handleNotification still releases the session lane.
810
- // See openclaw/openclaw#67996.
811
- const isTurnCompletion =
812
- notification.method === "turn/completed" &&
813
- isTurnNotification(notification.params, thread.threadId, turnId);
814
- try {
815
- await projector.handleNotification(notification);
816
- } catch (error) {
817
- embeddedAgentLog.debug("codex app-server projector notification threw", {
818
- method: notification.method,
819
- error,
820
- });
821
- } finally {
822
- if (isTurnCompletion) {
823
- if (!timedOut && !runAbortController.signal.aborted) {
824
- await steeringQueue?.flushPending();
825
- }
826
- completed = true;
827
- clearTurnCompletionIdleTimer();
828
- clearTurnTerminalIdleTimer();
829
- resolveCompletion?.();
830
- }
831
- }
832
- };
833
- const enqueueNotification = (notification: CodexServerNotification): Promise<void> => {
834
- notificationQueue = notificationQueue.then(
835
- () => handleNotification(notification),
836
- () => handleNotification(notification),
837
- );
838
- return notificationQueue;
839
- };
840
-
841
- const notificationCleanup = client.addNotificationHandler(enqueueNotification);
842
- const requestCleanup = client.addRequestHandler(async (request) => {
843
- activeAppServerTurnRequests += 1;
844
- clearTurnCompletionIdleTimer();
845
- touchTurnCompletionActivity(`request:${request.method}`);
846
- let armCompletionWatchOnResponse = false;
847
- try {
848
- if (request.method === "account/chatgptAuthTokens/refresh") {
849
- return refreshCodexAppServerAuthTokens({
850
- agentDir,
851
- authProfileId: startupAuthProfileId,
852
- });
853
- }
854
- if (!turnId) {
855
- return undefined;
856
- }
857
- if (request.method === "mcpServer/elicitation/request") {
858
- armCompletionWatchOnResponse = true;
859
- return handleCodexAppServerElicitationRequest({
860
- requestParams: request.params,
861
- paramsForRun: params,
862
- threadId: thread.threadId,
863
- turnId,
864
- signal: runAbortController.signal,
865
- });
866
- }
867
- if (request.method === "item/tool/requestUserInput") {
868
- armCompletionWatchOnResponse = true;
869
- return userInputBridge?.handleRequest({
870
- id: request.id,
871
- params: request.params,
872
- });
873
- }
874
- if (request.method !== "item/tool/call") {
875
- if (isCodexAppServerApprovalRequest(request.method)) {
876
- armCompletionWatchOnResponse = true;
877
- return handleApprovalRequest({
878
- method: request.method,
879
- params: request.params,
880
- paramsForRun: params,
881
- threadId: thread.threadId,
882
- turnId,
883
- signal: runAbortController.signal,
884
- });
885
- }
886
- return undefined;
887
- }
888
- const call = readDynamicToolCallParams(request.params);
889
- if (!call || call.threadId !== thread.threadId || call.turnId !== turnId) {
890
- return undefined;
891
- }
892
- armCompletionWatchOnResponse = true;
893
- trajectoryRecorder?.recordEvent("tool.call", {
894
- threadId: call.threadId,
895
- turnId: call.turnId,
896
- toolCallId: call.callId,
897
- name: call.tool,
898
- arguments: call.arguments,
899
- });
900
- const response = await handleDynamicToolCallWithTimeout({
901
- call,
902
- toolBridge,
903
- signal: runAbortController.signal,
904
- timeoutMs: CODEX_DYNAMIC_TOOL_TIMEOUT_MS,
905
- onTimeout: () => {
906
- trajectoryRecorder?.recordEvent("tool.timeout", {
907
- threadId: call.threadId,
908
- turnId: call.turnId,
909
- toolCallId: call.callId,
910
- name: call.tool,
911
- timeoutMs: CODEX_DYNAMIC_TOOL_TIMEOUT_MS,
912
- });
913
- },
914
- });
915
- trajectoryRecorder?.recordEvent("tool.result", {
916
- threadId: call.threadId,
917
- turnId: call.turnId,
918
- toolCallId: call.callId,
919
- name: call.tool,
920
- success: response.success,
921
- contentItems: response.contentItems,
922
- });
923
- return response as JsonValue;
924
- } finally {
925
- activeAppServerTurnRequests = Math.max(0, activeAppServerTurnRequests - 1);
926
- touchTurnCompletionActivity(`request:${request.method}:response`, {
927
- arm: armCompletionWatchOnResponse,
928
- });
929
- }
930
- });
931
-
932
- const llmInputEvent = {
933
- runId: params.runId,
934
- sessionId: params.sessionId,
935
- provider: params.provider,
936
- model: params.modelId,
937
- systemPrompt: promptBuild.developerInstructions,
938
- prompt: promptBuild.prompt,
939
- historyMessages,
940
- imagesCount: params.images?.length ?? 0,
941
- };
942
- const turnStartFailureMessages = [
943
- ...historyMessages,
944
- {
945
- role: "user",
946
- content: [{ type: "text", text: promptBuild.prompt }],
947
- },
948
- ];
949
-
950
- let turn: CodexTurnStartResponse;
951
- try {
952
- runAgentHarnessLlmInputHook({
953
- event: llmInputEvent,
954
- ctx: hookContext,
955
- });
956
- emitCodexAppServerEvent(params, {
957
- stream: "codex_app_server.lifecycle",
958
- data: { phase: "turn_starting", threadId: thread.threadId },
959
- });
960
- turn = assertCodexTurnStartResponse(
961
- await client.request(
962
- "turn/start",
963
- buildTurnStartParams(params, {
964
- threadId: thread.threadId,
965
- cwd: effectiveWorkspace,
966
- appServer,
967
- promptText: promptBuild.prompt,
968
- }),
969
- { timeoutMs: params.timeoutMs, signal: runAbortController.signal },
970
- ),
971
- );
972
- } catch (error) {
973
- emitCodexAppServerEvent(params, {
974
- stream: "codex_app_server.lifecycle",
975
- data: { phase: "turn_start_failed", error: formatErrorMessage(error) },
976
- });
977
- trajectoryRecorder?.recordEvent("session.ended", {
978
- status: "error",
979
- threadId: thread.threadId,
980
- timedOut,
981
- aborted: runAbortController.signal.aborted,
982
- promptError: normalizeCodexTrajectoryError(error),
983
- });
984
- trajectoryEndRecorded = true;
985
- runAgentHarnessLlmOutputHook({
986
- event: {
987
- runId: params.runId,
988
- sessionId: params.sessionId,
989
- provider: params.provider,
990
- model: params.modelId,
991
- resolvedRef:
992
- params.runtimePlan?.observability.resolvedRef ?? `${params.provider}/${params.modelId}`,
993
- ...(params.runtimePlan?.observability.harnessId
994
- ? { harnessId: params.runtimePlan.observability.harnessId }
995
- : {}),
996
- assistantTexts: [],
997
- },
998
- ctx: hookContext,
999
- });
1000
- runAgentHarnessAgentEndHook({
1001
- event: {
1002
- messages: turnStartFailureMessages,
1003
- success: false,
1004
- error: formatErrorMessage(error),
1005
- durationMs: Date.now() - attemptStartedAt,
1006
- },
1007
- ctx: hookContext,
1008
- });
1009
- notificationCleanup();
1010
- requestCleanup();
1011
- nativeHookRelay?.unregister();
1012
- await runAgentCleanupStep({
1013
- runId: params.runId,
1014
- sessionId: params.sessionId,
1015
- step: "codex-trajectory-flush-startup-failure",
1016
- log: embeddedAgentLog,
1017
- cleanup: async () => {
1018
- await trajectoryRecorder?.flush();
1019
- },
1020
- });
1021
- params.abortSignal?.removeEventListener("abort", abortFromUpstream);
1022
- throw error;
1023
- }
1024
- turnId = turn.turn.id;
1025
- const activeTurnId = turn.turn.id;
1026
- userInputBridge = createCodexUserInputBridge({
1027
- paramsForRun: params,
1028
- threadId: thread.threadId,
1029
- turnId: activeTurnId,
1030
- signal: runAbortController.signal,
1031
- });
1032
- trajectoryRecorder?.recordEvent("prompt.submitted", {
1033
- threadId: thread.threadId,
1034
- turnId: activeTurnId,
1035
- prompt: promptBuild.prompt,
1036
- imagesCount: params.images?.length ?? 0,
1037
- });
1038
- projector = new CodexAppServerEventProjector(params, thread.threadId, activeTurnId);
1039
- emitLifecycleStart();
1040
- const activeProjector = projector;
1041
- for (const notification of pendingNotifications.splice(0)) {
1042
- await enqueueNotification(notification);
1043
- }
1044
- if (!completed && isTerminalTurnStatus(turn.turn.status)) {
1045
- await enqueueNotification({
1046
- method: "turn/completed",
1047
- params: {
1048
- threadId: thread.threadId,
1049
- turnId: activeTurnId,
1050
- turn: turn.turn as unknown as JsonObject,
1051
- },
1052
- });
1053
- }
1054
-
1055
- const activeSteeringQueue = createCodexSteeringQueue({
1056
- client,
1057
- threadId: thread.threadId,
1058
- turnId: activeTurnId,
1059
- answerPendingUserInput: (text) => userInputBridge?.handleQueuedMessage(text) ?? false,
1060
- signal: runAbortController.signal,
1061
- });
1062
- steeringQueue = activeSteeringQueue;
1063
- const handle = {
1064
- kind: "embedded" as const,
1065
- queueMessage: async (text: string, options?: CodexSteeringQueueOptions) =>
1066
- activeSteeringQueue.queue(text, options),
1067
- isStreaming: () => !completed,
1068
- isCompacting: () => projector?.isCompacting() ?? false,
1069
- cancel: () => runAbortController.abort("cancelled"),
1070
- abort: () => runAbortController.abort("aborted"),
1071
- };
1072
- setActiveEmbeddedRun(params.sessionId, handle, params.sessionKey);
1073
- turnTerminalIdleWatchArmed = true;
1074
- touchTurnCompletionActivity("turn:start");
1075
-
1076
- const timeout = setTimeout(
1077
- () => {
1078
- timedOut = true;
1079
- projector?.markTimedOut();
1080
- runAbortController.abort("timeout");
1081
- },
1082
- Math.max(100, params.timeoutMs),
1083
- );
1084
-
1085
- const abortListener = () => {
1086
- interruptCodexTurnBestEffort(client, {
1087
- threadId: thread.threadId,
1088
- turnId: activeTurnId,
1089
- });
1090
- resolveCompletion?.();
1091
- };
1092
- runAbortController.signal.addEventListener("abort", abortListener, { once: true });
1093
- if (runAbortController.signal.aborted) {
1094
- abortListener();
1095
- }
1096
-
1097
- try {
1098
- await completion;
1099
- const result = activeProjector.buildResult(toolBridge.telemetry, { yieldDetected });
1100
- const finalAborted = result.aborted || runAbortController.signal.aborted;
1101
- const finalPromptError = turnCompletionIdleTimedOut
1102
- ? turnCompletionIdleTimeoutMessage
1103
- : timedOut
1104
- ? "codex app-server attempt timed out"
1105
- : result.promptError;
1106
- const finalPromptErrorSource = timedOut ? "prompt" : result.promptErrorSource;
1107
- recordCodexTrajectoryCompletion(trajectoryRecorder, {
1108
- attempt: params,
1109
- result,
1110
- threadId: thread.threadId,
1111
- turnId: activeTurnId,
1112
- timedOut,
1113
- yieldDetected,
1114
- });
1115
- trajectoryRecorder?.recordEvent("session.ended", {
1116
- status: finalPromptError ? "error" : finalAborted || timedOut ? "interrupted" : "success",
1117
- threadId: thread.threadId,
1118
- turnId: activeTurnId,
1119
- timedOut,
1120
- yieldDetected,
1121
- promptError: normalizeCodexTrajectoryError(finalPromptError),
1122
- });
1123
- trajectoryEndRecorded = true;
1124
- await mirrorTranscriptBestEffort({
1125
- params,
1126
- agentId: sessionAgentId,
1127
- result,
1128
- sessionKey: sandboxSessionKey,
1129
- threadId: thread.threadId,
1130
- turnId: activeTurnId,
1131
- });
1132
- const terminalAssistantText = collectTerminalAssistantText(result);
1133
- if (terminalAssistantText && !finalAborted && !finalPromptError) {
1134
- emitCodexAppServerEvent(params, {
1135
- stream: "assistant",
1136
- data: { text: terminalAssistantText },
1137
- });
1138
- }
1139
- if (finalPromptError) {
1140
- emitLifecycleTerminal({
1141
- phase: "error",
1142
- error: formatErrorMessage(finalPromptError),
1143
- });
1144
- } else {
1145
- emitLifecycleTerminal({
1146
- phase: "end",
1147
- ...(finalAborted ? { aborted: true } : {}),
1148
- });
1149
- }
1150
- if (activeContextEngine) {
1151
- const finalMessages =
1152
- (await readMirroredSessionHistoryMessages(params.sessionFile)) ??
1153
- historyMessages.concat(result.messagesSnapshot);
1154
- await finalizeHarnessContextEngineTurn({
1155
- contextEngine: activeContextEngine,
1156
- promptError: Boolean(finalPromptError),
1157
- aborted: finalAborted,
1158
- yieldAborted: Boolean(result.yieldDetected),
1159
- sessionIdUsed: params.sessionId,
1160
- sessionKey: sandboxSessionKey,
1161
- sessionFile: params.sessionFile,
1162
- messagesSnapshot: finalMessages,
1163
- prePromptMessageCount,
1164
- tokenBudget: params.contextTokenBudget,
1165
- runtimeContext: buildHarnessContextEngineRuntimeContextFromUsage({
1166
- attempt: runtimeParams,
1167
- workspaceDir: effectiveWorkspace,
1168
- agentDir,
1169
- tokenBudget: params.contextTokenBudget,
1170
- lastCallUsage: result.attemptUsage,
1171
- promptCache: result.promptCache,
1172
- }),
1173
- runMaintenance: runHarnessContextEngineMaintenance,
1174
- config: params.config,
1175
- warn: (message) => embeddedAgentLog.warn(message),
1176
- });
1177
- }
1178
- runAgentHarnessLlmOutputHook({
1179
- event: {
1180
- runId: params.runId,
1181
- sessionId: params.sessionId,
1182
- provider: params.provider,
1183
- model: params.modelId,
1184
- resolvedRef:
1185
- params.runtimePlan?.observability.resolvedRef ?? `${params.provider}/${params.modelId}`,
1186
- ...(params.runtimePlan?.observability.harnessId
1187
- ? { harnessId: params.runtimePlan.observability.harnessId }
1188
- : {}),
1189
- assistantTexts: result.assistantTexts,
1190
- ...(result.lastAssistant ? { lastAssistant: result.lastAssistant } : {}),
1191
- ...(result.attemptUsage ? { usage: result.attemptUsage } : {}),
1192
- },
1193
- ctx: hookContext,
1194
- });
1195
- runAgentHarnessAgentEndHook({
1196
- event: {
1197
- messages: result.messagesSnapshot,
1198
- success: !finalAborted && !finalPromptError,
1199
- ...(finalPromptError ? { error: formatErrorMessage(finalPromptError) } : {}),
1200
- durationMs: Date.now() - attemptStartedAt,
1201
- },
1202
- ctx: hookContext,
1203
- });
1204
- return {
1205
- ...result,
1206
- timedOut,
1207
- aborted: finalAborted,
1208
- promptError: finalPromptError,
1209
- promptErrorSource: finalPromptErrorSource,
1210
- };
1211
- } finally {
1212
- emitLifecycleTerminal({
1213
- phase: "error",
1214
- error: "codex app-server run completed without lifecycle terminal event",
1215
- });
1216
- if (trajectoryRecorder && !trajectoryEndRecorded) {
1217
- trajectoryRecorder.recordEvent("session.ended", {
1218
- status: timedOut || runAbortController.signal.aborted ? "interrupted" : "cleanup",
1219
- threadId: thread.threadId,
1220
- turnId: activeTurnId,
1221
- timedOut,
1222
- aborted: runAbortController.signal.aborted,
1223
- });
1224
- }
1225
- await runAgentCleanupStep({
1226
- runId: params.runId,
1227
- sessionId: params.sessionId,
1228
- step: "codex-trajectory-flush",
1229
- log: embeddedAgentLog,
1230
- cleanup: async () => {
1231
- await trajectoryRecorder?.flush();
1232
- },
1233
- });
1234
- if (!timedOut && !runAbortController.signal.aborted) {
1235
- await steeringQueue?.flushPending();
1236
- }
1237
- userInputBridge?.cancelPending();
1238
- clearTimeout(timeout);
1239
- clearTurnCompletionIdleTimer();
1240
- clearTurnTerminalIdleTimer();
1241
- notificationCleanup();
1242
- requestCleanup();
1243
- nativeHookRelay?.unregister();
1244
- runAbortController.signal.removeEventListener("abort", abortListener);
1245
- params.abortSignal?.removeEventListener("abort", abortFromUpstream);
1246
- steeringQueue?.cancel();
1247
- clearActiveEmbeddedRun(params.sessionId, handle, params.sessionKey);
1248
- }
1249
- }
1250
-
1251
- async function handleDynamicToolCallWithTimeout(params: {
1252
- call: CodexDynamicToolCallParams;
1253
- toolBridge: Pick<CodexDynamicToolBridge, "handleToolCall">;
1254
- signal: AbortSignal;
1255
- timeoutMs: number;
1256
- onTimeout?: () => void;
1257
- }): Promise<CodexDynamicToolCallResponse> {
1258
- if (params.signal.aborted) {
1259
- return failedDynamicToolResponse("OpenClaw dynamic tool call aborted before execution.");
1260
- }
1261
-
1262
- const controller = new AbortController();
1263
- let timeout: ReturnType<typeof setTimeout> | undefined;
1264
- let timedOut = false;
1265
- let resolveAbort: ((response: CodexDynamicToolCallResponse) => void) | undefined;
1266
- const abortFromRun = () => {
1267
- const message = "OpenClaw dynamic tool call aborted.";
1268
- controller.abort(params.signal.reason ?? new Error(message));
1269
- resolveAbort?.(failedDynamicToolResponse(message));
1270
- };
1271
- const abortPromise = new Promise<CodexDynamicToolCallResponse>((resolve) => {
1272
- resolveAbort = resolve;
1273
- });
1274
- const timeoutPromise = new Promise<CodexDynamicToolCallResponse>((resolve) => {
1275
- const timeoutMs = Math.max(1, Math.min(CODEX_DYNAMIC_TOOL_TIMEOUT_MS, params.timeoutMs));
1276
- timeout = setTimeout(() => {
1277
- timedOut = true;
1278
- const timeoutDetails = formatDynamicToolTimeoutDetails({ call: params.call, timeoutMs });
1279
- controller.abort(new Error(timeoutDetails.responseMessage));
1280
- params.onTimeout?.();
1281
- embeddedAgentLog.warn("codex dynamic tool call timed out", {
1282
- ...timeoutDetails.meta,
1283
- consoleMessage: timeoutDetails.consoleMessage,
1284
- });
1285
- resolve(failedDynamicToolResponse(timeoutDetails.responseMessage));
1286
- }, timeoutMs);
1287
- timeout.unref?.();
1288
- });
1289
-
1290
- try {
1291
- params.signal.addEventListener("abort", abortFromRun, { once: true });
1292
- if (params.signal.aborted) {
1293
- abortFromRun();
1294
- }
1295
- return await Promise.race([
1296
- params.toolBridge.handleToolCall(params.call, { signal: controller.signal }),
1297
- abortPromise,
1298
- timeoutPromise,
1299
- ]);
1300
- } catch (error) {
1301
- return failedDynamicToolResponse(error instanceof Error ? error.message : String(error));
1302
- } finally {
1303
- if (timeout) {
1304
- clearTimeout(timeout);
1305
- }
1306
- params.signal.removeEventListener("abort", abortFromRun);
1307
- resolveAbort = undefined;
1308
- if (!timedOut && !controller.signal.aborted) {
1309
- controller.abort(new Error("OpenClaw dynamic tool call finished."));
1310
- }
1311
- }
1312
- }
1313
-
1314
- function failedDynamicToolResponse(message: string): CodexDynamicToolCallResponse {
1315
- return {
1316
- success: false,
1317
- contentItems: [{ type: "inputText", text: message }],
1318
- };
1319
- }
1320
-
1321
- function createCodexNativeHookRelay(params: {
1322
- options:
1323
- | {
1324
- enabled?: boolean;
1325
- events?: readonly NativeHookRelayEvent[];
1326
- ttlMs?: number;
1327
- gatewayTimeoutMs?: number;
1328
- }
1329
- | undefined;
1330
- agentId: string | undefined;
1331
- sessionId: string;
1332
- sessionKey: string | undefined;
1333
- runId: string;
1334
- signal: AbortSignal;
1335
- }): NativeHookRelayRegistrationHandle | undefined {
1336
- if (params.options?.enabled === false) {
1337
- return undefined;
1338
- }
1339
- return registerNativeHookRelay({
1340
- provider: "codex",
1341
- relayId: buildCodexNativeHookRelayId({
1342
- agentId: params.agentId,
1343
- sessionId: params.sessionId,
1344
- sessionKey: params.sessionKey,
1345
- }),
1346
- ...(params.agentId ? { agentId: params.agentId } : {}),
1347
- sessionId: params.sessionId,
1348
- ...(params.sessionKey ? { sessionKey: params.sessionKey } : {}),
1349
- runId: params.runId,
1350
- allowedEvents: params.options?.events ?? CODEX_NATIVE_HOOK_RELAY_EVENTS,
1351
- ttlMs: params.options?.ttlMs,
1352
- signal: params.signal,
1353
- command: {
1354
- timeoutMs: params.options?.gatewayTimeoutMs,
1355
- },
1356
- });
1357
- }
1358
-
1359
- function buildCodexNativeHookRelayId(params: {
1360
- agentId: string | undefined;
1361
- sessionId: string;
1362
- sessionKey: string | undefined;
1363
- }): string {
1364
- const hash = createHash("sha256");
1365
- hash.update("openclaw:codex:native-hook-relay:v1");
1366
- hash.update("\0");
1367
- hash.update(params.agentId?.trim() || "");
1368
- hash.update("\0");
1369
- hash.update(params.sessionKey?.trim() || params.sessionId);
1370
- return `codex-${hash.digest("hex").slice(0, 40)}`;
1371
- }
1372
-
1373
- function interruptCodexTurnBestEffort(
1374
- client: CodexAppServerClient,
1375
- params: {
1376
- threadId: string;
1377
- turnId: string;
1378
- },
1379
- ): void {
1380
- void Promise.resolve()
1381
- .then(() => client.request("turn/interrupt", params))
1382
- .catch((error: unknown) => {
1383
- embeddedAgentLog.debug("codex app-server turn interrupt failed during abort", { error });
1384
- });
1385
- }
1386
-
1387
- type DynamicToolBuildParams = {
1388
- params: EmbeddedRunAttemptParams;
1389
- resolvedWorkspace: string;
1390
- effectiveWorkspace: string;
1391
- sandboxSessionKey: string;
1392
- sandbox: Awaited<ReturnType<typeof resolveSandboxContext>>;
1393
- runAbortController: AbortController;
1394
- sessionAgentId: string | undefined;
1395
- pluginConfig: CodexPluginConfig;
1396
- onYieldDetected: () => void;
1397
- };
1398
-
1399
- async function buildDynamicTools(input: DynamicToolBuildParams) {
1400
- const { params } = input;
1401
- if (params.disableTools || !supportsModelTools(params.model)) {
1402
- return [];
1403
- }
1404
- const modelHasVision = params.model.input?.includes("image") ?? false;
1405
- const agentDir = params.agentDir ?? resolveOpenClawAgentDir();
1406
- const { createOpenClawCodingTools } = await import("openclaw/plugin-sdk/agent-harness");
1407
- const allTools = createOpenClawCodingTools({
1408
- agentId: input.sessionAgentId,
1409
- ...buildEmbeddedAttemptToolRunContext(params),
1410
- exec: {
1411
- ...params.execOverrides,
1412
- elevated: params.bashElevated,
1413
- },
1414
- sandbox: input.sandbox,
1415
- messageProvider: params.messageChannel ?? params.messageProvider,
1416
- agentAccountId: params.agentAccountId,
1417
- messageTo: params.messageTo,
1418
- messageThreadId: params.messageThreadId,
1419
- groupId: params.groupId,
1420
- groupChannel: params.groupChannel,
1421
- groupSpace: params.groupSpace,
1422
- spawnedBy: params.spawnedBy,
1423
- senderId: params.senderId,
1424
- senderName: params.senderName,
1425
- senderUsername: params.senderUsername,
1426
- senderE164: params.senderE164,
1427
- senderIsOwner: params.senderIsOwner,
1428
- allowGatewaySubagentBinding: params.allowGatewaySubagentBinding,
1429
- sessionKey: input.sandboxSessionKey,
1430
- sessionId: params.sessionId,
1431
- runId: params.runId,
1432
- agentDir,
1433
- workspaceDir: input.effectiveWorkspace,
1434
- spawnWorkspaceDir: resolveAttemptSpawnWorkspaceDir({
1435
- sandbox: input.sandbox,
1436
- resolvedWorkspace: input.resolvedWorkspace,
1437
- }),
1438
- config: params.config,
1439
- abortSignal: input.runAbortController.signal,
1440
- modelProvider: params.model.provider,
1441
- modelId: params.modelId,
1442
- modelCompat:
1443
- params.model.compat && typeof params.model.compat === "object"
1444
- ? (params.model.compat as OpenClawCodingToolsOptions["modelCompat"])
1445
- : undefined,
1446
- modelApi: params.model.api,
1447
- modelContextWindowTokens: params.model.contextWindow,
1448
- modelAuthMode: resolveModelAuthMode(params.model.provider, params.config, undefined, {
1449
- workspaceDir: input.effectiveWorkspace,
1450
- }),
1451
- suppressManagedWebSearch: false,
1452
- currentChannelId: params.currentChannelId,
1453
- currentThreadTs: params.currentThreadTs,
1454
- currentMessageId: params.currentMessageId,
1455
- replyToMode: params.replyToMode,
1456
- hasRepliedRef: params.hasRepliedRef,
1457
- modelHasVision,
1458
- requireExplicitMessageTarget:
1459
- params.requireExplicitMessageTarget ?? isSubagentSessionKey(params.sessionKey),
1460
- disableMessageTool: params.disableMessageTool,
1461
- enableHeartbeatTool: params.trigger === "heartbeat",
1462
- forceHeartbeatTool: params.trigger === "heartbeat",
1463
- onYield: (message) => {
1464
- input.onYieldDetected();
1465
- emitCodexAppServerEvent(params, {
1466
- stream: "codex_app_server.tool",
1467
- data: { name: "sessions_yield", message },
1468
- });
1469
- input.runAbortController.abort("sessions_yield");
1470
- },
1471
- });
1472
- const profiledTools = applyCodexDynamicToolProfile(allTools, input.pluginConfig);
1473
- const visionFilteredTools = filterToolsForVisionInputs(profiledTools, {
1474
- modelHasVision,
1475
- hasInboundImages: (params.images?.length ?? 0) > 0,
1476
- });
1477
- const filteredTools =
1478
- params.toolsAllow && params.toolsAllow.length > 0
1479
- ? visionFilteredTools.filter((tool) => params.toolsAllow?.includes(tool.name))
1480
- : visionFilteredTools;
1481
- return normalizeAgentRuntimeTools({
1482
- runtimePlan: params.runtimePlan,
1483
- tools: filteredTools,
1484
- provider: params.provider,
1485
- config: params.config,
1486
- workspaceDir: input.effectiveWorkspace,
1487
- env: process.env,
1488
- modelId: params.modelId,
1489
- modelApi: params.model.api,
1490
- model: params.model,
1491
- });
1492
- }
1493
-
1494
- async function withCodexStartupTimeout<T>(params: {
1495
- timeoutMs: number;
1496
- timeoutFloorMs?: number;
1497
- signal: AbortSignal;
1498
- operation: () => Promise<T>;
1499
- }): Promise<T> {
1500
- if (params.signal.aborted) {
1501
- throw new Error("codex app-server startup aborted");
1502
- }
1503
- let timeout: NodeJS.Timeout | undefined;
1504
- let abortCleanup: (() => void) | undefined;
1505
- try {
1506
- return await Promise.race([
1507
- params.operation(),
1508
- new Promise<never>((_, reject) => {
1509
- const rejectOnce = (error: Error) => {
1510
- if (timeout) {
1511
- clearTimeout(timeout);
1512
- timeout = undefined;
1513
- }
1514
- reject(error);
1515
- };
1516
- const timeoutMs = Math.max(params.timeoutFloorMs ?? 100, params.timeoutMs);
1517
- timeout = setTimeout(() => {
1518
- rejectOnce(new Error("codex app-server startup timed out"));
1519
- }, timeoutMs);
1520
- const abortListener = () => rejectOnce(new Error("codex app-server startup aborted"));
1521
- params.signal.addEventListener("abort", abortListener, { once: true });
1522
- abortCleanup = () => params.signal.removeEventListener("abort", abortListener);
1523
- }),
1524
- ]);
1525
- } finally {
1526
- if (timeout) {
1527
- clearTimeout(timeout);
1528
- }
1529
- abortCleanup?.();
1530
- }
1531
- }
1532
-
1533
- function resolveCodexTurnCompletionIdleTimeoutMs(value: number | undefined): number {
1534
- if (value === undefined) {
1535
- return CODEX_TURN_COMPLETION_IDLE_TIMEOUT_MS;
1536
- }
1537
- if (!Number.isFinite(value)) {
1538
- return CODEX_TURN_COMPLETION_IDLE_TIMEOUT_MS;
1539
- }
1540
- return Math.max(1, Math.floor(value));
1541
- }
1542
-
1543
- function resolveCodexTurnTerminalIdleTimeoutMs(value: number | undefined): number {
1544
- if (value === undefined) {
1545
- return CODEX_TURN_TERMINAL_IDLE_TIMEOUT_MS;
1546
- }
1547
- if (!Number.isFinite(value)) {
1548
- return CODEX_TURN_TERMINAL_IDLE_TIMEOUT_MS;
1549
- }
1550
- return Math.max(1, Math.floor(value));
1551
- }
1552
-
1553
- function readDynamicToolCallParams(
1554
- value: JsonValue | undefined,
1555
- ): CodexDynamicToolCallParams | undefined {
1556
- return readCodexDynamicToolCallParams(value);
1557
- }
1558
-
1559
- function isTurnNotification(
1560
- value: JsonValue | undefined,
1561
- threadId: string,
1562
- turnId: string,
1563
- ): boolean {
1564
- if (!isJsonObject(value)) {
1565
- return false;
1566
- }
1567
- return readString(value, "threadId") === threadId && readNotificationTurnId(value) === turnId;
1568
- }
1569
-
1570
- function isTerminalTurnStatus(status: string | undefined): boolean {
1571
- return status === "completed" || status === "interrupted" || status === "failed";
1572
- }
1573
-
1574
- function readNotificationTurnId(record: JsonObject): string | undefined {
1575
- return readString(record, "turnId") ?? readNestedTurnId(record);
1576
- }
1577
-
1578
- function readNestedTurnId(record: JsonObject): string | undefined {
1579
- const turn = record.turn;
1580
- return isJsonObject(turn) ? readString(turn, "id") : undefined;
1581
- }
1582
-
1583
- function readString(record: JsonObject, key: string): string | undefined {
1584
- const value = record[key];
1585
- return typeof value === "string" ? value : undefined;
1586
- }
1587
-
1588
- async function readMirroredSessionHistoryMessages(
1589
- sessionFile: string,
1590
- ): Promise<AgentMessage[] | undefined> {
1591
- const messages = await readCodexMirroredSessionHistoryMessages(sessionFile);
1592
- if (!messages) {
1593
- embeddedAgentLog.warn("failed to read mirrored session history for codex harness hooks", {
1594
- sessionFile,
1595
- });
1596
- }
1597
- return messages;
1598
- }
1599
-
1600
- async function mirrorTranscriptBestEffort(params: {
1601
- params: EmbeddedRunAttemptParams;
1602
- agentId?: string;
1603
- result: EmbeddedRunAttemptResult;
1604
- sessionKey?: string;
1605
- threadId: string;
1606
- turnId: string;
1607
- }): Promise<void> {
1608
- try {
1609
- await mirrorCodexAppServerTranscript({
1610
- sessionFile: params.params.sessionFile,
1611
- agentId: params.agentId,
1612
- sessionKey: params.sessionKey,
1613
- messages: params.result.messagesSnapshot,
1614
- idempotencyScope: `codex-app-server:${params.threadId}:${params.turnId}`,
1615
- config: params.params.config,
1616
- });
1617
- } catch (error) {
1618
- embeddedAgentLog.warn("failed to mirror codex app-server transcript", { error });
1619
- }
1620
- }
1621
-
1622
- async function fileExists(filePath: string): Promise<boolean> {
1623
- try {
1624
- await fs.stat(filePath);
1625
- return true;
1626
- } catch (error) {
1627
- if ((error as NodeJS.ErrnoException).code === "ENOENT") {
1628
- return false;
1629
- }
1630
- throw error;
1631
- }
1632
- }
1633
-
1634
- function isNonEmptyString(value: unknown): value is string {
1635
- return typeof value === "string" && value.length > 0;
1636
- }
1637
-
1638
- function joinPresentSections(...sections: Array<string | undefined>): string {
1639
- return sections.filter((section): section is string => Boolean(section?.trim())).join("\n\n");
1640
- }
1641
-
1642
- function handleApprovalRequest(params: {
1643
- method: string;
1644
- params: JsonValue | undefined;
1645
- paramsForRun: EmbeddedRunAttemptParams;
1646
- threadId: string;
1647
- turnId: string;
1648
- signal?: AbortSignal;
1649
- }): Promise<JsonValue | undefined> {
1650
- return handleCodexAppServerApprovalRequest({
1651
- method: params.method,
1652
- requestParams: params.params,
1653
- paramsForRun: params.paramsForRun,
1654
- threadId: params.threadId,
1655
- turnId: params.turnId,
1656
- signal: params.signal,
1657
- });
1658
- }
1659
-
1660
- export const __testing = {
1661
- CODEX_DYNAMIC_TOOL_TIMEOUT_MS,
1662
- CODEX_TURN_COMPLETION_IDLE_TIMEOUT_MS,
1663
- CODEX_TURN_TERMINAL_IDLE_TIMEOUT_MS,
1664
- buildCodexNativeHookRelayId,
1665
- applyCodexDynamicToolProfile,
1666
- filterToolsForVisionInputs,
1667
- handleDynamicToolCallWithTimeout,
1668
- ...createCodexAppServerClientFactoryTestHooks((factory) => {
1669
- clientFactory = factory;
1670
- }),
1671
- } as const;