@kbediako/codex-orchestrator 0.1.38 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/.agents/plugins/marketplace.json +20 -0
  2. package/README.md +70 -301
  3. package/bin/codex-orchestrator.js +161 -0
  4. package/codex.orchestrator.json +149 -13
  5. package/dist/bin/codex-orchestrator.js +795 -1154
  6. package/dist/orchestrator/src/cli/adapters/CommandPlanner.js +22 -4
  7. package/dist/orchestrator/src/cli/adapters/CommandReviewer.js +3 -3
  8. package/dist/orchestrator/src/cli/adapters/CommandTester.js +2 -2
  9. package/dist/orchestrator/src/cli/adapters/cloudFailureDiagnostics.js +183 -11
  10. package/dist/orchestrator/src/cli/coStatusAttachCliShell.js +402 -0
  11. package/dist/orchestrator/src/cli/coStatusCliShell.js +429 -0
  12. package/dist/orchestrator/src/cli/coStatusOperatorAutopilotCliShell.js +120 -0
  13. package/dist/orchestrator/src/cli/codexCliShell.js +72 -0
  14. package/dist/orchestrator/src/cli/codexDefaultsSetup.js +49 -11
  15. package/dist/orchestrator/src/cli/config/delegationConfig.js +317 -5
  16. package/dist/orchestrator/src/cli/config/repoConfigPolicy.js +2 -3
  17. package/dist/orchestrator/src/cli/config/userConfig.js +28 -13
  18. package/dist/orchestrator/src/cli/control/authenticatedControlRouteGate.js +69 -0
  19. package/dist/orchestrator/src/cli/control/authenticatedRouteComposition.js +267 -0
  20. package/dist/orchestrator/src/cli/control/authenticatedRouteController.js +5 -0
  21. package/dist/orchestrator/src/cli/control/authenticatedRouteDispatcher.js +41 -0
  22. package/dist/orchestrator/src/cli/control/compatibilityIssuePresenter.js +1035 -0
  23. package/dist/orchestrator/src/cli/control/confirmationApproveController.js +62 -0
  24. package/dist/orchestrator/src/cli/control/confirmationCreateController.js +69 -0
  25. package/dist/orchestrator/src/cli/control/confirmationIssueConsumeController.js +43 -0
  26. package/dist/orchestrator/src/cli/control/confirmationListController.js +22 -0
  27. package/dist/orchestrator/src/cli/control/confirmationValidateController.js +58 -0
  28. package/dist/orchestrator/src/cli/control/confirmations.js +25 -3
  29. package/dist/orchestrator/src/cli/control/controlActionCancelConfirmation.js +65 -0
  30. package/dist/orchestrator/src/cli/control/controlActionController.js +77 -0
  31. package/dist/orchestrator/src/cli/control/controlActionControllerSequencing.js +161 -0
  32. package/dist/orchestrator/src/cli/control/controlActionExecution.js +142 -0
  33. package/dist/orchestrator/src/cli/control/controlActionFinalization.js +43 -0
  34. package/dist/orchestrator/src/cli/control/controlActionOutcome.js +60 -0
  35. package/dist/orchestrator/src/cli/control/controlActionPreflight.js +476 -0
  36. package/dist/orchestrator/src/cli/control/controlAuthenticatedRouteHandoff.js +57 -0
  37. package/dist/orchestrator/src/cli/control/controlBootstrapAssembly.js +39 -0
  38. package/dist/orchestrator/src/cli/control/controlBootstrapMetadataPersistence.js +16 -0
  39. package/dist/orchestrator/src/cli/control/controlEventTransport.js +49 -0
  40. package/dist/orchestrator/src/cli/control/controlExpiryLifecycle.js +102 -0
  41. package/dist/orchestrator/src/cli/control/controlHostOwnership.js +480 -0
  42. package/dist/orchestrator/src/cli/control/controlHostSupervision.js +608 -0
  43. package/dist/orchestrator/src/cli/control/controlOversightFacade.js +8 -0
  44. package/dist/orchestrator/src/cli/control/controlOversightReadContract.js +1 -0
  45. package/dist/orchestrator/src/cli/control/controlOversightReadService.js +16 -0
  46. package/dist/orchestrator/src/cli/control/controlOversightUpdateContract.js +1 -0
  47. package/dist/orchestrator/src/cli/control/controlPersistenceFiles.js +6 -0
  48. package/dist/orchestrator/src/cli/control/controlQuestionChildResolution.js +18 -0
  49. package/dist/orchestrator/src/cli/control/controlRequestContext.js +42 -0
  50. package/dist/orchestrator/src/cli/control/controlRequestController.js +9 -0
  51. package/dist/orchestrator/src/cli/control/controlRequestPredispatch.js +17 -0
  52. package/dist/orchestrator/src/cli/control/controlRequestRouteDispatch.js +44 -0
  53. package/dist/orchestrator/src/cli/control/controlRuntime.js +992 -0
  54. package/dist/orchestrator/src/cli/control/controlServer.js +23 -1456
  55. package/dist/orchestrator/src/cli/control/controlServerAuditAndErrorHelpers.js +115 -0
  56. package/dist/orchestrator/src/cli/control/controlServerAuthenticatedRouteBranch.js +29 -0
  57. package/dist/orchestrator/src/cli/control/controlServerBootstrapLifecycle.js +30 -0
  58. package/dist/orchestrator/src/cli/control/controlServerBootstrapStartSequence.js +21 -0
  59. package/dist/orchestrator/src/cli/control/controlServerOwnedRuntimeLifecycle.js +67 -0
  60. package/dist/orchestrator/src/cli/control/controlServerPublicLifecycle.js +756 -0
  61. package/dist/orchestrator/src/cli/control/controlServerPublicRouteHelpers.js +86 -0
  62. package/dist/orchestrator/src/cli/control/controlServerReadyInstanceLifecycle.js +25 -0
  63. package/dist/orchestrator/src/cli/control/controlServerReadyInstanceStartup.js +18 -0
  64. package/dist/orchestrator/src/cli/control/controlServerRequestBodyHelpers.js +37 -0
  65. package/dist/orchestrator/src/cli/control/controlServerRequestShell.js +40 -0
  66. package/dist/orchestrator/src/cli/control/controlServerRequestShellBinding.js +17 -0
  67. package/dist/orchestrator/src/cli/control/controlServerSeedLoading.js +27 -0
  68. package/dist/orchestrator/src/cli/control/controlServerSeededRuntimeAssembly.js +186 -0
  69. package/dist/orchestrator/src/cli/control/controlServerStartupInputPreparation.js +31 -0
  70. package/dist/orchestrator/src/cli/control/controlServerStartupSequence.js +49 -0
  71. package/dist/orchestrator/src/cli/control/controlState.js +233 -2
  72. package/dist/orchestrator/src/cli/control/controlStatusDashboard.js +1899 -0
  73. package/dist/orchestrator/src/cli/control/controlTelegramBridgeBootstrapLifecycle.js +22 -0
  74. package/dist/orchestrator/src/cli/control/controlTelegramBridgeLifecycle.js +67 -0
  75. package/dist/orchestrator/src/cli/control/controlTelegramBridgeOversightFacadeFactory.js +8 -0
  76. package/dist/orchestrator/src/cli/control/controlTelegramCommandController.js +49 -0
  77. package/dist/orchestrator/src/cli/control/controlTelegramDispatchRead.js +40 -0
  78. package/dist/orchestrator/src/cli/control/controlTelegramPollingController.js +89 -0
  79. package/dist/orchestrator/src/cli/control/controlTelegramProjectionNotificationController.js +29 -0
  80. package/dist/orchestrator/src/cli/control/controlTelegramPushState.js +63 -0
  81. package/dist/orchestrator/src/cli/control/controlTelegramQuestionRead.js +13 -0
  82. package/dist/orchestrator/src/cli/control/controlTelegramReadController.js +216 -0
  83. package/dist/orchestrator/src/cli/control/controlTelegramUpdateHandler.js +63 -0
  84. package/dist/orchestrator/src/cli/control/controlWatcher.js +73 -5
  85. package/dist/orchestrator/src/cli/control/delegationRegisterController.js +35 -0
  86. package/dist/orchestrator/src/cli/control/dynamicToolBridgePolicy.js +139 -0
  87. package/dist/orchestrator/src/cli/control/eventsSseController.js +12 -0
  88. package/dist/orchestrator/src/cli/control/linearBudgetState.js +1789 -0
  89. package/dist/orchestrator/src/cli/control/linearDispatchSource.js +1137 -0
  90. package/dist/orchestrator/src/cli/control/linearGraphqlClient.js +150 -0
  91. package/dist/orchestrator/src/cli/control/linearRateLimit.js +102 -0
  92. package/dist/orchestrator/src/cli/control/linearWebhookController.js +499 -0
  93. package/dist/orchestrator/src/cli/control/liveLinearAdvisoryRuntime.js +70 -0
  94. package/dist/orchestrator/src/cli/control/observabilityApiController.js +173 -0
  95. package/dist/orchestrator/src/cli/control/observabilityReadModel.js +500 -0
  96. package/dist/orchestrator/src/cli/control/observabilitySurface.js +284 -0
  97. package/dist/orchestrator/src/cli/control/observabilityUpdateNotifier.js +22 -0
  98. package/dist/orchestrator/src/cli/control/operatorDashboardPresenter.js +252 -0
  99. package/dist/orchestrator/src/cli/control/providerAgentCapacity.js +70 -0
  100. package/dist/orchestrator/src/cli/control/providerControlHostFreshnessGauge.js +1068 -0
  101. package/dist/orchestrator/src/cli/control/providerIntakeState.js +473 -0
  102. package/dist/orchestrator/src/cli/control/providerIssueHandoff.js +6811 -0
  103. package/dist/orchestrator/src/cli/control/providerIssueObservability.js +1348 -0
  104. package/dist/orchestrator/src/cli/control/providerIssueRetryQueue.js +84 -0
  105. package/dist/orchestrator/src/cli/control/providerLinearRuntimeProof.js +588 -0
  106. package/dist/orchestrator/src/cli/control/providerLinearScreenshotProof.js +473 -0
  107. package/dist/orchestrator/src/cli/control/providerLinearWorkerTruth.js +383 -0
  108. package/dist/orchestrator/src/cli/control/providerLinearWorkflowAudit.js +254 -0
  109. package/dist/orchestrator/src/cli/control/providerLinearWorkflowFacade.js +5573 -0
  110. package/dist/orchestrator/src/cli/control/providerLinearWorkflowStates.js +115 -0
  111. package/dist/orchestrator/src/cli/control/providerMergeCloseout.js +1868 -0
  112. package/dist/orchestrator/src/cli/control/providerOperatorAutopilot.js +1580 -0
  113. package/dist/orchestrator/src/cli/control/providerOperatorAutopilotLifecycle.js +154 -0
  114. package/dist/orchestrator/src/cli/control/providerOperatorAutopilotLocalRolloutExecution.js +1006 -0
  115. package/dist/orchestrator/src/cli/control/providerPollingHealth.js +435 -0
  116. package/dist/orchestrator/src/cli/control/providerTerminalCleanup.js +516 -0
  117. package/dist/orchestrator/src/cli/control/providerWorkerHosts.js +191 -0
  118. package/dist/orchestrator/src/cli/control/providerWorkflowConfigStore.js +515 -0
  119. package/dist/orchestrator/src/cli/control/questionChildResolutionAdapter.js +361 -0
  120. package/dist/orchestrator/src/cli/control/questionQueueController.js +181 -0
  121. package/dist/orchestrator/src/cli/control/questionReadRetryDeduplication.js +9 -0
  122. package/dist/orchestrator/src/cli/control/questionReadSequence.js +10 -0
  123. package/dist/orchestrator/src/cli/control/securityViolationController.js +27 -0
  124. package/dist/orchestrator/src/cli/control/selectedRunProjection.js +1838 -0
  125. package/dist/orchestrator/src/cli/control/telegramOversightApiClient.js +48 -0
  126. package/dist/orchestrator/src/cli/control/telegramOversightBridge.js +180 -0
  127. package/dist/orchestrator/src/cli/control/telegramOversightBridgeProjectionDeliveryQueue.js +25 -0
  128. package/dist/orchestrator/src/cli/control/telegramOversightBridgeRuntimeLifecycle.js +45 -0
  129. package/dist/orchestrator/src/cli/control/telegramOversightBridgeStateStore.js +77 -0
  130. package/dist/orchestrator/src/cli/control/telegramOversightControlActionApiClient.js +45 -0
  131. package/dist/orchestrator/src/cli/control/trackerDispatchPilot.js +439 -0
  132. package/dist/orchestrator/src/cli/control/uiDataController.js +34 -0
  133. package/dist/orchestrator/src/cli/control/uiSessionController.js +100 -0
  134. package/dist/orchestrator/src/cli/controlHostCliShell.js +860 -0
  135. package/dist/orchestrator/src/cli/controlHostFreshnessGaugeCliShell.js +129 -0
  136. package/dist/orchestrator/src/cli/controlHostSupervisionCliShell.js +2127 -0
  137. package/dist/orchestrator/src/cli/delegationCliShell.js +62 -0
  138. package/dist/orchestrator/src/cli/delegationServer.js +567 -678
  139. package/dist/orchestrator/src/cli/delegationServerCliShell.js +52 -0
  140. package/dist/orchestrator/src/cli/delegationServerQuestionFlowShell.js +228 -0
  141. package/dist/orchestrator/src/cli/delegationServerToolDispatchShell.js +411 -0
  142. package/dist/orchestrator/src/cli/delegationServerTransport.js +274 -0
  143. package/dist/orchestrator/src/cli/delegationSetup.js +51 -171
  144. package/dist/orchestrator/src/cli/devtoolsCliShell.js +34 -0
  145. package/dist/orchestrator/src/cli/doctor.js +542 -122
  146. package/dist/orchestrator/src/cli/doctorCliRequestShell.js +72 -0
  147. package/dist/orchestrator/src/cli/doctorCliShell.js +138 -0
  148. package/dist/orchestrator/src/cli/doctorUsage.js +119 -15
  149. package/dist/orchestrator/src/cli/exec/experience.js +16 -2
  150. package/dist/orchestrator/src/cli/exec/summary.js +3 -0
  151. package/dist/orchestrator/src/cli/execCliShell.js +51 -0
  152. package/dist/orchestrator/src/cli/flowCliRequestShell.js +44 -0
  153. package/dist/orchestrator/src/cli/flowCliShell.js +239 -0
  154. package/dist/orchestrator/src/cli/frontendTestCliRequestShell.js +80 -0
  155. package/dist/orchestrator/src/cli/frontendTestCliShell.js +41 -0
  156. package/dist/orchestrator/src/cli/init.js +1 -0
  157. package/dist/orchestrator/src/cli/initCliShell.js +50 -0
  158. package/dist/orchestrator/src/cli/linearCliShell.js +1200 -0
  159. package/dist/orchestrator/src/cli/mcpEnableCliShell.js +132 -0
  160. package/dist/orchestrator/src/cli/metrics/metricsAggregator.js +3 -2
  161. package/dist/orchestrator/src/cli/metrics/metricsRecorder.js +56 -0
  162. package/dist/orchestrator/src/cli/orchestrator.js +66 -1376
  163. package/dist/orchestrator/src/cli/planCliShell.js +19 -0
  164. package/dist/orchestrator/src/cli/prCliShell.js +41 -0
  165. package/dist/orchestrator/src/cli/providerLinearChildLanePhaseContract.js +204 -0
  166. package/dist/orchestrator/src/cli/providerLinearChildLaneRunner.js +1772 -0
  167. package/dist/orchestrator/src/cli/providerLinearChildLaneShell.js +2420 -0
  168. package/dist/orchestrator/src/cli/providerLinearChildStreamShell.js +385 -0
  169. package/dist/orchestrator/src/cli/providerLinearWorkerRunner.js +5738 -0
  170. package/dist/orchestrator/src/cli/resumeCliShell.js +14 -0
  171. package/dist/orchestrator/src/cli/reviewCliLaunchShell.js +72 -0
  172. package/dist/orchestrator/src/cli/rlm/alignment.js +3 -3
  173. package/dist/orchestrator/src/cli/rlm/context.js +94 -7
  174. package/dist/orchestrator/src/cli/rlm/rlmCodexRuntimeShell.js +546 -0
  175. package/dist/orchestrator/src/cli/rlm/symbolic.js +4 -2
  176. package/dist/orchestrator/src/cli/rlmCliRequestShell.js +42 -0
  177. package/dist/orchestrator/src/cli/rlmCompletionCliShell.js +46 -0
  178. package/dist/orchestrator/src/cli/rlmLaunchCliShell.js +51 -0
  179. package/dist/orchestrator/src/cli/rlmRunner.js +83 -523
  180. package/dist/orchestrator/src/cli/run/blockMemory.js +500 -0
  181. package/dist/orchestrator/src/cli/run/manifest.js +410 -73
  182. package/dist/orchestrator/src/cli/run/manifestPersister.js +45 -14
  183. package/dist/orchestrator/src/cli/run/runMemoryController.js +216 -0
  184. package/dist/orchestrator/src/cli/run/source0.js +690 -0
  185. package/dist/orchestrator/src/cli/run/workspacePath.js +101 -0
  186. package/dist/orchestrator/src/cli/runtime/mode.js +2 -1
  187. package/dist/orchestrator/src/cli/runtime/provider.js +39 -2
  188. package/dist/orchestrator/src/cli/selfCheckCliShell.js +12 -0
  189. package/dist/orchestrator/src/cli/services/commandRunner.js +667 -18
  190. package/dist/orchestrator/src/cli/services/execRuntime.js +66 -1
  191. package/dist/orchestrator/src/cli/services/orchestratorAutoScoutEvidenceRecorder.js +71 -0
  192. package/dist/orchestrator/src/cli/services/orchestratorCloudBranchResolution.js +8 -0
  193. package/dist/orchestrator/src/cli/services/orchestratorCloudEnvironmentResolution.js +22 -0
  194. package/dist/orchestrator/src/cli/services/orchestratorCloudExecutionLifecycleShell.js +39 -0
  195. package/dist/orchestrator/src/cli/services/orchestratorCloudPromptBuilder.js +37 -0
  196. package/dist/orchestrator/src/cli/services/orchestratorCloudRouteFallbackContract.js +45 -0
  197. package/dist/orchestrator/src/cli/services/orchestratorCloudRouteShell.js +36 -0
  198. package/dist/orchestrator/src/cli/services/orchestratorCloudTargetExecutor.js +277 -0
  199. package/dist/orchestrator/src/cli/services/orchestratorControlPlaneLifecycle.js +98 -0
  200. package/dist/orchestrator/src/cli/services/orchestratorControlPlaneLifecycleShell.js +54 -0
  201. package/dist/orchestrator/src/cli/services/orchestratorExecutionLifecycle.js +112 -0
  202. package/dist/orchestrator/src/cli/services/orchestratorExecutionModePolicy.js +27 -0
  203. package/dist/orchestrator/src/cli/services/orchestratorExecutionRouteAdapterShell.js +59 -0
  204. package/dist/orchestrator/src/cli/services/orchestratorExecutionRouteDecisionShell.js +57 -0
  205. package/dist/orchestrator/src/cli/services/orchestratorExecutionRouteState.js +21 -0
  206. package/dist/orchestrator/src/cli/services/orchestratorExecutionRouter.js +2 -0
  207. package/dist/orchestrator/src/cli/services/orchestratorLocalPipelineExecutor.js +149 -0
  208. package/dist/orchestrator/src/cli/services/orchestratorLocalRouteShell.js +63 -0
  209. package/dist/orchestrator/src/cli/services/orchestratorPlanShell.js +54 -0
  210. package/dist/orchestrator/src/cli/services/orchestratorPlanTargetTracker.js +16 -0
  211. package/dist/orchestrator/src/cli/services/orchestratorResumePreparationShell.js +84 -0
  212. package/dist/orchestrator/src/cli/services/orchestratorResumeTokenValidation.js +15 -0
  213. package/dist/orchestrator/src/cli/services/orchestratorRunLifecycleCompletion.js +31 -0
  214. package/dist/orchestrator/src/cli/services/orchestratorRunLifecycleExecutionRegistration.js +37 -0
  215. package/dist/orchestrator/src/cli/services/orchestratorRunLifecycleOrchestrationShell.js +83 -0
  216. package/dist/orchestrator/src/cli/services/orchestratorRunLifecycleTaskManagerShell.js +37 -0
  217. package/dist/orchestrator/src/cli/services/orchestratorRuntimeManifestMutation.js +20 -0
  218. package/dist/orchestrator/src/cli/services/orchestratorStartPreparationShell.js +56 -0
  219. package/dist/orchestrator/src/cli/services/orchestratorStatusShell.js +70 -0
  220. package/dist/orchestrator/src/cli/services/pipelineResolver.js +7 -3
  221. package/dist/orchestrator/src/cli/services/plannerMemory.js +119 -0
  222. package/dist/orchestrator/src/cli/services/runPreparation.js +7 -3
  223. package/dist/orchestrator/src/cli/services/runSummaryWriter.js +9 -0
  224. package/dist/orchestrator/src/cli/setupBootstrapShell.js +114 -0
  225. package/dist/orchestrator/src/cli/setupCliShell.js +51 -0
  226. package/dist/orchestrator/src/cli/skillsCliShell.js +56 -0
  227. package/dist/orchestrator/src/cli/startCliRequestShell.js +53 -0
  228. package/dist/orchestrator/src/cli/startCliShell.js +68 -0
  229. package/dist/orchestrator/src/cli/statusCliShell.js +22 -0
  230. package/dist/orchestrator/src/cli/utils/authProvenanceFingerprint.js +27 -0
  231. package/dist/orchestrator/src/cli/utils/cloudPreflight.js +83 -1
  232. package/dist/orchestrator/src/cli/utils/delegationConfigParser.js +250 -0
  233. package/dist/orchestrator/src/cli/utils/delegationMcpHealth.js +1382 -0
  234. package/dist/orchestrator/src/cli/utils/devtools.js +2 -54
  235. package/dist/orchestrator/src/cli/utils/mcpServerEntry.js +53 -0
  236. package/dist/orchestrator/src/cli/utils/packageProgramResolver.js +151 -0
  237. package/dist/orchestrator/src/cli/utils/providerOverrideEnv.js +71 -0
  238. package/dist/orchestrator/src/cli/utils/trailingJsonObject.js +59 -0
  239. package/dist/orchestrator/src/learning/crystalizer.js +2 -2
  240. package/dist/orchestrator/src/persistence/ExperienceStore.js +233 -49
  241. package/dist/orchestrator/src/persistence/TaskStateStore.js +6 -6
  242. package/dist/orchestrator/src/persistence/lockFile.js +70 -4
  243. package/dist/orchestrator/src/persistence/sanitizeIdentifier.js +39 -0
  244. package/dist/orchestrator/src/sync/createCloudSyncWorker.js +3 -2
  245. package/dist/orchestrator/src/utils/atomicWrite.js +17 -2
  246. package/dist/packages/orchestrator/src/exec/unified-exec.js +99 -6
  247. package/dist/packages/orchestrator/src/instructions/promptPacks.js +150 -19
  248. package/dist/packages/sdk-node/src/orchestrator.js +137 -13
  249. package/dist/packages/shared/config/designConfig.js +8 -1
  250. package/dist/packages/shared/streams/stdio.js +1 -1
  251. package/dist/scripts/design/pipeline/permit.js +15 -0
  252. package/dist/scripts/lib/docs-catalog.js +365 -0
  253. package/dist/scripts/lib/docs-helpers.js +87 -5
  254. package/dist/scripts/lib/pr-watch-merge.js +1088 -80
  255. package/dist/scripts/lib/provider-run-contract.js +26 -0
  256. package/dist/scripts/lib/review-command-intent-classification.js +532 -0
  257. package/dist/scripts/lib/review-command-probe-classification.js +385 -0
  258. package/dist/scripts/lib/review-execution-boundary-preflight.js +279 -0
  259. package/dist/scripts/lib/review-execution-runtime.js +753 -0
  260. package/dist/scripts/lib/review-execution-state.js +1144 -0
  261. package/dist/scripts/lib/review-execution-telemetry.js +215 -0
  262. package/dist/scripts/lib/review-inspection-target-parsing.js +78 -0
  263. package/dist/scripts/lib/review-launch-attempt.js +601 -0
  264. package/dist/scripts/lib/review-meta-surface-boundary-analysis.js +300 -0
  265. package/dist/scripts/lib/review-meta-surface-normalization.js +746 -0
  266. package/dist/scripts/lib/review-non-interactive-handoff.js +61 -0
  267. package/dist/scripts/lib/review-prompt-context.js +376 -0
  268. package/dist/scripts/lib/review-scope-advisory.js +286 -0
  269. package/dist/scripts/lib/review-scope-paths.js +123 -0
  270. package/dist/scripts/lib/review-shell-command-parser.js +389 -0
  271. package/dist/scripts/lib/review-shell-env-interpreter.js +340 -0
  272. package/dist/scripts/lib/run-manifests.js +192 -36
  273. package/dist/scripts/lib/spark-policy-classifier.js +593 -0
  274. package/dist/scripts/run-review.js +507 -1777
  275. package/docs/public/downstream-setup.md +106 -0
  276. package/docs/public/provider-onboarding.md +173 -0
  277. package/package.json +20 -10
  278. package/plugins/codex-orchestrator/.codex-plugin/plugin.json +30 -0
  279. package/plugins/codex-orchestrator/.mcp.json +13 -0
  280. package/plugins/codex-orchestrator/launcher.mjs +359 -0
  281. package/schemas/manifest.json +394 -0
  282. package/skills/collab-subagents-first/SKILL.md +1 -1
  283. package/skills/delegation-usage/DELEGATION_GUIDE.md +24 -11
  284. package/skills/delegation-usage/SKILL.md +19 -13
  285. package/skills/land/SKILL.md +77 -0
  286. package/skills/linear/SKILL.md +255 -0
  287. package/skills/release/SKILL.md +47 -3
  288. package/skills/standalone-review/SKILL.md +6 -1
  289. package/templates/README.md +4 -2
  290. package/templates/codex/.codex/agents/awaiter-high.toml +2 -2
  291. package/templates/codex/.codex/agents/worker-complex.toml +1 -1
  292. package/templates/codex/.codex/config.toml +3 -4
  293. package/templates/codex/.codex/providers/README.md +13 -0
  294. package/templates/codex/.codex/providers/control.example.json +18 -0
  295. package/templates/codex/.codex/providers/provider.env.example +15 -0
  296. package/templates/codex/AGENTS.md +12 -7
  297. package/templates/codex/mcp-client.json +5 -1
  298. package/docs/README.md +0 -310
  299. package/docs/assets/setup.gif +0 -0
@@ -0,0 +1,239 @@
1
+ /* eslint-disable patterns/prefer-logger-over-console */
2
+ // This shell preserves the existing CLI output contract, which is rendered via console writes in text/json mode.
3
+ const FLOW_TARGET_PIPELINE_SCOPES = new Set(['docs-review', 'implementation-gate']);
4
+ function isFlowTargetPipelineScope(scope) {
5
+ return FLOW_TARGET_PIPELINE_SCOPES.has(scope);
6
+ }
7
+ function normalizeFlowTargetToken(candidate) {
8
+ const trimmed = candidate.trim();
9
+ if (!trimmed) {
10
+ return null;
11
+ }
12
+ const tokens = trimmed.split(':');
13
+ if (tokens.length > 1 && !(tokens[0] ?? '').trim()) {
14
+ return null;
15
+ }
16
+ let scoped = false;
17
+ let scopeToken = null;
18
+ let suffixToken = trimmed;
19
+ if (tokens.length > 1) {
20
+ const candidateScope = (tokens[0] ?? '').trim().toLowerCase();
21
+ if (isFlowTargetPipelineScope(candidateScope)) {
22
+ scoped = true;
23
+ scopeToken = candidateScope;
24
+ suffixToken = (tokens[tokens.length - 1] ?? '').trim();
25
+ }
26
+ }
27
+ if (!suffixToken) {
28
+ return null;
29
+ }
30
+ return {
31
+ literalLower: trimmed.toLowerCase(),
32
+ stageTokenLower: suffixToken.toLowerCase(),
33
+ scopeLower: scopeToken,
34
+ scoped
35
+ };
36
+ }
37
+ function flowPlanItemPipelineId(item) {
38
+ const metadataPipelineId = item.metadata && typeof item.metadata['pipelineId'] === 'string'
39
+ ? item.metadata['pipelineId'].trim().toLowerCase()
40
+ : '';
41
+ if (metadataPipelineId) {
42
+ return metadataPipelineId;
43
+ }
44
+ const delimiterIndex = item.id.indexOf(':');
45
+ if (delimiterIndex <= 0) {
46
+ return null;
47
+ }
48
+ return item.id.slice(0, delimiterIndex).trim().toLowerCase() || null;
49
+ }
50
+ function flowPlanItemMatchesTarget(item, candidate) {
51
+ const normalized = normalizeFlowTargetToken(candidate);
52
+ if (!normalized) {
53
+ return false;
54
+ }
55
+ if (item.id.toLowerCase() === normalized.literalLower) {
56
+ return true;
57
+ }
58
+ if (normalized.scoped && normalized.scopeLower) {
59
+ const itemPipelineId = flowPlanItemPipelineId(item);
60
+ if (itemPipelineId && itemPipelineId !== normalized.scopeLower) {
61
+ return false;
62
+ }
63
+ }
64
+ const metadataStageId = item.metadata && typeof item.metadata['stageId'] === 'string'
65
+ ? item.metadata['stageId'].toLowerCase()
66
+ : null;
67
+ const aliases = Array.isArray(item.metadata?.['aliases'])
68
+ ? item.metadata?.['aliases']
69
+ : [];
70
+ const aliasTokens = aliases.filter((alias) => typeof alias === 'string').map((alias) => alias.toLowerCase());
71
+ if (normalized.scoped) {
72
+ if (metadataStageId
73
+ && (metadataStageId === normalized.literalLower || metadataStageId === normalized.stageTokenLower)) {
74
+ return true;
75
+ }
76
+ return aliasTokens.some((alias) => alias === normalized.literalLower || alias === normalized.stageTokenLower);
77
+ }
78
+ if (item.id.toLowerCase().endsWith(`:${normalized.stageTokenLower}`)) {
79
+ return true;
80
+ }
81
+ if (metadataStageId
82
+ && (metadataStageId === normalized.stageTokenLower
83
+ || metadataStageId.endsWith(`:${normalized.stageTokenLower}`))) {
84
+ return true;
85
+ }
86
+ return aliasTokens.some((alias) => alias === normalized.stageTokenLower || alias.endsWith(`:${normalized.stageTokenLower}`));
87
+ }
88
+ function planIncludesStageId(plan, stageId) {
89
+ if (!stageId.trim()) {
90
+ return false;
91
+ }
92
+ return plan.plan.items.some((item) => flowPlanItemMatchesTarget(item, stageId));
93
+ }
94
+ function resolveFlowTargetScope(stageId) {
95
+ const delimiterIndex = stageId.indexOf(':');
96
+ if (delimiterIndex <= 0) {
97
+ return null;
98
+ }
99
+ const scope = stageId.slice(0, delimiterIndex).trim().toLowerCase();
100
+ if (!isFlowTargetPipelineScope(scope)) {
101
+ return null;
102
+ }
103
+ return scope;
104
+ }
105
+ export async function resolveFlowTargetStageSelection(orchestrator, taskId, requestedTargetStageId) {
106
+ if (!requestedTargetStageId) {
107
+ return {};
108
+ }
109
+ const [docsPlan, implementationPlan] = (await Promise.all([
110
+ orchestrator.plan({ pipelineId: 'docs-review', taskId }),
111
+ orchestrator.plan({ pipelineId: 'implementation-gate', taskId })
112
+ ]));
113
+ const requestedScope = resolveFlowTargetScope(requestedTargetStageId);
114
+ const docsScopeMatch = !requestedScope || requestedScope === 'docs-review';
115
+ const implementationScopeMatch = !requestedScope || requestedScope === 'implementation-gate';
116
+ const docsReviewTargetStageId = docsScopeMatch && planIncludesStageId(docsPlan, requestedTargetStageId)
117
+ ? requestedTargetStageId
118
+ : undefined;
119
+ const implementationGateTargetStageId = implementationScopeMatch && planIncludesStageId(implementationPlan, requestedTargetStageId)
120
+ ? requestedTargetStageId
121
+ : undefined;
122
+ if (!docsReviewTargetStageId && !implementationGateTargetStageId) {
123
+ throw new Error(`Target stage "${requestedTargetStageId}" is not defined in docs-review or implementation-gate.`);
124
+ }
125
+ return { docsReviewTargetStageId, implementationGateTargetStageId };
126
+ }
127
+ export async function runFlowCliShell(params) {
128
+ try {
129
+ const { docsReviewTargetStageId, implementationGateTargetStageId } = await resolveFlowTargetStageSelection(params.orchestrator, params.taskId, params.targetStageId);
130
+ await params.runWithUi(async (runEvents) => {
131
+ const docsReviewResult = await params.orchestrator.start({
132
+ pipelineId: 'docs-review',
133
+ taskId: params.taskId,
134
+ parentRunId: params.parentRunId,
135
+ approvalPolicy: params.approvalPolicy,
136
+ targetStageId: docsReviewTargetStageId,
137
+ executionMode: params.executionMode,
138
+ runtimeMode: params.runtimeMode,
139
+ runEvents
140
+ });
141
+ const docsPayload = params.toRunOutputPayload(docsReviewResult);
142
+ if (params.format === 'text') {
143
+ params.emitRunOutput(docsReviewResult, params.format, 'Docs-review run');
144
+ }
145
+ if (docsReviewResult.manifest.status !== 'succeeded') {
146
+ const issueLogCapture = await params.maybeCaptureAutoIssueLog({
147
+ enabled: params.autoIssueLogEnabled,
148
+ issueTitle: 'Auto issue log: flow docs-review failed',
149
+ issueNotes: `Automatic failure capture for docs-review run ${docsReviewResult.manifest.run_id} (${docsReviewResult.manifest.status}).`,
150
+ taskFilter: params.resolveTaskFilter(docsReviewResult.manifest.task_id ?? undefined, params.taskId)
151
+ });
152
+ process.exitCode = 1;
153
+ if (params.format === 'json') {
154
+ console.log(JSON.stringify({
155
+ status: docsReviewResult.manifest.status,
156
+ failed_stage: 'docs-review',
157
+ docs_review: docsPayload,
158
+ implementation_gate: null,
159
+ issue_log: issueLogCapture.issueLog,
160
+ issue_log_error: issueLogCapture.issueLogError
161
+ }, null, 2));
162
+ }
163
+ else {
164
+ console.log('Flow halted: docs-review failed.');
165
+ if (issueLogCapture.issueLog) {
166
+ for (const line of params.formatIssueLogSummary(issueLogCapture.issueLog)) {
167
+ console.log(line);
168
+ }
169
+ }
170
+ if (issueLogCapture.issueLogError) {
171
+ console.log(`Auto issue log: failed (${issueLogCapture.issueLogError})`);
172
+ }
173
+ }
174
+ return;
175
+ }
176
+ const implementationGateResult = await params.orchestrator.start({
177
+ pipelineId: 'implementation-gate',
178
+ taskId: params.taskId,
179
+ parentRunId: docsReviewResult.manifest.run_id,
180
+ approvalPolicy: params.approvalPolicy,
181
+ targetStageId: implementationGateTargetStageId,
182
+ executionMode: params.executionMode,
183
+ runtimeMode: params.runtimeMode,
184
+ runEvents
185
+ });
186
+ const implementationPayload = params.toRunOutputPayload(implementationGateResult);
187
+ const issueLogCapture = implementationGateResult.manifest.status !== 'succeeded'
188
+ ? await params.maybeCaptureAutoIssueLog({
189
+ enabled: params.autoIssueLogEnabled,
190
+ issueTitle: 'Auto issue log: flow implementation-gate failed',
191
+ issueNotes: `Automatic failure capture for implementation-gate run ${implementationGateResult.manifest.run_id} (${implementationGateResult.manifest.status}).`,
192
+ taskFilter: params.resolveTaskFilter(implementationGateResult.manifest.task_id ?? undefined, params.taskId)
193
+ })
194
+ : { issueLog: null, issueLogError: null };
195
+ if (params.format === 'json') {
196
+ console.log(JSON.stringify({
197
+ status: implementationGateResult.manifest.status,
198
+ failed_stage: implementationGateResult.manifest.status === 'succeeded' ? null : 'implementation-gate',
199
+ docs_review: docsPayload,
200
+ implementation_gate: implementationPayload,
201
+ issue_log: issueLogCapture.issueLog,
202
+ issue_log_error: issueLogCapture.issueLogError
203
+ }, null, 2));
204
+ if (implementationGateResult.manifest.status !== 'succeeded') {
205
+ process.exitCode = 1;
206
+ }
207
+ return;
208
+ }
209
+ params.emitRunOutput(implementationGateResult, params.format, 'Implementation-gate run');
210
+ if (implementationGateResult.manifest.status !== 'succeeded') {
211
+ process.exitCode = 1;
212
+ console.log('Flow halted: implementation-gate failed.');
213
+ if (issueLogCapture.issueLog) {
214
+ for (const line of params.formatIssueLogSummary(issueLogCapture.issueLog)) {
215
+ console.log(line);
216
+ }
217
+ }
218
+ if (issueLogCapture.issueLogError) {
219
+ console.log(`Auto issue log: failed (${issueLogCapture.issueLogError})`);
220
+ }
221
+ return;
222
+ }
223
+ console.log('Flow complete: docs-review -> implementation-gate.');
224
+ await params.maybeEmitRunAdoptionHint({
225
+ format: params.format,
226
+ taskFilter: params.resolveTaskFilter(implementationGateResult.manifest.task_id ?? undefined, params.taskId)
227
+ });
228
+ });
229
+ }
230
+ catch (error) {
231
+ const issueLogCapture = await params.maybeCaptureAutoIssueLog({
232
+ enabled: params.autoIssueLogEnabled,
233
+ issueTitle: 'Auto issue log: flow failed before run manifest',
234
+ issueNotes: 'Automatic failure capture for flow setup failure before run manifest creation.',
235
+ taskFilter: params.resolveTaskFilter(undefined, params.taskId)
236
+ });
237
+ throw params.withAutoIssueLogContext(error, issueLogCapture);
238
+ }
239
+ }
@@ -0,0 +1,80 @@
1
+ import process from 'node:process';
2
+ import { REPO_CONFIG_REQUIRED_ENV_KEY } from './config/repoConfigPolicy.js';
3
+ import { runFrontendTestCliShell } from './frontendTestCliShell.js';
4
+ import { PROVIDER_OVERRIDE_MARKER_ENV_KEYS, PROVIDER_OVERRIDE_ENV_KEYS, sanitizeProviderOverrideEnv } from './utils/providerOverrideEnv.js';
5
+ const DEFAULT_DEPENDENCIES = {
6
+ runFrontendTestCliShell
7
+ };
8
+ export async function runFrontendTestCliRequestShell(params, overrides = {}) {
9
+ const dependencies = { ...DEFAULT_DEPENDENCIES, ...overrides };
10
+ const format = resolveOutputFormat(params.flags);
11
+ const devtoolsEnabled = Boolean(params.flags['devtools']);
12
+ const runtimeMode = params.resolveRuntimeModeFlag(params.flags);
13
+ const restoreProcessEnv = applyProviderOverrideSanitizationToProcessEnv();
14
+ try {
15
+ params.applyRepoConfigRequiredPolicy(params.flags);
16
+ if (params.positionals.length > 0) {
17
+ params.warn(`[frontend-test] ignoring extra arguments: ${params.positionals.join(' ')}`);
18
+ }
19
+ await dependencies.runFrontendTestCliShell({
20
+ orchestrator: params.orchestrator,
21
+ format,
22
+ devtoolsEnabled,
23
+ runtimeMode,
24
+ taskId: readRawStringFlagValue(params.flags['task']),
25
+ parentRunId: readRawStringFlagValue(params.flags['parent-run']),
26
+ approvalPolicy: readRawStringFlagValue(params.flags['approval-policy']),
27
+ targetStageId: params.resolveTargetStageId(params.flags),
28
+ runWithUi: async (action) => await params.runWithUi(format, action),
29
+ emitRunOutput: params.emitRunOutput
30
+ });
31
+ }
32
+ finally {
33
+ restoreProcessEnv();
34
+ }
35
+ }
36
+ function resolveOutputFormat(flags) {
37
+ return flags['format'] === 'json' ? 'json' : 'text';
38
+ }
39
+ function readRawStringFlagValue(value) {
40
+ return typeof value === 'string' ? value : undefined;
41
+ }
42
+ function applyProviderOverrideSanitizationToProcessEnv(env = process.env) {
43
+ const previous = {
44
+ trackedOverrides: Object.fromEntries([...PROVIDER_OVERRIDE_ENV_KEYS, ...PROVIDER_OVERRIDE_MARKER_ENV_KEYS].map((key) => [key, env[key]])),
45
+ repoConfigRequired: env[REPO_CONFIG_REQUIRED_ENV_KEY]
46
+ };
47
+ const sanitized = sanitizeProviderOverrideEnv(env);
48
+ for (const key of [...PROVIDER_OVERRIDE_ENV_KEYS, ...PROVIDER_OVERRIDE_MARKER_ENV_KEYS]) {
49
+ const value = sanitized[key];
50
+ if (value === undefined) {
51
+ delete env[key];
52
+ }
53
+ else {
54
+ env[key] = value;
55
+ }
56
+ }
57
+ if (sanitized[REPO_CONFIG_REQUIRED_ENV_KEY] === undefined) {
58
+ delete env[REPO_CONFIG_REQUIRED_ENV_KEY];
59
+ }
60
+ else {
61
+ env[REPO_CONFIG_REQUIRED_ENV_KEY] = sanitized[REPO_CONFIG_REQUIRED_ENV_KEY];
62
+ }
63
+ return () => {
64
+ for (const key of [...PROVIDER_OVERRIDE_ENV_KEYS, ...PROVIDER_OVERRIDE_MARKER_ENV_KEYS]) {
65
+ const value = previous.trackedOverrides[key];
66
+ if (value === undefined) {
67
+ delete env[key];
68
+ }
69
+ else {
70
+ env[key] = value;
71
+ }
72
+ }
73
+ if (previous.repoConfigRequired === undefined) {
74
+ delete env[REPO_CONFIG_REQUIRED_ENV_KEY];
75
+ }
76
+ else {
77
+ env[REPO_CONFIG_REQUIRED_ENV_KEY] = previous.repoConfigRequired;
78
+ }
79
+ };
80
+ }
@@ -0,0 +1,41 @@
1
+ import process from 'node:process';
2
+ const DEFAULT_DEPENDENCIES = {
3
+ env: process.env,
4
+ setExitCode: (code) => {
5
+ process.exitCode = code;
6
+ }
7
+ };
8
+ export async function runFrontendTestCliShell(params, overrides = {}) {
9
+ const dependencies = { ...DEFAULT_DEPENDENCIES, ...overrides };
10
+ const originalDevtools = dependencies.env.CODEX_REVIEW_DEVTOOLS;
11
+ if (params.devtoolsEnabled) {
12
+ dependencies.env.CODEX_REVIEW_DEVTOOLS = '1';
13
+ }
14
+ try {
15
+ await params.runWithUi(async (runEvents) => {
16
+ const result = await params.orchestrator.start({
17
+ pipelineId: 'frontend-testing',
18
+ taskId: params.taskId,
19
+ parentRunId: params.parentRunId,
20
+ approvalPolicy: params.approvalPolicy,
21
+ targetStageId: params.targetStageId,
22
+ runtimeMode: params.runtimeMode,
23
+ runEvents
24
+ });
25
+ params.emitRunOutput(result, params.format, 'Run started');
26
+ if (result.manifest.status === 'failed' || result.manifest.status === 'cancelled') {
27
+ dependencies.setExitCode(1);
28
+ }
29
+ });
30
+ }
31
+ finally {
32
+ if (params.devtoolsEnabled) {
33
+ if (originalDevtools === undefined) {
34
+ delete dependencies.env.CODEX_REVIEW_DEVTOOLS;
35
+ }
36
+ else {
37
+ dependencies.env.CODEX_REVIEW_DEVTOOLS = originalDevtools;
38
+ }
39
+ }
40
+ }
41
+ }
@@ -84,6 +84,7 @@ export function formatInitSummary(result, cwd) {
84
84
  }
85
85
  lines.push('Next steps (recommended):');
86
86
  lines.push(' - Review codex.orchestrator.json and adjust pipeline commands to your repository toolchain');
87
+ lines.push(' - Review .codex/providers/provider.env.example and .codex/providers/control.example.json');
87
88
  lines.push(' - codex-orchestrator setup --yes # installs bundled skills + configures delegation/devtools wiring');
88
89
  lines.push(' - codex-orchestrator codex setup # optional managed/pinned Codex CLI (activate with CODEX_CLI_USE_MANAGED=1; stock codex is default)');
89
90
  return lines;
@@ -0,0 +1,50 @@
1
+ /* eslint-disable patterns/prefer-logger-over-console */
2
+ import process from 'node:process';
3
+ import { formatCodexCliSetupSummary, runCodexCliSetup } from './codexCliSetup.js';
4
+ import { formatInitSummary, initCodexTemplates } from './init.js';
5
+ const DEFAULT_DEPENDENCIES = {
6
+ initCodexTemplates,
7
+ formatInitSummary,
8
+ runCodexCliSetup,
9
+ formatCodexCliSetupSummary,
10
+ getCwd: () => process.cwd(),
11
+ log: (line) => console.log(line)
12
+ };
13
+ export async function runInitCliShell(params, overrides = {}) {
14
+ const dependencies = { ...DEFAULT_DEPENDENCIES, ...overrides };
15
+ const template = params.positionals[0];
16
+ if (!template) {
17
+ throw new Error('init requires a template name (e.g. init codex).');
18
+ }
19
+ if (template !== 'codex') {
20
+ throw new Error(`Unknown init template: ${template}`);
21
+ }
22
+ const cwd = readStringFlag(params.flags, 'cwd') ?? dependencies.getCwd();
23
+ const force = Boolean(params.flags['force']);
24
+ const result = await dependencies.initCodexTemplates({ template, cwd, force });
25
+ for (const line of dependencies.formatInitSummary(result, cwd)) {
26
+ dependencies.log(line);
27
+ }
28
+ if (params.flags['codex-cli'] !== true) {
29
+ return;
30
+ }
31
+ const setupResult = await dependencies.runCodexCliSetup({
32
+ apply: Boolean(params.flags['yes']),
33
+ force: Boolean(params.flags['codex-force']),
34
+ source: readStringFlag(params.flags, 'codex-source'),
35
+ ref: readStringFlag(params.flags, 'codex-ref'),
36
+ downloadUrl: readStringFlag(params.flags, 'codex-download-url'),
37
+ downloadSha256: readStringFlag(params.flags, 'codex-download-sha256')
38
+ });
39
+ for (const line of dependencies.formatCodexCliSetupSummary(setupResult)) {
40
+ dependencies.log(line);
41
+ }
42
+ }
43
+ function readStringFlag(flags, key) {
44
+ const value = flags[key];
45
+ if (typeof value !== 'string') {
46
+ return undefined;
47
+ }
48
+ const trimmed = value.trim();
49
+ return trimmed.length > 0 ? trimmed : undefined;
50
+ }