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,713 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { resolveAuditRequirement } from "../config.js";
3
+ import { credentialRevisionForIdentity, effectivePolicyScopes, ownerIdForPolicyIdentity } from "../auth/policyIdentity.js";
4
+ import { CONTRACT_V3_ADDITIONS, CONTRACT_V4_ADDITIONS, contractIncludesV3, contractIncludesV4 } from "../tools/contracts/index.js";
5
+ import { authorizationAuditEventV2Schema, auditEventV4Schema } from "../audit/schemas.js";
6
+ import { SessionGrantStore } from "./approval.js";
7
+ import { createAuthorizationFactsV3, createAuthorizationFactsV4, semanticDigest } from "./authorizationFacts.js";
8
+ import { createAuditEvent } from "./audit.js";
9
+ import { compileCompatibilityProfile } from "./compat.js";
10
+ import { createRequestContext } from "./context.js";
11
+ import { baselineNodeCapabilityReport } from "./enforcement.js";
12
+ import { evaluatePolicy } from "./evaluator.js";
13
+ import { HARD_POLICY_REVISION } from "./hardPolicy.js";
14
+ import { compilePermissionProfile, compilePermissionProfileV3, loadPermissionProfileGraph, loadPermissionProfileGraphV3, policyRevisionForSources } from "./profileStore.js";
15
+ import { describeFilesystemResource, describeGitResource, describeProcessResource, describeShellResource } from "./resources.js";
16
+ import { policyDecisionV1Schema } from "./schemas.js";
17
+ import { requiredScopesForTool, toolPolicyDefinition } from "./toolPolicy.js";
18
+ export function policyIdentityScopes(config) {
19
+ const scopes = [
20
+ "workspace:open",
21
+ "filesystem:read",
22
+ "git:read",
23
+ "audit:read"
24
+ ];
25
+ if (config.writeMode !== "off")
26
+ scopes.push("filesystem:write");
27
+ if (config.bashMode === "safe" || config.bashMode === "full")
28
+ scopes.push("shell:verify");
29
+ if (config.bashMode === "full")
30
+ scopes.push("shell:execute");
31
+ return scopes;
32
+ }
33
+ function sourceHash(id, value) {
34
+ return {
35
+ id,
36
+ sha256: createHash("sha256").update(JSON.stringify(value), "utf8").digest("hex")
37
+ };
38
+ }
39
+ function compiledProfile(config) {
40
+ let graph;
41
+ if (config.permissionProfileId) {
42
+ if (contractIncludesV3(config.toolContractVersion)) {
43
+ const graphV3 = loadPermissionProfileGraphV3(config.permissionProfileId);
44
+ const compiledV3 = compilePermissionProfileV3(graphV3, process.platform);
45
+ const { fullAccess: _fullAccess, schemaVersion: _schemaVersion, ...base } = compiledV3;
46
+ return { profile: { ...base, schemaVersion: 1 }, sourceHashes: graphV3.sourceHashes };
47
+ }
48
+ graph = loadPermissionProfileGraph(config.permissionProfileId);
49
+ }
50
+ else {
51
+ const document = compileCompatibilityProfile(config);
52
+ graph = {
53
+ id: document.id,
54
+ order: [document],
55
+ sourceHashes: [sourceHash(document.id, document)]
56
+ };
57
+ }
58
+ return {
59
+ profile: compilePermissionProfile(graph, process.platform),
60
+ sourceHashes: graph.sourceHashes
61
+ };
62
+ }
63
+ function inputDigest(args) {
64
+ return `sha256:${createHash("sha256").update(JSON.stringify(args), "utf8").digest("hex")}`;
65
+ }
66
+ function operationForApproval(resource) {
67
+ return `${resource.kind}.${resource.operation}`;
68
+ }
69
+ function approvalArgumentCount(args) {
70
+ if (args.command && typeof args.command === "object") {
71
+ const command = args.command;
72
+ return command.kind === "argv" && Array.isArray(command.args) ? Math.min(command.args.length, 100_000) : 0;
73
+ }
74
+ if (Array.isArray(args.argv))
75
+ return Math.min(args.argv.length, 100_000);
76
+ if (typeof args.command === "string") {
77
+ const value = args.command.trim();
78
+ return value ? Math.min(value.split(/\s+/).length, 100_000) : 0;
79
+ }
80
+ return Math.min(Object.keys(args).filter((key) => key !== "environment" && key !== "env").length, 100_000);
81
+ }
82
+ function approvalRevealArguments(args) {
83
+ if (args.command && typeof args.command === "object") {
84
+ const command = args.command;
85
+ return command.kind === "argv" && Array.isArray(command.args)
86
+ ? [typeof command.executable === "string" ? command.executable : "[executable omitted]", ...command.args.filter((value) => typeof value === "string")].slice(0, 32)
87
+ : [];
88
+ }
89
+ if (Array.isArray(args.argv)) {
90
+ return args.argv.filter((value) => typeof value === "string").slice(0, 32);
91
+ }
92
+ if (typeof args.command === "string")
93
+ return [args.command];
94
+ return [];
95
+ }
96
+ function describedApprovalRevealArguments(described, args) {
97
+ if (!described.approvalRevealArguments)
98
+ return approvalRevealArguments(args);
99
+ if (described.approvalRevealArguments.length > 32 ||
100
+ described.approvalRevealArguments.some((value) => typeof value !== "string" || value.length < 1 || value.length > 4096 || /[\u0000\r\n]/u.test(value)))
101
+ throw new Error("Approval display arguments are invalid.");
102
+ return [...described.approvalRevealArguments];
103
+ }
104
+ function decisionWithApprovalId(decision, approvalId) {
105
+ return policyDecisionV1Schema.parse({
106
+ ...decision,
107
+ provenance: decision.provenance.map((item) => item.sourceKind === "approval_policy"
108
+ ? { ...item, approvalId }
109
+ : item)
110
+ });
111
+ }
112
+ function decisionWithResourceFingerprint(decision, resourceFingerprint) {
113
+ if (decision.resourceFingerprint === resourceFingerprint)
114
+ return decision;
115
+ const facts = {
116
+ outcome: decision.outcome,
117
+ reasonCode: decision.reasonCode,
118
+ policyRevision: decision.policyRevision,
119
+ resourceFingerprint,
120
+ requiredApproval: decision.requiredApproval,
121
+ requiredEnforcement: decision.requiredEnforcement,
122
+ provenance: decision.provenance
123
+ };
124
+ return policyDecisionV1Schema.parse({
125
+ schemaVersion: 1,
126
+ decisionId: `decision_${createHash("sha256").update(JSON.stringify(facts), "utf8").digest("hex").slice(0, 24)}`,
127
+ ...facts
128
+ });
129
+ }
130
+ function repositoryKey(workspace) {
131
+ return `repo_${createHash("sha256").update(workspace.root, "utf8").digest("hex").slice(0, 24)}`;
132
+ }
133
+ function stringArg(args, key, fallback) {
134
+ const value = args[key];
135
+ return typeof value === "string" && value.trim() ? value : fallback;
136
+ }
137
+ function workspaceFor(definitionMode, args, workspaces) {
138
+ const workspaceId = typeof args.workspace_id === "string" && args.workspace_id.trim()
139
+ ? args.workspace_id.trim()
140
+ : undefined;
141
+ if (definitionMode === "context_only") {
142
+ return workspaceId ? workspaces.getWorkspace(workspaceId) : null;
143
+ }
144
+ return workspaceId ? workspaces.getWorkspace(workspaceId) : workspaces.resolveWorkspace();
145
+ }
146
+ function toolMayMutate(toolName, config) {
147
+ if (toolName === "query_audit_events")
148
+ return false;
149
+ const mode = toolPolicyDefinition(toolName).resourceMode;
150
+ if (mode === "shell")
151
+ return config.bashMode === "full";
152
+ return mode === "workspace_write" || mode === "exact_write" || mode === "bridge_write" || mode === "resolved";
153
+ }
154
+ function describeResource(toolName, args, config, workspaces, guard, resourceResolver) {
155
+ const definition = toolPolicyDefinition(toolName);
156
+ const semanticPreviewApply = toolName === "apply_patch" && typeof args.semantic_preview_id === "string";
157
+ if (definition.resourceMode === "resolved" || semanticPreviewApply) {
158
+ if (!resourceResolver)
159
+ throw new Error("Policy resource resolver is unavailable.");
160
+ const described = resourceResolver.describe(toolName, args);
161
+ const v3Addition = CONTRACT_V3_ADDITIONS.includes(toolName);
162
+ const requiredScopes = described.requiredScopes
163
+ ? [...described.requiredScopes]
164
+ : v3Addition
165
+ ? [...requiredScopesForTool(toolName, {
166
+ contractVersion: 3,
167
+ mode: args.mode === "full_access" ? "full_access" : "workspace"
168
+ })]
169
+ : definition.requiredScope
170
+ ? [definition.requiredScope]
171
+ : [];
172
+ if (v3Addition && !described.semanticFactsDigest) {
173
+ throw new Error("V3 policy resource resolver did not provide semantic authorization facts.");
174
+ }
175
+ return {
176
+ resource: described.resource,
177
+ requiredCapabilities: described.requiredCapabilities ?? [{ name: "filesystemWriteBoundary", minimum: "brokered" }],
178
+ riskClass: described.riskClass ?? definition.riskClass,
179
+ requiredScope: definition.requiredScope,
180
+ requiredScopes,
181
+ approvalBindingV3: described.approvalBindingV3,
182
+ semanticFactsDigest: described.semanticFactsDigest ?? null,
183
+ semanticAuditFacts: described.semanticAuditFacts,
184
+ approvalRevealArguments: described.approvalRevealArguments
185
+ };
186
+ }
187
+ const workspace = workspaceFor(definition.resourceMode, args, workspaces);
188
+ const requiredCapabilities = [];
189
+ if (definition.resourceMode === "context_only") {
190
+ const resource = describeProcessResource({
191
+ operation: "inspect",
192
+ workspaceId: workspace?.id ?? null,
193
+ processId: `policy-${toolName}`,
194
+ persistence: false,
195
+ executable: null
196
+ });
197
+ return { resource, requiredCapabilities, riskClass: definition.riskClass, requiredScope: definition.requiredScope, requiredScopes: definition.requiredScope ? [definition.requiredScope] : [], semanticFactsDigest: null };
198
+ }
199
+ if (!workspace)
200
+ throw new Error("Policy resource requires a workspace.");
201
+ if (definition.resourceMode === "exact_read" || definition.resourceMode === "workspace_read") {
202
+ requiredCapabilities.push({ name: "filesystemReadBoundary", minimum: "brokered" });
203
+ const resource = describeFilesystemResource({
204
+ workspace,
205
+ guard,
206
+ operation: definition.resourceMode === "exact_read" ? "read" : "list",
207
+ inputPath: definition.resourceMode === "exact_read" ? stringArg(args, "path", ".") : stringArg(args, "path", ".")
208
+ });
209
+ return { resource, requiredCapabilities, riskClass: definition.riskClass, requiredScope: definition.requiredScope, requiredScopes: definition.requiredScope ? [definition.requiredScope] : [], semanticFactsDigest: null };
210
+ }
211
+ if (definition.resourceMode === "exact_write" || definition.resourceMode === "workspace_write" || definition.resourceMode === "bridge_write") {
212
+ requiredCapabilities.push({ name: "filesystemWriteBoundary", minimum: "brokered" });
213
+ const inputPath = definition.resourceMode === "exact_write"
214
+ ? stringArg(args, "path", ".")
215
+ : definition.resourceMode === "bridge_write"
216
+ ? config.contextDir
217
+ : ".";
218
+ const resource = describeFilesystemResource({ workspace, guard, operation: "write", inputPath });
219
+ return { resource, requiredCapabilities, riskClass: definition.riskClass, requiredScope: definition.requiredScope, requiredScopes: definition.requiredScope ? [definition.requiredScope] : [], semanticFactsDigest: null };
220
+ }
221
+ if (definition.resourceMode === "git_read") {
222
+ const pathArg = typeof args.path === "string" && args.path.trim() ? [args.path] : [];
223
+ const resource = describeGitResource({
224
+ workspaceId: workspace.id,
225
+ operation: "read",
226
+ repositoryKey: repositoryKey(workspace),
227
+ relativePaths: pathArg,
228
+ refs: [],
229
+ remoteName: null,
230
+ remoteHost: null
231
+ });
232
+ return { resource, requiredCapabilities, riskClass: definition.riskClass, requiredScope: definition.requiredScope, requiredScopes: definition.requiredScope ? [definition.requiredScope] : [], semanticFactsDigest: null };
233
+ }
234
+ const command = stringArg(args, "command", "");
235
+ const verification = config.bashMode === "safe";
236
+ requiredCapabilities.push({ name: "processTreeControl", minimum: "job_object" }, { name: "environmentIsolation", minimum: "isolated" }, { name: "credentialIsolation", minimum: "isolated" });
237
+ const resource = describeShellResource({
238
+ workspaceId: workspace.id,
239
+ operation: verification ? "verify" : "execute",
240
+ backend: "bash",
241
+ cwd: stringArg(args, "cwd", "."),
242
+ commandKind: verification ? "verification" : "opaque",
243
+ command,
244
+ executable: command.trim().split(/\s+/)[0] || null,
245
+ argumentCount: command.trim() ? command.trim().split(/\s+/).length : 0,
246
+ persistence: false,
247
+ requestedNetwork: false
248
+ });
249
+ return {
250
+ resource,
251
+ requiredCapabilities,
252
+ riskClass: verification ? "R1" : definition.riskClass,
253
+ requiredScope: verification ? "shell:verify" : definition.requiredScope,
254
+ requiredScopes: [verification ? "shell:verify" : definition.requiredScope ?? "shell:execute"],
255
+ semanticFactsDigest: null
256
+ };
257
+ }
258
+ function contextDecision(input) {
259
+ const missingScopes = input.requiredScopes.filter((scope) => !input.scopes.includes(scope));
260
+ const allowedScope = missingScopes.length === 0;
261
+ let outcome;
262
+ let reasonCode;
263
+ let requiredApproval = null;
264
+ let provenance;
265
+ if (!allowedScope || input.riskClass === "R4") {
266
+ outcome = "deny";
267
+ reasonCode = "POLICY_DENIED";
268
+ provenance = [{
269
+ sourceKind: allowedScope ? "approval_policy" : "identity_scope",
270
+ safeRuleId: allowedScope ? "approval.r4.unapprovable" : `scope.${missingScopes[0]}`,
271
+ specificity: [],
272
+ grantId: null,
273
+ approvalId: null,
274
+ enforcementBackend: null
275
+ }];
276
+ }
277
+ else if (input.riskClass === "R0" || input.granted) {
278
+ outcome = "allow";
279
+ reasonCode = null;
280
+ provenance = [{
281
+ sourceKind: input.granted ? "session_grant" : "identity_scope",
282
+ safeRuleId: input.granted ? "approval.grant.consume" : input.requiredScopes.length ? `scope.${input.requiredScopes.join("+")}` : "scope.not-required",
283
+ specificity: [],
284
+ grantId: input.granted?.grantId ?? null,
285
+ approvalId: input.granted?.approvalId ?? null,
286
+ enforcementBackend: null
287
+ }];
288
+ }
289
+ else {
290
+ outcome = "approval_required";
291
+ reasonCode = "APPROVAL_REQUIRED";
292
+ requiredApproval = {
293
+ riskClass: input.riskClass,
294
+ maxTtlMs: input.riskClass === "R1" ? 30 * 60_000 : input.riskClass === "R2" ? 5 * 60_000 : 2 * 60_000,
295
+ uses: input.riskClass === "R3" ? 1 : null
296
+ };
297
+ provenance = [{
298
+ sourceKind: "approval_policy",
299
+ safeRuleId: `approval.${input.riskClass.toLocaleLowerCase("en-US")}`,
300
+ specificity: [],
301
+ grantId: null,
302
+ approvalId: null,
303
+ enforcementBackend: null
304
+ }];
305
+ }
306
+ const facts = {
307
+ outcome,
308
+ reasonCode,
309
+ policyRevision: input.contextPolicyRevision,
310
+ resourceFingerprint: input.resource.resourceFingerprint,
311
+ requiredApproval,
312
+ requiredEnforcement: [],
313
+ provenance
314
+ };
315
+ const decisionId = `decision_${createHash("sha256").update(JSON.stringify(facts), "utf8").digest("hex").slice(0, 24)}`;
316
+ return policyDecisionV1Schema.parse({ schemaVersion: 1, decisionId, ...facts });
317
+ }
318
+ export function inspectPolicyConfiguration(config) {
319
+ const capabilities = baselineNodeCapabilityReport(process.platform);
320
+ const compiled = compiledProfile(config);
321
+ return {
322
+ profileId: compiled.profile.id,
323
+ policyRevision: policyRevisionForSources(compiled.sourceHashes, HARD_POLICY_REVISION, capabilities.evidenceRevision),
324
+ hardPolicyRevision: HARD_POLICY_REVISION,
325
+ backendId: capabilities.backendId,
326
+ evidenceRevision: capabilities.evidenceRevision,
327
+ missingCapabilities: [
328
+ "processTreeControl",
329
+ "networkEgressControl",
330
+ "credentialIsolation",
331
+ "registryIsolation",
332
+ "supportsPeerAddressVerification",
333
+ "supportsRedirectReauthorization",
334
+ "supportsRevocation"
335
+ ]
336
+ };
337
+ }
338
+ function inheritedToolContractVersionV3(version) {
339
+ if (version === 3)
340
+ return "3";
341
+ if (version === 4)
342
+ return "4";
343
+ if (version === 5)
344
+ return "5";
345
+ throw new Error("Inherited local approval requires tool contract 3, 4, or 5.");
346
+ }
347
+ export function createDefaultPolicyRuntime(input) {
348
+ const capabilities = baselineNodeCapabilityReport(process.platform);
349
+ const compiled = compiledProfile(input.config);
350
+ const currentEvidenceRevision = () => input.capabilityEvidenceStoreV3?.snapshot().evidenceRevision
351
+ ?? capabilities.evidenceRevision;
352
+ const currentPolicyRevision = () => policyRevisionForSources(compiled.sourceHashes, HARD_POLICY_REVISION, currentEvidenceRevision());
353
+ const grants = input.localApprovalRuntimeV3?.grants ?? input.grants ?? new SessionGrantStore();
354
+ const contractV3 = contractIncludesV3(input.config.toolContractVersion);
355
+ const contractV4 = contractIncludesV4(input.config.toolContractVersion);
356
+ return {
357
+ mode: input.config.policyEngineMode ?? "legacy",
358
+ diagnostics() {
359
+ return {
360
+ policyRevision: currentPolicyRevision(),
361
+ permissionProfileId: compiled.profile.id,
362
+ hardPolicyRevision: HARD_POLICY_REVISION,
363
+ grantRevision: grants.revision(),
364
+ enforcement: {
365
+ active: (input.config.policyEngineMode ?? "legacy") !== "legacy",
366
+ backendId: capabilities.backendId,
367
+ evidenceRevision: currentEvidenceRevision(),
368
+ missingCapabilities: [
369
+ "processTreeControl",
370
+ "networkEgressControl",
371
+ "credentialIsolation",
372
+ "registryIsolation",
373
+ "supportsPeerAddressVerification",
374
+ "supportsRedirectReauthorization",
375
+ "supportsRevocation"
376
+ ]
377
+ }
378
+ };
379
+ },
380
+ get policyRevision() {
381
+ return currentPolicyRevision();
382
+ },
383
+ permissionProfileId: compiled.profile.id,
384
+ grants,
385
+ async authorize(toolName, args) {
386
+ const started = Date.now();
387
+ const policyRevision = currentPolicyRevision();
388
+ const described = describeResource(toolName, args, input.config, input.workspaces, input.guard, input.resourceResolver);
389
+ const now = new Date().toISOString();
390
+ const workspaceId = "workspaceId" in described.resource ? described.resource.workspaceId ?? null : null;
391
+ const context = createRequestContext(input.sessionSource, {
392
+ requestId: `request_${randomUUID().replaceAll("-", "")}`,
393
+ workspaceId,
394
+ runtimeProfileId: "runtime-default",
395
+ permissionProfileId: compiled.profile.id,
396
+ policyRevision,
397
+ sessionGrantRevision: grants.revision(),
398
+ receivedAt: now
399
+ });
400
+ const effectiveScopes = [...effectivePolicyScopes(input.config, context.identity)];
401
+ const digest = inputDigest(args);
402
+ const reconnectBoundApproval = contractV3 && ((toolName === "apply_patch" && typeof args.semantic_preview_id === "string") ||
403
+ toolName === "undo_change_set");
404
+ if (described.approvalBindingV3 && !reconnectBoundApproval) {
405
+ throw new Error("Reconnect-stable approval binding is unavailable for this tool.");
406
+ }
407
+ const approvalBinding = reconnectBoundApproval
408
+ ? described.approvalBindingV3
409
+ : undefined;
410
+ const authorizationContext = approvalBinding
411
+ ? {
412
+ ...context,
413
+ transportSessionId: approvalBinding.transportSessionId,
414
+ workspaceId: approvalBinding.workspaceId
415
+ }
416
+ : context;
417
+ const authorizationResource = approvalBinding
418
+ ? {
419
+ ...described.resource,
420
+ workspaceId: approvalBinding.workspaceId,
421
+ resourceFingerprint: approvalBinding.resourceFingerprint
422
+ }
423
+ : described.resource;
424
+ const authorizationDigest = approvalBinding?.inputDigest ?? digest;
425
+ const approvalToolContractVersion = contractV3
426
+ ? inheritedToolContractVersionV3(input.config.toolContractVersion)
427
+ : String(input.config.toolContractVersion);
428
+ const matchInput = {
429
+ context: authorizationContext,
430
+ operation: operationForApproval(authorizationResource),
431
+ resourceFingerprint: authorizationResource.resourceFingerprint,
432
+ inputDigest: authorizationDigest,
433
+ riskClass: described.riskClass,
434
+ toolContractVersion: approvalToolContractVersion,
435
+ now
436
+ };
437
+ const reserved = contractV3 && input.localApprovalRuntimeV3 && described.riskClass !== "R0" && described.riskClass !== "R4"
438
+ ? await input.localApprovalRuntimeV3.reserveMatching(matchInput)
439
+ : null;
440
+ const v3Addition = contractV3 && CONTRACT_V3_ADDITIONS.includes(toolName);
441
+ const v4Addition = contractV4 &&
442
+ CONTRACT_V4_ADDITIONS.includes(toolName);
443
+ let decision = toolPolicyDefinition(toolName).resourceMode === "context_only" || v3Addition || v4Addition
444
+ ? contextDecision({
445
+ contextPolicyRevision: policyRevision,
446
+ resource: authorizationResource,
447
+ requiredScopes: described.requiredScopes,
448
+ scopes: effectiveScopes,
449
+ riskClass: described.riskClass,
450
+ granted: reserved ? { grantId: reserved.reservation.grantId, approvalId: reserved.approval.approvalId } : undefined
451
+ })
452
+ : evaluatePolicy({
453
+ context: authorizationContext,
454
+ activePolicyRevision: policyRevision,
455
+ profile: compiled.profile,
456
+ resource: authorizationResource,
457
+ riskClass: described.riskClass,
458
+ grants: reserved ? [reserved.reservation.grant] : contractV3 ? [] : grants.snapshot(),
459
+ requiredCapabilities: described.requiredCapabilities,
460
+ capabilities,
461
+ deploymentDisabled: false,
462
+ now,
463
+ platform: process.platform,
464
+ toolContractVersion: String(input.config.toolContractVersion),
465
+ inputDigest: authorizationDigest
466
+ });
467
+ if (reserved && decision.outcome !== "allow") {
468
+ await input.localApprovalRuntimeV3.burn(reserved, "POLICY_NOT_ALLOWED", now);
469
+ }
470
+ let localApproval;
471
+ if (contractV3 && decision.outcome === "approval_required") {
472
+ if (!input.localApprovalRuntimeV3)
473
+ throw new Error("V3 local approval runtime is unavailable.");
474
+ const canonicalAction = operationForApproval(authorizationResource);
475
+ const semanticFacts = described.semanticFactsDigest ?? semanticDigest({
476
+ canonicalAction,
477
+ operation: operationForApproval(authorizationResource),
478
+ resourceFingerprint: authorizationResource.resourceFingerprint,
479
+ inputDigest: authorizationDigest,
480
+ args
481
+ });
482
+ const executionDisplay = described.resource;
483
+ const facts = createAuthorizationFactsV3({
484
+ serverId: input.localApprovalRuntimeV3.serverId,
485
+ credentialRef: authorizationContext.identity.credentialRef,
486
+ credentialRevision: credentialRevisionForIdentity(authorizationContext.identity),
487
+ transportKind: authorizationContext.transportKind,
488
+ transportSessionId: authorizationContext.transportSessionId,
489
+ identityKind: authorizationContext.identity.kind,
490
+ identitySubject: authorizationContext.identity.subject,
491
+ workspaceId: authorizationContext.workspaceId,
492
+ leaseId: null,
493
+ policyRevision,
494
+ evidenceRevision: currentEvidenceRevision(),
495
+ toolContractVersion: inheritedToolContractVersionV3(input.config.toolContractVersion),
496
+ toolName,
497
+ canonicalAction,
498
+ operation: operationForApproval(authorizationResource),
499
+ resourceFingerprint: authorizationResource.resourceFingerprint,
500
+ inputDigest: authorizationDigest,
501
+ semanticFactsDigest: semanticFacts,
502
+ riskClass: described.riskClass
503
+ });
504
+ const requested = await input.localApprovalRuntimeV3.request({
505
+ facts,
506
+ summary: {
507
+ backend: executionDisplay.kind === "execution" && typeof executionDisplay.backendId === "string"
508
+ ? executionDisplay.backendId
509
+ : capabilities.backendId,
510
+ actionKind: operationForApproval(authorizationResource),
511
+ argumentCount: described.approvalRevealArguments
512
+ ? described.approvalRevealArguments.length
513
+ : executionDisplay.kind === "execution" && typeof executionDisplay.argumentCount === "number"
514
+ ? executionDisplay.argumentCount
515
+ : approvalArgumentCount(args),
516
+ logicalScope: context.workspaceId ?? "server",
517
+ identityLabel: context.identity.subject ?? context.identity.kind,
518
+ authoritySummary: executionDisplay.kind === "git_v4" &&
519
+ executionDisplay.integrationMode === "approved_full_access"
520
+ ? "approved Git integration: ambient current-user full_access; no filesystem, credential, registry, network, or broker isolation; typed operation only"
521
+ : executionDisplay.kind === "execution" && executionDisplay.accessMode === "full_access"
522
+ ? "full_access: current-user unrestricted filesystem, credentials, registry, and network; no sandbox; host writeback possible; job-object members only; broker escape resistance none"
523
+ : described.riskClass === "R3"
524
+ ? "ambient or destructive authority; local decision required"
525
+ : "bounded local authority; local decision required",
526
+ digestPrefix: semanticFacts.replace(/^sha256:/, "").slice(0, 16),
527
+ revealArguments: describedApprovalRevealArguments(described, args)
528
+ },
529
+ createdAt: now
530
+ });
531
+ if (toolName === "open_full_access_workspace") {
532
+ if (!input.rootAdmissionRuntimeV3)
533
+ throw new Error("Confirmed-root admission runtime is unavailable.");
534
+ input.rootAdmissionRuntimeV3.registerPendingApproval(requested.approval.approvalId, args, {
535
+ serverId: input.localApprovalRuntimeV3.serverId,
536
+ credentialRef: context.identity.credentialRef,
537
+ credentialRevision: credentialRevisionForIdentity(context.identity),
538
+ transportKind: context.transportKind,
539
+ transportSessionId: context.transportSessionId,
540
+ identityKind: context.identity.kind,
541
+ identitySubject: context.identity.subject,
542
+ policyRevision,
543
+ contractVersion: 3,
544
+ evidenceRevision: currentEvidenceRevision()
545
+ });
546
+ }
547
+ decision = decisionWithApprovalId(decision, requested.approval.approvalId);
548
+ localApproval = {
549
+ schemaVersion: 3,
550
+ approvalId: requested.approval.approvalId,
551
+ serverId: input.localApprovalRuntimeV3.serverId
552
+ };
553
+ }
554
+ decision = decisionWithResourceFingerprint(decision, described.resource.resourceFingerprint);
555
+ const grantId = decision.provenance.find((item) => item.grantId)?.grantId ?? null;
556
+ const approvalId = decision.provenance.find((item) => item.approvalId)?.approvalId ?? null;
557
+ const approvalState = decision.outcome === "approval_required"
558
+ ? "required"
559
+ : grantId
560
+ ? "granted"
561
+ : decision.outcome === "allow"
562
+ ? "not_required"
563
+ : "denied";
564
+ const auditEvent = v4Addition ? null : createAuditEvent({
565
+ eventId: `event_${randomUUID().replaceAll("-", "")}`,
566
+ timestamp: new Date().toISOString(),
567
+ context,
568
+ decision,
569
+ resource: described.resource,
570
+ toolName,
571
+ canonicalAction: toolName,
572
+ capabilities,
573
+ approvalState,
574
+ grantId,
575
+ durationMs: Date.now() - started,
576
+ resultCode: null,
577
+ exitCode: null,
578
+ boundedByteCounts: {}
579
+ });
580
+ const mutating = toolMayMutate(toolName, input.config);
581
+ const requirement = resolveAuditRequirement({
582
+ auditMode: input.config.auditMode ?? "auto",
583
+ policyEngineMode: input.config.policyEngineMode ?? "legacy"
584
+ }, described.riskClass, mutating);
585
+ const auditContext = !auditEvent || requirement === "disabled" || !input.persistentAudit
586
+ ? undefined
587
+ : {
588
+ authorizationEvent: authorizationAuditEventV2Schema.parse({
589
+ schemaVersion: 2,
590
+ eventId: auditEvent.eventId,
591
+ eventType: "authorization",
592
+ timestamp: auditEvent.timestamp,
593
+ requestId: auditEvent.requestId,
594
+ authorizationEventId: null,
595
+ decisionId: auditEvent.decisionId,
596
+ credentialRef: auditEvent.credentialRef,
597
+ transportSessionId: auditEvent.transportSessionId,
598
+ toolName: auditEvent.toolName,
599
+ canonicalAction: auditEvent.canonicalAction,
600
+ workspaceId: auditEvent.workspaceId,
601
+ workspaceRef: null,
602
+ policyRevision: auditEvent.policyRevision,
603
+ resourceSummary: auditEvent.relativeResourceSummary,
604
+ resourceFingerprint: auditEvent.resourceFingerprint.replace(/^sha256:/, ""),
605
+ outcome: auditEvent.outcome,
606
+ reasonCode: auditEvent.reasonCode,
607
+ safeRuleIds: auditEvent.safeRuleIds,
608
+ approvalState: auditEvent.approvalState,
609
+ grantId: auditEvent.grantId,
610
+ sandboxBackend: auditEvent.sandboxBackend,
611
+ riskClass: described.riskClass,
612
+ ...(described.semanticAuditFacts ? { semanticFacts: described.semanticAuditFacts } : {})
613
+ }),
614
+ requirement,
615
+ riskClass: described.riskClass,
616
+ mutating,
617
+ ...(described.semanticAuditFacts ? { semanticFacts: described.semanticAuditFacts } : {})
618
+ };
619
+ let v4Authorization;
620
+ if (v4Addition &&
621
+ described.resource.kind === "git_v4" &&
622
+ ["R1", "R2", "R3"].includes(described.riskClass)) {
623
+ const expiresAt = new Date(Date.parse(now) + 5 * 60_000).toISOString();
624
+ const facts = createAuthorizationFactsV4({
625
+ serverId: input.localApprovalRuntimeV3?.serverId ?? "server-v4",
626
+ ownerId: ownerIdForPolicyIdentity(context.identity),
627
+ credentialRef: context.identity.credentialRef,
628
+ credentialRevision: credentialRevisionForIdentity(context.identity),
629
+ transportKind: context.transportKind,
630
+ transportSessionId: context.transportSessionId,
631
+ repositoryId: described.resource.repositoryId,
632
+ worktreeId: described.resource.worktreeId,
633
+ policyRevision,
634
+ configurationRevision: semanticDigest({
635
+ gitMode: input.config.gitMode,
636
+ gitIntegrations: input.config.gitIntegrations,
637
+ contract: input.config.toolContractVersion
638
+ }),
639
+ capabilityRevision: currentEvidenceRevision(),
640
+ pathPolicyRevision: semanticDigest({ blockedGlobs: input.config.blockedGlobs }),
641
+ secretPolicyRevision: HARD_POLICY_REVISION,
642
+ toolContractVersion: "4",
643
+ toolName,
644
+ canonicalAction: described.resource.operation,
645
+ operation: described.resource.operation,
646
+ resourceFingerprint: described.resource.resourceFingerprint,
647
+ inputDigest: digest,
648
+ semanticFactsDigest: described.semanticFactsDigest ?? semanticDigest(described.resource),
649
+ riskClass: described.riskClass,
650
+ issuedAt: now,
651
+ expiresAt
652
+ });
653
+ v4Authorization = auditEventV4Schema.parse({
654
+ schemaVersion: 4,
655
+ contractVersion: 4,
656
+ eventId: `event_${randomUUID().replaceAll("-", "")}`,
657
+ eventType: "authorization",
658
+ timestamp: now,
659
+ requestId: context.requestId,
660
+ authorizationEventId: null,
661
+ decisionId: decision.decisionId,
662
+ toolName,
663
+ canonicalAction: described.resource.operation,
664
+ workspaceId,
665
+ policyRevision,
666
+ subjectFingerprint: facts.subjectFingerprint,
667
+ contextFingerprint: facts.contextFingerprint,
668
+ resultCode: decision.reasonCode,
669
+ counts: {
670
+ affectedPathCount: described.resource.affectedPathCount,
671
+ affectedByteCount: described.resource.affectedByteCount
672
+ },
673
+ repositoryId: described.resource.repositoryId,
674
+ taskWorktreeId: described.resource.worktreeId,
675
+ operationId: null,
676
+ outcome: decision.outcome,
677
+ riskClass: described.riskClass,
678
+ resourceFingerprint: described.resource.resourceFingerprint,
679
+ approvalId,
680
+ grantId
681
+ });
682
+ }
683
+ return {
684
+ decision,
685
+ auditEvent,
686
+ auditContext,
687
+ localApproval,
688
+ v4Authorization,
689
+ reservation: reserved && decision.outcome === "allow"
690
+ ? {
691
+ schemaVersion: 3,
692
+ commit: () => input.localApprovalRuntimeV3.commitConsume(reserved, new Date().toISOString()),
693
+ burn: (resultCode) => input.localApprovalRuntimeV3.burn(reserved, resultCode, new Date().toISOString())
694
+ }
695
+ : undefined
696
+ };
697
+ },
698
+ async audit(event) {
699
+ await input.auditSink?.(event);
700
+ },
701
+ async persistAuthorization(context) {
702
+ if (!input.persistentAudit)
703
+ throw new Error("Persistent audit runtime is unavailable.");
704
+ await input.persistentAudit.persistAuthorization(context);
705
+ },
706
+ async persistExecution(context, execution) {
707
+ if (!input.persistentAudit)
708
+ throw new Error("Persistent audit runtime is unavailable.");
709
+ return input.persistentAudit.persistExecution(context, execution);
710
+ }
711
+ };
712
+ }
713
+ //# sourceMappingURL=runtime.js.map