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,675 @@
1
+ import fs from "node:fs";
2
+ import fsp from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { createHash } from "node:crypto";
5
+ import { normalizeRelPath } from "./guard.js";
6
+ import { aiBridgeScaffoldWrites, listFiles, readTextFile, repoTree, writeTextFile, ensureAiBridge, prepareWorkspaceTextBatch } from "./fsOps.js";
7
+ import { gitDiff, gitLog, gitStatus } from "./gitOps.js";
8
+ import { readHandoffContext, resolveCodexContextTarget } from "./workspaceOps.js";
9
+ import { redactSensitiveText } from "./redact.js";
10
+ import { READ_HANDOFF_ARTIFACT_DEFINITIONS } from "./tools/schemas/readHandoff.js";
11
+ import { EXPORT_PRO_CONTEXT_BUNDLE_TRUNCATION_MARKER, EXPORT_PRO_CONTEXT_DIFF_TRUNCATION_MARKER, EXPORT_PRO_CONTEXT_SCAFFOLD_NAMES, exportProContextGlobSchema, exportProContextPathSchema } from "./tools/schemas/exportProContext.js";
12
+ export class ProContextOperationError extends Error {
13
+ code;
14
+ source;
15
+ constructor(code, source) {
16
+ super(code);
17
+ this.code = code;
18
+ this.source = source;
19
+ this.name = "ProContextOperationError";
20
+ }
21
+ }
22
+ const IMPORTANT_ROOT_FILES = [
23
+ "AGENTS.md",
24
+ "README.md",
25
+ "CLAUDE.md",
26
+ "package.json",
27
+ "pnpm-workspace.yaml",
28
+ "yarn.lock",
29
+ "pnpm-lock.yaml",
30
+ "bun.lockb",
31
+ "tsconfig.json",
32
+ "jsconfig.json",
33
+ "vite.config.ts",
34
+ "vite.config.js",
35
+ "next.config.ts",
36
+ "next.config.js",
37
+ "svelte.config.js",
38
+ "astro.config.mjs",
39
+ "tailwind.config.ts",
40
+ "tailwind.config.js",
41
+ "postcss.config.js",
42
+ "eslint.config.js",
43
+ ".eslintrc.json",
44
+ "biome.json",
45
+ "turbo.json",
46
+ "deno.json",
47
+ "pyproject.toml",
48
+ "requirements.txt",
49
+ "Cargo.toml",
50
+ "go.mod"
51
+ ];
52
+ function nodeErrorHasCode(error, code) {
53
+ return typeof error === "object" && error !== null && "code" in error && error.code === code;
54
+ }
55
+ function pathIdentity(value) {
56
+ return process.platform === "win32" ? value.toLowerCase() : value;
57
+ }
58
+ function unique(values) {
59
+ const result = [];
60
+ const seen = new Set();
61
+ for (const value of values) {
62
+ const normalized = normalizeRelPath(value).replace(/^\.\//, "");
63
+ if (!normalized)
64
+ continue;
65
+ const key = pathIdentity(normalized);
66
+ if (seen.has(key))
67
+ continue;
68
+ seen.add(key);
69
+ result.push(normalized);
70
+ }
71
+ return result;
72
+ }
73
+ function clamp(value, fallback, min, max) {
74
+ if (!Number.isFinite(value))
75
+ return fallback;
76
+ return Math.max(min, Math.min(max, Math.floor(value)));
77
+ }
78
+ function normalizeTitle(value) {
79
+ if (value !== undefined && typeof value !== "string") {
80
+ throw new ProContextOperationError("REQUEST_INVALID", "title");
81
+ }
82
+ const title = value?.trim().replace(/[\r\n]+/g, " ").replace(/[ \t]+/g, " ") ||
83
+ "CodexGPT Context Bundle";
84
+ if (title.length > 200 || /[\u0000-\u001f\u007f]/.test(title)) {
85
+ throw new ProContextOperationError("REQUEST_INVALID", "title");
86
+ }
87
+ return title;
88
+ }
89
+ function classifyExplicitSelectionError(error) {
90
+ const message = error instanceof Error ? error.message.toLowerCase() : "";
91
+ if (message.includes("blocked by safety rules")) {
92
+ return new ProContextOperationError("SELECTION_PATH_BLOCKED", "selected_paths");
93
+ }
94
+ if (message.includes("escapes workspace") ||
95
+ message.includes("outside workspace") ||
96
+ message.includes("outside the workspace") ||
97
+ message.includes("through a symlink")) {
98
+ return new ProContextOperationError("SELECTION_PATH_OUTSIDE_WORKSPACE", "selected_paths");
99
+ }
100
+ return new ProContextOperationError("REQUEST_INVALID", "selected_paths");
101
+ }
102
+ function classifyOutputPathError(error) {
103
+ const message = error instanceof Error ? error.message.toLowerCase() : "";
104
+ if (message.includes("blocked by safety rules")) {
105
+ return new ProContextOperationError("OUTPUT_PATH_BLOCKED", "context_dir");
106
+ }
107
+ if (message.includes("escapes workspace") ||
108
+ message.includes("outside workspace") ||
109
+ message.includes("outside the workspace") ||
110
+ message.includes("through a symlink")) {
111
+ return new ProContextOperationError("OUTPUT_PATH_OUTSIDE_WORKSPACE", "context_dir");
112
+ }
113
+ return new ProContextOperationError("OUTPUT_PATH_BLOCKED", "context_dir");
114
+ }
115
+ export async function prepareProContextRequest(config, guard, workspace, options = {}) {
116
+ const title = normalizeTitle(options.title);
117
+ if (!Array.isArray(options.selectedPaths ?? []) || (options.selectedPaths?.length ?? 0) > 80) {
118
+ throw new ProContextOperationError("REQUEST_INVALID", "selected_paths");
119
+ }
120
+ const selectedPaths = [];
121
+ const selectedSeen = new Set();
122
+ for (const raw of options.selectedPaths ?? []) {
123
+ if (typeof raw !== "string" || raw.trim().length === 0 || raw.length > 240) {
124
+ throw new ProContextOperationError("REQUEST_INVALID", "selected_paths");
125
+ }
126
+ try {
127
+ const target = await resolveCodexContextTarget(guard, workspace, raw.trim());
128
+ if (!exportProContextPathSchema.safeParse(target.targetPath).success) {
129
+ throw new ProContextOperationError("REQUEST_INVALID", "selected_paths");
130
+ }
131
+ const key = pathIdentity(target.targetPath);
132
+ if (!selectedSeen.has(key)) {
133
+ selectedSeen.add(key);
134
+ selectedPaths.push(target.targetPath);
135
+ }
136
+ }
137
+ catch (error) {
138
+ if (error instanceof ProContextOperationError)
139
+ throw error;
140
+ throw classifyExplicitSelectionError(error);
141
+ }
142
+ }
143
+ if (!Array.isArray(options.extraGlobs ?? []) || (options.extraGlobs?.length ?? 0) > 32) {
144
+ throw new ProContextOperationError("REQUEST_INVALID", "extra_globs");
145
+ }
146
+ const extraGlobs = [];
147
+ const globSeen = new Set();
148
+ for (const raw of options.extraGlobs ?? []) {
149
+ if (typeof raw !== "string")
150
+ throw new ProContextOperationError("REQUEST_INVALID", "extra_globs");
151
+ const normalized = raw.trim().replace(/\\/g, "/");
152
+ if (!exportProContextGlobSchema.safeParse(normalized).success) {
153
+ throw new ProContextOperationError("REQUEST_INVALID", "extra_globs");
154
+ }
155
+ const key = pathIdentity(normalized);
156
+ if (!globSeen.has(key)) {
157
+ globSeen.add(key);
158
+ extraGlobs.push(normalized);
159
+ }
160
+ }
161
+ const maxFileCeiling = Math.min(config.maxReadBytes, 250_000);
162
+ const maxDiffCeiling = config.maxOutputBytes;
163
+ const maxTotalCeiling = Math.min(config.maxWriteBytes, 2_000_000);
164
+ const maxTotalMinimum = Math.min(20_000, maxTotalCeiling);
165
+ const prepared = {
166
+ title,
167
+ selectedPaths: Object.freeze(selectedPaths),
168
+ extraGlobs: Object.freeze(extraGlobs),
169
+ includeImportantFiles: options.includeImportantFiles !== false,
170
+ includeChangedFiles: options.includeChangedFiles !== false,
171
+ includeDiff: options.includeDiff !== false,
172
+ includeAiBridge: options.includeAiBridge !== false,
173
+ maxDepth: clamp(options.maxDepth, 3, 1, 6),
174
+ maxFiles: clamp(options.maxFiles, 24, 1, 80),
175
+ maxFileBytes: clamp(options.maxFileBytes, Math.min(maxFileCeiling, 60_000), 1_000, maxFileCeiling),
176
+ maxDiffBytes: clamp(options.maxDiffBytes, Math.min(maxDiffCeiling, 80_000), 1_000, maxDiffCeiling),
177
+ maxTotalBytes: clamp(options.maxTotalBytes, Math.min(maxTotalCeiling, 700_000), maxTotalMinimum, maxTotalCeiling)
178
+ };
179
+ return Object.freeze(prepared);
180
+ }
181
+ export async function preflightProContextOutput(config, guard, workspace, request) {
182
+ try {
183
+ const context = guard.resolve(workspace, config.contextDir, { forWrite: true });
184
+ if (context.relPath === "." || config.contextDir !== context.relPath || !exportProContextPathSchema.safeParse(context.relPath).success) {
185
+ throw new ProContextOperationError("OUTPUT_PATH_BLOCKED", "context_dir");
186
+ }
187
+ try {
188
+ const stat = await fsp.stat(context.absPath);
189
+ if (!stat.isDirectory())
190
+ throw new ProContextOperationError("CONTEXT_WRITE_FAILED");
191
+ }
192
+ catch (error) {
193
+ if (!nodeErrorHasCode(error, "ENOENT"))
194
+ throw error;
195
+ }
196
+ const expectedPath = `${context.relPath}/pro-context.md`;
197
+ const output = guard.resolve(workspace, expectedPath, { forWrite: true });
198
+ if (output.relPath !== expectedPath || !exportProContextPathSchema.safeParse(output.relPath).success) {
199
+ throw new ProContextOperationError("OUTPUT_PATH_BLOCKED", "context_dir");
200
+ }
201
+ try {
202
+ const stat = await fsp.stat(output.absPath);
203
+ if (!stat.isFile())
204
+ throw new ProContextOperationError("CONTEXT_WRITE_FAILED");
205
+ await guard.assertTextFile(output.absPath, Math.max(config.maxWriteBytes, config.maxReadBytes));
206
+ }
207
+ catch (error) {
208
+ if (!nodeErrorHasCode(error, "ENOENT"))
209
+ throw error;
210
+ }
211
+ if (request.includeAiBridge) {
212
+ for (const name of EXPORT_PRO_CONTEXT_SCAFFOLD_NAMES) {
213
+ guard.resolve(workspace, `${context.relPath}/${name}`, { forWrite: true });
214
+ }
215
+ }
216
+ return Object.freeze({ contextDir: context.relPath, path: output.relPath });
217
+ }
218
+ catch (error) {
219
+ if (error instanceof ProContextOperationError)
220
+ throw error;
221
+ throw classifyOutputPathError(error);
222
+ }
223
+ }
224
+ export function capProContextUtf8(text, maxBytes, marker) {
225
+ if (Buffer.byteLength(text, "utf8") <= maxBytes)
226
+ return { text, truncated: false };
227
+ const markerBytes = Buffer.byteLength(marker, "utf8");
228
+ if (markerBytes > maxBytes)
229
+ throw new ProContextOperationError("CONTEXT_BUILD_FAILED");
230
+ const budget = maxBytes - markerBytes;
231
+ let low = 0;
232
+ let high = text.length;
233
+ while (low < high) {
234
+ const middle = Math.ceil((low + high) / 2);
235
+ let end = middle;
236
+ if (end > 0 && end < text.length && /[\uD800-\uDBFF]/.test(text[end - 1]))
237
+ end -= 1;
238
+ if (Buffer.byteLength(text.slice(0, end), "utf8") <= budget)
239
+ low = middle;
240
+ else
241
+ high = middle - 1;
242
+ }
243
+ let end = low;
244
+ if (end > 0 && end < text.length && /[\uD800-\uDBFF]/.test(text[end - 1]))
245
+ end -= 1;
246
+ while (end > 0 && Buffer.byteLength(text.slice(0, end), "utf8") > budget) {
247
+ end -= 1;
248
+ if (end > 0 && /[\uDC00-\uDFFF]/.test(text[end]))
249
+ end -= 1;
250
+ }
251
+ return { text: `${text.slice(0, end)}${marker}`, truncated: true };
252
+ }
253
+ function parseChangedFiles(status) {
254
+ const files = [];
255
+ for (const rawLine of status.split(/\r?\n/)) {
256
+ const line = rawLine.trimEnd();
257
+ if (!line || line.startsWith("##") || line.startsWith("git unavailable") || line.startsWith("fatal:"))
258
+ continue;
259
+ if (line.length < 4)
260
+ continue;
261
+ let rel = line.slice(3).trim();
262
+ if (!rel)
263
+ continue;
264
+ if (rel.includes(" -> "))
265
+ rel = rel.split(" -> ").pop() ?? rel;
266
+ if (rel.startsWith('"') && rel.endsWith('"'))
267
+ rel = rel.slice(1, -1);
268
+ files.push(rel);
269
+ }
270
+ return unique(files);
271
+ }
272
+ function languageForPath(relPath) {
273
+ const ext = path.extname(relPath).toLowerCase();
274
+ if (ext === ".ts" || ext === ".tsx")
275
+ return "typescript";
276
+ if (ext === ".js" || ext === ".jsx" || ext === ".mjs" || ext === ".cjs")
277
+ return "javascript";
278
+ if (ext === ".json")
279
+ return "json";
280
+ if (ext === ".md")
281
+ return "markdown";
282
+ if (ext === ".css")
283
+ return "css";
284
+ if (ext === ".html")
285
+ return "html";
286
+ if (ext === ".py")
287
+ return "python";
288
+ if (ext === ".rs")
289
+ return "rust";
290
+ if (ext === ".go")
291
+ return "go";
292
+ if (ext === ".toml")
293
+ return "toml";
294
+ if (ext === ".yaml" || ext === ".yml")
295
+ return "yaml";
296
+ return "text";
297
+ }
298
+ function isLikelyImportantConfig(relPath) {
299
+ const basename = path.basename(relPath);
300
+ return IMPORTANT_ROOT_FILES.includes(relPath) ||
301
+ IMPORTANT_ROOT_FILES.includes(basename);
302
+ }
303
+ async function existingImportantFiles(guard, workspace) {
304
+ const found = [];
305
+ for (const rel of IMPORTANT_ROOT_FILES) {
306
+ try {
307
+ const resolved = guard.resolve(workspace, rel);
308
+ if (fs.existsSync(resolved.absPath) && fs.statSync(resolved.absPath).isFile())
309
+ found.push(resolved.relPath);
310
+ }
311
+ catch {
312
+ // Optional auto-discovered configuration never broadens path authority.
313
+ }
314
+ }
315
+ return unique(found);
316
+ }
317
+ async function filesForGlobs(guard, workspace, globs, maxFiles) {
318
+ const out = [];
319
+ for (const glob of globs) {
320
+ const matches = await listFiles(guard, workspace, {
321
+ root: ".",
322
+ glob,
323
+ includeHidden: /(^|\/)\./.test(glob),
324
+ maxFiles: maxFiles + 1
325
+ });
326
+ out.push(...matches);
327
+ }
328
+ return unique(out);
329
+ }
330
+ function appendSection(parts, heading, body) {
331
+ parts.push(`## ${heading}\n\n${body.trimEnd()}`);
332
+ }
333
+ function publicSkippedPath(value) {
334
+ const normalized = normalizeRelPath(value).replace(/^\.\//, "");
335
+ return exportProContextPathSchema.safeParse(normalized).success ? normalized : null;
336
+ }
337
+ function autoSkip(error, relPath, observedBytes) {
338
+ const safePath = publicSkippedPath(relPath);
339
+ const message = error instanceof Error ? error.message.toLowerCase() : "";
340
+ if (nodeErrorHasCode(error, "ENOENT"))
341
+ return { path: safePath, reason: "missing", bytes: null };
342
+ if (nodeErrorHasCode(error, "ENOTDIR"))
343
+ return { path: safePath, reason: "not_file", bytes: null };
344
+ if (message.includes("blocked by safety rules") ||
345
+ message.includes("outside workspace") ||
346
+ message.includes("escapes workspace") ||
347
+ message.includes("through a symlink"))
348
+ return { path: safePath, reason: "blocked", bytes: null };
349
+ if (message.includes("binary file"))
350
+ return { path: safePath, reason: "not_text", bytes: observedBytes ?? 0 };
351
+ if (message.includes("too large"))
352
+ return { path: safePath, reason: "too_large", bytes: observedBytes ?? 0 };
353
+ return { path: safePath, reason: "read_failed", bytes: null };
354
+ }
355
+ function formatAiContext(contextDir, artifacts, unavailable) {
356
+ const artifactByPath = new Map(artifacts.map((artifact) => [artifact.path, artifact]));
357
+ const unavailableByPath = new Map(unavailable.map((item) => [item.path, item]));
358
+ return READ_HANDOFF_ARTIFACT_DEFINITIONS.map((definition) => {
359
+ const relPath = `${contextDir}/${definition.name}`;
360
+ const artifact = artifactByPath.get(relPath);
361
+ if (artifact)
362
+ return `--- ${relPath} ---\n${artifact.text}`;
363
+ const missing = unavailableByPath.get(relPath);
364
+ return `--- ${relPath} ---\n[unavailable: ${missing?.reason ?? "read_failed"}]`;
365
+ }).join("\n\n");
366
+ }
367
+ export async function buildPreparedProContext(config, guard, workspace, request, createdContextFiles = [], virtualAiBridge = {}, virtualFiles = {}, gitProviders = {}) {
368
+ try {
369
+ const status = gitProviders.status ? await gitProviders.status() : gitStatus(config, workspace);
370
+ const changedFiles = parseChangedFiles(status);
371
+ const importantFiles = request.includeImportantFiles ? await existingImportantFiles(guard, workspace) : [];
372
+ const changedFileCandidates = request.includeChangedFiles ? changedFiles : [];
373
+ const extraGlobFiles = await filesForGlobs(guard, workspace, request.extraGlobs, request.maxFiles);
374
+ const selectedSet = new Set(request.selectedPaths.map(pathIdentity));
375
+ const importantSet = new Set(importantFiles.map(pathIdentity));
376
+ const outputPath = normalizeRelPath(`${config.contextDir}/pro-context.md`);
377
+ const candidates = unique([
378
+ ...request.selectedPaths,
379
+ ...changedFileCandidates,
380
+ ...importantFiles,
381
+ ...extraGlobFiles
382
+ ]).filter((rel) => pathIdentity(rel) !== pathIdentity(outputPath)).sort((a, b) => {
383
+ const priority = (value) => {
384
+ if (selectedSet.has(pathIdentity(value)))
385
+ return 0;
386
+ if (importantSet.has(pathIdentity(value)) || isLikelyImportantConfig(value))
387
+ return 1;
388
+ return 2;
389
+ };
390
+ const difference = priority(a) - priority(b);
391
+ return difference || a.localeCompare(b);
392
+ });
393
+ const attempted = candidates.slice(0, request.maxFiles);
394
+ const filesIncluded = [];
395
+ const filesSkipped = [];
396
+ const fileChunks = [];
397
+ for (const rel of attempted) {
398
+ const virtualText = virtualFiles[rel];
399
+ if (virtualText !== undefined) {
400
+ const virtualBytes = Buffer.byteLength(virtualText, "utf8");
401
+ if (virtualBytes > request.maxFileBytes) {
402
+ filesSkipped.push({ path: rel, reason: "too_large", bytes: virtualBytes });
403
+ continue;
404
+ }
405
+ filesIncluded.push(rel);
406
+ fileChunks.push([
407
+ `### ${rel}`,
408
+ "",
409
+ `Bytes: ${virtualBytes}`,
410
+ `SHA-256: ${createHash("sha256").update(virtualText).digest("hex")}`,
411
+ `Lines: 1-${virtualText.length === 0 ? 0 : virtualText.split(/\r?\n/).length}`,
412
+ "",
413
+ `\`\`\`${languageForPath(rel)}`,
414
+ virtualText,
415
+ "```"
416
+ ].join("\n"));
417
+ continue;
418
+ }
419
+ let observedBytes = null;
420
+ try {
421
+ const resolved = guard.resolve(workspace, rel);
422
+ let stat;
423
+ try {
424
+ stat = await fsp.stat(resolved.absPath);
425
+ }
426
+ catch (error) {
427
+ if (nodeErrorHasCode(error, "ENOENT")) {
428
+ filesSkipped.push({ path: publicSkippedPath(resolved.relPath), reason: "missing", bytes: null });
429
+ continue;
430
+ }
431
+ throw error;
432
+ }
433
+ if (!stat.isFile()) {
434
+ filesSkipped.push({ path: publicSkippedPath(resolved.relPath), reason: "not_file", bytes: null });
435
+ continue;
436
+ }
437
+ observedBytes = stat.size;
438
+ if (stat.size > request.maxFileBytes) {
439
+ filesSkipped.push({ path: publicSkippedPath(resolved.relPath), reason: "too_large", bytes: stat.size });
440
+ continue;
441
+ }
442
+ const read = await readTextFile(config, guard, workspace, rel, { maxBytes: request.maxFileBytes });
443
+ filesIncluded.push(read.path);
444
+ fileChunks.push([
445
+ `### ${read.path}`,
446
+ "",
447
+ `Bytes: ${read.bytes}`,
448
+ `SHA-256: ${read.sha256}`,
449
+ `Lines: ${read.startLine}-${read.endLine} of ${read.totalLines}`,
450
+ "",
451
+ `\`\`\`${languageForPath(read.path)}`,
452
+ read.text,
453
+ "```"
454
+ ].join("\n"));
455
+ }
456
+ catch (error) {
457
+ filesSkipped.push(autoSkip(error, rel, observedBytes));
458
+ }
459
+ }
460
+ let aiContextFiles = [];
461
+ let aiContextUnavailable = [];
462
+ let aiText = `No ${config.contextDir} handoff context exists yet. Use handoff_to_agent or handoff_to_codex to create it when a plan is ready.`;
463
+ if (request.includeAiBridge) {
464
+ const handoff = await readHandoffContext(config, guard, workspace);
465
+ const artifacts = [...handoff.artifacts];
466
+ const unavailable = [...handoff.unavailable];
467
+ for (const definition of READ_HANDOFF_ARTIFACT_DEFINITIONS) {
468
+ const relPath = `${config.contextDir}/${definition.name}`;
469
+ const text = virtualAiBridge[relPath];
470
+ if (text === undefined || artifacts.some((artifact) => artifact.path === relPath))
471
+ continue;
472
+ const bytes = Buffer.byteLength(text, "utf8");
473
+ artifacts.push({
474
+ path: relPath,
475
+ kind: definition.kind,
476
+ bytes,
477
+ lineCount: text.length === 0 ? 0 : text.split(/\r?\n/).length,
478
+ text
479
+ });
480
+ const unavailableIndex = unavailable.findIndex((item) => item.path === relPath);
481
+ if (unavailableIndex >= 0)
482
+ unavailable.splice(unavailableIndex, 1);
483
+ }
484
+ artifacts.sort((left, right) => READ_HANDOFF_ARTIFACT_DEFINITIONS.findIndex((definition) => `${config.contextDir}/${definition.name}` === left.path) -
485
+ READ_HANDOFF_ARTIFACT_DEFINITIONS.findIndex((definition) => `${config.contextDir}/${definition.name}` === right.path));
486
+ if (handoff.contextExists || artifacts.length > 0) {
487
+ aiContextFiles = artifacts.map((artifact) => artifact.path);
488
+ aiContextUnavailable = unavailable.map((item) => ({
489
+ path: item.path,
490
+ reason: item.reason,
491
+ bytes: item.bytes
492
+ }));
493
+ aiText = formatAiContext(handoff.contextDir, artifacts, unavailable);
494
+ }
495
+ }
496
+ const parts = [];
497
+ parts.push(`# ${request.title}`);
498
+ parts.push([
499
+ `Generated: ${new Date().toISOString()}`,
500
+ `Workspace: ${workspace.root}`,
501
+ `Workspace ID: ${workspace.id}`,
502
+ `Write mode: ${config.writeMode}`,
503
+ `Bash mode: ${config.bashMode}`,
504
+ `Tool mode: ${config.toolMode}`,
505
+ "",
506
+ "Purpose: paste this bundle into a high-context ChatGPT model when that model cannot call the CodexGPT MCP tools directly.",
507
+ "Instruction for ChatGPT: use this as repository context, produce a narrow Codex execution plan, and avoid inventing files or runtime facts not shown here."
508
+ ].join("\n"));
509
+ appendSection(parts, "Repository Tree", (await repoTree(config, guard, workspace, {
510
+ path: ".",
511
+ maxDepth: request.maxDepth,
512
+ includeHidden: false,
513
+ maxEntries: 700
514
+ })).text);
515
+ appendSection(parts, "Git Status", `\`\`\`text\n${status}\n\`\`\``);
516
+ const log = gitProviders.log ? await gitProviders.log() : gitLog(config, workspace, 8);
517
+ appendSection(parts, "Recent Commits", `\`\`\`text\n${log}\n\`\`\``);
518
+ let diffTruncated = false;
519
+ if (request.includeDiff) {
520
+ const rawDiff = gitProviders.diff ? await gitProviders.diff() : gitDiff(config, guard, workspace);
521
+ const diff = capProContextUtf8(rawDiff, request.maxDiffBytes, EXPORT_PRO_CONTEXT_DIFF_TRUNCATION_MARKER);
522
+ diffTruncated = diff.truncated;
523
+ appendSection(parts, "Git Diff", `\`\`\`diff\n${diff.text}\n\`\`\``);
524
+ }
525
+ if (request.includeAiBridge)
526
+ appendSection(parts, "Existing AI Bridge Context", aiText);
527
+ appendSection(parts, "Selected Files", [
528
+ `Changed files detected: ${changedFiles.length ? changedFiles.join(", ") : "none"}`,
529
+ `Auto-include important root files: ${request.includeImportantFiles ? "yes" : "no"}`,
530
+ `Auto-include changed files: ${request.includeChangedFiles ? "yes" : "no"}`,
531
+ `Explicit selected paths: ${request.selectedPaths.length ? request.selectedPaths.join(", ") : "none"}`,
532
+ `Extra globs: ${request.extraGlobs.length ? request.extraGlobs.join(", ") : "none"}`,
533
+ `Candidates discovered: ${candidates.length}`,
534
+ `Candidates omitted by max_files: ${Math.max(0, candidates.length - attempted.length)}`,
535
+ `Files attempted below: ${attempted.length ? attempted.join(", ") : "none"}`
536
+ ].join("\n"));
537
+ appendSection(parts, "File Contents", fileChunks.length ? fileChunks.join("\n\n") : "No file contents selected.");
538
+ appendSection(parts, "Skipped Files", filesSkipped.length
539
+ ? filesSkipped.map((file) => `- ${file.path ?? "[hidden unsafe identity]"} [${file.reason}]`).join("\n")
540
+ : "None.");
541
+ const rawSourceMarkdown = `${parts.join("\n\n")}\n`;
542
+ const sourceMarkdown = redactSensitiveText(rawSourceMarkdown);
543
+ const redacted = sourceMarkdown !== rawSourceMarkdown;
544
+ const bounded = capProContextUtf8(sourceMarkdown, request.maxTotalBytes, EXPORT_PRO_CONTEXT_BUNDLE_TRUNCATION_MARKER);
545
+ const markdown = bounded.text;
546
+ const sourceBytes = Buffer.byteLength(sourceMarkdown, "utf8");
547
+ const bytes = Buffer.byteLength(markdown, "utf8");
548
+ const omittedCount = Math.max(0, candidates.length - attempted.length);
549
+ const outputLimited = diffTruncated ||
550
+ bounded.truncated ||
551
+ omittedCount > 0 ||
552
+ filesSkipped.some((item) => item.reason === "too_large") ||
553
+ aiContextUnavailable.some((item) => item.reason === "too_large" || item.reason === "output_limit");
554
+ return {
555
+ workspaceId: workspace.id,
556
+ root: workspace.root,
557
+ title: redactSensitiveText(request.title),
558
+ selectedPaths: [...request.selectedPaths],
559
+ extraGlobs: [...request.extraGlobs],
560
+ includeImportantFiles: request.includeImportantFiles,
561
+ includeChangedFiles: request.includeChangedFiles,
562
+ includeDiff: request.includeDiff,
563
+ includeAiBridge: request.includeAiBridge,
564
+ maxDepth: request.maxDepth,
565
+ maxFiles: request.maxFiles,
566
+ maxFileBytes: request.maxFileBytes,
567
+ maxDiffBytes: request.maxDiffBytes,
568
+ maxTotalBytes: request.maxTotalBytes,
569
+ changedFileCount: changedFiles.length,
570
+ candidateCount: candidates.length,
571
+ omittedCount,
572
+ filesIncluded,
573
+ filesSkipped,
574
+ aiContextFiles,
575
+ aiContextUnavailable,
576
+ createdContextFiles: [...createdContextFiles],
577
+ sourceMarkdown,
578
+ markdown,
579
+ sourceBytes,
580
+ bytes,
581
+ sha256: createHash("sha256").update(markdown).digest("hex"),
582
+ diffTruncated,
583
+ bundleTruncated: bounded.truncated,
584
+ truncated: diffTruncated || bounded.truncated,
585
+ outputLimited,
586
+ redacted
587
+ };
588
+ }
589
+ catch (error) {
590
+ if (error instanceof ProContextOperationError)
591
+ throw error;
592
+ throw new ProContextOperationError("CONTEXT_BUILD_FAILED");
593
+ }
594
+ }
595
+ export async function exportPreparedProContext(config, guard, workspace, request, preparedOutput, gitProviders = {}) {
596
+ const output = preparedOutput ?? await preflightProContextOutput(config, guard, workspace, request);
597
+ let createdContextFiles = [];
598
+ if (request.includeAiBridge) {
599
+ try {
600
+ createdContextFiles = await ensureAiBridge(config, guard, workspace);
601
+ }
602
+ catch {
603
+ throw new ProContextOperationError("CONTEXT_WRITE_FAILED");
604
+ }
605
+ }
606
+ const built = await buildPreparedProContext(config, guard, workspace, request, createdContextFiles, {}, {}, gitProviders);
607
+ try {
608
+ const write = await writeTextFile(config, guard, workspace, output.path, built.markdown, {
609
+ createDirs: true,
610
+ overwrite: true
611
+ });
612
+ if (write.path !== output.path || write.bytes !== built.bytes || write.sha256 !== built.sha256) {
613
+ throw new ProContextOperationError("CONTEXT_WRITE_FAILED");
614
+ }
615
+ return {
616
+ ...built,
617
+ path: write.path,
618
+ existed: write.existed,
619
+ bytes: write.bytes,
620
+ sha256: write.sha256
621
+ };
622
+ }
623
+ catch (error) {
624
+ if (error instanceof ProContextOperationError)
625
+ throw error;
626
+ throw new ProContextOperationError("CONTEXT_WRITE_FAILED");
627
+ }
628
+ }
629
+ export async function prepareProContextMutation(config, guard, workspace, request, preparedOutput, gitProviders = {}) {
630
+ const output = preparedOutput ?? await preflightProContextOutput(config, guard, workspace, request);
631
+ try {
632
+ const scaffoldWrites = request.includeAiBridge ? aiBridgeScaffoldWrites(config) : [];
633
+ const virtualAiBridge = {};
634
+ for (const write of scaffoldWrites) {
635
+ const resolved = guard.resolve(workspace, write.path, { forWrite: true });
636
+ if (!fs.existsSync(resolved.absPath))
637
+ virtualAiBridge[write.path] = write.content;
638
+ }
639
+ const createdContextFiles = Object.keys(virtualAiBridge);
640
+ const built = await buildPreparedProContext(config, guard, workspace, request, createdContextFiles, virtualAiBridge, {}, gitProviders);
641
+ const prepared = await prepareWorkspaceTextBatch(config, guard, workspace, [
642
+ ...scaffoldWrites,
643
+ { path: output.path, content: built.markdown, mode: "replace" }
644
+ ]);
645
+ const outputOperation = prepared.operations.find((operation) => operation.path === output.path);
646
+ if (!outputOperation || outputOperation.afterSha256 !== built.sha256) {
647
+ throw new ProContextOperationError("CONTEXT_WRITE_FAILED");
648
+ }
649
+ return {
650
+ result: {
651
+ ...built,
652
+ path: output.path,
653
+ existed: outputOperation.before.exists,
654
+ bytes: outputOperation.operation.bytes.length,
655
+ sha256: outputOperation.afterSha256
656
+ },
657
+ prepared
658
+ };
659
+ }
660
+ catch (error) {
661
+ if (error instanceof ProContextOperationError)
662
+ throw error;
663
+ throw new ProContextOperationError("CONTEXT_WRITE_FAILED");
664
+ }
665
+ }
666
+ export async function buildProContext(config, guard, workspace, options = {}) {
667
+ const request = await prepareProContextRequest(config, guard, workspace, options);
668
+ return buildPreparedProContext(config, guard, workspace, request);
669
+ }
670
+ export async function exportProContext(config, guard, workspace, options = {}) {
671
+ const request = await prepareProContextRequest(config, guard, workspace, options);
672
+ const output = await preflightProContextOutput(config, guard, workspace, request);
673
+ return exportPreparedProContext(config, guard, workspace, request, output);
674
+ }
675
+ //# sourceMappingURL=proContext.js.map