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.
- package/AGENTS.example.md +20 -0
- package/CHANGELOG.md +342 -0
- package/CHATGPT_PROMPT.md +12 -0
- package/CLOUDFLARED_VERIFIED_INSTALL.md +94 -0
- package/CODEX_PROMPT.md +12 -0
- package/CONTRIBUTING.md +62 -0
- package/DOMAIN_SETUP.md +275 -0
- package/FAQ.md +366 -0
- package/FAQ_ZH.md +329 -0
- package/LICENSE +21 -0
- package/PUBLIC_LAUNCH_CHECKLIST.md +111 -0
- package/README.md +490 -0
- package/README_ZH.md +747 -0
- package/SECURITY.md +295 -0
- package/config.example.env +103 -0
- package/dist/access/fullAccessLease.js +148 -0
- package/dist/access/fullAccessLease.js.map +1 -0
- package/dist/access/protectedRoots.js +122 -0
- package/dist/access/protectedRoots.js.map +1 -0
- package/dist/access/rootAdmission.js +347 -0
- package/dist/access/rootAdmission.js.map +1 -0
- package/dist/analysis/cache.js +27 -0
- package/dist/analysis/cache.js.map +1 -0
- package/dist/analysis/classify.js +102 -0
- package/dist/analysis/classify.js.map +1 -0
- package/dist/analysis/extract.js +139 -0
- package/dist/analysis/extract.js.map +1 -0
- package/dist/analysis/graph.js +22 -0
- package/dist/analysis/graph.js.map +1 -0
- package/dist/analysis/impact.js +167 -0
- package/dist/analysis/impact.js.map +1 -0
- package/dist/analysis/index.js +215 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/analysis/inventory.js +51 -0
- package/dist/analysis/inventory.js.map +1 -0
- package/dist/analysis/providers.js +24 -0
- package/dist/analysis/providers.js.map +1 -0
- package/dist/analysis/rank.js +27 -0
- package/dist/analysis/rank.js.map +1 -0
- package/dist/analysis/types.js +8 -0
- package/dist/analysis/types.js.map +1 -0
- package/dist/audit/canonicalJson.js +79 -0
- package/dist/audit/canonicalJson.js.map +1 -0
- package/dist/audit/diagnostics.js +128 -0
- package/dist/audit/diagnostics.js.map +1 -0
- package/dist/audit/index.js +12 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/lifecycleV3.js +53 -0
- package/dist/audit/lifecycleV3.js.map +1 -0
- package/dist/audit/lifecycleV4.js +70 -0
- package/dist/audit/lifecycleV4.js.map +1 -0
- package/dist/audit/lock.js +195 -0
- package/dist/audit/lock.js.map +1 -0
- package/dist/audit/queryTool.js +120 -0
- package/dist/audit/queryTool.js.map +1 -0
- package/dist/audit/runtime.js +48 -0
- package/dist/audit/runtime.js.map +1 -0
- package/dist/audit/schemas.js +640 -0
- package/dist/audit/schemas.js.map +1 -0
- package/dist/audit/store.js +1309 -0
- package/dist/audit/store.js.map +1 -0
- package/dist/audit/transactionParticipant.js +45 -0
- package/dist/audit/transactionParticipant.js.map +1 -0
- package/dist/audit/types.js +11 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/auth/audit.js +44 -0
- package/dist/auth/audit.js.map +1 -0
- package/dist/auth/authorizationStore.js +333 -0
- package/dist/auth/authorizationStore.js.map +1 -0
- package/dist/auth/challenges.js +25 -0
- package/dist/auth/challenges.js.map +1 -0
- package/dist/auth/clientStore.js +469 -0
- package/dist/auth/clientStore.js.map +1 -0
- package/dist/auth/cloudflareConfig.js +112 -0
- package/dist/auth/cloudflareConfig.js.map +1 -0
- package/dist/auth/configuration.js +167 -0
- package/dist/auth/configuration.js.map +1 -0
- package/dist/auth/credentialStore.js +65 -0
- package/dist/auth/credentialStore.js.map +1 -0
- package/dist/auth/deploymentLock.js +220 -0
- package/dist/auth/deploymentLock.js.map +1 -0
- package/dist/auth/deploymentRegistry.js +149 -0
- package/dist/auth/deploymentRegistry.js.map +1 -0
- package/dist/auth/errors.js +26 -0
- package/dist/auth/errors.js.map +1 -0
- package/dist/auth/grantStore.js +307 -0
- package/dist/auth/grantStore.js.map +1 -0
- package/dist/auth/index.js +39 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/keyManager.js +148 -0
- package/dist/auth/keyManager.js.map +1 -0
- package/dist/auth/localAdminSession.js +173 -0
- package/dist/auth/localAdminSession.js.map +1 -0
- package/dist/auth/metadata.js +69 -0
- package/dist/auth/metadata.js.map +1 -0
- package/dist/auth/oauthProvider.js +589 -0
- package/dist/auth/oauthProvider.js.map +1 -0
- package/dist/auth/ownerApproval.js +51 -0
- package/dist/auth/ownerApproval.js.map +1 -0
- package/dist/auth/policyIdentity.js +189 -0
- package/dist/auth/policyIdentity.js.map +1 -0
- package/dist/auth/rateLimits.js +66 -0
- package/dist/auth/rateLimits.js.map +1 -0
- package/dist/auth/recovery.js +275 -0
- package/dist/auth/recovery.js.map +1 -0
- package/dist/auth/requestContext.js +34 -0
- package/dist/auth/requestContext.js.map +1 -0
- package/dist/auth/resourceMiddleware.js +147 -0
- package/dist/auth/resourceMiddleware.js.map +1 -0
- package/dist/auth/runtimeStatus.js +51 -0
- package/dist/auth/runtimeStatus.js.map +1 -0
- package/dist/auth/schemas.js +84 -0
- package/dist/auth/schemas.js.map +1 -0
- package/dist/auth/stateStore.js +468 -0
- package/dist/auth/stateStore.js.map +1 -0
- package/dist/auth/tokenService.js +631 -0
- package/dist/auth/tokenService.js.map +1 -0
- package/dist/auth/toolSecurity.js +108 -0
- package/dist/auth/toolSecurity.js.map +1 -0
- package/dist/auth/types.js +6 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/auth/windowsDpapi.js +193 -0
- package/dist/auth/windowsDpapi.js.map +1 -0
- package/dist/bashOps.js +292 -0
- package/dist/bashOps.js.map +1 -0
- package/dist/capabilitiesOps.js +412 -0
- package/dist/capabilitiesOps.js.map +1 -0
- package/dist/changesets/crypto.js +92 -0
- package/dist/changesets/crypto.js.map +1 -0
- package/dist/changesets/index.js +9 -0
- package/dist/changesets/index.js.map +1 -0
- package/dist/changesets/moveStore.js +237 -0
- package/dist/changesets/moveStore.js.map +1 -0
- package/dist/changesets/moveUndo.js +386 -0
- package/dist/changesets/moveUndo.js.map +1 -0
- package/dist/changesets/schemas.js +234 -0
- package/dist/changesets/schemas.js.map +1 -0
- package/dist/changesets/store.js +573 -0
- package/dist/changesets/store.js.map +1 -0
- package/dist/changesets/types.js +9 -0
- package/dist/changesets/types.js.map +1 -0
- package/dist/changesets/undo.js +525 -0
- package/dist/changesets/undo.js.map +1 -0
- package/dist/changesets/unifiedUndo.js +31 -0
- package/dist/changesets/unifiedUndo.js.map +1 -0
- package/dist/cliEnvironment.js +85 -0
- package/dist/cliEnvironment.js.map +1 -0
- package/dist/codexSessions.js +733 -0
- package/dist/codexSessions.js.map +1 -0
- package/dist/codexgptSupertool.js +216 -0
- package/dist/codexgptSupertool.js.map +1 -0
- package/dist/codexproSupertool.js +204 -0
- package/dist/codexproSupertool.js.map +1 -0
- package/dist/config.js +733 -0
- package/dist/config.js.map +1 -0
- package/dist/control/localApprovalClient.js +287 -0
- package/dist/control/localApprovalClient.js.map +1 -0
- package/dist/control/localApprovalServer.js +466 -0
- package/dist/control/localApprovalServer.js.map +1 -0
- package/dist/control/runtime.js +178 -0
- package/dist/control/runtime.js.map +1 -0
- package/dist/control/schemas.js +184 -0
- package/dist/control/schemas.js.map +1 -0
- package/dist/control/windowsLocalControl.js +348 -0
- package/dist/control/windowsLocalControl.js.map +1 -0
- package/dist/fsOps.js +541 -0
- package/dist/fsOps.js.map +1 -0
- package/dist/git/admission.js +26 -0
- package/dist/git/admission.js.map +1 -0
- package/dist/git/branchService.js +51 -0
- package/dist/git/branchService.js.map +1 -0
- package/dist/git/capabilities.js +143 -0
- package/dist/git/capabilities.js.map +1 -0
- package/dist/git/commitService.js +344 -0
- package/dist/git/commitService.js.map +1 -0
- package/dist/git/durableState.js +151 -0
- package/dist/git/durableState.js.map +1 -0
- package/dist/git/execution.js +451 -0
- package/dist/git/execution.js.map +1 -0
- package/dist/git/fileTransaction.js +50 -0
- package/dist/git/fileTransaction.js.map +1 -0
- package/dist/git/indexService.js +421 -0
- package/dist/git/indexService.js.map +1 -0
- package/dist/git/integrations.js +653 -0
- package/dist/git/integrations.js.map +1 -0
- package/dist/git/locks.js +287 -0
- package/dist/git/locks.js.map +1 -0
- package/dist/git/mutationContext.js +92 -0
- package/dist/git/mutationContext.js.map +1 -0
- package/dist/git/mutationJournal.js +91 -0
- package/dist/git/mutationJournal.js.map +1 -0
- package/dist/git/mutationService.js +352 -0
- package/dist/git/mutationService.js.map +1 -0
- package/dist/git/normalization.js +57 -0
- package/dist/git/normalization.js.map +1 -0
- package/dist/git/objectQuarantine.js +243 -0
- package/dist/git/objectQuarantine.js.map +1 -0
- package/dist/git/opaqueRecordStore.js +187 -0
- package/dist/git/opaqueRecordStore.js.map +1 -0
- package/dist/git/operationStore.js +287 -0
- package/dist/git/operationStore.js.map +1 -0
- package/dist/git/parsers.js +311 -0
- package/dist/git/parsers.js.map +1 -0
- package/dist/git/privateIndex.js +79 -0
- package/dist/git/privateIndex.js.map +1 -0
- package/dist/git/productionBootstrap.js +39 -0
- package/dist/git/productionBootstrap.js.map +1 -0
- package/dist/git/readService.js +846 -0
- package/dist/git/readService.js.map +1 -0
- package/dist/git/recovery.js +417 -0
- package/dist/git/recovery.js.map +1 -0
- package/dist/git/repositoryIdentity.js +611 -0
- package/dist/git/repositoryIdentity.js.map +1 -0
- package/dist/git/repositoryStore.js +237 -0
- package/dist/git/repositoryStore.js.map +1 -0
- package/dist/git/resources.js +113 -0
- package/dist/git/resources.js.map +1 -0
- package/dist/git/restoreService.js +178 -0
- package/dist/git/restoreService.js.map +1 -0
- package/dist/git/reviewToken.js +86 -0
- package/dist/git/reviewToken.js.map +1 -0
- package/dist/git/stashService.js +566 -0
- package/dist/git/stashService.js.map +1 -0
- package/dist/git/stateToken.js +139 -0
- package/dist/git/stateToken.js.map +1 -0
- package/dist/gitOps.js +147 -0
- package/dist/gitOps.js.map +1 -0
- package/dist/guard.js +608 -0
- package/dist/guard.js.map +1 -0
- package/dist/guidance/diagnostics.js +14 -0
- package/dist/guidance/diagnostics.js.map +1 -0
- package/dist/guidance/instructions.js +167 -0
- package/dist/guidance/instructions.js.map +1 -0
- package/dist/guidance/mode.js +18 -0
- package/dist/guidance/mode.js.map +1 -0
- package/dist/guidance/openaiSkillMetadata.js +29 -0
- package/dist/guidance/openaiSkillMetadata.js.map +1 -0
- package/dist/guidance/safeTextReader.js +171 -0
- package/dist/guidance/safeTextReader.js.map +1 -0
- package/dist/guidance/skillCatalog.js +70 -0
- package/dist/guidance/skillCatalog.js.map +1 -0
- package/dist/guidance/skillDiscovery.js +353 -0
- package/dist/guidance/skillDiscovery.js.map +1 -0
- package/dist/guidance/skillMetadata.js +115 -0
- package/dist/guidance/skillMetadata.js.map +1 -0
- package/dist/guidance/skillResources.js +146 -0
- package/dist/guidance/skillResources.js.map +1 -0
- package/dist/handoffOps.js +449 -0
- package/dist/handoffOps.js.map +1 -0
- package/dist/http/localAdminApp.js +203 -0
- package/dist/http/localAdminApp.js.map +1 -0
- package/dist/http/oauthMcpRuntime.js +294 -0
- package/dist/http/oauthMcpRuntime.js.map +1 -0
- package/dist/http/publicApp.js +350 -0
- package/dist/http/publicApp.js.map +1 -0
- package/dist/http/securityHeaders.js +11 -0
- package/dist/http/securityHeaders.js.map +1 -0
- package/dist/http.js +2076 -0
- package/dist/http.js.map +1 -0
- package/dist/moves/engine.js +1079 -0
- package/dist/moves/engine.js.map +1 -0
- package/dist/moves/index.js +6 -0
- package/dist/moves/index.js.map +1 -0
- package/dist/moves/planner.js +270 -0
- package/dist/moves/planner.js.map +1 -0
- package/dist/moves/recovery.js +557 -0
- package/dist/moves/recovery.js.map +1 -0
- package/dist/moves/service.js +300 -0
- package/dist/moves/service.js.map +1 -0
- package/dist/moves/types.js +11 -0
- package/dist/moves/types.js.map +1 -0
- package/dist/mutations/index.js +4 -0
- package/dist/mutations/index.js.map +1 -0
- package/dist/mutations/lifecycle.js +165 -0
- package/dist/mutations/lifecycle.js.map +1 -0
- package/dist/mutations/localService.js +163 -0
- package/dist/mutations/localService.js.map +1 -0
- package/dist/mutations/runtime.js +322 -0
- package/dist/mutations/runtime.js.map +1 -0
- package/dist/mutations/types.js +2 -0
- package/dist/mutations/types.js.map +1 -0
- package/dist/mutations/writers.js +360 -0
- package/dist/mutations/writers.js.map +1 -0
- package/dist/patchOps.js +420 -0
- package/dist/patchOps.js.map +1 -0
- package/dist/policy/approval.js +306 -0
- package/dist/policy/approval.js.map +1 -0
- package/dist/policy/audit.js +88 -0
- package/dist/policy/audit.js.map +1 -0
- package/dist/policy/authorizationFacts.js +187 -0
- package/dist/policy/authorizationFacts.js.map +1 -0
- package/dist/policy/compat.js +104 -0
- package/dist/policy/compat.js.map +1 -0
- package/dist/policy/context.js +31 -0
- package/dist/policy/context.js.map +1 -0
- package/dist/policy/enforcement.js +46 -0
- package/dist/policy/enforcement.js.map +1 -0
- package/dist/policy/evaluator.js +338 -0
- package/dist/policy/evaluator.js.map +1 -0
- package/dist/policy/executionCapabilities.js +80 -0
- package/dist/policy/executionCapabilities.js.map +1 -0
- package/dist/policy/executionResources.js +192 -0
- package/dist/policy/executionResources.js.map +1 -0
- package/dist/policy/fullAccessResources.js +23 -0
- package/dist/policy/fullAccessResources.js.map +1 -0
- package/dist/policy/hardPolicy.js +50 -0
- package/dist/policy/hardPolicy.js.map +1 -0
- package/dist/policy/identity.js +142 -0
- package/dist/policy/identity.js.map +1 -0
- package/dist/policy/integration.js +331 -0
- package/dist/policy/integration.js.map +1 -0
- package/dist/policy/pendingApprovals.js +301 -0
- package/dist/policy/pendingApprovals.js.map +1 -0
- package/dist/policy/profileStore.js +367 -0
- package/dist/policy/profileStore.js.map +1 -0
- package/dist/policy/resources.js +249 -0
- package/dist/policy/resources.js.map +1 -0
- package/dist/policy/runtime.js +713 -0
- package/dist/policy/runtime.js.map +1 -0
- package/dist/policy/schemas.js +625 -0
- package/dist/policy/schemas.js.map +1 -0
- package/dist/policy/toolPolicy.js +141 -0
- package/dist/policy/toolPolicy.js.map +1 -0
- package/dist/policy/transport.js +10 -0
- package/dist/policy/transport.js.map +1 -0
- package/dist/policy/types.js +31 -0
- package/dist/policy/types.js.map +1 -0
- package/dist/proContext.js +675 -0
- package/dist/proContext.js.map +1 -0
- package/dist/process/authority.js +18 -0
- package/dist/process/authority.js.map +1 -0
- package/dist/process/backendDiscovery.js +83 -0
- package/dist/process/backendDiscovery.js.map +1 -0
- package/dist/process/commandCompiler.js +71 -0
- package/dist/process/commandCompiler.js.map +1 -0
- package/dist/process/outputCursor.js +67 -0
- package/dist/process/outputCursor.js.map +1 -0
- package/dist/process/outputQuota.js +94 -0
- package/dist/process/outputQuota.js.map +1 -0
- package/dist/process/outputRing.js +138 -0
- package/dist/process/outputRing.js.map +1 -0
- package/dist/process/processAuditCoordinator.js +52 -0
- package/dist/process/processAuditCoordinator.js.map +1 -0
- package/dist/process/processManager.js +311 -0
- package/dist/process/processManager.js.map +1 -0
- package/dist/process/runCommand.js +332 -0
- package/dist/process/runCommand.js.map +1 -0
- package/dist/process/streamingRedactor.js +105 -0
- package/dist/process/streamingRedactor.js.map +1 -0
- package/dist/process/types.js +2 -0
- package/dist/process/types.js.map +1 -0
- package/dist/process/windowsHostClient.js +604 -0
- package/dist/process/windowsHostClient.js.map +1 -0
- package/dist/process/windowsHostProtocol.js +270 -0
- package/dist/process/windowsHostProtocol.js.map +1 -0
- package/dist/process/windowsPersistentBackend.js +263 -0
- package/dist/process/windowsPersistentBackend.js.map +1 -0
- package/dist/productionRuntime.js +907 -0
- package/dist/productionRuntime.js.map +1 -0
- package/dist/profileStore.js +231 -0
- package/dist/profileStore.js.map +1 -0
- package/dist/redact.js +124 -0
- package/dist/redact.js.map +1 -0
- package/dist/searchOps.js +186 -0
- package/dist/searchOps.js.map +1 -0
- package/dist/selfTestOps.js +786 -0
- package/dist/selfTestOps.js.map +1 -0
- package/dist/semantic/budgets.js +12 -0
- package/dist/semantic/budgets.js.map +1 -0
- package/dist/semantic/builtin/typescriptAssets.js +68 -0
- package/dist/semantic/builtin/typescriptAssets.js.map +1 -0
- package/dist/semantic/builtin/typescriptProvider.js +211 -0
- package/dist/semantic/builtin/typescriptProvider.js.map +1 -0
- package/dist/semantic/builtin/typescriptWorker.js +365 -0
- package/dist/semantic/builtin/typescriptWorker.js.map +1 -0
- package/dist/semantic/diffPreview.js +36 -0
- package/dist/semantic/diffPreview.js.map +1 -0
- package/dist/semantic/index.js +11 -0
- package/dist/semantic/index.js.map +1 -0
- package/dist/semantic/manager.js +522 -0
- package/dist/semantic/manager.js.map +1 -0
- package/dist/semantic/positions.js +86 -0
- package/dist/semantic/positions.js.map +1 -0
- package/dist/semantic/previewStore.js +276 -0
- package/dist/semantic/previewStore.js.map +1 -0
- package/dist/semantic/projectResolver.js +309 -0
- package/dist/semantic/projectResolver.js.map +1 -0
- package/dist/semantic/sourceSnapshot.js +54 -0
- package/dist/semantic/sourceSnapshot.js.map +1 -0
- package/dist/semantic/status.js +46 -0
- package/dist/semantic/status.js.map +1 -0
- package/dist/semantic/types.js +2 -0
- package/dist/semantic/types.js.map +1 -0
- package/dist/server.js +8676 -0
- package/dist/server.js.map +1 -0
- package/dist/stdio.js +64 -0
- package/dist/stdio.js.map +1 -0
- package/dist/toolCardWidget.js +2000 -0
- package/dist/toolCardWidget.js.map +1 -0
- package/dist/tools/contracts/catalog.js +111 -0
- package/dist/tools/contracts/catalog.js.map +1 -0
- package/dist/tools/contracts/index.js +8 -0
- package/dist/tools/contracts/index.js.map +1 -0
- package/dist/tools/contracts/registration.js +27 -0
- package/dist/tools/contracts/registration.js.map +1 -0
- package/dist/tools/contracts/schemas.js +11 -0
- package/dist/tools/contracts/schemas.js.map +1 -0
- package/dist/tools/contracts/types.js +2 -0
- package/dist/tools/contracts/types.js.map +1 -0
- package/dist/tools/contracts/v3.js +76 -0
- package/dist/tools/contracts/v3.js.map +1 -0
- package/dist/tools/contracts/v4.js +39 -0
- package/dist/tools/contracts/v4.js.map +1 -0
- package/dist/tools/contracts/v5.js +20 -0
- package/dist/tools/contracts/v5.js.map +1 -0
- package/dist/tools/phase3dServer.js +350 -0
- package/dist/tools/phase3dServer.js.map +1 -0
- package/dist/tools/schemas/applyPatch.js +388 -0
- package/dist/tools/schemas/applyPatch.js.map +1 -0
- package/dist/tools/schemas/bash.js +202 -0
- package/dist/tools/schemas/bash.js.map +1 -0
- package/dist/tools/schemas/closeWorkspace.js +105 -0
- package/dist/tools/schemas/closeWorkspace.js.map +1 -0
- package/dist/tools/schemas/codexContext.js +402 -0
- package/dist/tools/schemas/codexContext.js.map +1 -0
- package/dist/tools/schemas/codexSessions.js +328 -0
- package/dist/tools/schemas/codexSessions.js.map +1 -0
- package/dist/tools/schemas/codexgpt.js +1068 -0
- package/dist/tools/schemas/codexgpt.js.map +1 -0
- package/dist/tools/schemas/codexgptInventory.js +359 -0
- package/dist/tools/schemas/codexgptInventory.js.map +1 -0
- package/dist/tools/schemas/codexgptSelfTest.js +563 -0
- package/dist/tools/schemas/codexgptSelfTest.js.map +1 -0
- package/dist/tools/schemas/codexpro.js +917 -0
- package/dist/tools/schemas/codexpro.js.map +1 -0
- package/dist/tools/schemas/codexproInventory.js +352 -0
- package/dist/tools/schemas/codexproInventory.js.map +1 -0
- package/dist/tools/schemas/codexproSelfTest.js +546 -0
- package/dist/tools/schemas/codexproSelfTest.js.map +1 -0
- package/dist/tools/schemas/common.js +21 -0
- package/dist/tools/schemas/common.js.map +1 -0
- package/dist/tools/schemas/createTaskWorktree.js +51 -0
- package/dist/tools/schemas/createTaskWorktree.js.map +1 -0
- package/dist/tools/schemas/edit.js +321 -0
- package/dist/tools/schemas/edit.js.map +1 -0
- package/dist/tools/schemas/execution.js +330 -0
- package/dist/tools/schemas/execution.js.map +1 -0
- package/dist/tools/schemas/exportProContext.js +370 -0
- package/dist/tools/schemas/exportProContext.js.map +1 -0
- package/dist/tools/schemas/getTaskWorktree.js +19 -0
- package/dist/tools/schemas/getTaskWorktree.js.map +1 -0
- package/dist/tools/schemas/gitBranch.js +42 -0
- package/dist/tools/schemas/gitBranch.js.map +1 -0
- package/dist/tools/schemas/gitCommit.js +40 -0
- package/dist/tools/schemas/gitCommit.js.map +1 -0
- package/dist/tools/schemas/gitCreateBranch.js +22 -0
- package/dist/tools/schemas/gitCreateBranch.js.map +1 -0
- package/dist/tools/schemas/gitDiff.js +222 -0
- package/dist/tools/schemas/gitDiff.js.map +1 -0
- package/dist/tools/schemas/gitLog.js +41 -0
- package/dist/tools/schemas/gitLog.js.map +1 -0
- package/dist/tools/schemas/gitRestore.js +47 -0
- package/dist/tools/schemas/gitRestore.js.map +1 -0
- package/dist/tools/schemas/gitStage.js +33 -0
- package/dist/tools/schemas/gitStage.js.map +1 -0
- package/dist/tools/schemas/gitStash.js +102 -0
- package/dist/tools/schemas/gitStash.js.map +1 -0
- package/dist/tools/schemas/gitStatus.js +226 -0
- package/dist/tools/schemas/gitStatus.js.map +1 -0
- package/dist/tools/schemas/gitV4Common.js +205 -0
- package/dist/tools/schemas/gitV4Common.js.map +1 -0
- package/dist/tools/schemas/guidance.js +40 -0
- package/dist/tools/schemas/guidance.js.map +1 -0
- package/dist/tools/schemas/handoffToAgent.js +276 -0
- package/dist/tools/schemas/handoffToAgent.js.map +1 -0
- package/dist/tools/schemas/handoffToCodex.js +137 -0
- package/dist/tools/schemas/handoffToCodex.js.map +1 -0
- package/dist/tools/schemas/inspectWorkspace.js +379 -0
- package/dist/tools/schemas/inspectWorkspace.js.map +1 -0
- package/dist/tools/schemas/listTaskWorktrees.js +21 -0
- package/dist/tools/schemas/listTaskWorktrees.js.map +1 -0
- package/dist/tools/schemas/listWorkspaces.js +134 -0
- package/dist/tools/schemas/listWorkspaces.js.map +1 -0
- package/dist/tools/schemas/loadSkill.js +619 -0
- package/dist/tools/schemas/loadSkill.js.map +1 -0
- package/dist/tools/schemas/mergeTaskWorktree.js +105 -0
- package/dist/tools/schemas/mergeTaskWorktree.js.map +1 -0
- package/dist/tools/schemas/movePaths.js +175 -0
- package/dist/tools/schemas/movePaths.js.map +1 -0
- package/dist/tools/schemas/openCurrentWorkspace.js +174 -0
- package/dist/tools/schemas/openCurrentWorkspace.js.map +1 -0
- package/dist/tools/schemas/openFullAccessWorkspace.js +81 -0
- package/dist/tools/schemas/openFullAccessWorkspace.js.map +1 -0
- package/dist/tools/schemas/openWorkspace.js +193 -0
- package/dist/tools/schemas/openWorkspace.js.map +1 -0
- package/dist/tools/schemas/queryAuditEvents.js +193 -0
- package/dist/tools/schemas/queryAuditEvents.js.map +1 -0
- package/dist/tools/schemas/read.js +199 -0
- package/dist/tools/schemas/read.js.map +1 -0
- package/dist/tools/schemas/readCodexSession.js +353 -0
- package/dist/tools/schemas/readCodexSession.js.map +1 -0
- package/dist/tools/schemas/readHandoff.js +446 -0
- package/dist/tools/schemas/readHandoff.js.map +1 -0
- package/dist/tools/schemas/removeTaskWorktree.js +40 -0
- package/dist/tools/schemas/removeTaskWorktree.js.map +1 -0
- package/dist/tools/schemas/search.js +235 -0
- package/dist/tools/schemas/search.js.map +1 -0
- package/dist/tools/schemas/semantic.js +195 -0
- package/dist/tools/schemas/semantic.js.map +1 -0
- package/dist/tools/schemas/serverConfig.js +157 -0
- package/dist/tools/schemas/serverConfig.js.map +1 -0
- package/dist/tools/schemas/showChanges.js +283 -0
- package/dist/tools/schemas/showChanges.js.map +1 -0
- package/dist/tools/schemas/transactionResult.js +11 -0
- package/dist/tools/schemas/transactionResult.js.map +1 -0
- package/dist/tools/schemas/tree.js +136 -0
- package/dist/tools/schemas/tree.js.map +1 -0
- package/dist/tools/schemas/undoChangeSet.js +152 -0
- package/dist/tools/schemas/undoChangeSet.js.map +1 -0
- package/dist/tools/schemas/waitForHandoff.js +462 -0
- package/dist/tools/schemas/waitForHandoff.js.map +1 -0
- package/dist/tools/schemas/workspaceSnapshot.js +145 -0
- package/dist/tools/schemas/workspaceSnapshot.js.map +1 -0
- package/dist/tools/schemas/write.js +285 -0
- package/dist/tools/schemas/write.js.map +1 -0
- package/dist/transactions/atomicFs.js +438 -0
- package/dist/transactions/atomicFs.js.map +1 -0
- package/dist/transactions/atomicStateFile.js +190 -0
- package/dist/transactions/atomicStateFile.js.map +1 -0
- package/dist/transactions/engine.js +574 -0
- package/dist/transactions/engine.js.map +1 -0
- package/dist/transactions/index.js +12 -0
- package/dist/transactions/index.js.map +1 -0
- package/dist/transactions/installation.js +158 -0
- package/dist/transactions/installation.js.map +1 -0
- package/dist/transactions/manifestV2Store.js +96 -0
- package/dist/transactions/manifestV2Store.js.map +1 -0
- package/dist/transactions/participantRecovery.js +98 -0
- package/dist/transactions/participantRecovery.js.map +1 -0
- package/dist/transactions/recovery.js +513 -0
- package/dist/transactions/recovery.js.map +1 -0
- package/dist/transactions/schemas.js +365 -0
- package/dist/transactions/schemas.js.map +1 -0
- package/dist/transactions/stateRoot.js +63 -0
- package/dist/transactions/stateRoot.js.map +1 -0
- package/dist/transactions/types.js +11 -0
- package/dist/transactions/types.js.map +1 -0
- package/dist/transactions/workspaceLock.js +201 -0
- package/dist/transactions/workspaceLock.js.map +1 -0
- package/dist/workspaceOps.js +924 -0
- package/dist/workspaceOps.js.map +1 -0
- package/dist/worktrees/candidateWorkspace.js +566 -0
- package/dist/worktrees/candidateWorkspace.js.map +1 -0
- package/dist/worktrees/manager.js +258 -0
- package/dist/worktrees/manager.js.map +1 -0
- package/dist/worktrees/materializer.js +60 -0
- package/dist/worktrees/materializer.js.map +1 -0
- package/dist/worktrees/mergeExecute.js +498 -0
- package/dist/worktrees/mergeExecute.js.map +1 -0
- package/dist/worktrees/mergePlanStore.js +247 -0
- package/dist/worktrees/mergePlanStore.js.map +1 -0
- package/dist/worktrees/mergePrepare.js +709 -0
- package/dist/worktrees/mergePrepare.js.map +1 -0
- package/dist/worktrees/recovery.js +294 -0
- package/dist/worktrees/recovery.js.map +1 -0
- package/dist/worktrees/remove.js +296 -0
- package/dist/worktrees/remove.js.map +1 -0
- package/dist/worktrees/remover.js +57 -0
- package/dist/worktrees/remover.js.map +1 -0
- package/dist/worktrees/root.js +47 -0
- package/dist/worktrees/root.js.map +1 -0
- package/dist/worktrees/service.js +245 -0
- package/dist/worktrees/service.js.map +1 -0
- package/dist/worktrees/store.js +156 -0
- package/dist/worktrees/store.js.map +1 -0
- package/dist/worktrees/treeManifest.js +106 -0
- package/dist/worktrees/treeManifest.js.map +1 -0
- package/dist/worktrees/verificationReceipts.js +215 -0
- package/dist/worktrees/verificationReceipts.js.map +1 -0
- package/dist/worktrees/verificationTerminal.js +23 -0
- package/dist/worktrees/verificationTerminal.js.map +1 -0
- package/dist/worktrees/workspaceAuthority.js +64 -0
- package/dist/worktrees/workspaceAuthority.js.map +1 -0
- package/docs/favicon.svg +5 -0
- package/docs/index.html +624 -0
- package/docs/og.svg +52 -0
- package/docs/script.js +33 -0
- package/docs/star.svg +11 -0
- package/docs/styles.css +1571 -0
- package/docs/zh.html +428 -0
- package/package.json +121 -0
- package/scripts/analysis-cli-smoke.mjs +81 -0
- package/scripts/analysis-smoke.mjs +179 -0
- package/scripts/atomic-file.mjs +137 -0
- package/scripts/ci-change-classifier.mjs +59 -0
- package/scripts/ci-failure-summary.mjs +92 -0
- package/scripts/cloudflared-installer.mjs +215 -0
- package/scripts/cloudflared-release.mjs +63 -0
- package/scripts/codexgpt-entry.mjs +235 -0
- package/scripts/codexgpt.mjs +4987 -0
- package/scripts/connector-auth-output-shim.cjs +66 -0
- package/scripts/doctor-smoke.mjs +90 -0
- package/scripts/doctor.mjs +165 -0
- package/scripts/exact-head-ci.mjs +126 -0
- package/scripts/execute-handoff-smoke-platform-compat.mjs +38 -0
- package/scripts/execute-handoff-smoke.mjs +1117 -0
- package/scripts/g8-u-live-probe.mjs +208 -0
- package/scripts/http-smoke-compat.mjs +151 -0
- package/scripts/http-smoke.mjs +776 -0
- package/scripts/long-task-runner.mjs +1037 -0
- package/scripts/oauth-admin.mjs +1608 -0
- package/scripts/output-bounds.mjs +29 -0
- package/scripts/owned-temp-root.d.mts +50 -0
- package/scripts/owned-temp-root.mjs +567 -0
- package/scripts/phase-4a-smoke.mjs +36 -0
- package/scripts/policy-windows-spike.mjs +135 -0
- package/scripts/pro-apply.mjs +152 -0
- package/scripts/pro-bundle.mjs +121 -0
- package/scripts/pro-smoke.mjs +97 -0
- package/scripts/process-identity.mjs +67 -0
- package/scripts/repository-policy.mjs +166 -0
- package/scripts/run-and-summarize.mjs +134 -0
- package/scripts/run-smoke.mjs +52 -0
- package/scripts/run-with-cleanup.mjs +98 -0
- package/scripts/settings-smoke-platform-compat.mjs +85 -0
- package/scripts/settings-smoke.mjs +769 -0
- package/scripts/smoke-platform-compat.mjs +302 -0
- package/scripts/smoke.mjs +1180 -0
- package/scripts/stress-contract-compat.mjs +94 -0
- package/scripts/stress.mjs +882 -0
- package/scripts/test-domains.mjs +247 -0
- package/scripts/test-execution-profile-manifest.mjs +273 -0
- package/scripts/test-execution-profiles.mjs +147 -0
- package/scripts/test-performance-reporter.mjs +291 -0
- package/scripts/toolchain-manager.mjs +266 -0
- package/scripts/toolchains.json +19 -0
- package/scripts/windows-conpty-probe-child.mjs +82 -0
- package/scripts/windows-conpty-worker.ps1 +24 -0
- package/scripts/windows-credential-host-manifest.json +16 -0
- package/scripts/windows-credential-host-protocol-v1.json +16 -0
- package/scripts/windows-credential-host.cs +256 -0
- package/scripts/windows-credential-host.ps1 +26 -0
- package/scripts/windows-local-control-manifest.json +23 -0
- package/scripts/windows-local-control-spike.cs +738 -0
- package/scripts/windows-local-control-spike.mjs +415 -0
- package/scripts/windows-local-control-spike.ps1 +35 -0
- package/scripts/windows-local-control.cs +738 -0
- package/scripts/windows-local-control.ps1 +35 -0
- package/scripts/windows-native-api-inventory-v1.json +90 -0
- package/scripts/windows-process-host-manifest.json +20 -0
- package/scripts/windows-process-host-protocol-v1.json +59 -0
- package/scripts/windows-process-host.cs +2385 -0
- package/scripts/windows-process-host.ps1 +59 -0
- 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
|