@kbediako/codex-orchestrator 0.1.38 → 0.2.1
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/plugins/marketplace.json +20 -0
- package/README.md +46 -317
- package/bin/codex-orchestrator.js +161 -0
- package/codex.orchestrator.json +149 -13
- package/dist/bin/codex-orchestrator.js +797 -1154
- package/dist/orchestrator/src/cli/adapters/CommandBuilder.js +50 -0
- package/dist/orchestrator/src/cli/adapters/CommandPlanner.js +22 -4
- package/dist/orchestrator/src/cli/adapters/CommandReviewer.js +3 -3
- package/dist/orchestrator/src/cli/adapters/CommandTester.js +2 -2
- package/dist/orchestrator/src/cli/adapters/cloudFailureDiagnostics.js +295 -11
- package/dist/orchestrator/src/cli/coStatusAttachCliShell.js +402 -0
- package/dist/orchestrator/src/cli/coStatusCliShell.js +451 -0
- package/dist/orchestrator/src/cli/coStatusOperatorAutopilotCliShell.js +120 -0
- package/dist/orchestrator/src/cli/codexCliShell.js +119 -0
- package/dist/orchestrator/src/cli/codexDefaultsSetup.js +265 -36
- package/dist/orchestrator/src/cli/config/delegationConfig.js +317 -5
- package/dist/orchestrator/src/cli/config/repoConfigPolicy.js +2 -3
- package/dist/orchestrator/src/cli/config/userConfig.js +28 -13
- package/dist/orchestrator/src/cli/control/authenticatedControlRouteGate.js +69 -0
- package/dist/orchestrator/src/cli/control/authenticatedRouteComposition.js +267 -0
- package/dist/orchestrator/src/cli/control/authenticatedRouteController.js +5 -0
- package/dist/orchestrator/src/cli/control/authenticatedRouteDispatcher.js +41 -0
- package/dist/orchestrator/src/cli/control/compatibilityIssuePresenter.js +1035 -0
- package/dist/orchestrator/src/cli/control/confirmationApproveController.js +62 -0
- package/dist/orchestrator/src/cli/control/confirmationCreateController.js +69 -0
- package/dist/orchestrator/src/cli/control/confirmationIssueConsumeController.js +43 -0
- package/dist/orchestrator/src/cli/control/confirmationListController.js +22 -0
- package/dist/orchestrator/src/cli/control/confirmationValidateController.js +58 -0
- package/dist/orchestrator/src/cli/control/confirmations.js +25 -3
- package/dist/orchestrator/src/cli/control/controlActionCancelConfirmation.js +65 -0
- package/dist/orchestrator/src/cli/control/controlActionController.js +77 -0
- package/dist/orchestrator/src/cli/control/controlActionControllerSequencing.js +161 -0
- package/dist/orchestrator/src/cli/control/controlActionExecution.js +142 -0
- package/dist/orchestrator/src/cli/control/controlActionFinalization.js +43 -0
- package/dist/orchestrator/src/cli/control/controlActionOutcome.js +60 -0
- package/dist/orchestrator/src/cli/control/controlActionPreflight.js +476 -0
- package/dist/orchestrator/src/cli/control/controlAuthenticatedRouteHandoff.js +57 -0
- package/dist/orchestrator/src/cli/control/controlBootstrapAssembly.js +39 -0
- package/dist/orchestrator/src/cli/control/controlBootstrapMetadataPersistence.js +16 -0
- package/dist/orchestrator/src/cli/control/controlEventTransport.js +49 -0
- package/dist/orchestrator/src/cli/control/controlExpiryLifecycle.js +102 -0
- package/dist/orchestrator/src/cli/control/controlHostOwnership.js +480 -0
- package/dist/orchestrator/src/cli/control/controlHostSupervision.js +630 -0
- package/dist/orchestrator/src/cli/control/controlOversightFacade.js +8 -0
- package/dist/orchestrator/src/cli/control/controlOversightReadContract.js +1 -0
- package/dist/orchestrator/src/cli/control/controlOversightReadService.js +16 -0
- package/dist/orchestrator/src/cli/control/controlOversightUpdateContract.js +1 -0
- package/dist/orchestrator/src/cli/control/controlPersistenceFiles.js +6 -0
- package/dist/orchestrator/src/cli/control/controlQuestionChildResolution.js +18 -0
- package/dist/orchestrator/src/cli/control/controlRequestContext.js +42 -0
- package/dist/orchestrator/src/cli/control/controlRequestController.js +9 -0
- package/dist/orchestrator/src/cli/control/controlRequestPredispatch.js +17 -0
- package/dist/orchestrator/src/cli/control/controlRequestRouteDispatch.js +44 -0
- package/dist/orchestrator/src/cli/control/controlRuntime.js +1003 -0
- package/dist/orchestrator/src/cli/control/controlServer.js +23 -1456
- package/dist/orchestrator/src/cli/control/controlServerAuditAndErrorHelpers.js +115 -0
- package/dist/orchestrator/src/cli/control/controlServerAuthenticatedRouteBranch.js +29 -0
- package/dist/orchestrator/src/cli/control/controlServerBootstrapLifecycle.js +30 -0
- package/dist/orchestrator/src/cli/control/controlServerBootstrapStartSequence.js +21 -0
- package/dist/orchestrator/src/cli/control/controlServerOwnedRuntimeLifecycle.js +67 -0
- package/dist/orchestrator/src/cli/control/controlServerPublicLifecycle.js +756 -0
- package/dist/orchestrator/src/cli/control/controlServerPublicRouteHelpers.js +86 -0
- package/dist/orchestrator/src/cli/control/controlServerReadyInstanceLifecycle.js +25 -0
- package/dist/orchestrator/src/cli/control/controlServerReadyInstanceStartup.js +18 -0
- package/dist/orchestrator/src/cli/control/controlServerRequestBodyHelpers.js +37 -0
- package/dist/orchestrator/src/cli/control/controlServerRequestShell.js +40 -0
- package/dist/orchestrator/src/cli/control/controlServerRequestShellBinding.js +17 -0
- package/dist/orchestrator/src/cli/control/controlServerSeedLoading.js +27 -0
- package/dist/orchestrator/src/cli/control/controlServerSeededRuntimeAssembly.js +186 -0
- package/dist/orchestrator/src/cli/control/controlServerStartupInputPreparation.js +31 -0
- package/dist/orchestrator/src/cli/control/controlServerStartupSequence.js +49 -0
- package/dist/orchestrator/src/cli/control/controlState.js +233 -2
- package/dist/orchestrator/src/cli/control/controlStatusDashboard.js +1904 -0
- package/dist/orchestrator/src/cli/control/controlTelegramBridgeBootstrapLifecycle.js +22 -0
- package/dist/orchestrator/src/cli/control/controlTelegramBridgeLifecycle.js +67 -0
- package/dist/orchestrator/src/cli/control/controlTelegramBridgeOversightFacadeFactory.js +8 -0
- package/dist/orchestrator/src/cli/control/controlTelegramCommandController.js +49 -0
- package/dist/orchestrator/src/cli/control/controlTelegramDispatchRead.js +40 -0
- package/dist/orchestrator/src/cli/control/controlTelegramPollingController.js +89 -0
- package/dist/orchestrator/src/cli/control/controlTelegramProjectionNotificationController.js +29 -0
- package/dist/orchestrator/src/cli/control/controlTelegramPushState.js +63 -0
- package/dist/orchestrator/src/cli/control/controlTelegramQuestionRead.js +13 -0
- package/dist/orchestrator/src/cli/control/controlTelegramReadController.js +216 -0
- package/dist/orchestrator/src/cli/control/controlTelegramUpdateHandler.js +63 -0
- package/dist/orchestrator/src/cli/control/controlWatcher.js +73 -5
- package/dist/orchestrator/src/cli/control/delegationRegisterController.js +35 -0
- package/dist/orchestrator/src/cli/control/dynamicToolBridgePolicy.js +139 -0
- package/dist/orchestrator/src/cli/control/eventsSseController.js +12 -0
- package/dist/orchestrator/src/cli/control/linearBudgetState.js +1789 -0
- package/dist/orchestrator/src/cli/control/linearDispatchSource.js +1137 -0
- package/dist/orchestrator/src/cli/control/linearGraphqlClient.js +150 -0
- package/dist/orchestrator/src/cli/control/linearRateLimit.js +102 -0
- package/dist/orchestrator/src/cli/control/linearWebhookController.js +499 -0
- package/dist/orchestrator/src/cli/control/liveLinearAdvisoryRuntime.js +70 -0
- package/dist/orchestrator/src/cli/control/observabilityApiController.js +173 -0
- package/dist/orchestrator/src/cli/control/observabilityReadModel.js +500 -0
- package/dist/orchestrator/src/cli/control/observabilitySurface.js +284 -0
- package/dist/orchestrator/src/cli/control/observabilityUpdateNotifier.js +22 -0
- package/dist/orchestrator/src/cli/control/operatorDashboardPresenter.js +252 -0
- package/dist/orchestrator/src/cli/control/providerAgentCapacity.js +70 -0
- package/dist/orchestrator/src/cli/control/providerControlHostFreshnessGauge.js +1068 -0
- package/dist/orchestrator/src/cli/control/providerIntakeState.js +473 -0
- package/dist/orchestrator/src/cli/control/providerIssueHandoff.js +6811 -0
- package/dist/orchestrator/src/cli/control/providerIssueObservability.js +1348 -0
- package/dist/orchestrator/src/cli/control/providerIssueRetryQueue.js +84 -0
- package/dist/orchestrator/src/cli/control/providerLinearRuntimeProof.js +588 -0
- package/dist/orchestrator/src/cli/control/providerLinearScreenshotProof.js +473 -0
- package/dist/orchestrator/src/cli/control/providerLinearWorkerTruth.js +383 -0
- package/dist/orchestrator/src/cli/control/providerLinearWorkflowAudit.js +254 -0
- package/dist/orchestrator/src/cli/control/providerLinearWorkflowFacade.js +5573 -0
- package/dist/orchestrator/src/cli/control/providerLinearWorkflowStates.js +115 -0
- package/dist/orchestrator/src/cli/control/providerMergeCloseout.js +1868 -0
- package/dist/orchestrator/src/cli/control/providerOperatorAutopilot.js +1580 -0
- package/dist/orchestrator/src/cli/control/providerOperatorAutopilotLifecycle.js +154 -0
- package/dist/orchestrator/src/cli/control/providerOperatorAutopilotLocalRolloutExecution.js +1006 -0
- package/dist/orchestrator/src/cli/control/providerPollingHealth.js +435 -0
- package/dist/orchestrator/src/cli/control/providerTerminalCleanup.js +516 -0
- package/dist/orchestrator/src/cli/control/providerWorkerHosts.js +191 -0
- package/dist/orchestrator/src/cli/control/providerWorkflowConfigStore.js +515 -0
- package/dist/orchestrator/src/cli/control/questionChildResolutionAdapter.js +361 -0
- package/dist/orchestrator/src/cli/control/questionQueueController.js +181 -0
- package/dist/orchestrator/src/cli/control/questionReadRetryDeduplication.js +9 -0
- package/dist/orchestrator/src/cli/control/questionReadSequence.js +10 -0
- package/dist/orchestrator/src/cli/control/securityViolationController.js +27 -0
- package/dist/orchestrator/src/cli/control/selectedRunProjection.js +1885 -0
- package/dist/orchestrator/src/cli/control/telegramOversightApiClient.js +48 -0
- package/dist/orchestrator/src/cli/control/telegramOversightBridge.js +180 -0
- package/dist/orchestrator/src/cli/control/telegramOversightBridgeProjectionDeliveryQueue.js +25 -0
- package/dist/orchestrator/src/cli/control/telegramOversightBridgeRuntimeLifecycle.js +45 -0
- package/dist/orchestrator/src/cli/control/telegramOversightBridgeStateStore.js +77 -0
- package/dist/orchestrator/src/cli/control/telegramOversightControlActionApiClient.js +45 -0
- package/dist/orchestrator/src/cli/control/trackerDispatchPilot.js +439 -0
- package/dist/orchestrator/src/cli/control/uiDataController.js +34 -0
- package/dist/orchestrator/src/cli/control/uiSessionController.js +100 -0
- package/dist/orchestrator/src/cli/controlHostCliShell.js +860 -0
- package/dist/orchestrator/src/cli/controlHostFreshnessGaugeCliShell.js +129 -0
- package/dist/orchestrator/src/cli/controlHostSupervisionCliShell.js +2127 -0
- package/dist/orchestrator/src/cli/delegationCliShell.js +62 -0
- package/dist/orchestrator/src/cli/delegationServer.js +567 -678
- package/dist/orchestrator/src/cli/delegationServerCliShell.js +52 -0
- package/dist/orchestrator/src/cli/delegationServerQuestionFlowShell.js +228 -0
- package/dist/orchestrator/src/cli/delegationServerToolDispatchShell.js +411 -0
- package/dist/orchestrator/src/cli/delegationServerTransport.js +274 -0
- package/dist/orchestrator/src/cli/delegationSetup.js +51 -171
- package/dist/orchestrator/src/cli/devtoolsCliShell.js +34 -0
- package/dist/orchestrator/src/cli/doctor.js +678 -164
- package/dist/orchestrator/src/cli/doctorCliRequestShell.js +72 -0
- package/dist/orchestrator/src/cli/doctorCliShell.js +138 -0
- package/dist/orchestrator/src/cli/doctorUsage.js +119 -15
- package/dist/orchestrator/src/cli/exec/experience.js +16 -2
- package/dist/orchestrator/src/cli/exec/summary.js +3 -0
- package/dist/orchestrator/src/cli/execCliShell.js +51 -0
- package/dist/orchestrator/src/cli/flowCliRequestShell.js +44 -0
- package/dist/orchestrator/src/cli/flowCliShell.js +239 -0
- package/dist/orchestrator/src/cli/frontendTestCliRequestShell.js +80 -0
- package/dist/orchestrator/src/cli/frontendTestCliShell.js +41 -0
- package/dist/orchestrator/src/cli/init.js +95 -1
- package/dist/orchestrator/src/cli/initCliShell.js +50 -0
- package/dist/orchestrator/src/cli/linearCliShell.js +1200 -0
- package/dist/orchestrator/src/cli/mcpEnableCliShell.js +132 -0
- package/dist/orchestrator/src/cli/metrics/metricsAggregator.js +3 -2
- package/dist/orchestrator/src/cli/metrics/metricsRecorder.js +56 -0
- package/dist/orchestrator/src/cli/orchestrator.js +66 -1376
- package/dist/orchestrator/src/cli/planCliShell.js +19 -0
- package/dist/orchestrator/src/cli/prCliShell.js +41 -0
- package/dist/orchestrator/src/cli/providerLinearChildLanePhaseContract.js +204 -0
- package/dist/orchestrator/src/cli/providerLinearChildLaneRunner.js +1835 -0
- package/dist/orchestrator/src/cli/providerLinearChildLaneShell.js +2420 -0
- package/dist/orchestrator/src/cli/providerLinearChildStreamShell.js +385 -0
- package/dist/orchestrator/src/cli/providerLinearWorkerRunner.js +6834 -0
- package/dist/orchestrator/src/cli/resumeCliShell.js +14 -0
- package/dist/orchestrator/src/cli/reviewCliLaunchShell.js +72 -0
- package/dist/orchestrator/src/cli/rlm/alignment.js +3 -3
- package/dist/orchestrator/src/cli/rlm/context.js +94 -7
- package/dist/orchestrator/src/cli/rlm/rlmCodexRuntimeShell.js +546 -0
- package/dist/orchestrator/src/cli/rlm/symbolic.js +4 -2
- package/dist/orchestrator/src/cli/rlmCliRequestShell.js +42 -0
- package/dist/orchestrator/src/cli/rlmCompletionCliShell.js +46 -0
- package/dist/orchestrator/src/cli/rlmLaunchCliShell.js +51 -0
- package/dist/orchestrator/src/cli/rlmRunner.js +83 -523
- package/dist/orchestrator/src/cli/run/blockMemory.js +500 -0
- package/dist/orchestrator/src/cli/run/manifest.js +410 -73
- package/dist/orchestrator/src/cli/run/manifestPersister.js +45 -14
- package/dist/orchestrator/src/cli/run/runMemoryController.js +216 -0
- package/dist/orchestrator/src/cli/run/source0.js +690 -0
- package/dist/orchestrator/src/cli/run/workspacePath.js +101 -0
- package/dist/orchestrator/src/cli/runtime/mode.js +2 -1
- package/dist/orchestrator/src/cli/runtime/provider.js +39 -2
- package/dist/orchestrator/src/cli/selfCheckCliShell.js +12 -0
- package/dist/orchestrator/src/cli/services/commandRunner.js +698 -18
- package/dist/orchestrator/src/cli/services/execRuntime.js +66 -1
- package/dist/orchestrator/src/cli/services/orchestratorAutoScoutEvidenceRecorder.js +71 -0
- package/dist/orchestrator/src/cli/services/orchestratorCloudBranchResolution.js +8 -0
- package/dist/orchestrator/src/cli/services/orchestratorCloudEnvironmentResolution.js +22 -0
- package/dist/orchestrator/src/cli/services/orchestratorCloudExecutionLifecycleShell.js +39 -0
- package/dist/orchestrator/src/cli/services/orchestratorCloudPromptBuilder.js +37 -0
- package/dist/orchestrator/src/cli/services/orchestratorCloudRouteFallbackContract.js +45 -0
- package/dist/orchestrator/src/cli/services/orchestratorCloudRouteShell.js +36 -0
- package/dist/orchestrator/src/cli/services/orchestratorCloudTargetExecutor.js +277 -0
- package/dist/orchestrator/src/cli/services/orchestratorControlPlaneLifecycle.js +98 -0
- package/dist/orchestrator/src/cli/services/orchestratorControlPlaneLifecycleShell.js +54 -0
- package/dist/orchestrator/src/cli/services/orchestratorExecutionLifecycle.js +112 -0
- package/dist/orchestrator/src/cli/services/orchestratorExecutionModePolicy.js +27 -0
- package/dist/orchestrator/src/cli/services/orchestratorExecutionRouteAdapterShell.js +59 -0
- package/dist/orchestrator/src/cli/services/orchestratorExecutionRouteDecisionShell.js +57 -0
- package/dist/orchestrator/src/cli/services/orchestratorExecutionRouteState.js +21 -0
- package/dist/orchestrator/src/cli/services/orchestratorExecutionRouter.js +2 -0
- package/dist/orchestrator/src/cli/services/orchestratorLocalPipelineExecutor.js +149 -0
- package/dist/orchestrator/src/cli/services/orchestratorLocalRouteShell.js +63 -0
- package/dist/orchestrator/src/cli/services/orchestratorPlanShell.js +54 -0
- package/dist/orchestrator/src/cli/services/orchestratorPlanTargetTracker.js +16 -0
- package/dist/orchestrator/src/cli/services/orchestratorResumePreparationShell.js +84 -0
- package/dist/orchestrator/src/cli/services/orchestratorResumeTokenValidation.js +15 -0
- package/dist/orchestrator/src/cli/services/orchestratorRunLifecycleCompletion.js +31 -0
- package/dist/orchestrator/src/cli/services/orchestratorRunLifecycleExecutionRegistration.js +37 -0
- package/dist/orchestrator/src/cli/services/orchestratorRunLifecycleOrchestrationShell.js +83 -0
- package/dist/orchestrator/src/cli/services/orchestratorRunLifecycleTaskManagerShell.js +37 -0
- package/dist/orchestrator/src/cli/services/orchestratorRuntimeManifestMutation.js +20 -0
- package/dist/orchestrator/src/cli/services/orchestratorStartPreparationShell.js +56 -0
- package/dist/orchestrator/src/cli/services/orchestratorStatusShell.js +70 -0
- package/dist/orchestrator/src/cli/services/pipelineResolver.js +7 -3
- package/dist/orchestrator/src/cli/services/plannerMemory.js +119 -0
- package/dist/orchestrator/src/cli/services/runPreparation.js +7 -3
- package/dist/orchestrator/src/cli/services/runSummaryWriter.js +9 -0
- package/dist/orchestrator/src/cli/setupBootstrapShell.js +114 -0
- package/dist/orchestrator/src/cli/setupCliShell.js +51 -0
- package/dist/orchestrator/src/cli/skillsCliShell.js +56 -0
- package/dist/orchestrator/src/cli/startCliRequestShell.js +53 -0
- package/dist/orchestrator/src/cli/startCliShell.js +68 -0
- package/dist/orchestrator/src/cli/statusCliShell.js +22 -0
- package/dist/orchestrator/src/cli/utils/authProvenanceFingerprint.js +27 -0
- package/dist/orchestrator/src/cli/utils/cloudPreflight.js +285 -7
- package/dist/orchestrator/src/cli/utils/codexFeatures.js +60 -0
- package/dist/orchestrator/src/cli/utils/delegationConfigParser.js +250 -0
- package/dist/orchestrator/src/cli/utils/delegationMcpHealth.js +1382 -0
- package/dist/orchestrator/src/cli/utils/devtools.js +2 -54
- package/dist/orchestrator/src/cli/utils/mcpServerEntry.js +53 -0
- package/dist/orchestrator/src/cli/utils/packageProgramResolver.js +151 -0
- package/dist/orchestrator/src/cli/utils/providerOverrideEnv.js +71 -0
- package/dist/orchestrator/src/cli/utils/trailingJsonObject.js +59 -0
- package/dist/orchestrator/src/learning/crystalizer.js +2 -2
- package/dist/orchestrator/src/manager.js +74 -4
- package/dist/orchestrator/src/persistence/ExperienceStore.js +233 -49
- package/dist/orchestrator/src/persistence/TaskStateStore.js +6 -6
- package/dist/orchestrator/src/persistence/lockFile.js +70 -4
- package/dist/orchestrator/src/persistence/sanitizeIdentifier.js +39 -0
- package/dist/orchestrator/src/sync/createCloudSyncWorker.js +3 -2
- package/dist/orchestrator/src/utils/atomicWrite.js +17 -2
- package/dist/packages/orchestrator/src/exec/unified-exec.js +99 -6
- package/dist/packages/orchestrator/src/instructions/promptPacks.js +150 -19
- package/dist/packages/sdk-node/src/orchestrator.js +137 -13
- package/dist/packages/shared/config/designConfig.js +8 -1
- package/dist/packages/shared/streams/stdio.js +1 -1
- package/dist/scripts/design/pipeline/permit.js +15 -0
- package/dist/scripts/lib/docs-catalog.js +399 -0
- package/dist/scripts/lib/docs-helpers.js +87 -5
- package/dist/scripts/lib/pr-watch-merge.js +1088 -80
- package/dist/scripts/lib/provider-run-contract.js +26 -0
- package/dist/scripts/lib/review-command-intent-classification.js +532 -0
- package/dist/scripts/lib/review-command-probe-classification.js +385 -0
- package/dist/scripts/lib/review-execution-boundary-preflight.js +279 -0
- package/dist/scripts/lib/review-execution-runtime.js +753 -0
- package/dist/scripts/lib/review-execution-state.js +1144 -0
- package/dist/scripts/lib/review-execution-telemetry.js +215 -0
- package/dist/scripts/lib/review-inspection-target-parsing.js +78 -0
- package/dist/scripts/lib/review-launch-attempt.js +601 -0
- package/dist/scripts/lib/review-meta-surface-boundary-analysis.js +300 -0
- package/dist/scripts/lib/review-meta-surface-normalization.js +746 -0
- package/dist/scripts/lib/review-non-interactive-handoff.js +61 -0
- package/dist/scripts/lib/review-prompt-context.js +376 -0
- package/dist/scripts/lib/review-scope-advisory.js +286 -0
- package/dist/scripts/lib/review-scope-paths.js +123 -0
- package/dist/scripts/lib/review-shell-command-parser.js +389 -0
- package/dist/scripts/lib/review-shell-env-interpreter.js +340 -0
- package/dist/scripts/lib/run-manifests.js +192 -36
- package/dist/scripts/lib/spark-policy-classifier.js +593 -0
- package/dist/scripts/run-review.js +507 -1777
- package/docs/README.md +43 -20
- package/docs/book/README.md +19 -0
- package/docs/book/codex-cli-0124-adoption.md +68 -0
- package/docs/book/local-hook-impact.md +73 -0
- package/docs/book/operations.md +60 -0
- package/docs/book/public-posture.md +34 -0
- package/docs/book/setup.md +91 -0
- package/docs/book/skills.md +11 -0
- package/docs/guides/codex-version-policy.md +104 -0
- package/docs/public/downstream-setup.md +113 -0
- package/docs/public/provider-onboarding.md +173 -0
- package/package.json +23 -10
- package/plugins/codex-orchestrator/.codex-plugin/plugin.json +30 -0
- package/plugins/codex-orchestrator/.mcp.json +13 -0
- package/plugins/codex-orchestrator/launcher.mjs +361 -0
- package/schemas/manifest.json +411 -0
- package/skills/README.md +26 -0
- package/skills/collab-subagents-first/SKILL.md +1 -1
- package/skills/delegation-usage/DELEGATION_GUIDE.md +30 -12
- package/skills/delegation-usage/SKILL.md +25 -14
- package/skills/land/SKILL.md +77 -0
- package/skills/linear/SKILL.md +255 -0
- package/skills/release/SKILL.md +47 -3
- package/skills/standalone-review/SKILL.md +6 -1
- package/templates/README.md +4 -2
- package/templates/codex/.codex/agents/awaiter-high.toml +2 -2
- package/templates/codex/.codex/agents/worker-complex.toml +1 -1
- package/templates/codex/.codex/config.toml +3 -4
- package/templates/codex/.codex/providers/README.md +13 -0
- package/templates/codex/.codex/providers/control.example.json +18 -0
- package/templates/codex/.codex/providers/provider.env.example +15 -0
- package/templates/codex/AGENTS.md +15 -8
- package/templates/codex/mcp-client.json +5 -1
- package/docs/assets/setup.gif +0 -0
|
@@ -4,23 +4,29 @@ import { createRequire } from 'node:module';
|
|
|
4
4
|
import { join } from 'node:path';
|
|
5
5
|
import process from 'node:process';
|
|
6
6
|
import { resolveCodexHome } from './utils/codexPaths.js';
|
|
7
|
+
import { resolveCodexCliBin } from './utils/codexCli.js';
|
|
8
|
+
import { codexFeatureProbeDisablesMultiAgentV2, codexFeatureProbeRejectsAgentMaxThreads, readCodexFeatureProbe } from './utils/codexFeatures.js';
|
|
7
9
|
import { findPackageRoot } from './utils/packageInfo.js';
|
|
8
10
|
import { writeAtomicFile } from '../utils/atomicWrite.js';
|
|
9
11
|
const require = createRequire(import.meta.url);
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
export const
|
|
12
|
+
let tomlLibrary;
|
|
13
|
+
export const BASELINE_MODEL = 'gpt-5.4';
|
|
14
|
+
export const BASELINE_REVIEW_MODEL = BASELINE_MODEL;
|
|
15
|
+
export const CURRENT_CHATGPT_MODEL = 'gpt-5.5';
|
|
13
16
|
export const BASELINE_REASONING = 'xhigh';
|
|
14
17
|
export const BASELINE_REASONING_MINIMUM = 'high';
|
|
15
18
|
export const BASELINE_AGENTS = {
|
|
16
19
|
max_threads: 12,
|
|
17
|
-
max_depth: 4
|
|
18
|
-
max_spawn_depth: 4
|
|
20
|
+
max_depth: 4
|
|
19
21
|
};
|
|
22
|
+
export const LOCAL_MODEL_OPT_INS = [CURRENT_CHATGPT_MODEL];
|
|
23
|
+
const LOCAL_MODEL_OPT_IN_SET = new Set(LOCAL_MODEL_OPT_INS);
|
|
24
|
+
const CODEX_ORCHESTRATOR_CONFIG_KEY = 'codex_orchestrator';
|
|
25
|
+
const LOCAL_MODEL_OPT_IN_CONFIG_KEY = 'local_model_opt_in';
|
|
20
26
|
const ROLE_DEFINITIONS = [
|
|
21
27
|
{
|
|
22
28
|
key: 'explorer_fast',
|
|
23
|
-
description: 'Fast explorer (spark
|
|
29
|
+
description: 'Fast explorer (spark file/codebase search only).',
|
|
24
30
|
fileName: 'explorer-fast.toml',
|
|
25
31
|
configFile: './agents/explorer-fast.toml',
|
|
26
32
|
templatePath: join('templates', 'codex', '.codex', 'agents', 'explorer-fast.toml')
|
|
@@ -30,26 +36,45 @@ const ROLE_DEFINITIONS = [
|
|
|
30
36
|
description: 'Complex implementation role.',
|
|
31
37
|
fileName: 'worker-complex.toml',
|
|
32
38
|
configFile: './agents/worker-complex.toml',
|
|
33
|
-
templatePath: join('templates', 'codex', '.codex', 'agents', 'worker-complex.toml')
|
|
39
|
+
templatePath: join('templates', 'codex', '.codex', 'agents', 'worker-complex.toml'),
|
|
40
|
+
managedMigrationBaselines: [{ model: 'gpt-5.5', modelReasoningEffort: 'xhigh' }]
|
|
34
41
|
},
|
|
35
42
|
{
|
|
36
43
|
key: 'awaiter',
|
|
37
44
|
description: 'Awaiter override (keeps awaiter behavior with latest codex/high reasoning).',
|
|
38
45
|
fileName: 'awaiter-high.toml',
|
|
39
46
|
configFile: './agents/awaiter-high.toml',
|
|
40
|
-
templatePath: join('templates', 'codex', '.codex', 'agents', 'awaiter-high.toml')
|
|
47
|
+
templatePath: join('templates', 'codex', '.codex', 'agents', 'awaiter-high.toml'),
|
|
48
|
+
managedMigrationBaselines: [{ model: 'gpt-5.5', modelReasoningEffort: 'xhigh' }],
|
|
49
|
+
managedMigrationContentVariants: [
|
|
50
|
+
{
|
|
51
|
+
model: 'gpt-5.5',
|
|
52
|
+
modelReasoningEffort: 'high',
|
|
53
|
+
overrideComment: '# with CO portable override to use gpt-5.4 at high reasoning.'
|
|
54
|
+
}
|
|
55
|
+
]
|
|
41
56
|
}
|
|
42
57
|
];
|
|
43
58
|
export async function runCodexDefaultsSetup(options = {}) {
|
|
44
59
|
const env = options.env ?? process.env;
|
|
45
60
|
const force = Boolean(options.force);
|
|
46
61
|
const apply = Boolean(options.apply);
|
|
47
|
-
const
|
|
62
|
+
const configState = await loadConfigState(buildConfigPath(env));
|
|
63
|
+
const topLevelLocalModelOptIn = resolveRequestedLocalModelOptIn(configState.parsed, options.authScope);
|
|
64
|
+
const roleAndReviewLocalModelOptIn = resolveRoleAndReviewLocalModelOptIn(configState.parsed, topLevelLocalModelOptIn, options.authScope);
|
|
65
|
+
const authScope = topLevelLocalModelOptIn ? 'chatgpt' : 'portable';
|
|
66
|
+
const plan = buildPlan(env, force, authScope);
|
|
48
67
|
const roleDefinitions = await loadRoleDefinitions();
|
|
49
|
-
const
|
|
50
|
-
const nextConfig = mergeBaselineDefaults(configState.parsed, roleDefinitions
|
|
51
|
-
|
|
52
|
-
|
|
68
|
+
const featureProbe = readCodexFeatureProbe(resolveCodexCliBin(env), env);
|
|
69
|
+
const nextConfig = mergeBaselineDefaults(configState.parsed, roleDefinitions, {
|
|
70
|
+
topLevelLocalModelOptIn,
|
|
71
|
+
reviewModelOptIn: roleAndReviewLocalModelOptIn,
|
|
72
|
+
requestedAuthScope: options.authScope,
|
|
73
|
+
featureProbe
|
|
74
|
+
});
|
|
75
|
+
const activeRoleDefinitions = buildActiveRoleDefinitions(roleDefinitions, roleAndReviewLocalModelOptIn);
|
|
76
|
+
const configChanged = canonicalizeConfigValue(configState.parsed) !== canonicalizeConfigValue(nextConfig);
|
|
77
|
+
const roleChanges = await planRoleChanges(plan.agentsDir, force, activeRoleDefinitions);
|
|
53
78
|
if (!apply) {
|
|
54
79
|
const changes = buildPlannedChanges({
|
|
55
80
|
configPath: plan.configPath,
|
|
@@ -65,7 +90,7 @@ export async function runCodexDefaultsSetup(options = {}) {
|
|
|
65
90
|
}
|
|
66
91
|
const changes = [];
|
|
67
92
|
if (configChanged || !configState.exists) {
|
|
68
|
-
const rendered = `${
|
|
93
|
+
const rendered = `${getTomlLibrary().stringify(nextConfig)}\n`;
|
|
69
94
|
await writeAtomicFile(plan.configPath, rendered, { ensureDir: true, encoding: 'utf8' });
|
|
70
95
|
changes.push({
|
|
71
96
|
target: 'config',
|
|
@@ -73,7 +98,7 @@ export async function runCodexDefaultsSetup(options = {}) {
|
|
|
73
98
|
path: plan.configPath,
|
|
74
99
|
status: configState.exists ? 'updated' : 'created',
|
|
75
100
|
detail: configState.exists
|
|
76
|
-
? 'Updated CO baseline defaults
|
|
101
|
+
? 'Updated CO-compatible baseline defaults and preserved unrelated keys.'
|
|
77
102
|
: 'Created config.toml with CO baseline defaults.'
|
|
78
103
|
});
|
|
79
104
|
}
|
|
@@ -88,9 +113,7 @@ export async function runCodexDefaultsSetup(options = {}) {
|
|
|
88
113
|
}
|
|
89
114
|
await mkdir(plan.agentsDir, { recursive: true });
|
|
90
115
|
for (const roleChange of roleChanges) {
|
|
91
|
-
|
|
92
|
-
|| (force && roleChange.existingContent !== roleChange.definition.content);
|
|
93
|
-
if (shouldWrite) {
|
|
116
|
+
if (roleChange.writeReason) {
|
|
94
117
|
await writeAtomicFile(roleChange.path, roleChange.definition.content, {
|
|
95
118
|
ensureDir: true,
|
|
96
119
|
encoding: 'utf8'
|
|
@@ -100,9 +123,7 @@ export async function runCodexDefaultsSetup(options = {}) {
|
|
|
100
123
|
name: roleChange.definition.key,
|
|
101
124
|
path: roleChange.path,
|
|
102
125
|
status: roleChange.existingContent === null ? 'created' : 'updated',
|
|
103
|
-
detail: roleChange
|
|
104
|
-
? `Created ${roleChange.definition.fileName}.`
|
|
105
|
-
: `Overwrote ${roleChange.definition.fileName} because --force was set.`
|
|
126
|
+
detail: formatAppliedRoleWriteDetail(roleChange)
|
|
106
127
|
});
|
|
107
128
|
continue;
|
|
108
129
|
}
|
|
@@ -127,6 +148,7 @@ export function formatCodexDefaultsSetupSummary(result) {
|
|
|
127
148
|
lines.push(`- Config: ${result.plan.configPath}`);
|
|
128
149
|
lines.push(`- Agents dir: ${result.plan.agentsDir}`);
|
|
129
150
|
lines.push(`- Force overwrite: ${result.plan.force ? 'yes' : 'no'}`);
|
|
151
|
+
lines.push(`- Auth scope: ${result.plan.authScope}`);
|
|
130
152
|
lines.push('- Changes:');
|
|
131
153
|
for (const change of result.changes) {
|
|
132
154
|
lines.push(` - ${change.target}:${change.name} -> ${change.status} (${change.path})`);
|
|
@@ -137,13 +159,18 @@ export function formatCodexDefaultsSetupSummary(result) {
|
|
|
137
159
|
}
|
|
138
160
|
return lines;
|
|
139
161
|
}
|
|
140
|
-
function
|
|
162
|
+
function buildConfigPath(env) {
|
|
163
|
+
return join(resolveCodexHome(env), 'config.toml');
|
|
164
|
+
}
|
|
165
|
+
function buildPlan(env, force, authScope) {
|
|
166
|
+
const configPath = buildConfigPath(env);
|
|
141
167
|
const codexHome = resolveCodexHome(env);
|
|
142
168
|
return {
|
|
143
169
|
codexHome,
|
|
144
|
-
configPath
|
|
170
|
+
configPath,
|
|
145
171
|
agentsDir: join(codexHome, 'agents'),
|
|
146
|
-
force
|
|
172
|
+
force,
|
|
173
|
+
authScope
|
|
147
174
|
};
|
|
148
175
|
}
|
|
149
176
|
async function loadConfigState(configPath) {
|
|
@@ -152,7 +179,7 @@ async function loadConfigState(configPath) {
|
|
|
152
179
|
}
|
|
153
180
|
const raw = await readFile(configPath, 'utf8');
|
|
154
181
|
try {
|
|
155
|
-
const parsed =
|
|
182
|
+
const parsed = getTomlLibrary().parse(raw);
|
|
156
183
|
if (!isRecord(parsed)) {
|
|
157
184
|
throw new Error('top-level TOML document must be a table.');
|
|
158
185
|
}
|
|
@@ -163,14 +190,59 @@ async function loadConfigState(configPath) {
|
|
|
163
190
|
throw new Error(`Failed to parse Codex config TOML at ${configPath}: ${reason}`);
|
|
164
191
|
}
|
|
165
192
|
}
|
|
166
|
-
function
|
|
193
|
+
function getTomlLibrary() {
|
|
194
|
+
if (tomlLibrary) {
|
|
195
|
+
return tomlLibrary;
|
|
196
|
+
}
|
|
197
|
+
if (tomlLibrary === null) {
|
|
198
|
+
throw new Error('Failed to load @iarna/toml.');
|
|
199
|
+
}
|
|
200
|
+
try {
|
|
201
|
+
tomlLibrary = require('@iarna/toml');
|
|
202
|
+
return tomlLibrary;
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
tomlLibrary = null;
|
|
206
|
+
throw error;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
function canonicalizeConfigValue(value) {
|
|
210
|
+
if (value === null) {
|
|
211
|
+
return 'null';
|
|
212
|
+
}
|
|
213
|
+
if (typeof value === 'boolean' || typeof value === 'number' || typeof value === 'string') {
|
|
214
|
+
return JSON.stringify(value);
|
|
215
|
+
}
|
|
216
|
+
if (Array.isArray(value)) {
|
|
217
|
+
return `[${value.map((entry) => canonicalizeConfigValue(entry) ?? 'null').join(',')}]`;
|
|
218
|
+
}
|
|
219
|
+
if (value && typeof value === 'object') {
|
|
220
|
+
const entries = Object.entries(value)
|
|
221
|
+
.sort(([leftKey], [rightKey]) => leftKey.localeCompare(rightKey))
|
|
222
|
+
.flatMap(([key, entry]) => {
|
|
223
|
+
const canonicalEntry = canonicalizeConfigValue(entry);
|
|
224
|
+
if (typeof canonicalEntry === 'undefined') {
|
|
225
|
+
return [];
|
|
226
|
+
}
|
|
227
|
+
return [`${JSON.stringify(key)}:${canonicalEntry}`];
|
|
228
|
+
});
|
|
229
|
+
return `{${entries.join(',')}}`;
|
|
230
|
+
}
|
|
231
|
+
return undefined;
|
|
232
|
+
}
|
|
233
|
+
function mergeBaselineDefaults(existing, roleDefinitions, options) {
|
|
167
234
|
const next = structuredClone(existing);
|
|
168
|
-
next.model = BASELINE_MODEL;
|
|
235
|
+
next.model = resolveModelDefault(options.topLevelLocalModelOptIn, BASELINE_MODEL);
|
|
236
|
+
next.review_model = resolveModelDefault(options.reviewModelOptIn, BASELINE_REVIEW_MODEL);
|
|
169
237
|
next.model_reasoning_effort = BASELINE_REASONING;
|
|
238
|
+
removeLegacyLocalModelOptInMarker(next);
|
|
170
239
|
const agents = isRecord(next.agents) ? structuredClone(next.agents) : {};
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
240
|
+
if (isMultiAgentV2Enabled(next, options.featureProbe)) {
|
|
241
|
+
delete agents.max_threads;
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
agents.max_threads = BASELINE_AGENTS.max_threads;
|
|
245
|
+
}
|
|
174
246
|
for (const role of roleDefinitions) {
|
|
175
247
|
const existingRole = isRecord(agents[role.key])
|
|
176
248
|
? structuredClone(agents[role.key])
|
|
@@ -182,6 +254,71 @@ function mergeBaselineDefaults(existing, roleDefinitions) {
|
|
|
182
254
|
next.agents = agents;
|
|
183
255
|
return next;
|
|
184
256
|
}
|
|
257
|
+
export function isLocalModelOptIn(value) {
|
|
258
|
+
return typeof value === 'string' && LOCAL_MODEL_OPT_IN_SET.has(value);
|
|
259
|
+
}
|
|
260
|
+
export function resolveLocalModelOptIn(existing) {
|
|
261
|
+
const localConfig = isRecord(existing[CODEX_ORCHESTRATOR_CONFIG_KEY])
|
|
262
|
+
? existing[CODEX_ORCHESTRATOR_CONFIG_KEY]
|
|
263
|
+
: null;
|
|
264
|
+
const configuredModel = localConfig?.[LOCAL_MODEL_OPT_IN_CONFIG_KEY];
|
|
265
|
+
return isLocalModelOptIn(configuredModel) ? configuredModel : null;
|
|
266
|
+
}
|
|
267
|
+
function resolveRequestedLocalModelOptIn(existing, requestedAuthScope) {
|
|
268
|
+
if (requestedAuthScope === 'portable') {
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
if (requestedAuthScope === 'chatgpt') {
|
|
272
|
+
return CURRENT_CHATGPT_MODEL;
|
|
273
|
+
}
|
|
274
|
+
const model = readOptionalString(existing.model);
|
|
275
|
+
const reviewModel = readOptionalString(existing.review_model);
|
|
276
|
+
if (isLocalModelOptIn(model)) {
|
|
277
|
+
return model;
|
|
278
|
+
}
|
|
279
|
+
if (isLocalModelOptIn(reviewModel)) {
|
|
280
|
+
return reviewModel;
|
|
281
|
+
}
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
284
|
+
function resolveRoleAndReviewLocalModelOptIn(existing, topLevelLocalModelOptIn, requestedAuthScope) {
|
|
285
|
+
if (requestedAuthScope === 'portable') {
|
|
286
|
+
return null;
|
|
287
|
+
}
|
|
288
|
+
if (topLevelLocalModelOptIn) {
|
|
289
|
+
return topLevelLocalModelOptIn;
|
|
290
|
+
}
|
|
291
|
+
const reviewModel = readOptionalString(existing.review_model);
|
|
292
|
+
const existingLocalModelOptIn = resolveLocalModelOptIn(existing);
|
|
293
|
+
return existingLocalModelOptIn === topLevelLocalModelOptIn
|
|
294
|
+
&& reviewModel === topLevelLocalModelOptIn
|
|
295
|
+
&& isLocalModelOptIn(reviewModel)
|
|
296
|
+
? reviewModel
|
|
297
|
+
: null;
|
|
298
|
+
}
|
|
299
|
+
function readOptionalString(value) {
|
|
300
|
+
return typeof value === 'string' ? value : undefined;
|
|
301
|
+
}
|
|
302
|
+
function removeLegacyLocalModelOptInMarker(next) {
|
|
303
|
+
const existingConfig = isRecord(next[CODEX_ORCHESTRATOR_CONFIG_KEY])
|
|
304
|
+
? structuredClone(next[CODEX_ORCHESTRATOR_CONFIG_KEY])
|
|
305
|
+
: {};
|
|
306
|
+
if (LOCAL_MODEL_OPT_IN_CONFIG_KEY in existingConfig) {
|
|
307
|
+
delete existingConfig[LOCAL_MODEL_OPT_IN_CONFIG_KEY];
|
|
308
|
+
if (Object.keys(existingConfig).length > 0) {
|
|
309
|
+
next[CODEX_ORCHESTRATOR_CONFIG_KEY] = existingConfig;
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
delete next[CODEX_ORCHESTRATOR_CONFIG_KEY];
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
export function formatModelDefaultExpectation(baseline) {
|
|
317
|
+
return `${CURRENT_CHATGPT_MODEL} when ChatGPT-auth access is verified (fallback: ${baseline})`;
|
|
318
|
+
}
|
|
319
|
+
function resolveModelDefault(localModelOptIn, baseline) {
|
|
320
|
+
return localModelOptIn ?? baseline;
|
|
321
|
+
}
|
|
185
322
|
async function planRoleChanges(agentsDir, force, roleDefinitions) {
|
|
186
323
|
const changes = [];
|
|
187
324
|
for (const definition of roleDefinitions) {
|
|
@@ -192,7 +329,8 @@ async function planRoleChanges(agentsDir, force, roleDefinitions) {
|
|
|
192
329
|
path,
|
|
193
330
|
existingContent: null,
|
|
194
331
|
currentStatus: 'pending',
|
|
195
|
-
detail: `Will create ${definition.fileName}
|
|
332
|
+
detail: `Will create ${definition.fileName}.`,
|
|
333
|
+
writeReason: 'create'
|
|
196
334
|
});
|
|
197
335
|
continue;
|
|
198
336
|
}
|
|
@@ -203,7 +341,8 @@ async function planRoleChanges(agentsDir, force, roleDefinitions) {
|
|
|
203
341
|
path,
|
|
204
342
|
existingContent: current,
|
|
205
343
|
currentStatus: 'unchanged',
|
|
206
|
-
detail: `${definition.fileName} already matches CO baseline defaults
|
|
344
|
+
detail: `${definition.fileName} already matches CO baseline defaults.`,
|
|
345
|
+
writeReason: null
|
|
207
346
|
});
|
|
208
347
|
continue;
|
|
209
348
|
}
|
|
@@ -213,7 +352,19 @@ async function planRoleChanges(agentsDir, force, roleDefinitions) {
|
|
|
213
352
|
path,
|
|
214
353
|
existingContent: current,
|
|
215
354
|
currentStatus: 'pending',
|
|
216
|
-
detail: `Will overwrite ${definition.fileName} because --force is set
|
|
355
|
+
detail: `Will overwrite ${definition.fileName} because --force is set.`,
|
|
356
|
+
writeReason: 'force'
|
|
357
|
+
});
|
|
358
|
+
continue;
|
|
359
|
+
}
|
|
360
|
+
if (definition.managedMigrationContents.includes(current)) {
|
|
361
|
+
changes.push({
|
|
362
|
+
definition,
|
|
363
|
+
path,
|
|
364
|
+
existingContent: current,
|
|
365
|
+
currentStatus: 'pending',
|
|
366
|
+
detail: `Will update ${definition.fileName} from a prior CO-managed model baseline.`,
|
|
367
|
+
writeReason: 'managed_migration'
|
|
217
368
|
});
|
|
218
369
|
continue;
|
|
219
370
|
}
|
|
@@ -222,7 +373,8 @@ async function planRoleChanges(agentsDir, force, roleDefinitions) {
|
|
|
222
373
|
path,
|
|
223
374
|
existingContent: current,
|
|
224
375
|
currentStatus: 'preserved',
|
|
225
|
-
detail: `${definition.fileName} already exists; preserving without --force
|
|
376
|
+
detail: `${definition.fileName} already exists; preserving without --force.`,
|
|
377
|
+
writeReason: null
|
|
226
378
|
});
|
|
227
379
|
}
|
|
228
380
|
return changes;
|
|
@@ -240,10 +392,69 @@ async function loadRoleDefinitions() {
|
|
|
240
392
|
const reason = error?.message ?? String(error);
|
|
241
393
|
throw new Error(`Unable to read role template ${templateFile}: ${reason}`);
|
|
242
394
|
}
|
|
243
|
-
loaded.push({
|
|
395
|
+
loaded.push({
|
|
396
|
+
...definition,
|
|
397
|
+
content,
|
|
398
|
+
managedMigrationContents: buildManagedMigrationContents(content, definition)
|
|
399
|
+
});
|
|
244
400
|
}
|
|
245
401
|
return loaded;
|
|
246
402
|
}
|
|
403
|
+
function buildActiveRoleDefinitions(roleDefinitions, localModelOptIn) {
|
|
404
|
+
if (!localModelOptIn) {
|
|
405
|
+
return [...roleDefinitions];
|
|
406
|
+
}
|
|
407
|
+
return roleDefinitions.map((definition) => {
|
|
408
|
+
const matchingOptInBaseline = definition.managedMigrationBaselines?.find((baseline) => baseline.model === localModelOptIn);
|
|
409
|
+
if (!matchingOptInBaseline) {
|
|
410
|
+
return definition;
|
|
411
|
+
}
|
|
412
|
+
const optInContent = applyRoleBaselineOverrides(definition.content, definition.fileName, matchingOptInBaseline);
|
|
413
|
+
return {
|
|
414
|
+
...definition,
|
|
415
|
+
content: optInContent,
|
|
416
|
+
managedMigrationContents: uniqueRoleContents([
|
|
417
|
+
definition.content,
|
|
418
|
+
...definition.managedMigrationContents
|
|
419
|
+
]).filter((migrationContent) => migrationContent !== optInContent)
|
|
420
|
+
};
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
function buildManagedMigrationContents(content, definition) {
|
|
424
|
+
const migrationContents = [
|
|
425
|
+
...(definition.managedMigrationBaselines ?? []),
|
|
426
|
+
...(definition.managedMigrationContentVariants ?? [])
|
|
427
|
+
].map((baseline) => applyRoleBaselineOverrides(content, definition.fileName, baseline));
|
|
428
|
+
return uniqueRoleContents(migrationContents).filter((migrationContent) => migrationContent !== content);
|
|
429
|
+
}
|
|
430
|
+
function uniqueRoleContents(contents) {
|
|
431
|
+
return [...new Set(contents)];
|
|
432
|
+
}
|
|
433
|
+
function formatAppliedRoleWriteDetail(roleChange) {
|
|
434
|
+
switch (roleChange.writeReason) {
|
|
435
|
+
case 'create':
|
|
436
|
+
return `Created ${roleChange.definition.fileName}.`;
|
|
437
|
+
case 'force':
|
|
438
|
+
return `Overwrote ${roleChange.definition.fileName} because --force was set.`;
|
|
439
|
+
case 'managed_migration':
|
|
440
|
+
return `Updated ${roleChange.definition.fileName} from a prior CO-managed model baseline.`;
|
|
441
|
+
case null:
|
|
442
|
+
return roleChange.detail;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
function applyRoleBaselineOverrides(content, fileName, baseline) {
|
|
446
|
+
let next = replaceRoleTomlString(content, 'model', baseline.model, fileName);
|
|
447
|
+
next = replaceRoleTomlString(next, 'model_reasoning_effort', baseline.modelReasoningEffort, fileName);
|
|
448
|
+
return next.replace(/^# with CO override to use .+ at .+ reasoning\.$/m, baseline.overrideComment
|
|
449
|
+
?? `# with CO override to use ${baseline.model} at ${baseline.modelReasoningEffort} reasoning.`);
|
|
450
|
+
}
|
|
451
|
+
function replaceRoleTomlString(content, key, value, fileName) {
|
|
452
|
+
const pattern = new RegExp(`^(${key}\\s*=\\s*)"[^"]*"$`, 'm');
|
|
453
|
+
if (!pattern.test(content)) {
|
|
454
|
+
throw new Error(`Role template ${fileName} is missing a ${key} assignment.`);
|
|
455
|
+
}
|
|
456
|
+
return content.replace(pattern, (_match, prefix) => `${prefix}"${value}"`);
|
|
457
|
+
}
|
|
247
458
|
function buildPlannedChanges(params) {
|
|
248
459
|
const changes = [];
|
|
249
460
|
const configStatus = params.configChanged || !params.configExists ? 'pending' : 'unchanged';
|
|
@@ -254,7 +465,7 @@ function buildPlannedChanges(params) {
|
|
|
254
465
|
status: configStatus,
|
|
255
466
|
detail: configStatus === 'pending'
|
|
256
467
|
? params.configExists
|
|
257
|
-
? 'Will update CO baseline defaults
|
|
468
|
+
? 'Will update CO-compatible baseline defaults while preserving unrelated keys.'
|
|
258
469
|
: 'Will create config.toml with CO baseline defaults.'
|
|
259
470
|
: 'CO baseline defaults already present.'
|
|
260
471
|
});
|
|
@@ -272,3 +483,21 @@ function buildPlannedChanges(params) {
|
|
|
272
483
|
function isRecord(value) {
|
|
273
484
|
return typeof value === 'object' && value !== null && !Array.isArray(value) && (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null);
|
|
274
485
|
}
|
|
486
|
+
function isMultiAgentV2Enabled(config, featureProbe) {
|
|
487
|
+
if (featureProbe.flags?.multi_agent_v2 === true) {
|
|
488
|
+
return true;
|
|
489
|
+
}
|
|
490
|
+
if (codexFeatureProbeDisablesMultiAgentV2(featureProbe)) {
|
|
491
|
+
return false;
|
|
492
|
+
}
|
|
493
|
+
if (codexFeatureProbeRejectsAgentMaxThreads(featureProbe)) {
|
|
494
|
+
return true;
|
|
495
|
+
}
|
|
496
|
+
if (!isRecord(config.features)) {
|
|
497
|
+
return false;
|
|
498
|
+
}
|
|
499
|
+
return readBooleanValue(config.features.multi_agent_v2) === true;
|
|
500
|
+
}
|
|
501
|
+
function readBooleanValue(value) {
|
|
502
|
+
return typeof value === 'boolean' ? value : null;
|
|
503
|
+
}
|