codexgpt 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (654) hide show
  1. package/AGENTS.example.md +20 -0
  2. package/CHANGELOG.md +342 -0
  3. package/CHATGPT_PROMPT.md +12 -0
  4. package/CLOUDFLARED_VERIFIED_INSTALL.md +94 -0
  5. package/CODEX_PROMPT.md +12 -0
  6. package/CONTRIBUTING.md +62 -0
  7. package/DOMAIN_SETUP.md +275 -0
  8. package/FAQ.md +366 -0
  9. package/FAQ_ZH.md +329 -0
  10. package/LICENSE +21 -0
  11. package/PUBLIC_LAUNCH_CHECKLIST.md +111 -0
  12. package/README.md +490 -0
  13. package/README_ZH.md +747 -0
  14. package/SECURITY.md +295 -0
  15. package/config.example.env +103 -0
  16. package/dist/access/fullAccessLease.js +148 -0
  17. package/dist/access/fullAccessLease.js.map +1 -0
  18. package/dist/access/protectedRoots.js +122 -0
  19. package/dist/access/protectedRoots.js.map +1 -0
  20. package/dist/access/rootAdmission.js +347 -0
  21. package/dist/access/rootAdmission.js.map +1 -0
  22. package/dist/analysis/cache.js +27 -0
  23. package/dist/analysis/cache.js.map +1 -0
  24. package/dist/analysis/classify.js +102 -0
  25. package/dist/analysis/classify.js.map +1 -0
  26. package/dist/analysis/extract.js +139 -0
  27. package/dist/analysis/extract.js.map +1 -0
  28. package/dist/analysis/graph.js +22 -0
  29. package/dist/analysis/graph.js.map +1 -0
  30. package/dist/analysis/impact.js +167 -0
  31. package/dist/analysis/impact.js.map +1 -0
  32. package/dist/analysis/index.js +215 -0
  33. package/dist/analysis/index.js.map +1 -0
  34. package/dist/analysis/inventory.js +51 -0
  35. package/dist/analysis/inventory.js.map +1 -0
  36. package/dist/analysis/providers.js +24 -0
  37. package/dist/analysis/providers.js.map +1 -0
  38. package/dist/analysis/rank.js +27 -0
  39. package/dist/analysis/rank.js.map +1 -0
  40. package/dist/analysis/types.js +8 -0
  41. package/dist/analysis/types.js.map +1 -0
  42. package/dist/audit/canonicalJson.js +79 -0
  43. package/dist/audit/canonicalJson.js.map +1 -0
  44. package/dist/audit/diagnostics.js +128 -0
  45. package/dist/audit/diagnostics.js.map +1 -0
  46. package/dist/audit/index.js +12 -0
  47. package/dist/audit/index.js.map +1 -0
  48. package/dist/audit/lifecycleV3.js +53 -0
  49. package/dist/audit/lifecycleV3.js.map +1 -0
  50. package/dist/audit/lifecycleV4.js +70 -0
  51. package/dist/audit/lifecycleV4.js.map +1 -0
  52. package/dist/audit/lock.js +195 -0
  53. package/dist/audit/lock.js.map +1 -0
  54. package/dist/audit/queryTool.js +120 -0
  55. package/dist/audit/queryTool.js.map +1 -0
  56. package/dist/audit/runtime.js +48 -0
  57. package/dist/audit/runtime.js.map +1 -0
  58. package/dist/audit/schemas.js +640 -0
  59. package/dist/audit/schemas.js.map +1 -0
  60. package/dist/audit/store.js +1309 -0
  61. package/dist/audit/store.js.map +1 -0
  62. package/dist/audit/transactionParticipant.js +45 -0
  63. package/dist/audit/transactionParticipant.js.map +1 -0
  64. package/dist/audit/types.js +11 -0
  65. package/dist/audit/types.js.map +1 -0
  66. package/dist/auth/audit.js +44 -0
  67. package/dist/auth/audit.js.map +1 -0
  68. package/dist/auth/authorizationStore.js +333 -0
  69. package/dist/auth/authorizationStore.js.map +1 -0
  70. package/dist/auth/challenges.js +25 -0
  71. package/dist/auth/challenges.js.map +1 -0
  72. package/dist/auth/clientStore.js +469 -0
  73. package/dist/auth/clientStore.js.map +1 -0
  74. package/dist/auth/cloudflareConfig.js +112 -0
  75. package/dist/auth/cloudflareConfig.js.map +1 -0
  76. package/dist/auth/configuration.js +167 -0
  77. package/dist/auth/configuration.js.map +1 -0
  78. package/dist/auth/credentialStore.js +65 -0
  79. package/dist/auth/credentialStore.js.map +1 -0
  80. package/dist/auth/deploymentLock.js +220 -0
  81. package/dist/auth/deploymentLock.js.map +1 -0
  82. package/dist/auth/deploymentRegistry.js +149 -0
  83. package/dist/auth/deploymentRegistry.js.map +1 -0
  84. package/dist/auth/errors.js +26 -0
  85. package/dist/auth/errors.js.map +1 -0
  86. package/dist/auth/grantStore.js +307 -0
  87. package/dist/auth/grantStore.js.map +1 -0
  88. package/dist/auth/index.js +39 -0
  89. package/dist/auth/index.js.map +1 -0
  90. package/dist/auth/keyManager.js +148 -0
  91. package/dist/auth/keyManager.js.map +1 -0
  92. package/dist/auth/localAdminSession.js +173 -0
  93. package/dist/auth/localAdminSession.js.map +1 -0
  94. package/dist/auth/metadata.js +69 -0
  95. package/dist/auth/metadata.js.map +1 -0
  96. package/dist/auth/oauthProvider.js +589 -0
  97. package/dist/auth/oauthProvider.js.map +1 -0
  98. package/dist/auth/ownerApproval.js +51 -0
  99. package/dist/auth/ownerApproval.js.map +1 -0
  100. package/dist/auth/policyIdentity.js +189 -0
  101. package/dist/auth/policyIdentity.js.map +1 -0
  102. package/dist/auth/rateLimits.js +66 -0
  103. package/dist/auth/rateLimits.js.map +1 -0
  104. package/dist/auth/recovery.js +275 -0
  105. package/dist/auth/recovery.js.map +1 -0
  106. package/dist/auth/requestContext.js +34 -0
  107. package/dist/auth/requestContext.js.map +1 -0
  108. package/dist/auth/resourceMiddleware.js +147 -0
  109. package/dist/auth/resourceMiddleware.js.map +1 -0
  110. package/dist/auth/runtimeStatus.js +51 -0
  111. package/dist/auth/runtimeStatus.js.map +1 -0
  112. package/dist/auth/schemas.js +84 -0
  113. package/dist/auth/schemas.js.map +1 -0
  114. package/dist/auth/stateStore.js +468 -0
  115. package/dist/auth/stateStore.js.map +1 -0
  116. package/dist/auth/tokenService.js +631 -0
  117. package/dist/auth/tokenService.js.map +1 -0
  118. package/dist/auth/toolSecurity.js +108 -0
  119. package/dist/auth/toolSecurity.js.map +1 -0
  120. package/dist/auth/types.js +6 -0
  121. package/dist/auth/types.js.map +1 -0
  122. package/dist/auth/windowsDpapi.js +193 -0
  123. package/dist/auth/windowsDpapi.js.map +1 -0
  124. package/dist/bashOps.js +292 -0
  125. package/dist/bashOps.js.map +1 -0
  126. package/dist/capabilitiesOps.js +412 -0
  127. package/dist/capabilitiesOps.js.map +1 -0
  128. package/dist/changesets/crypto.js +92 -0
  129. package/dist/changesets/crypto.js.map +1 -0
  130. package/dist/changesets/index.js +9 -0
  131. package/dist/changesets/index.js.map +1 -0
  132. package/dist/changesets/moveStore.js +237 -0
  133. package/dist/changesets/moveStore.js.map +1 -0
  134. package/dist/changesets/moveUndo.js +386 -0
  135. package/dist/changesets/moveUndo.js.map +1 -0
  136. package/dist/changesets/schemas.js +234 -0
  137. package/dist/changesets/schemas.js.map +1 -0
  138. package/dist/changesets/store.js +573 -0
  139. package/dist/changesets/store.js.map +1 -0
  140. package/dist/changesets/types.js +9 -0
  141. package/dist/changesets/types.js.map +1 -0
  142. package/dist/changesets/undo.js +525 -0
  143. package/dist/changesets/undo.js.map +1 -0
  144. package/dist/changesets/unifiedUndo.js +31 -0
  145. package/dist/changesets/unifiedUndo.js.map +1 -0
  146. package/dist/cliEnvironment.js +85 -0
  147. package/dist/cliEnvironment.js.map +1 -0
  148. package/dist/codexSessions.js +733 -0
  149. package/dist/codexSessions.js.map +1 -0
  150. package/dist/codexgptSupertool.js +216 -0
  151. package/dist/codexgptSupertool.js.map +1 -0
  152. package/dist/codexproSupertool.js +204 -0
  153. package/dist/codexproSupertool.js.map +1 -0
  154. package/dist/config.js +733 -0
  155. package/dist/config.js.map +1 -0
  156. package/dist/control/localApprovalClient.js +287 -0
  157. package/dist/control/localApprovalClient.js.map +1 -0
  158. package/dist/control/localApprovalServer.js +466 -0
  159. package/dist/control/localApprovalServer.js.map +1 -0
  160. package/dist/control/runtime.js +178 -0
  161. package/dist/control/runtime.js.map +1 -0
  162. package/dist/control/schemas.js +184 -0
  163. package/dist/control/schemas.js.map +1 -0
  164. package/dist/control/windowsLocalControl.js +348 -0
  165. package/dist/control/windowsLocalControl.js.map +1 -0
  166. package/dist/fsOps.js +541 -0
  167. package/dist/fsOps.js.map +1 -0
  168. package/dist/git/admission.js +26 -0
  169. package/dist/git/admission.js.map +1 -0
  170. package/dist/git/branchService.js +51 -0
  171. package/dist/git/branchService.js.map +1 -0
  172. package/dist/git/capabilities.js +143 -0
  173. package/dist/git/capabilities.js.map +1 -0
  174. package/dist/git/commitService.js +344 -0
  175. package/dist/git/commitService.js.map +1 -0
  176. package/dist/git/durableState.js +151 -0
  177. package/dist/git/durableState.js.map +1 -0
  178. package/dist/git/execution.js +451 -0
  179. package/dist/git/execution.js.map +1 -0
  180. package/dist/git/fileTransaction.js +50 -0
  181. package/dist/git/fileTransaction.js.map +1 -0
  182. package/dist/git/indexService.js +421 -0
  183. package/dist/git/indexService.js.map +1 -0
  184. package/dist/git/integrations.js +653 -0
  185. package/dist/git/integrations.js.map +1 -0
  186. package/dist/git/locks.js +287 -0
  187. package/dist/git/locks.js.map +1 -0
  188. package/dist/git/mutationContext.js +92 -0
  189. package/dist/git/mutationContext.js.map +1 -0
  190. package/dist/git/mutationJournal.js +91 -0
  191. package/dist/git/mutationJournal.js.map +1 -0
  192. package/dist/git/mutationService.js +352 -0
  193. package/dist/git/mutationService.js.map +1 -0
  194. package/dist/git/normalization.js +57 -0
  195. package/dist/git/normalization.js.map +1 -0
  196. package/dist/git/objectQuarantine.js +243 -0
  197. package/dist/git/objectQuarantine.js.map +1 -0
  198. package/dist/git/opaqueRecordStore.js +187 -0
  199. package/dist/git/opaqueRecordStore.js.map +1 -0
  200. package/dist/git/operationStore.js +287 -0
  201. package/dist/git/operationStore.js.map +1 -0
  202. package/dist/git/parsers.js +311 -0
  203. package/dist/git/parsers.js.map +1 -0
  204. package/dist/git/privateIndex.js +79 -0
  205. package/dist/git/privateIndex.js.map +1 -0
  206. package/dist/git/productionBootstrap.js +39 -0
  207. package/dist/git/productionBootstrap.js.map +1 -0
  208. package/dist/git/readService.js +846 -0
  209. package/dist/git/readService.js.map +1 -0
  210. package/dist/git/recovery.js +417 -0
  211. package/dist/git/recovery.js.map +1 -0
  212. package/dist/git/repositoryIdentity.js +611 -0
  213. package/dist/git/repositoryIdentity.js.map +1 -0
  214. package/dist/git/repositoryStore.js +237 -0
  215. package/dist/git/repositoryStore.js.map +1 -0
  216. package/dist/git/resources.js +113 -0
  217. package/dist/git/resources.js.map +1 -0
  218. package/dist/git/restoreService.js +178 -0
  219. package/dist/git/restoreService.js.map +1 -0
  220. package/dist/git/reviewToken.js +86 -0
  221. package/dist/git/reviewToken.js.map +1 -0
  222. package/dist/git/stashService.js +566 -0
  223. package/dist/git/stashService.js.map +1 -0
  224. package/dist/git/stateToken.js +139 -0
  225. package/dist/git/stateToken.js.map +1 -0
  226. package/dist/gitOps.js +147 -0
  227. package/dist/gitOps.js.map +1 -0
  228. package/dist/guard.js +608 -0
  229. package/dist/guard.js.map +1 -0
  230. package/dist/guidance/diagnostics.js +14 -0
  231. package/dist/guidance/diagnostics.js.map +1 -0
  232. package/dist/guidance/instructions.js +167 -0
  233. package/dist/guidance/instructions.js.map +1 -0
  234. package/dist/guidance/mode.js +18 -0
  235. package/dist/guidance/mode.js.map +1 -0
  236. package/dist/guidance/openaiSkillMetadata.js +29 -0
  237. package/dist/guidance/openaiSkillMetadata.js.map +1 -0
  238. package/dist/guidance/safeTextReader.js +171 -0
  239. package/dist/guidance/safeTextReader.js.map +1 -0
  240. package/dist/guidance/skillCatalog.js +70 -0
  241. package/dist/guidance/skillCatalog.js.map +1 -0
  242. package/dist/guidance/skillDiscovery.js +353 -0
  243. package/dist/guidance/skillDiscovery.js.map +1 -0
  244. package/dist/guidance/skillMetadata.js +115 -0
  245. package/dist/guidance/skillMetadata.js.map +1 -0
  246. package/dist/guidance/skillResources.js +146 -0
  247. package/dist/guidance/skillResources.js.map +1 -0
  248. package/dist/handoffOps.js +449 -0
  249. package/dist/handoffOps.js.map +1 -0
  250. package/dist/http/localAdminApp.js +203 -0
  251. package/dist/http/localAdminApp.js.map +1 -0
  252. package/dist/http/oauthMcpRuntime.js +294 -0
  253. package/dist/http/oauthMcpRuntime.js.map +1 -0
  254. package/dist/http/publicApp.js +350 -0
  255. package/dist/http/publicApp.js.map +1 -0
  256. package/dist/http/securityHeaders.js +11 -0
  257. package/dist/http/securityHeaders.js.map +1 -0
  258. package/dist/http.js +2076 -0
  259. package/dist/http.js.map +1 -0
  260. package/dist/moves/engine.js +1079 -0
  261. package/dist/moves/engine.js.map +1 -0
  262. package/dist/moves/index.js +6 -0
  263. package/dist/moves/index.js.map +1 -0
  264. package/dist/moves/planner.js +270 -0
  265. package/dist/moves/planner.js.map +1 -0
  266. package/dist/moves/recovery.js +557 -0
  267. package/dist/moves/recovery.js.map +1 -0
  268. package/dist/moves/service.js +300 -0
  269. package/dist/moves/service.js.map +1 -0
  270. package/dist/moves/types.js +11 -0
  271. package/dist/moves/types.js.map +1 -0
  272. package/dist/mutations/index.js +4 -0
  273. package/dist/mutations/index.js.map +1 -0
  274. package/dist/mutations/lifecycle.js +165 -0
  275. package/dist/mutations/lifecycle.js.map +1 -0
  276. package/dist/mutations/localService.js +163 -0
  277. package/dist/mutations/localService.js.map +1 -0
  278. package/dist/mutations/runtime.js +322 -0
  279. package/dist/mutations/runtime.js.map +1 -0
  280. package/dist/mutations/types.js +2 -0
  281. package/dist/mutations/types.js.map +1 -0
  282. package/dist/mutations/writers.js +360 -0
  283. package/dist/mutations/writers.js.map +1 -0
  284. package/dist/patchOps.js +420 -0
  285. package/dist/patchOps.js.map +1 -0
  286. package/dist/policy/approval.js +306 -0
  287. package/dist/policy/approval.js.map +1 -0
  288. package/dist/policy/audit.js +88 -0
  289. package/dist/policy/audit.js.map +1 -0
  290. package/dist/policy/authorizationFacts.js +187 -0
  291. package/dist/policy/authorizationFacts.js.map +1 -0
  292. package/dist/policy/compat.js +104 -0
  293. package/dist/policy/compat.js.map +1 -0
  294. package/dist/policy/context.js +31 -0
  295. package/dist/policy/context.js.map +1 -0
  296. package/dist/policy/enforcement.js +46 -0
  297. package/dist/policy/enforcement.js.map +1 -0
  298. package/dist/policy/evaluator.js +338 -0
  299. package/dist/policy/evaluator.js.map +1 -0
  300. package/dist/policy/executionCapabilities.js +80 -0
  301. package/dist/policy/executionCapabilities.js.map +1 -0
  302. package/dist/policy/executionResources.js +192 -0
  303. package/dist/policy/executionResources.js.map +1 -0
  304. package/dist/policy/fullAccessResources.js +23 -0
  305. package/dist/policy/fullAccessResources.js.map +1 -0
  306. package/dist/policy/hardPolicy.js +50 -0
  307. package/dist/policy/hardPolicy.js.map +1 -0
  308. package/dist/policy/identity.js +142 -0
  309. package/dist/policy/identity.js.map +1 -0
  310. package/dist/policy/integration.js +331 -0
  311. package/dist/policy/integration.js.map +1 -0
  312. package/dist/policy/pendingApprovals.js +301 -0
  313. package/dist/policy/pendingApprovals.js.map +1 -0
  314. package/dist/policy/profileStore.js +367 -0
  315. package/dist/policy/profileStore.js.map +1 -0
  316. package/dist/policy/resources.js +249 -0
  317. package/dist/policy/resources.js.map +1 -0
  318. package/dist/policy/runtime.js +713 -0
  319. package/dist/policy/runtime.js.map +1 -0
  320. package/dist/policy/schemas.js +625 -0
  321. package/dist/policy/schemas.js.map +1 -0
  322. package/dist/policy/toolPolicy.js +141 -0
  323. package/dist/policy/toolPolicy.js.map +1 -0
  324. package/dist/policy/transport.js +10 -0
  325. package/dist/policy/transport.js.map +1 -0
  326. package/dist/policy/types.js +31 -0
  327. package/dist/policy/types.js.map +1 -0
  328. package/dist/proContext.js +675 -0
  329. package/dist/proContext.js.map +1 -0
  330. package/dist/process/authority.js +18 -0
  331. package/dist/process/authority.js.map +1 -0
  332. package/dist/process/backendDiscovery.js +83 -0
  333. package/dist/process/backendDiscovery.js.map +1 -0
  334. package/dist/process/commandCompiler.js +71 -0
  335. package/dist/process/commandCompiler.js.map +1 -0
  336. package/dist/process/outputCursor.js +67 -0
  337. package/dist/process/outputCursor.js.map +1 -0
  338. package/dist/process/outputQuota.js +94 -0
  339. package/dist/process/outputQuota.js.map +1 -0
  340. package/dist/process/outputRing.js +138 -0
  341. package/dist/process/outputRing.js.map +1 -0
  342. package/dist/process/processAuditCoordinator.js +52 -0
  343. package/dist/process/processAuditCoordinator.js.map +1 -0
  344. package/dist/process/processManager.js +311 -0
  345. package/dist/process/processManager.js.map +1 -0
  346. package/dist/process/runCommand.js +332 -0
  347. package/dist/process/runCommand.js.map +1 -0
  348. package/dist/process/streamingRedactor.js +105 -0
  349. package/dist/process/streamingRedactor.js.map +1 -0
  350. package/dist/process/types.js +2 -0
  351. package/dist/process/types.js.map +1 -0
  352. package/dist/process/windowsHostClient.js +604 -0
  353. package/dist/process/windowsHostClient.js.map +1 -0
  354. package/dist/process/windowsHostProtocol.js +270 -0
  355. package/dist/process/windowsHostProtocol.js.map +1 -0
  356. package/dist/process/windowsPersistentBackend.js +263 -0
  357. package/dist/process/windowsPersistentBackend.js.map +1 -0
  358. package/dist/productionRuntime.js +907 -0
  359. package/dist/productionRuntime.js.map +1 -0
  360. package/dist/profileStore.js +231 -0
  361. package/dist/profileStore.js.map +1 -0
  362. package/dist/redact.js +124 -0
  363. package/dist/redact.js.map +1 -0
  364. package/dist/searchOps.js +186 -0
  365. package/dist/searchOps.js.map +1 -0
  366. package/dist/selfTestOps.js +786 -0
  367. package/dist/selfTestOps.js.map +1 -0
  368. package/dist/semantic/budgets.js +12 -0
  369. package/dist/semantic/budgets.js.map +1 -0
  370. package/dist/semantic/builtin/typescriptAssets.js +68 -0
  371. package/dist/semantic/builtin/typescriptAssets.js.map +1 -0
  372. package/dist/semantic/builtin/typescriptProvider.js +211 -0
  373. package/dist/semantic/builtin/typescriptProvider.js.map +1 -0
  374. package/dist/semantic/builtin/typescriptWorker.js +365 -0
  375. package/dist/semantic/builtin/typescriptWorker.js.map +1 -0
  376. package/dist/semantic/diffPreview.js +36 -0
  377. package/dist/semantic/diffPreview.js.map +1 -0
  378. package/dist/semantic/index.js +11 -0
  379. package/dist/semantic/index.js.map +1 -0
  380. package/dist/semantic/manager.js +522 -0
  381. package/dist/semantic/manager.js.map +1 -0
  382. package/dist/semantic/positions.js +86 -0
  383. package/dist/semantic/positions.js.map +1 -0
  384. package/dist/semantic/previewStore.js +276 -0
  385. package/dist/semantic/previewStore.js.map +1 -0
  386. package/dist/semantic/projectResolver.js +309 -0
  387. package/dist/semantic/projectResolver.js.map +1 -0
  388. package/dist/semantic/sourceSnapshot.js +54 -0
  389. package/dist/semantic/sourceSnapshot.js.map +1 -0
  390. package/dist/semantic/status.js +46 -0
  391. package/dist/semantic/status.js.map +1 -0
  392. package/dist/semantic/types.js +2 -0
  393. package/dist/semantic/types.js.map +1 -0
  394. package/dist/server.js +8676 -0
  395. package/dist/server.js.map +1 -0
  396. package/dist/stdio.js +64 -0
  397. package/dist/stdio.js.map +1 -0
  398. package/dist/toolCardWidget.js +2000 -0
  399. package/dist/toolCardWidget.js.map +1 -0
  400. package/dist/tools/contracts/catalog.js +111 -0
  401. package/dist/tools/contracts/catalog.js.map +1 -0
  402. package/dist/tools/contracts/index.js +8 -0
  403. package/dist/tools/contracts/index.js.map +1 -0
  404. package/dist/tools/contracts/registration.js +27 -0
  405. package/dist/tools/contracts/registration.js.map +1 -0
  406. package/dist/tools/contracts/schemas.js +11 -0
  407. package/dist/tools/contracts/schemas.js.map +1 -0
  408. package/dist/tools/contracts/types.js +2 -0
  409. package/dist/tools/contracts/types.js.map +1 -0
  410. package/dist/tools/contracts/v3.js +76 -0
  411. package/dist/tools/contracts/v3.js.map +1 -0
  412. package/dist/tools/contracts/v4.js +39 -0
  413. package/dist/tools/contracts/v4.js.map +1 -0
  414. package/dist/tools/contracts/v5.js +20 -0
  415. package/dist/tools/contracts/v5.js.map +1 -0
  416. package/dist/tools/phase3dServer.js +350 -0
  417. package/dist/tools/phase3dServer.js.map +1 -0
  418. package/dist/tools/schemas/applyPatch.js +388 -0
  419. package/dist/tools/schemas/applyPatch.js.map +1 -0
  420. package/dist/tools/schemas/bash.js +202 -0
  421. package/dist/tools/schemas/bash.js.map +1 -0
  422. package/dist/tools/schemas/closeWorkspace.js +105 -0
  423. package/dist/tools/schemas/closeWorkspace.js.map +1 -0
  424. package/dist/tools/schemas/codexContext.js +402 -0
  425. package/dist/tools/schemas/codexContext.js.map +1 -0
  426. package/dist/tools/schemas/codexSessions.js +328 -0
  427. package/dist/tools/schemas/codexSessions.js.map +1 -0
  428. package/dist/tools/schemas/codexgpt.js +1068 -0
  429. package/dist/tools/schemas/codexgpt.js.map +1 -0
  430. package/dist/tools/schemas/codexgptInventory.js +359 -0
  431. package/dist/tools/schemas/codexgptInventory.js.map +1 -0
  432. package/dist/tools/schemas/codexgptSelfTest.js +563 -0
  433. package/dist/tools/schemas/codexgptSelfTest.js.map +1 -0
  434. package/dist/tools/schemas/codexpro.js +917 -0
  435. package/dist/tools/schemas/codexpro.js.map +1 -0
  436. package/dist/tools/schemas/codexproInventory.js +352 -0
  437. package/dist/tools/schemas/codexproInventory.js.map +1 -0
  438. package/dist/tools/schemas/codexproSelfTest.js +546 -0
  439. package/dist/tools/schemas/codexproSelfTest.js.map +1 -0
  440. package/dist/tools/schemas/common.js +21 -0
  441. package/dist/tools/schemas/common.js.map +1 -0
  442. package/dist/tools/schemas/createTaskWorktree.js +51 -0
  443. package/dist/tools/schemas/createTaskWorktree.js.map +1 -0
  444. package/dist/tools/schemas/edit.js +321 -0
  445. package/dist/tools/schemas/edit.js.map +1 -0
  446. package/dist/tools/schemas/execution.js +330 -0
  447. package/dist/tools/schemas/execution.js.map +1 -0
  448. package/dist/tools/schemas/exportProContext.js +370 -0
  449. package/dist/tools/schemas/exportProContext.js.map +1 -0
  450. package/dist/tools/schemas/getTaskWorktree.js +19 -0
  451. package/dist/tools/schemas/getTaskWorktree.js.map +1 -0
  452. package/dist/tools/schemas/gitBranch.js +42 -0
  453. package/dist/tools/schemas/gitBranch.js.map +1 -0
  454. package/dist/tools/schemas/gitCommit.js +40 -0
  455. package/dist/tools/schemas/gitCommit.js.map +1 -0
  456. package/dist/tools/schemas/gitCreateBranch.js +22 -0
  457. package/dist/tools/schemas/gitCreateBranch.js.map +1 -0
  458. package/dist/tools/schemas/gitDiff.js +222 -0
  459. package/dist/tools/schemas/gitDiff.js.map +1 -0
  460. package/dist/tools/schemas/gitLog.js +41 -0
  461. package/dist/tools/schemas/gitLog.js.map +1 -0
  462. package/dist/tools/schemas/gitRestore.js +47 -0
  463. package/dist/tools/schemas/gitRestore.js.map +1 -0
  464. package/dist/tools/schemas/gitStage.js +33 -0
  465. package/dist/tools/schemas/gitStage.js.map +1 -0
  466. package/dist/tools/schemas/gitStash.js +102 -0
  467. package/dist/tools/schemas/gitStash.js.map +1 -0
  468. package/dist/tools/schemas/gitStatus.js +226 -0
  469. package/dist/tools/schemas/gitStatus.js.map +1 -0
  470. package/dist/tools/schemas/gitV4Common.js +205 -0
  471. package/dist/tools/schemas/gitV4Common.js.map +1 -0
  472. package/dist/tools/schemas/guidance.js +40 -0
  473. package/dist/tools/schemas/guidance.js.map +1 -0
  474. package/dist/tools/schemas/handoffToAgent.js +276 -0
  475. package/dist/tools/schemas/handoffToAgent.js.map +1 -0
  476. package/dist/tools/schemas/handoffToCodex.js +137 -0
  477. package/dist/tools/schemas/handoffToCodex.js.map +1 -0
  478. package/dist/tools/schemas/inspectWorkspace.js +379 -0
  479. package/dist/tools/schemas/inspectWorkspace.js.map +1 -0
  480. package/dist/tools/schemas/listTaskWorktrees.js +21 -0
  481. package/dist/tools/schemas/listTaskWorktrees.js.map +1 -0
  482. package/dist/tools/schemas/listWorkspaces.js +134 -0
  483. package/dist/tools/schemas/listWorkspaces.js.map +1 -0
  484. package/dist/tools/schemas/loadSkill.js +619 -0
  485. package/dist/tools/schemas/loadSkill.js.map +1 -0
  486. package/dist/tools/schemas/mergeTaskWorktree.js +105 -0
  487. package/dist/tools/schemas/mergeTaskWorktree.js.map +1 -0
  488. package/dist/tools/schemas/movePaths.js +175 -0
  489. package/dist/tools/schemas/movePaths.js.map +1 -0
  490. package/dist/tools/schemas/openCurrentWorkspace.js +174 -0
  491. package/dist/tools/schemas/openCurrentWorkspace.js.map +1 -0
  492. package/dist/tools/schemas/openFullAccessWorkspace.js +81 -0
  493. package/dist/tools/schemas/openFullAccessWorkspace.js.map +1 -0
  494. package/dist/tools/schemas/openWorkspace.js +193 -0
  495. package/dist/tools/schemas/openWorkspace.js.map +1 -0
  496. package/dist/tools/schemas/queryAuditEvents.js +193 -0
  497. package/dist/tools/schemas/queryAuditEvents.js.map +1 -0
  498. package/dist/tools/schemas/read.js +199 -0
  499. package/dist/tools/schemas/read.js.map +1 -0
  500. package/dist/tools/schemas/readCodexSession.js +353 -0
  501. package/dist/tools/schemas/readCodexSession.js.map +1 -0
  502. package/dist/tools/schemas/readHandoff.js +446 -0
  503. package/dist/tools/schemas/readHandoff.js.map +1 -0
  504. package/dist/tools/schemas/removeTaskWorktree.js +40 -0
  505. package/dist/tools/schemas/removeTaskWorktree.js.map +1 -0
  506. package/dist/tools/schemas/search.js +235 -0
  507. package/dist/tools/schemas/search.js.map +1 -0
  508. package/dist/tools/schemas/semantic.js +195 -0
  509. package/dist/tools/schemas/semantic.js.map +1 -0
  510. package/dist/tools/schemas/serverConfig.js +157 -0
  511. package/dist/tools/schemas/serverConfig.js.map +1 -0
  512. package/dist/tools/schemas/showChanges.js +283 -0
  513. package/dist/tools/schemas/showChanges.js.map +1 -0
  514. package/dist/tools/schemas/transactionResult.js +11 -0
  515. package/dist/tools/schemas/transactionResult.js.map +1 -0
  516. package/dist/tools/schemas/tree.js +136 -0
  517. package/dist/tools/schemas/tree.js.map +1 -0
  518. package/dist/tools/schemas/undoChangeSet.js +152 -0
  519. package/dist/tools/schemas/undoChangeSet.js.map +1 -0
  520. package/dist/tools/schemas/waitForHandoff.js +462 -0
  521. package/dist/tools/schemas/waitForHandoff.js.map +1 -0
  522. package/dist/tools/schemas/workspaceSnapshot.js +145 -0
  523. package/dist/tools/schemas/workspaceSnapshot.js.map +1 -0
  524. package/dist/tools/schemas/write.js +285 -0
  525. package/dist/tools/schemas/write.js.map +1 -0
  526. package/dist/transactions/atomicFs.js +438 -0
  527. package/dist/transactions/atomicFs.js.map +1 -0
  528. package/dist/transactions/atomicStateFile.js +190 -0
  529. package/dist/transactions/atomicStateFile.js.map +1 -0
  530. package/dist/transactions/engine.js +574 -0
  531. package/dist/transactions/engine.js.map +1 -0
  532. package/dist/transactions/index.js +12 -0
  533. package/dist/transactions/index.js.map +1 -0
  534. package/dist/transactions/installation.js +158 -0
  535. package/dist/transactions/installation.js.map +1 -0
  536. package/dist/transactions/manifestV2Store.js +96 -0
  537. package/dist/transactions/manifestV2Store.js.map +1 -0
  538. package/dist/transactions/participantRecovery.js +98 -0
  539. package/dist/transactions/participantRecovery.js.map +1 -0
  540. package/dist/transactions/recovery.js +513 -0
  541. package/dist/transactions/recovery.js.map +1 -0
  542. package/dist/transactions/schemas.js +365 -0
  543. package/dist/transactions/schemas.js.map +1 -0
  544. package/dist/transactions/stateRoot.js +63 -0
  545. package/dist/transactions/stateRoot.js.map +1 -0
  546. package/dist/transactions/types.js +11 -0
  547. package/dist/transactions/types.js.map +1 -0
  548. package/dist/transactions/workspaceLock.js +201 -0
  549. package/dist/transactions/workspaceLock.js.map +1 -0
  550. package/dist/workspaceOps.js +924 -0
  551. package/dist/workspaceOps.js.map +1 -0
  552. package/dist/worktrees/candidateWorkspace.js +566 -0
  553. package/dist/worktrees/candidateWorkspace.js.map +1 -0
  554. package/dist/worktrees/manager.js +258 -0
  555. package/dist/worktrees/manager.js.map +1 -0
  556. package/dist/worktrees/materializer.js +60 -0
  557. package/dist/worktrees/materializer.js.map +1 -0
  558. package/dist/worktrees/mergeExecute.js +498 -0
  559. package/dist/worktrees/mergeExecute.js.map +1 -0
  560. package/dist/worktrees/mergePlanStore.js +247 -0
  561. package/dist/worktrees/mergePlanStore.js.map +1 -0
  562. package/dist/worktrees/mergePrepare.js +709 -0
  563. package/dist/worktrees/mergePrepare.js.map +1 -0
  564. package/dist/worktrees/recovery.js +294 -0
  565. package/dist/worktrees/recovery.js.map +1 -0
  566. package/dist/worktrees/remove.js +296 -0
  567. package/dist/worktrees/remove.js.map +1 -0
  568. package/dist/worktrees/remover.js +57 -0
  569. package/dist/worktrees/remover.js.map +1 -0
  570. package/dist/worktrees/root.js +47 -0
  571. package/dist/worktrees/root.js.map +1 -0
  572. package/dist/worktrees/service.js +245 -0
  573. package/dist/worktrees/service.js.map +1 -0
  574. package/dist/worktrees/store.js +156 -0
  575. package/dist/worktrees/store.js.map +1 -0
  576. package/dist/worktrees/treeManifest.js +106 -0
  577. package/dist/worktrees/treeManifest.js.map +1 -0
  578. package/dist/worktrees/verificationReceipts.js +215 -0
  579. package/dist/worktrees/verificationReceipts.js.map +1 -0
  580. package/dist/worktrees/verificationTerminal.js +23 -0
  581. package/dist/worktrees/verificationTerminal.js.map +1 -0
  582. package/dist/worktrees/workspaceAuthority.js +64 -0
  583. package/dist/worktrees/workspaceAuthority.js.map +1 -0
  584. package/docs/favicon.svg +5 -0
  585. package/docs/index.html +624 -0
  586. package/docs/og.svg +52 -0
  587. package/docs/script.js +33 -0
  588. package/docs/star.svg +11 -0
  589. package/docs/styles.css +1571 -0
  590. package/docs/zh.html +428 -0
  591. package/package.json +121 -0
  592. package/scripts/analysis-cli-smoke.mjs +81 -0
  593. package/scripts/analysis-smoke.mjs +179 -0
  594. package/scripts/atomic-file.mjs +137 -0
  595. package/scripts/ci-change-classifier.mjs +59 -0
  596. package/scripts/ci-failure-summary.mjs +92 -0
  597. package/scripts/cloudflared-installer.mjs +215 -0
  598. package/scripts/cloudflared-release.mjs +63 -0
  599. package/scripts/codexgpt-entry.mjs +235 -0
  600. package/scripts/codexgpt.mjs +4987 -0
  601. package/scripts/connector-auth-output-shim.cjs +66 -0
  602. package/scripts/doctor-smoke.mjs +90 -0
  603. package/scripts/doctor.mjs +165 -0
  604. package/scripts/exact-head-ci.mjs +126 -0
  605. package/scripts/execute-handoff-smoke-platform-compat.mjs +38 -0
  606. package/scripts/execute-handoff-smoke.mjs +1117 -0
  607. package/scripts/g8-u-live-probe.mjs +208 -0
  608. package/scripts/http-smoke-compat.mjs +151 -0
  609. package/scripts/http-smoke.mjs +776 -0
  610. package/scripts/long-task-runner.mjs +1037 -0
  611. package/scripts/oauth-admin.mjs +1608 -0
  612. package/scripts/output-bounds.mjs +29 -0
  613. package/scripts/owned-temp-root.d.mts +50 -0
  614. package/scripts/owned-temp-root.mjs +567 -0
  615. package/scripts/phase-4a-smoke.mjs +36 -0
  616. package/scripts/policy-windows-spike.mjs +135 -0
  617. package/scripts/pro-apply.mjs +152 -0
  618. package/scripts/pro-bundle.mjs +121 -0
  619. package/scripts/pro-smoke.mjs +97 -0
  620. package/scripts/process-identity.mjs +67 -0
  621. package/scripts/repository-policy.mjs +166 -0
  622. package/scripts/run-and-summarize.mjs +134 -0
  623. package/scripts/run-smoke.mjs +52 -0
  624. package/scripts/run-with-cleanup.mjs +98 -0
  625. package/scripts/settings-smoke-platform-compat.mjs +85 -0
  626. package/scripts/settings-smoke.mjs +769 -0
  627. package/scripts/smoke-platform-compat.mjs +302 -0
  628. package/scripts/smoke.mjs +1180 -0
  629. package/scripts/stress-contract-compat.mjs +94 -0
  630. package/scripts/stress.mjs +882 -0
  631. package/scripts/test-domains.mjs +247 -0
  632. package/scripts/test-execution-profile-manifest.mjs +273 -0
  633. package/scripts/test-execution-profiles.mjs +147 -0
  634. package/scripts/test-performance-reporter.mjs +291 -0
  635. package/scripts/toolchain-manager.mjs +266 -0
  636. package/scripts/toolchains.json +19 -0
  637. package/scripts/windows-conpty-probe-child.mjs +82 -0
  638. package/scripts/windows-conpty-worker.ps1 +24 -0
  639. package/scripts/windows-credential-host-manifest.json +16 -0
  640. package/scripts/windows-credential-host-protocol-v1.json +16 -0
  641. package/scripts/windows-credential-host.cs +256 -0
  642. package/scripts/windows-credential-host.ps1 +26 -0
  643. package/scripts/windows-local-control-manifest.json +23 -0
  644. package/scripts/windows-local-control-spike.cs +738 -0
  645. package/scripts/windows-local-control-spike.mjs +415 -0
  646. package/scripts/windows-local-control-spike.ps1 +35 -0
  647. package/scripts/windows-local-control.cs +738 -0
  648. package/scripts/windows-local-control.ps1 +35 -0
  649. package/scripts/windows-native-api-inventory-v1.json +90 -0
  650. package/scripts/windows-process-host-manifest.json +20 -0
  651. package/scripts/windows-process-host-protocol-v1.json +59 -0
  652. package/scripts/windows-process-host.cs +2385 -0
  653. package/scripts/windows-process-host.ps1 +59 -0
  654. package/scripts/windows-realpath-shim.cjs +78 -0
@@ -0,0 +1,733 @@
1
+ import fsp from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { createInterface } from "node:readline";
5
+ import { CodexGPTError } from "./guard.js";
6
+ import { redactSensitiveText } from "./redact.js";
7
+ import { compareCodexSessions } from "./tools/schemas/codexSessions.js";
8
+ import { READ_CODEX_SESSION_MESSAGE_TRUNCATION_MARKER } from "./tools/schemas/readCodexSession.js";
9
+ const CODEX_IDE_CONTEXT_PREFIX = "# Context from my IDE setup:";
10
+ const CODEX_REQUEST_MARKER = "my request for codex";
11
+ const UUID_RE = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i;
12
+ const META_HEAD_BYTES = 64 * 1024;
13
+ const META_TAIL_BYTES = 64 * 1024;
14
+ export const CODEX_SESSION_SCAN_FILE_LIMIT = 3000;
15
+ export const CODEX_SESSION_SCAN_DEPTH_LIMIT = 6;
16
+ export const CODEX_SESSION_READ_FILE_LIMIT = 20_000_000;
17
+ const CODEX_SESSION_READ_OPERATION_ERROR = Symbol.for("codexgpt.CodexSessionReadOperationError");
18
+ export class CodexSessionReadOperationError extends Error {
19
+ code;
20
+ details;
21
+ constructor(code, details) {
22
+ super(code);
23
+ this.code = code;
24
+ this.details = details;
25
+ this.name = "CodexSessionReadOperationError";
26
+ Object.defineProperty(this, CODEX_SESSION_READ_OPERATION_ERROR, {
27
+ value: true
28
+ });
29
+ }
30
+ }
31
+ export function isCodexSessionReadOperationError(error) {
32
+ return error instanceof CodexSessionReadOperationError || (typeof error === "object" &&
33
+ error !== null &&
34
+ error[CODEX_SESSION_READ_OPERATION_ERROR] === true);
35
+ }
36
+ export function codexSessionDirectory(config) {
37
+ return path.resolve(config.codexDir || path.join(os.homedir(), ".codex"));
38
+ }
39
+ export function codexSessionRoots(config) {
40
+ const root = codexSessionDirectory(config);
41
+ return [path.join(root, "sessions"), path.join(root, "archived_sessions")];
42
+ }
43
+ function ensureEnabled(config, read = false) {
44
+ if (config.codexSessions === "off") {
45
+ throw new CodexGPTError("Codex session tools are disabled. Start with --codex-sessions metadata or --codex-sessions read to opt in.");
46
+ }
47
+ if (read && config.codexSessions !== "read") {
48
+ throw new CodexGPTError("Reading Codex session transcripts is disabled. Start with --codex-sessions read to opt in.");
49
+ }
50
+ }
51
+ function isSubpath(child, parent) {
52
+ const relative = path.relative(parent, child);
53
+ return relative === "" || (relative !== ".." &&
54
+ !relative.startsWith(`..${path.sep}`) &&
55
+ !path.isAbsolute(relative));
56
+ }
57
+ function isStrictSubpath(child, parent) {
58
+ return path.relative(parent, child) !== "" && isSubpath(child, parent);
59
+ }
60
+ function errorCode(error) {
61
+ if (!error || typeof error !== "object" || !("code" in error))
62
+ return undefined;
63
+ const code = error.code;
64
+ return typeof code === "string" ? code : undefined;
65
+ }
66
+ async function collectJsonlFiles(root, storage, collection, maxDepth, maxFiles, depth = 0) {
67
+ let entries;
68
+ try {
69
+ entries = await fsp.readdir(root, { withFileTypes: true });
70
+ }
71
+ catch (error) {
72
+ if (errorCode(error) !== "ENOENT")
73
+ collection.truncated = true;
74
+ return;
75
+ }
76
+ entries.sort((left, right) => left.name === right.name ? 0 : left.name < right.name ? -1 : 1);
77
+ for (const entry of entries) {
78
+ const fullPath = path.join(root, entry.name);
79
+ if (collection.files.length >= maxFiles) {
80
+ if (entry.isDirectory() || (entry.isFile() && entry.name.endsWith(".jsonl"))) {
81
+ collection.truncated = true;
82
+ return;
83
+ }
84
+ continue;
85
+ }
86
+ if (entry.isDirectory()) {
87
+ if (depth >= maxDepth) {
88
+ collection.truncated = true;
89
+ continue;
90
+ }
91
+ await collectJsonlFiles(fullPath, storage, collection, maxDepth, maxFiles, depth + 1);
92
+ }
93
+ else if (entry.isFile() && entry.name.endsWith(".jsonl")) {
94
+ collection.files.push({ path: fullPath, storage });
95
+ }
96
+ }
97
+ }
98
+ async function readFileSlice(filePath, start, length) {
99
+ if (length <= 0)
100
+ return "";
101
+ const handle = await fsp.open(filePath, "r");
102
+ try {
103
+ const buffer = Buffer.alloc(length);
104
+ const { bytesRead } = await handle.read(buffer, 0, length, start);
105
+ return buffer.subarray(0, bytesRead).toString("utf8");
106
+ }
107
+ finally {
108
+ await handle.close();
109
+ }
110
+ }
111
+ function splitJsonlLines(text) {
112
+ return text.split(/\r?\n/).filter((line) => line.length > 0);
113
+ }
114
+ async function readHeadTailLines(filePath, headLimit, tailLimit) {
115
+ const fileStat = await fsp.stat(filePath);
116
+ const headLength = Math.min(fileStat.size, META_HEAD_BYTES);
117
+ const tailOffset = Math.max(0, fileStat.size - META_TAIL_BYTES);
118
+ const tailLength = fileStat.size - tailOffset;
119
+ const [headText, tailText] = await Promise.all([
120
+ readFileSlice(filePath, 0, headLength),
121
+ tailOffset === 0 && tailLength === headLength ? Promise.resolve("") : readFileSlice(filePath, tailOffset, tailLength)
122
+ ]);
123
+ const headLines = splitJsonlLines(headText);
124
+ if (headLength < fileStat.size && !headText.endsWith("\n"))
125
+ headLines.pop();
126
+ const tailSource = tailText
127
+ ? tailOffset > 0
128
+ ? tailText.slice(Math.max(0, tailText.indexOf("\n") + 1))
129
+ : tailText
130
+ : headText;
131
+ const tailLines = splitJsonlLines(tailSource);
132
+ return {
133
+ head: headLines.slice(0, headLimit),
134
+ tail: tailLines.slice(-tailLimit)
135
+ };
136
+ }
137
+ function parseTimestamp(value) {
138
+ if (typeof value === "number" &&
139
+ Number.isSafeInteger(value) &&
140
+ value >= 0)
141
+ return value;
142
+ if (typeof value !== "string" || !value.trim())
143
+ return undefined;
144
+ const parsed = Date.parse(value);
145
+ return Number.isSafeInteger(parsed) && parsed >= 0 ? parsed : undefined;
146
+ }
147
+ function extractText(value) {
148
+ if (typeof value === "string")
149
+ return value;
150
+ if (Array.isArray(value)) {
151
+ return value.map((item) => {
152
+ if (typeof item === "string")
153
+ return item;
154
+ if (item && typeof item === "object" && "text" in item)
155
+ return String(item.text ?? "");
156
+ return "";
157
+ }).filter(Boolean).join("\n");
158
+ }
159
+ if (value && typeof value === "object" && "text" in value) {
160
+ return String(value.text ?? "");
161
+ }
162
+ return "";
163
+ }
164
+ function truncate(text, max) {
165
+ const clean = text
166
+ .replace(/[\u0000-\u001f\u007f]+/g, " ")
167
+ .replace(/\s+/g, " ")
168
+ .trim();
169
+ if (clean.length <= max)
170
+ return clean;
171
+ return `${clean.slice(0, Math.max(0, max - 1)).trimEnd()}…`;
172
+ }
173
+ function safeAbsoluteMetadataPath(value) {
174
+ if (typeof value !== "string")
175
+ return undefined;
176
+ if (value.length === 0 ||
177
+ value.length > 4096 ||
178
+ value.trim() !== value ||
179
+ /[\r\n\u0000-\u001f\u007f]/.test(value) ||
180
+ !path.isAbsolute(value))
181
+ return undefined;
182
+ return path.resolve(value);
183
+ }
184
+ function basename(value) {
185
+ if (!value)
186
+ return undefined;
187
+ const cleaned = value.replace(/[\\/]+$/, "");
188
+ const base = path.basename(cleaned);
189
+ return base || undefined;
190
+ }
191
+ function codexRequestHeadingPayload(line) {
192
+ const trimmed = line.trim();
193
+ if (!trimmed.startsWith("#"))
194
+ return null;
195
+ const heading = trimmed.replace(/^#+\s*/, "");
196
+ const lowered = heading.toLowerCase();
197
+ if (!lowered.startsWith(CODEX_REQUEST_MARKER))
198
+ return null;
199
+ const suffix = heading.slice(CODEX_REQUEST_MARKER.length).trimStart();
200
+ if (!suffix)
201
+ return "";
202
+ if (!/^[::\-—]/.test(suffix))
203
+ return null;
204
+ return suffix.replace(/^[::\-—\s]+/, "").trim();
205
+ }
206
+ function extractCodexGPTmptFromIdeContext(text) {
207
+ const trimmed = text.trim();
208
+ if (!trimmed.startsWith(CODEX_IDE_CONTEXT_PREFIX))
209
+ return undefined;
210
+ const lines = trimmed.replace(/\r\n/g, "\n").split("\n");
211
+ let prompt;
212
+ for (const [index, line] of lines.entries()) {
213
+ const inline = codexRequestHeadingPayload(line);
214
+ if (inline === null)
215
+ continue;
216
+ if (inline) {
217
+ prompt = inline;
218
+ continue;
219
+ }
220
+ const following = lines.slice(index + 1).join("\n").trim();
221
+ prompt = following || undefined;
222
+ }
223
+ return prompt;
224
+ }
225
+ function titleCandidateFromUserMessage(text) {
226
+ const trimmed = text.trim();
227
+ if (!trimmed || trimmed.startsWith("# AGENTS.md") || trimmed.startsWith("<environment_context>"))
228
+ return undefined;
229
+ if (trimmed.startsWith(CODEX_IDE_CONTEXT_PREFIX))
230
+ return extractCodexGPTmptFromIdeContext(trimmed);
231
+ return trimmed;
232
+ }
233
+ function inferSessionIdFromFilename(filePath) {
234
+ const match = path.basename(filePath).match(UUID_RE);
235
+ return match?.[0]?.toLowerCase();
236
+ }
237
+ function normalizeSessionId(value) {
238
+ if (typeof value !== "string")
239
+ return undefined;
240
+ const normalized = value.trim().toLowerCase();
241
+ return UUID_RE.test(normalized) && normalized.length === 36
242
+ ? normalized
243
+ : undefined;
244
+ }
245
+ function parseJsonLine(line) {
246
+ try {
247
+ return JSON.parse(line);
248
+ }
249
+ catch {
250
+ return undefined;
251
+ }
252
+ }
253
+ function isSubagentSource(payload) {
254
+ return Boolean(payload?.source && typeof payload.source === "object" && "subagent" in payload.source);
255
+ }
256
+ async function parseSessionMeta(filePath, storage) {
257
+ const { head, tail } = await readHeadTailLines(filePath, 16, 48);
258
+ let sessionId;
259
+ let projectDir;
260
+ let createdAt;
261
+ let firstUserMessage;
262
+ for (const line of head) {
263
+ const value = parseJsonLine(line);
264
+ if (!value)
265
+ continue;
266
+ createdAt ??= parseTimestamp(value.timestamp);
267
+ if (value.type === "session_meta" && value.payload) {
268
+ if (isSubagentSource(value.payload))
269
+ return undefined;
270
+ sessionId ??= normalizeSessionId(value.payload.id ?? value.payload.session_id ?? value.payload.sessionId);
271
+ projectDir ??= safeAbsoluteMetadataPath(value.payload.cwd ?? value.payload.project_dir ?? value.payload.projectDir);
272
+ createdAt ??= parseTimestamp(value.payload.timestamp);
273
+ }
274
+ if (!firstUserMessage && value.type === "response_item" && value.payload?.type === "message" && value.payload?.role === "user") {
275
+ const text = extractText(value.payload.content);
276
+ firstUserMessage = titleCandidateFromUserMessage(text);
277
+ }
278
+ }
279
+ let lastActiveAt;
280
+ for (const line of [...tail].reverse()) {
281
+ const value = parseJsonLine(line);
282
+ if (!value)
283
+ continue;
284
+ lastActiveAt ??= parseTimestamp(value.timestamp);
285
+ if (lastActiveAt)
286
+ break;
287
+ }
288
+ const id = sessionId ?? inferSessionIdFromFilename(filePath);
289
+ if (!id)
290
+ return undefined;
291
+ const titleSource = firstUserMessage ?? basename(projectDir);
292
+ const title = titleSource ? truncate(titleSource, 96) : undefined;
293
+ const sourcePath = path.resolve(filePath);
294
+ if (sourcePath.length > 4096)
295
+ return undefined;
296
+ return {
297
+ provider_id: "codex",
298
+ session_id: id,
299
+ storage,
300
+ title: title ?? null,
301
+ project_dir: projectDir ?? null,
302
+ created_at: createdAt ?? null,
303
+ last_active_at: lastActiveAt ?? null,
304
+ source_path: sourcePath,
305
+ resume_command: `codex resume ${id}`
306
+ };
307
+ }
308
+ async function collectSessionMetas(config, scanFileLimit = CODEX_SESSION_SCAN_FILE_LIMIT, scanDepthLimit = CODEX_SESSION_SCAN_DEPTH_LIMIT) {
309
+ const collection = { files: [], truncated: false };
310
+ const roots = codexSessionRoots(config);
311
+ for (const [index, root] of roots.entries()) {
312
+ await collectJsonlFiles(root, index === 0 ? "active" : "archived", collection, scanDepthLimit, scanFileLimit);
313
+ }
314
+ const parsedSessions = [];
315
+ let excludedFileCount = 0;
316
+ for (const candidate of collection.files) {
317
+ const meta = await parseSessionMeta(candidate.path, candidate.storage)
318
+ .catch(() => undefined);
319
+ if (meta)
320
+ parsedSessions.push(meta);
321
+ else
322
+ excludedFileCount += 1;
323
+ }
324
+ parsedSessions.sort(compareCodexSessions);
325
+ const sessions = [];
326
+ const seenIds = new Set();
327
+ let duplicateFileCount = 0;
328
+ for (const session of parsedSessions) {
329
+ if (seenIds.has(session.session_id)) {
330
+ duplicateFileCount += 1;
331
+ continue;
332
+ }
333
+ seenIds.add(session.session_id);
334
+ sessions.push(session);
335
+ }
336
+ return {
337
+ sessions,
338
+ scannedFileCount: collection.files.length,
339
+ indexedSessionCount: sessions.length,
340
+ excludedFileCount,
341
+ duplicateFileCount,
342
+ discoveryTruncated: collection.truncated
343
+ };
344
+ }
345
+ export async function listCodexSessions(config, options = {}) {
346
+ ensureEnabled(config);
347
+ const roots = codexSessionRoots(config);
348
+ const scanFileLimit = Math.max(1, Math.min(Number.isSafeInteger(options.scanFileLimit)
349
+ ? Number(options.scanFileLimit)
350
+ : CODEX_SESSION_SCAN_FILE_LIMIT, CODEX_SESSION_SCAN_FILE_LIMIT));
351
+ const scanDepthLimit = Math.max(0, Math.min(Number.isSafeInteger(options.scanDepthLimit)
352
+ ? Number(options.scanDepthLimit)
353
+ : CODEX_SESSION_SCAN_DEPTH_LIMIT, CODEX_SESSION_SCAN_DEPTH_LIMIT));
354
+ const index = await collectSessionMetas(config, scanFileLimit, scanDepthLimit);
355
+ const query = options.query?.trim().toLowerCase();
356
+ const filtered = query
357
+ ? index.sessions.filter((session) => [
358
+ session.session_id,
359
+ session.title,
360
+ session.project_dir,
361
+ session.source_path
362
+ ].filter(Boolean).join("\n").toLowerCase().includes(query))
363
+ : index.sessions;
364
+ const maxSessions = Math.max(1, Math.min(Number(options.maxSessions ?? 30), 200));
365
+ return {
366
+ codex_dir: codexSessionDirectory(config),
367
+ roots,
368
+ scan_file_limit: scanFileLimit,
369
+ scan_depth_limit: scanDepthLimit,
370
+ scanned_file_count: index.scannedFileCount,
371
+ indexed_session_count: index.indexedSessionCount,
372
+ excluded_file_count: index.excludedFileCount,
373
+ duplicate_file_count: index.duplicateFileCount,
374
+ sessions: filtered.slice(0, maxSessions),
375
+ total_found: filtered.length,
376
+ discovery_truncated: index.discoveryTruncated
377
+ };
378
+ }
379
+ function readOperationError(code, details = {}) {
380
+ return new CodexSessionReadOperationError(code, details);
381
+ }
382
+ async function canonicalHistoryRoots(config) {
383
+ const roots = codexSessionRoots(config);
384
+ const canonical = [];
385
+ for (const root of roots) {
386
+ try {
387
+ canonical.push(await fsp.realpath(root));
388
+ }
389
+ catch (error) {
390
+ if (errorCode(error) === "ENOENT")
391
+ canonical.push(path.resolve(root));
392
+ else
393
+ throw readOperationError("SESSION_READ_FAILED");
394
+ }
395
+ }
396
+ return [canonical[0], canonical[1]];
397
+ }
398
+ async function canonicalSessionReadPath(sourcePath, root, selector) {
399
+ let canonical;
400
+ try {
401
+ canonical = await fsp.realpath(sourcePath);
402
+ }
403
+ catch (error) {
404
+ if (errorCode(error) === "ENOENT") {
405
+ throw readOperationError("SESSION_NOT_FOUND", { selector });
406
+ }
407
+ throw readOperationError("SESSION_READ_FAILED");
408
+ }
409
+ if (!isStrictSubpath(canonical, root)) {
410
+ throw readOperationError("SOURCE_PATH_OUTSIDE_ROOTS");
411
+ }
412
+ return canonical;
413
+ }
414
+ async function resolveSessionSource(config, sessionId, sourcePath, scanFileLimit, scanDepthLimit) {
415
+ ensureEnabled(config, true);
416
+ const lexicalRoots = codexSessionRoots(config);
417
+ const canonicalRoots = await canonicalHistoryRoots(config);
418
+ if (sourcePath) {
419
+ const rootIndex = lexicalRoots.findIndex((root) => isStrictSubpath(sourcePath, root));
420
+ if (rootIndex < 0) {
421
+ throw readOperationError("SOURCE_PATH_OUTSIDE_ROOTS");
422
+ }
423
+ const readPath = await canonicalSessionReadPath(sourcePath, canonicalRoots[rootIndex], "source_path");
424
+ let meta;
425
+ try {
426
+ meta = await parseSessionMeta(sourcePath, rootIndex === 0 ? "active" : "archived");
427
+ }
428
+ catch {
429
+ throw readOperationError("SESSION_READ_FAILED");
430
+ }
431
+ if (!meta)
432
+ throw readOperationError("SESSION_READ_FAILED");
433
+ if (sessionId && meta.session_id !== sessionId) {
434
+ throw readOperationError("SESSION_ID_MISMATCH");
435
+ }
436
+ return { session: meta, readPath };
437
+ }
438
+ if (!sessionId)
439
+ throw new CodexGPTError("session_id or source_path is required.");
440
+ const index = await collectSessionMetas(config, scanFileLimit, scanDepthLimit);
441
+ const match = index.sessions.find((session) => session.session_id === sessionId);
442
+ if (!match) {
443
+ if (index.discoveryTruncated) {
444
+ throw readOperationError("SESSION_RESOLUTION_INCOMPLETE", {
445
+ selector: "session_id"
446
+ });
447
+ }
448
+ throw readOperationError("SESSION_NOT_FOUND", { selector: "session_id" });
449
+ }
450
+ const rootIndex = match.storage === "active" ? 0 : 1;
451
+ const readPath = await canonicalSessionReadPath(match.source_path, canonicalRoots[rootIndex], "session_id").catch((error) => {
452
+ if (error instanceof CodexSessionReadOperationError &&
453
+ error.code === "SESSION_NOT_FOUND") {
454
+ throw readOperationError("SESSION_READ_FAILED");
455
+ }
456
+ throw error;
457
+ });
458
+ return { session: match, readPath };
459
+ }
460
+ function normalizeTranscriptContent(value) {
461
+ return value
462
+ .replace(/\r\n?/g, "\n")
463
+ .replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]+/g, " ");
464
+ }
465
+ function normalizedTranscriptRole(value) {
466
+ return value === "user" ||
467
+ value === "assistant" ||
468
+ value === "developer" ||
469
+ value === "system" ||
470
+ value === "tool"
471
+ ? value
472
+ : "unknown";
473
+ }
474
+ function normalizedToolName(value) {
475
+ const normalized = normalizeTranscriptContent(String(value ?? ""))
476
+ .replace(/\s+/g, " ")
477
+ .trim();
478
+ return truncate(normalized || "unknown", 80);
479
+ }
480
+ function extractTranscriptEvent(value) {
481
+ if (value?.type !== "response_item" || !value.payload)
482
+ return undefined;
483
+ const payload = value.payload;
484
+ let kind;
485
+ let role;
486
+ let rawContent;
487
+ if (payload.type === "message") {
488
+ kind = "message";
489
+ role = normalizedTranscriptRole(payload.role);
490
+ rawContent = extractText(payload.content);
491
+ }
492
+ else if (payload.type === "function_call") {
493
+ kind = "function_call";
494
+ role = "assistant";
495
+ rawContent = `[Tool: ${normalizedToolName(payload.name)}]`;
496
+ }
497
+ else if (payload.type === "function_call_output") {
498
+ kind = "function_call_output";
499
+ role = "tool";
500
+ rawContent = String(payload.output ?? "");
501
+ }
502
+ else {
503
+ return undefined;
504
+ }
505
+ const normalized = normalizeTranscriptContent(rawContent);
506
+ if (!normalized.trim())
507
+ return undefined;
508
+ const content = redactSensitiveText(normalized);
509
+ return {
510
+ kind,
511
+ role,
512
+ timestamp: parseTimestamp(value.timestamp) ?? null,
513
+ content,
514
+ redacted: content !== normalized
515
+ };
516
+ }
517
+ function cappedTranscriptPrefix(text, maxBytes) {
518
+ const markerBytes = Buffer.byteLength(READ_CODEX_SESSION_MESSAGE_TRUNCATION_MARKER, "utf8");
519
+ const budget = maxBytes - markerBytes;
520
+ if (budget <= 0)
521
+ return undefined;
522
+ let low = 0;
523
+ let high = text.length;
524
+ while (low < high) {
525
+ const middle = Math.ceil((low + high) / 2);
526
+ let end = middle;
527
+ if (end > 0 &&
528
+ end < text.length &&
529
+ /[\uD800-\uDBFF]/.test(text[end - 1]))
530
+ end -= 1;
531
+ if (Buffer.byteLength(text.slice(0, end), "utf8") <= budget)
532
+ low = middle;
533
+ else
534
+ high = middle - 1;
535
+ }
536
+ let end = low;
537
+ if (end > 0 &&
538
+ end < text.length &&
539
+ /[\uD800-\uDBFF]/.test(text[end - 1]))
540
+ end -= 1;
541
+ while (end > 0 && Buffer.byteLength(text.slice(0, end), "utf8") > budget) {
542
+ end -= 1;
543
+ if (end > 0 && /[\uDC00-\uDFFF]/.test(text[end]))
544
+ end -= 1;
545
+ }
546
+ if (end <= 0)
547
+ return undefined;
548
+ return `${text.slice(0, end)}${READ_CODEX_SESSION_MESSAGE_TRUNCATION_MARKER}`;
549
+ }
550
+ async function loadSessionMessages(filePath, expectedSessionId, maxMessages, maxTotalBytes) {
551
+ let handle;
552
+ let stream;
553
+ let reader;
554
+ try {
555
+ handle = await fsp.open(filePath, "r");
556
+ const stat = await handle.stat();
557
+ if (!stat.isFile())
558
+ throw readOperationError("SESSION_READ_FAILED");
559
+ if (stat.size > CODEX_SESSION_READ_FILE_LIMIT) {
560
+ throw readOperationError("SESSION_FILE_TOO_LARGE", {
561
+ max_source_file_bytes: CODEX_SESSION_READ_FILE_LIMIT
562
+ });
563
+ }
564
+ const messages = [];
565
+ let usedBytes = 0;
566
+ let truncationReason = null;
567
+ if (stat.size === 0) {
568
+ return { sourceFileBytes: 0, messages, truncationReason };
569
+ }
570
+ stream = handle.createReadStream({
571
+ encoding: "utf8",
572
+ start: 0,
573
+ end: stat.size - 1,
574
+ autoClose: false
575
+ });
576
+ reader = createInterface({ input: stream, crlfDelay: Infinity });
577
+ for await (const line of reader) {
578
+ const value = parseJsonLine(line);
579
+ if (value?.type === "session_meta" && value.payload) {
580
+ const observedSessionId = normalizeSessionId(value.payload.id ?? value.payload.session_id ?? value.payload.sessionId);
581
+ if (observedSessionId && observedSessionId !== expectedSessionId) {
582
+ throw readOperationError("SESSION_READ_FAILED");
583
+ }
584
+ }
585
+ const event = extractTranscriptEvent(value);
586
+ if (!event)
587
+ continue;
588
+ if (messages.length >= maxMessages) {
589
+ truncationReason = "message_limit";
590
+ break;
591
+ }
592
+ const remainingBytes = maxTotalBytes - usedBytes;
593
+ const completeBytes = Buffer.byteLength(event.content, "utf8");
594
+ if (completeBytes <= remainingBytes) {
595
+ messages.push({
596
+ ordinal: messages.length + 1,
597
+ kind: event.kind,
598
+ role: event.role,
599
+ timestamp: event.timestamp,
600
+ content: event.content,
601
+ bytes: completeBytes,
602
+ redacted: event.redacted,
603
+ truncated: false
604
+ });
605
+ usedBytes += completeBytes;
606
+ continue;
607
+ }
608
+ const partial = cappedTranscriptPrefix(event.content, remainingBytes);
609
+ if (partial) {
610
+ const partialBytes = Buffer.byteLength(partial, "utf8");
611
+ messages.push({
612
+ ordinal: messages.length + 1,
613
+ kind: event.kind,
614
+ role: event.role,
615
+ timestamp: event.timestamp,
616
+ content: partial,
617
+ bytes: partialBytes,
618
+ redacted: event.redacted,
619
+ truncated: true
620
+ });
621
+ }
622
+ truncationReason = "byte_limit";
623
+ break;
624
+ }
625
+ return {
626
+ sourceFileBytes: stat.size,
627
+ messages,
628
+ truncationReason
629
+ };
630
+ }
631
+ catch (error) {
632
+ if (error instanceof CodexSessionReadOperationError)
633
+ throw error;
634
+ throw readOperationError("SESSION_READ_FAILED");
635
+ }
636
+ finally {
637
+ reader?.close();
638
+ stream?.destroy();
639
+ await handle?.close().catch(() => undefined);
640
+ }
641
+ }
642
+ function boundedInteger(value, fallback, minimum, maximum) {
643
+ if (!Number.isSafeInteger(value))
644
+ return fallback;
645
+ return Math.max(minimum, Math.min(Number(value), maximum));
646
+ }
647
+ function legacyReadText(result) {
648
+ const transcript = result.messages.map((message) => {
649
+ const when = message.timestamp !== null
650
+ ? ` ${new Date(message.timestamp).toISOString()}`
651
+ : "";
652
+ return `### ${message.role}${when}\n\n${message.content}`;
653
+ }).join("\n\n");
654
+ return [
655
+ "# Codex Session",
656
+ "",
657
+ `Session: ${result.session.session_id}`,
658
+ result.session.title ? `Title: ${result.session.title}` : "",
659
+ result.session.project_dir ? `CWD: ${result.session.project_dir}` : "",
660
+ `Source: ${result.session.source_path}`,
661
+ `Resume: ${result.session.resume_command}`,
662
+ result.truncated ? "Transcript truncated by configured limits." : "",
663
+ "",
664
+ "## Transcript",
665
+ "",
666
+ transcript || "No readable transcript messages found."
667
+ ].filter((line) => line !== "").join("\n");
668
+ }
669
+ function attachLegacyReadAccessors(value) {
670
+ const prototype = Object.create(null);
671
+ Object.defineProperties(prototype, {
672
+ content_bytes: {
673
+ get() {
674
+ return this.messages.reduce((total, message) => total + message.bytes, 0);
675
+ }
676
+ },
677
+ redacted_message_count: {
678
+ get() {
679
+ return this.messages.filter((message) => message.redacted).length;
680
+ }
681
+ },
682
+ truncated_message_count: {
683
+ get() {
684
+ return this.messages.filter((message) => message.truncated).length;
685
+ }
686
+ },
687
+ truncated: {
688
+ get() {
689
+ return this.truncation_reason !== null;
690
+ }
691
+ },
692
+ text: {
693
+ get() {
694
+ return legacyReadText(this);
695
+ }
696
+ }
697
+ });
698
+ return Object.assign(Object.create(prototype), value);
699
+ }
700
+ export async function readCodexSession(config, options = {}) {
701
+ const sessionId = typeof options.sessionId === "string"
702
+ ? options.sessionId
703
+ : undefined;
704
+ const sourcePath = typeof options.sourcePath === "string"
705
+ ? options.sourcePath
706
+ : undefined;
707
+ const selection = sessionId && sourcePath
708
+ ? "both"
709
+ : sourcePath
710
+ ? "source_path"
711
+ : "session_id";
712
+ const maxMessages = boundedInteger(options.maxMessages, 80, 1, 400);
713
+ const maxTotalBytes = boundedInteger(options.maxTotalBytes, 80_000, 4_000, 400_000);
714
+ const scanFileLimit = boundedInteger(options.scanFileLimit, CODEX_SESSION_SCAN_FILE_LIMIT, 1, CODEX_SESSION_SCAN_FILE_LIMIT);
715
+ const scanDepthLimit = boundedInteger(options.scanDepthLimit, CODEX_SESSION_SCAN_DEPTH_LIMIT, 0, CODEX_SESSION_SCAN_DEPTH_LIMIT);
716
+ const resolved = await resolveSessionSource(config, sessionId, sourcePath, scanFileLimit, scanDepthLimit);
717
+ const loaded = await loadSessionMessages(resolved.readPath, resolved.session.session_id, maxMessages, maxTotalBytes);
718
+ return attachLegacyReadAccessors({
719
+ codex_dir: codexSessionDirectory(config),
720
+ roots: codexSessionRoots(config),
721
+ selection,
722
+ requested_session_id: sessionId ?? null,
723
+ requested_source_path: sourcePath ?? null,
724
+ max_messages: maxMessages,
725
+ max_total_bytes: maxTotalBytes,
726
+ max_source_file_bytes: CODEX_SESSION_READ_FILE_LIMIT,
727
+ source_file_bytes: loaded.sourceFileBytes,
728
+ session: resolved.session,
729
+ messages: loaded.messages,
730
+ truncation_reason: loaded.truncationReason
731
+ });
732
+ }
733
+ //# sourceMappingURL=codexSessions.js.map