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,135 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
|
|
7
|
+
export const SPIKE_CAPABILITY_NAMES = Object.freeze([
|
|
8
|
+
"filesystemReadBoundary",
|
|
9
|
+
"filesystemWriteBoundary",
|
|
10
|
+
"processTreeControl",
|
|
11
|
+
"networkEgressControl",
|
|
12
|
+
"environmentIsolation"
|
|
13
|
+
]);
|
|
14
|
+
|
|
15
|
+
const PROBES = Object.freeze([
|
|
16
|
+
Object.freeze({ id: "workspace_read", capability: "filesystemReadBoundary" }),
|
|
17
|
+
Object.freeze({ id: "outside_read", capability: "filesystemWriteBoundary" }),
|
|
18
|
+
Object.freeze({ id: "child_tree", capability: "processTreeControl" }),
|
|
19
|
+
Object.freeze({ id: "filtered_environment", capability: "environmentIsolation" }),
|
|
20
|
+
Object.freeze({ id: "loopback_network", capability: "networkEgressControl" })
|
|
21
|
+
]);
|
|
22
|
+
|
|
23
|
+
function isSubpath(candidate, parent) {
|
|
24
|
+
const relative = path.relative(parent, candidate);
|
|
25
|
+
return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function assertSyntheticFixtureRoot(fixtureRoot) {
|
|
29
|
+
const resolved = path.resolve(fixtureRoot);
|
|
30
|
+
const temporaryRoot = path.resolve(os.tmpdir());
|
|
31
|
+
if (!isSubpath(resolved, temporaryRoot) || resolved === temporaryRoot || !path.basename(resolved).startsWith("codexgpt-")) {
|
|
32
|
+
throw new Error("Windows spike requires a temporary synthetic fixture root.");
|
|
33
|
+
}
|
|
34
|
+
return resolved;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function validateProbeResult(probe, result) {
|
|
38
|
+
if (
|
|
39
|
+
!result ||
|
|
40
|
+
result.id !== probe.id ||
|
|
41
|
+
!["pass", "blocked", "unavailable", "error"].includes(result.outcome) ||
|
|
42
|
+
typeof result.detailCode !== "string" ||
|
|
43
|
+
!/^[A-Za-z0-9._-]{1,80}$/.test(result.detailCode)
|
|
44
|
+
) {
|
|
45
|
+
throw new Error(`Windows spike probe result is invalid for ${probe.id}.`);
|
|
46
|
+
}
|
|
47
|
+
return Object.freeze({
|
|
48
|
+
id: probe.id,
|
|
49
|
+
capability: probe.capability,
|
|
50
|
+
outcome: result.outcome,
|
|
51
|
+
detailCode: result.detailCode
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function conservativeObserved(results) {
|
|
56
|
+
const byId = new Map(results.map((result) => [result.id, result]));
|
|
57
|
+
return Object.freeze({
|
|
58
|
+
filesystemReadBoundary: byId.get("workspace_read")?.outcome === "pass" && byId.get("outside_read")?.outcome === "blocked"
|
|
59
|
+
? "brokered"
|
|
60
|
+
: "none",
|
|
61
|
+
filesystemWriteBoundary: "none",
|
|
62
|
+
processTreeControl: byId.get("child_tree")?.outcome === "pass" ? "best_effort" : "none",
|
|
63
|
+
networkEgressControl: "none",
|
|
64
|
+
environmentIsolation: byId.get("filtered_environment")?.outcome === "pass" ? "filtered" : "none"
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export async function runSpikeFixture({ fixtureRoot, platform = process.platform, execute }) {
|
|
69
|
+
if (typeof execute !== "function") throw new Error("Windows spike requires an executor.");
|
|
70
|
+
assertSyntheticFixtureRoot(fixtureRoot);
|
|
71
|
+
const results = [];
|
|
72
|
+
for (const probe of PROBES) {
|
|
73
|
+
results.push(validateProbeResult(probe, await execute(probe)));
|
|
74
|
+
}
|
|
75
|
+
return Object.freeze({
|
|
76
|
+
schemaVersion: 1,
|
|
77
|
+
platform,
|
|
78
|
+
fixtureRoot: "[synthetic fixture]",
|
|
79
|
+
capabilities: [...SPIKE_CAPABILITY_NAMES],
|
|
80
|
+
observed: conservativeObserved(results),
|
|
81
|
+
probes: results,
|
|
82
|
+
persistentHostChanges: false
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async function defaultExecutor(fixtureRoot, probe) {
|
|
87
|
+
switch (probe.id) {
|
|
88
|
+
case "workspace_read": {
|
|
89
|
+
const value = await fs.readFile(path.join(fixtureRoot, "workspace", "inside.txt"), "utf8");
|
|
90
|
+
return { id: probe.id, outcome: value === "synthetic-inside\n" ? "pass" : "error", detailCode: "fixture-read" };
|
|
91
|
+
}
|
|
92
|
+
case "outside_read": {
|
|
93
|
+
try {
|
|
94
|
+
await fs.readFile(path.join(fixtureRoot, "outside", "outside.txt"), "utf8");
|
|
95
|
+
return { id: probe.id, outcome: "unavailable", detailCode: "no-boundary" };
|
|
96
|
+
} catch {
|
|
97
|
+
return { id: probe.id, outcome: "blocked", detailCode: "read-blocked" };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
case "child_tree":
|
|
101
|
+
return { id: probe.id, outcome: "unavailable", detailCode: "not-probed" };
|
|
102
|
+
case "filtered_environment":
|
|
103
|
+
return { id: probe.id, outcome: "unavailable", detailCode: "not-isolated" };
|
|
104
|
+
case "loopback_network":
|
|
105
|
+
return { id: probe.id, outcome: "unavailable", detailCode: "not-enforced" };
|
|
106
|
+
default:
|
|
107
|
+
return { id: probe.id, outcome: "error", detailCode: "unknown-probe" };
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
async function main() {
|
|
112
|
+
const fixtureRoot = await fs.mkdtemp(path.join(os.tmpdir(), "codexgpt-policy-spike-"));
|
|
113
|
+
try {
|
|
114
|
+
await fs.mkdir(path.join(fixtureRoot, "workspace"), { recursive: true });
|
|
115
|
+
await fs.mkdir(path.join(fixtureRoot, "outside"), { recursive: true });
|
|
116
|
+
await fs.writeFile(path.join(fixtureRoot, "workspace", "inside.txt"), "synthetic-inside\n", "utf8");
|
|
117
|
+
await fs.writeFile(path.join(fixtureRoot, "outside", "outside.txt"), "synthetic-outside\n", "utf8");
|
|
118
|
+
const report = await runSpikeFixture({
|
|
119
|
+
fixtureRoot,
|
|
120
|
+
platform: process.platform,
|
|
121
|
+
execute: (probe) => defaultExecutor(fixtureRoot, probe)
|
|
122
|
+
});
|
|
123
|
+
process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
|
|
124
|
+
} finally {
|
|
125
|
+
await fs.rm(fixtureRoot, { recursive: true, force: true });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const invokedPath = process.argv[1] ? path.resolve(process.argv[1]) : "";
|
|
130
|
+
if (invokedPath && invokedPath === path.resolve(fileURLToPath(import.meta.url))) {
|
|
131
|
+
main().catch((error) => {
|
|
132
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
133
|
+
process.exitCode = 1;
|
|
134
|
+
});
|
|
135
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import fsp from 'node:fs/promises';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import process from 'node:process';
|
|
6
|
+
|
|
7
|
+
function usage() {
|
|
8
|
+
console.log(`Apply a planning-model response to the agent handoff file
|
|
9
|
+
|
|
10
|
+
Usage:
|
|
11
|
+
codexgpt pro-apply --root /path/to/repo --file plan.md
|
|
12
|
+
cat plan.md | codexgpt pro-apply --root /path/to/repo --stdin
|
|
13
|
+
|
|
14
|
+
Options:
|
|
15
|
+
--root <dir> Workspace root. Default: current directory.
|
|
16
|
+
--file <path> Plan file to read.
|
|
17
|
+
--stdin Read the plan from stdin.
|
|
18
|
+
--title <text> Add a heading when the plan does not already start with one.
|
|
19
|
+
--append Append to .ai-bridge/current-plan.md instead of overwriting.
|
|
20
|
+
--help Show this message.
|
|
21
|
+
`);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function parseArgs(argv) {
|
|
25
|
+
const out = {};
|
|
26
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
27
|
+
const raw = argv[i];
|
|
28
|
+
if (!raw.startsWith('--')) continue;
|
|
29
|
+
const eq = raw.indexOf('=');
|
|
30
|
+
const key = eq === -1 ? raw.slice(2) : raw.slice(2, eq);
|
|
31
|
+
const inlineValue = eq === -1 ? undefined : raw.slice(eq + 1);
|
|
32
|
+
if (key === 'help') out.help = true;
|
|
33
|
+
else if (key === 'stdin') out.stdin = true;
|
|
34
|
+
else if (key === 'append') out.append = true;
|
|
35
|
+
else {
|
|
36
|
+
const next = inlineValue ?? argv[i + 1];
|
|
37
|
+
if (!next || next.startsWith('--')) throw new Error(`Missing value for --${key}`);
|
|
38
|
+
if (inlineValue === undefined) i += 1;
|
|
39
|
+
out[key.replace(/-([a-z])/g, (_, c) => c.toUpperCase())] = next;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return out;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function requireBuild() {
|
|
46
|
+
const distPath = path.resolve('dist/fsOps.js');
|
|
47
|
+
if (!fs.existsSync(distPath)) {
|
|
48
|
+
throw new Error('Missing dist/fsOps.js. Run npm install && npm run build first.');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async function readStdin() {
|
|
53
|
+
const chunks = [];
|
|
54
|
+
for await (const chunk of process.stdin) chunks.push(Buffer.from(chunk));
|
|
55
|
+
return Buffer.concat(chunks).toString('utf8');
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function resolvePlanPath(args) {
|
|
59
|
+
const callerCwd = process.env.CODEXGPT_CALLER_CWD || process.cwd();
|
|
60
|
+
return path.isAbsolute(args.file) ? args.file : path.resolve(callerCwd, args.file);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
async function readPlan(args) {
|
|
64
|
+
if (args.stdin && args.file) throw new Error('Use either --stdin or --file, not both.');
|
|
65
|
+
if (args.stdin) return readStdin();
|
|
66
|
+
if (!args.file) throw new Error('Missing --file <path> or --stdin.');
|
|
67
|
+
return fsp.readFile(resolvePlanPath(args), 'utf8');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function normalizePlan(rawPlan, title) {
|
|
71
|
+
const trimmed = rawPlan.trim();
|
|
72
|
+
if (!trimmed) throw new Error('Plan is empty.');
|
|
73
|
+
if (trimmed.startsWith('#')) return `${trimmed}\n`;
|
|
74
|
+
return `# ${title || 'Planning Model Handoff'}\n\nUpdated: ${new Date().toISOString()}\n\n${trimmed}\n`;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function jsonlEvent(event, data) {
|
|
78
|
+
return `${JSON.stringify({ ts: new Date().toISOString(), event, ...data })}\n`;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async function main() {
|
|
82
|
+
const args = parseArgs(process.argv.slice(2));
|
|
83
|
+
if (args.help) {
|
|
84
|
+
usage();
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
requireBuild();
|
|
88
|
+
|
|
89
|
+
const [
|
|
90
|
+
{ loadConfig },
|
|
91
|
+
{ WorkspaceManager, PathGuard },
|
|
92
|
+
{ AI_BRIDGE_SCAFFOLD_FILES, aiBridgeScaffoldWrites, makeUnifiedDiff, prepareWorkspaceTextBatch },
|
|
93
|
+
{ LocalMutationService }
|
|
94
|
+
] = await Promise.all([
|
|
95
|
+
import('../dist/config.js'),
|
|
96
|
+
import('../dist/guard.js'),
|
|
97
|
+
import('../dist/fsOps.js'),
|
|
98
|
+
import('../dist/mutations/index.js')
|
|
99
|
+
]);
|
|
100
|
+
|
|
101
|
+
const config = loadConfig(process.argv.slice(2));
|
|
102
|
+
const guard = new PathGuard(config);
|
|
103
|
+
const workspaces = new WorkspaceManager(config);
|
|
104
|
+
const workspace = workspaces.openWorkspace(config.defaultRoot);
|
|
105
|
+
|
|
106
|
+
const planPath = `${config.contextDir}/current-plan.md`;
|
|
107
|
+
const rawPlan = await readPlan(args);
|
|
108
|
+
const newPlan = normalizePlan(rawPlan, args.title);
|
|
109
|
+
const logRel = `${config.contextDir}/session-log.jsonl`;
|
|
110
|
+
const executionLogRel = `${config.contextDir}/execution-log.jsonl`;
|
|
111
|
+
const event = jsonlEvent('pro_apply', {
|
|
112
|
+
plan_path: planPath,
|
|
113
|
+
source_file: args.file ? resolvePlanPath(args) : 'stdin',
|
|
114
|
+
append: Boolean(args.append)
|
|
115
|
+
});
|
|
116
|
+
const replacedPaths = new Set([planPath, logRel, executionLogRel]);
|
|
117
|
+
const prepared = await prepareWorkspaceTextBatch(config, guard, workspace, [
|
|
118
|
+
...aiBridgeScaffoldWrites(config).filter((write) => !replacedPaths.has(write.path)),
|
|
119
|
+
{
|
|
120
|
+
path: planPath,
|
|
121
|
+
content: args.append ? `\n\n---\n\n${newPlan}` : newPlan,
|
|
122
|
+
mode: args.append ? 'append' : 'replace',
|
|
123
|
+
missingContent: args.append
|
|
124
|
+
? `${AI_BRIDGE_SCAFFOLD_FILES['current-plan.md'].trimEnd()}\n\n---\n\n${newPlan}`
|
|
125
|
+
: undefined
|
|
126
|
+
},
|
|
127
|
+
{ path: logRel, content: event, mode: 'append' },
|
|
128
|
+
{ path: executionLogRel, content: event, mode: 'append' }
|
|
129
|
+
]);
|
|
130
|
+
const planOperation = prepared.operations.find((operation) => operation.path === planPath);
|
|
131
|
+
if (!planOperation) throw new Error('Atomic plan operation is missing.');
|
|
132
|
+
const previousText = planOperation.before.bytes?.toString('utf8') ?? '';
|
|
133
|
+
const content = planOperation.operation.bytes.toString('utf8');
|
|
134
|
+
const diff = makeUnifiedDiff(previousText, content, planPath);
|
|
135
|
+
const service = new LocalMutationService(config, guard);
|
|
136
|
+
try {
|
|
137
|
+
await service.executeBatch(workspace, prepared, { ok: true }, { toolName: 'pro_apply' });
|
|
138
|
+
} finally {
|
|
139
|
+
service.dispose();
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
console.log(`Wrote ${path.join(workspace.root, planPath)}`);
|
|
143
|
+
console.log(`Bytes: ${planOperation.operation.bytes.length}`);
|
|
144
|
+
console.log(`Diff stats: +${diff.additions} -${diff.deletions}`);
|
|
145
|
+
console.log(`Session log: ${path.join(workspace.root, logRel)}`);
|
|
146
|
+
console.log(`Execution log: ${path.join(workspace.root, executionLogRel)}`);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
main().catch((error) => {
|
|
150
|
+
console.error(error instanceof Error ? error.stack ?? error.message : String(error));
|
|
151
|
+
process.exit(1);
|
|
152
|
+
});
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { spawnSync } from 'node:child_process';
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import process from 'node:process';
|
|
6
|
+
|
|
7
|
+
function usage() {
|
|
8
|
+
console.log(`CodexGPT context bundle
|
|
9
|
+
|
|
10
|
+
Usage:
|
|
11
|
+
codexgpt pro-bundle --root /path/to/repo --copy
|
|
12
|
+
codexgpt pro-bundle --root /path/to/repo --path src/App.tsx --glob "src/**/*.ts"
|
|
13
|
+
|
|
14
|
+
Options:
|
|
15
|
+
--root <dir> Workspace root. Default: current directory.
|
|
16
|
+
--path <file> Extra file to include. Can be repeated.
|
|
17
|
+
--glob <pattern> Extra glob to include. Can be repeated.
|
|
18
|
+
--title <text> Context title.
|
|
19
|
+
--max-files <n> Maximum file contents to include. Default: 24.
|
|
20
|
+
--max-file-bytes <n> Maximum bytes per included file. Default: 60000.
|
|
21
|
+
--max-total-bytes <n> Maximum bytes in .ai-bridge/pro-context.md.
|
|
22
|
+
--no-important-files Do not auto-include root config/docs such as AGENTS.md, README.md, package.json.
|
|
23
|
+
--no-changed-files Do not auto-include currently changed files from git status.
|
|
24
|
+
--no-diff Do not include git diff.
|
|
25
|
+
--no-ai-bridge Do not include existing .ai-bridge files.
|
|
26
|
+
--copy Copy generated context to the macOS clipboard with pbcopy.
|
|
27
|
+
--help Show this message.
|
|
28
|
+
`);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function parseArgs(argv) {
|
|
32
|
+
const out = { paths: [], globs: [] };
|
|
33
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
34
|
+
const raw = argv[i];
|
|
35
|
+
if (!raw.startsWith('--')) continue;
|
|
36
|
+
const eq = raw.indexOf('=');
|
|
37
|
+
const key = eq === -1 ? raw.slice(2) : raw.slice(2, eq);
|
|
38
|
+
const inlineValue = eq === -1 ? undefined : raw.slice(eq + 1);
|
|
39
|
+
if (key === 'help') out.help = true;
|
|
40
|
+
else if (key === 'copy') out.copy = true;
|
|
41
|
+
else if (key === 'no-important-files') out.noImportantFiles = true;
|
|
42
|
+
else if (key === 'no-changed-files') out.noChangedFiles = true;
|
|
43
|
+
else if (key === 'no-diff') out.noDiff = true;
|
|
44
|
+
else if (key === 'no-ai-bridge') out.noAiBridge = true;
|
|
45
|
+
else {
|
|
46
|
+
const next = inlineValue ?? argv[i + 1];
|
|
47
|
+
if (!next || next.startsWith('--')) throw new Error(`Missing value for --${key}`);
|
|
48
|
+
if (inlineValue === undefined) i += 1;
|
|
49
|
+
if (key === 'path') out.paths.push(next);
|
|
50
|
+
else if (key === 'glob') out.globs.push(next);
|
|
51
|
+
else out[key.replace(/-([a-z])/g, (_, c) => c.toUpperCase())] = next;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return out;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function requireBuild() {
|
|
58
|
+
const distPath = path.resolve('dist/proContext.js');
|
|
59
|
+
if (!fs.existsSync(distPath)) {
|
|
60
|
+
throw new Error('Missing dist/proContext.js. Run npm install && npm run build first.');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function numberArg(value) {
|
|
65
|
+
if (value === undefined) return undefined;
|
|
66
|
+
const parsed = Number(value);
|
|
67
|
+
if (!Number.isFinite(parsed)) throw new Error(`Invalid number: ${value}`);
|
|
68
|
+
return parsed;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async function main() {
|
|
72
|
+
const args = parseArgs(process.argv.slice(2));
|
|
73
|
+
if (args.help) {
|
|
74
|
+
usage();
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
requireBuild();
|
|
78
|
+
|
|
79
|
+
const [{ loadConfig }, { WorkspaceManager, PathGuard }, { exportProContext }] = await Promise.all([
|
|
80
|
+
import('../dist/config.js'),
|
|
81
|
+
import('../dist/guard.js'),
|
|
82
|
+
import('../dist/proContext.js')
|
|
83
|
+
]);
|
|
84
|
+
|
|
85
|
+
const config = loadConfig(process.argv.slice(2));
|
|
86
|
+
const guard = new PathGuard(config);
|
|
87
|
+
const workspaces = new WorkspaceManager(config);
|
|
88
|
+
const workspace = workspaces.openWorkspace(config.defaultRoot);
|
|
89
|
+
const result = await exportProContext(config, guard, workspace, {
|
|
90
|
+
title: args.title,
|
|
91
|
+
selectedPaths: args.paths,
|
|
92
|
+
extraGlobs: args.globs,
|
|
93
|
+
includeImportantFiles: !args.noImportantFiles,
|
|
94
|
+
includeChangedFiles: !args.noChangedFiles,
|
|
95
|
+
includeDiff: !args.noDiff,
|
|
96
|
+
includeAiBridge: !args.noAiBridge,
|
|
97
|
+
maxFiles: numberArg(args.maxFiles),
|
|
98
|
+
maxFileBytes: numberArg(args.maxFileBytes),
|
|
99
|
+
maxTotalBytes: numberArg(args.maxTotalBytes)
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
const absPath = path.join(workspace.root, result.path);
|
|
103
|
+
console.log(`Wrote ${absPath}`);
|
|
104
|
+
console.log(`Bytes: ${result.bytes}`);
|
|
105
|
+
console.log(`Files included: ${result.filesIncluded.length}`);
|
|
106
|
+
console.log(`Files skipped: ${result.filesSkipped.length}`);
|
|
107
|
+
console.log(`Truncated: ${result.truncated}`);
|
|
108
|
+
|
|
109
|
+
if (args.copy) {
|
|
110
|
+
const copied = spawnSync('pbcopy', { input: result.markdown, encoding: 'utf8' });
|
|
111
|
+
if (copied.status !== 0) {
|
|
112
|
+
throw new Error(`pbcopy failed: ${copied.stderr || copied.error?.message || `exit ${copied.status}`}`);
|
|
113
|
+
}
|
|
114
|
+
console.log('Copied Pro context to clipboard.');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
main().catch((error) => {
|
|
119
|
+
console.error(error instanceof Error ? error.stack ?? error.message : String(error));
|
|
120
|
+
process.exit(1);
|
|
121
|
+
});
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
import fs from 'node:fs/promises';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
|
|
6
|
+
function run(args, options = {}) {
|
|
7
|
+
const result = spawnSync(process.execPath, args, {
|
|
8
|
+
cwd: path.resolve('.'),
|
|
9
|
+
encoding: 'utf8',
|
|
10
|
+
...options
|
|
11
|
+
});
|
|
12
|
+
if (result.status !== 0) {
|
|
13
|
+
throw new Error(`${args.join(' ')} failed\nstdout:\n${result.stdout}\nstderr:\n${result.stderr}`);
|
|
14
|
+
}
|
|
15
|
+
return result;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function runFail(args, options = {}) {
|
|
19
|
+
const result = spawnSync(process.execPath, args, {
|
|
20
|
+
cwd: path.resolve('.'),
|
|
21
|
+
encoding: 'utf8',
|
|
22
|
+
...options
|
|
23
|
+
});
|
|
24
|
+
if (result.status === 0) {
|
|
25
|
+
throw new Error(`${args.join(' ')} unexpectedly passed\nstdout:\n${result.stdout}\nstderr:\n${result.stderr}`);
|
|
26
|
+
}
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const root = await fs.mkdtemp(path.join(os.tmpdir(), 'codexgpt-pro-smoke-'));
|
|
31
|
+
const stateHome = await fs.mkdtemp(path.join(os.tmpdir(), 'codexgpt-pro-smoke-home-'));
|
|
32
|
+
const proApplyEnv = { ...process.env, CODEXGPT_HOME: stateHome };
|
|
33
|
+
const codexgptCli = path.resolve('scripts/codexgpt.mjs');
|
|
34
|
+
await fs.writeFile(path.join(root, 'README.md'), '# Demo\n', 'utf8');
|
|
35
|
+
await fs.writeFile(path.join(root, 'demo.txt'), 'alpha\nbeta\n', 'utf8');
|
|
36
|
+
|
|
37
|
+
run(['scripts/pro-bundle.mjs', `--root=${root}`, '--path=demo.txt', '--max-files', '4', '--max-total-bytes', '80000']);
|
|
38
|
+
const proContext = await fs.readFile(path.join(root, '.ai-bridge', 'pro-context.md'), 'utf8');
|
|
39
|
+
if (!proContext.includes('CodexGPT Context Bundle') || !proContext.includes('demo.txt')) {
|
|
40
|
+
throw new Error('pro context bundle did not include expected content');
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const selectedRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'codexgpt-pro-selected-'));
|
|
44
|
+
await fs.writeFile(path.join(selectedRoot, 'README.md'), '# Selected\n', 'utf8');
|
|
45
|
+
await fs.writeFile(path.join(selectedRoot, 'demo.txt'), 'selected only\n', 'utf8');
|
|
46
|
+
run([
|
|
47
|
+
'scripts/pro-bundle.mjs',
|
|
48
|
+
`--root=${selectedRoot}`,
|
|
49
|
+
'--path=demo.txt',
|
|
50
|
+
'--no-important-files',
|
|
51
|
+
'--no-changed-files',
|
|
52
|
+
'--no-diff',
|
|
53
|
+
'--no-ai-bridge',
|
|
54
|
+
'--max-files', '4',
|
|
55
|
+
'--max-total-bytes', '80000'
|
|
56
|
+
]);
|
|
57
|
+
const selectedBridgeFiles = await fs.readdir(path.join(selectedRoot, '.ai-bridge'));
|
|
58
|
+
if (selectedBridgeFiles.join(',') !== 'pro-context.md') {
|
|
59
|
+
throw new Error(`selected-only pro context created unexpected bridge files: ${selectedBridgeFiles.join(', ')}`);
|
|
60
|
+
}
|
|
61
|
+
const exactProContext = await fs.readFile(path.join(selectedRoot, '.ai-bridge', 'pro-context.md'), 'utf8');
|
|
62
|
+
if (!exactProContext.includes('Auto-include important root files: no') || !exactProContext.includes('Auto-include changed files: no')) {
|
|
63
|
+
throw new Error('selected-only pro context did not record disabled auto-inclusion settings');
|
|
64
|
+
}
|
|
65
|
+
if (!exactProContext.includes('### demo.txt') || exactProContext.includes('### README.md')) {
|
|
66
|
+
throw new Error('selected-only pro context did not include exactly the requested file');
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
run([codexgptCli, 'pro-bundle', `--root=${root}`, '--path=demo.txt', '--max-files=4', '--max-total-bytes=80000']);
|
|
70
|
+
|
|
71
|
+
const planFile = path.join(root, 'plan.md');
|
|
72
|
+
await fs.writeFile(planFile, 'Inspect demo.txt and keep changes narrow.\n', 'utf8');
|
|
73
|
+
run(['scripts/pro-apply.mjs', `--root=${root}`, `--file=${planFile}`, '--title', 'Smoke Pro Plan'], { env: proApplyEnv });
|
|
74
|
+
run([codexgptCli, 'pro-apply', `--root=${root}`, '--file=plan.md', '--title', 'Relative Pro Plan'], { cwd: root, env: proApplyEnv });
|
|
75
|
+
const currentPlan = await fs.readFile(path.join(root, '.ai-bridge', 'current-plan.md'), 'utf8');
|
|
76
|
+
if (!currentPlan.includes('Relative Pro Plan') || !currentPlan.includes('Inspect demo.txt')) {
|
|
77
|
+
throw new Error('pro apply did not write expected current-plan content');
|
|
78
|
+
}
|
|
79
|
+
const executionLog = await fs.readFile(path.join(root, '.ai-bridge', 'execution-log.jsonl'), 'utf8');
|
|
80
|
+
if (!executionLog.includes('"event":"pro_apply"')) {
|
|
81
|
+
throw new Error('pro apply did not append execution-log event');
|
|
82
|
+
}
|
|
83
|
+
const proApplyEvents = executionLog.trim().split('\n').map((line) => JSON.parse(line));
|
|
84
|
+
if (!proApplyEvents.some((event) => event.source_file === planFile)) {
|
|
85
|
+
throw new Error(`pro apply logged the wrong source file\n${executionLog}`);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const missingRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'codexgpt-pro-missing-'));
|
|
89
|
+
runFail(['scripts/pro-apply.mjs', `--root=${missingRoot}`, '--file=missing-plan.md'], { env: { ...proApplyEnv, CODEXGPT_CALLER_CWD: missingRoot } });
|
|
90
|
+
try {
|
|
91
|
+
await fs.stat(path.join(missingRoot, '.ai-bridge'));
|
|
92
|
+
throw new Error('failed pro-apply created .ai-bridge before validating input');
|
|
93
|
+
} catch (error) {
|
|
94
|
+
if (error?.code !== 'ENOENT') throw error;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
console.log('✓ pro CLI smoke test passed');
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
|
|
5
|
+
export function processIsAlive(pid) {
|
|
6
|
+
if (!Number.isInteger(pid) || pid <= 0) return false;
|
|
7
|
+
try {
|
|
8
|
+
process.kill(pid, 0);
|
|
9
|
+
return true;
|
|
10
|
+
} catch (error) {
|
|
11
|
+
return error?.code === "EPERM";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function windowsProcessCreationTime(pid) {
|
|
16
|
+
const systemRoot = process.env.SystemRoot?.trim() || process.env.WINDIR?.trim();
|
|
17
|
+
if (!systemRoot) return undefined;
|
|
18
|
+
const powershell = path.win32.join(systemRoot, "System32", "WindowsPowerShell", "v1.0", "powershell.exe");
|
|
19
|
+
const script = [
|
|
20
|
+
"$ErrorActionPreference='Stop'",
|
|
21
|
+
`$p=Get-Process -Id ${pid}`,
|
|
22
|
+
"$p.StartTime.ToUniversalTime().ToString('O')"
|
|
23
|
+
].join(";");
|
|
24
|
+
const result = spawnSync(powershell, ["-NoLogo", "-NoProfile", "-NonInteractive", "-Command", script], {
|
|
25
|
+
encoding: "utf8",
|
|
26
|
+
windowsHide: true,
|
|
27
|
+
timeout: 10_000
|
|
28
|
+
});
|
|
29
|
+
if (result.status !== 0) return undefined;
|
|
30
|
+
const value = String(result.stdout ?? "").trim();
|
|
31
|
+
return value || undefined;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function linuxProcessCreationTime(pid) {
|
|
35
|
+
try {
|
|
36
|
+
const stat = fs.readFileSync(`/proc/${pid}/stat`, "utf8");
|
|
37
|
+
const closing = stat.lastIndexOf(")");
|
|
38
|
+
if (closing < 0) return undefined;
|
|
39
|
+
const fields = stat.slice(closing + 2).trim().split(/\s+/u);
|
|
40
|
+
const startTicks = fields[19];
|
|
41
|
+
return startTicks ? `linux:${startTicks}` : undefined;
|
|
42
|
+
} catch {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function unixProcessCreationTime(pid) {
|
|
48
|
+
const ps = fs.existsSync("/bin/ps") ? "/bin/ps" : "/usr/bin/ps";
|
|
49
|
+
const result = spawnSync(ps, ["-o", "lstart=", "-p", String(pid)], {
|
|
50
|
+
encoding: "utf8",
|
|
51
|
+
timeout: 5_000
|
|
52
|
+
});
|
|
53
|
+
if (result.status !== 0) return undefined;
|
|
54
|
+
const value = String(result.stdout ?? "").trim();
|
|
55
|
+
return value ? `ps:${value}` : undefined;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function processCreationTimeSync(pid) {
|
|
59
|
+
if (!processIsAlive(pid)) return undefined;
|
|
60
|
+
if (process.platform === "win32") return windowsProcessCreationTime(pid);
|
|
61
|
+
if (process.platform === "linux") return linuxProcessCreationTime(pid);
|
|
62
|
+
return unixProcessCreationTime(pid);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export async function processCreationTime(pid) {
|
|
66
|
+
return processCreationTimeSync(pid);
|
|
67
|
+
}
|