@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.
Files changed (311) hide show
  1. package/.agents/plugins/marketplace.json +20 -0
  2. package/README.md +46 -317
  3. package/bin/codex-orchestrator.js +161 -0
  4. package/codex.orchestrator.json +149 -13
  5. package/dist/bin/codex-orchestrator.js +797 -1154
  6. package/dist/orchestrator/src/cli/adapters/CommandBuilder.js +50 -0
  7. package/dist/orchestrator/src/cli/adapters/CommandPlanner.js +22 -4
  8. package/dist/orchestrator/src/cli/adapters/CommandReviewer.js +3 -3
  9. package/dist/orchestrator/src/cli/adapters/CommandTester.js +2 -2
  10. package/dist/orchestrator/src/cli/adapters/cloudFailureDiagnostics.js +295 -11
  11. package/dist/orchestrator/src/cli/coStatusAttachCliShell.js +402 -0
  12. package/dist/orchestrator/src/cli/coStatusCliShell.js +451 -0
  13. package/dist/orchestrator/src/cli/coStatusOperatorAutopilotCliShell.js +120 -0
  14. package/dist/orchestrator/src/cli/codexCliShell.js +119 -0
  15. package/dist/orchestrator/src/cli/codexDefaultsSetup.js +265 -36
  16. package/dist/orchestrator/src/cli/config/delegationConfig.js +317 -5
  17. package/dist/orchestrator/src/cli/config/repoConfigPolicy.js +2 -3
  18. package/dist/orchestrator/src/cli/config/userConfig.js +28 -13
  19. package/dist/orchestrator/src/cli/control/authenticatedControlRouteGate.js +69 -0
  20. package/dist/orchestrator/src/cli/control/authenticatedRouteComposition.js +267 -0
  21. package/dist/orchestrator/src/cli/control/authenticatedRouteController.js +5 -0
  22. package/dist/orchestrator/src/cli/control/authenticatedRouteDispatcher.js +41 -0
  23. package/dist/orchestrator/src/cli/control/compatibilityIssuePresenter.js +1035 -0
  24. package/dist/orchestrator/src/cli/control/confirmationApproveController.js +62 -0
  25. package/dist/orchestrator/src/cli/control/confirmationCreateController.js +69 -0
  26. package/dist/orchestrator/src/cli/control/confirmationIssueConsumeController.js +43 -0
  27. package/dist/orchestrator/src/cli/control/confirmationListController.js +22 -0
  28. package/dist/orchestrator/src/cli/control/confirmationValidateController.js +58 -0
  29. package/dist/orchestrator/src/cli/control/confirmations.js +25 -3
  30. package/dist/orchestrator/src/cli/control/controlActionCancelConfirmation.js +65 -0
  31. package/dist/orchestrator/src/cli/control/controlActionController.js +77 -0
  32. package/dist/orchestrator/src/cli/control/controlActionControllerSequencing.js +161 -0
  33. package/dist/orchestrator/src/cli/control/controlActionExecution.js +142 -0
  34. package/dist/orchestrator/src/cli/control/controlActionFinalization.js +43 -0
  35. package/dist/orchestrator/src/cli/control/controlActionOutcome.js +60 -0
  36. package/dist/orchestrator/src/cli/control/controlActionPreflight.js +476 -0
  37. package/dist/orchestrator/src/cli/control/controlAuthenticatedRouteHandoff.js +57 -0
  38. package/dist/orchestrator/src/cli/control/controlBootstrapAssembly.js +39 -0
  39. package/dist/orchestrator/src/cli/control/controlBootstrapMetadataPersistence.js +16 -0
  40. package/dist/orchestrator/src/cli/control/controlEventTransport.js +49 -0
  41. package/dist/orchestrator/src/cli/control/controlExpiryLifecycle.js +102 -0
  42. package/dist/orchestrator/src/cli/control/controlHostOwnership.js +480 -0
  43. package/dist/orchestrator/src/cli/control/controlHostSupervision.js +630 -0
  44. package/dist/orchestrator/src/cli/control/controlOversightFacade.js +8 -0
  45. package/dist/orchestrator/src/cli/control/controlOversightReadContract.js +1 -0
  46. package/dist/orchestrator/src/cli/control/controlOversightReadService.js +16 -0
  47. package/dist/orchestrator/src/cli/control/controlOversightUpdateContract.js +1 -0
  48. package/dist/orchestrator/src/cli/control/controlPersistenceFiles.js +6 -0
  49. package/dist/orchestrator/src/cli/control/controlQuestionChildResolution.js +18 -0
  50. package/dist/orchestrator/src/cli/control/controlRequestContext.js +42 -0
  51. package/dist/orchestrator/src/cli/control/controlRequestController.js +9 -0
  52. package/dist/orchestrator/src/cli/control/controlRequestPredispatch.js +17 -0
  53. package/dist/orchestrator/src/cli/control/controlRequestRouteDispatch.js +44 -0
  54. package/dist/orchestrator/src/cli/control/controlRuntime.js +1003 -0
  55. package/dist/orchestrator/src/cli/control/controlServer.js +23 -1456
  56. package/dist/orchestrator/src/cli/control/controlServerAuditAndErrorHelpers.js +115 -0
  57. package/dist/orchestrator/src/cli/control/controlServerAuthenticatedRouteBranch.js +29 -0
  58. package/dist/orchestrator/src/cli/control/controlServerBootstrapLifecycle.js +30 -0
  59. package/dist/orchestrator/src/cli/control/controlServerBootstrapStartSequence.js +21 -0
  60. package/dist/orchestrator/src/cli/control/controlServerOwnedRuntimeLifecycle.js +67 -0
  61. package/dist/orchestrator/src/cli/control/controlServerPublicLifecycle.js +756 -0
  62. package/dist/orchestrator/src/cli/control/controlServerPublicRouteHelpers.js +86 -0
  63. package/dist/orchestrator/src/cli/control/controlServerReadyInstanceLifecycle.js +25 -0
  64. package/dist/orchestrator/src/cli/control/controlServerReadyInstanceStartup.js +18 -0
  65. package/dist/orchestrator/src/cli/control/controlServerRequestBodyHelpers.js +37 -0
  66. package/dist/orchestrator/src/cli/control/controlServerRequestShell.js +40 -0
  67. package/dist/orchestrator/src/cli/control/controlServerRequestShellBinding.js +17 -0
  68. package/dist/orchestrator/src/cli/control/controlServerSeedLoading.js +27 -0
  69. package/dist/orchestrator/src/cli/control/controlServerSeededRuntimeAssembly.js +186 -0
  70. package/dist/orchestrator/src/cli/control/controlServerStartupInputPreparation.js +31 -0
  71. package/dist/orchestrator/src/cli/control/controlServerStartupSequence.js +49 -0
  72. package/dist/orchestrator/src/cli/control/controlState.js +233 -2
  73. package/dist/orchestrator/src/cli/control/controlStatusDashboard.js +1904 -0
  74. package/dist/orchestrator/src/cli/control/controlTelegramBridgeBootstrapLifecycle.js +22 -0
  75. package/dist/orchestrator/src/cli/control/controlTelegramBridgeLifecycle.js +67 -0
  76. package/dist/orchestrator/src/cli/control/controlTelegramBridgeOversightFacadeFactory.js +8 -0
  77. package/dist/orchestrator/src/cli/control/controlTelegramCommandController.js +49 -0
  78. package/dist/orchestrator/src/cli/control/controlTelegramDispatchRead.js +40 -0
  79. package/dist/orchestrator/src/cli/control/controlTelegramPollingController.js +89 -0
  80. package/dist/orchestrator/src/cli/control/controlTelegramProjectionNotificationController.js +29 -0
  81. package/dist/orchestrator/src/cli/control/controlTelegramPushState.js +63 -0
  82. package/dist/orchestrator/src/cli/control/controlTelegramQuestionRead.js +13 -0
  83. package/dist/orchestrator/src/cli/control/controlTelegramReadController.js +216 -0
  84. package/dist/orchestrator/src/cli/control/controlTelegramUpdateHandler.js +63 -0
  85. package/dist/orchestrator/src/cli/control/controlWatcher.js +73 -5
  86. package/dist/orchestrator/src/cli/control/delegationRegisterController.js +35 -0
  87. package/dist/orchestrator/src/cli/control/dynamicToolBridgePolicy.js +139 -0
  88. package/dist/orchestrator/src/cli/control/eventsSseController.js +12 -0
  89. package/dist/orchestrator/src/cli/control/linearBudgetState.js +1789 -0
  90. package/dist/orchestrator/src/cli/control/linearDispatchSource.js +1137 -0
  91. package/dist/orchestrator/src/cli/control/linearGraphqlClient.js +150 -0
  92. package/dist/orchestrator/src/cli/control/linearRateLimit.js +102 -0
  93. package/dist/orchestrator/src/cli/control/linearWebhookController.js +499 -0
  94. package/dist/orchestrator/src/cli/control/liveLinearAdvisoryRuntime.js +70 -0
  95. package/dist/orchestrator/src/cli/control/observabilityApiController.js +173 -0
  96. package/dist/orchestrator/src/cli/control/observabilityReadModel.js +500 -0
  97. package/dist/orchestrator/src/cli/control/observabilitySurface.js +284 -0
  98. package/dist/orchestrator/src/cli/control/observabilityUpdateNotifier.js +22 -0
  99. package/dist/orchestrator/src/cli/control/operatorDashboardPresenter.js +252 -0
  100. package/dist/orchestrator/src/cli/control/providerAgentCapacity.js +70 -0
  101. package/dist/orchestrator/src/cli/control/providerControlHostFreshnessGauge.js +1068 -0
  102. package/dist/orchestrator/src/cli/control/providerIntakeState.js +473 -0
  103. package/dist/orchestrator/src/cli/control/providerIssueHandoff.js +6811 -0
  104. package/dist/orchestrator/src/cli/control/providerIssueObservability.js +1348 -0
  105. package/dist/orchestrator/src/cli/control/providerIssueRetryQueue.js +84 -0
  106. package/dist/orchestrator/src/cli/control/providerLinearRuntimeProof.js +588 -0
  107. package/dist/orchestrator/src/cli/control/providerLinearScreenshotProof.js +473 -0
  108. package/dist/orchestrator/src/cli/control/providerLinearWorkerTruth.js +383 -0
  109. package/dist/orchestrator/src/cli/control/providerLinearWorkflowAudit.js +254 -0
  110. package/dist/orchestrator/src/cli/control/providerLinearWorkflowFacade.js +5573 -0
  111. package/dist/orchestrator/src/cli/control/providerLinearWorkflowStates.js +115 -0
  112. package/dist/orchestrator/src/cli/control/providerMergeCloseout.js +1868 -0
  113. package/dist/orchestrator/src/cli/control/providerOperatorAutopilot.js +1580 -0
  114. package/dist/orchestrator/src/cli/control/providerOperatorAutopilotLifecycle.js +154 -0
  115. package/dist/orchestrator/src/cli/control/providerOperatorAutopilotLocalRolloutExecution.js +1006 -0
  116. package/dist/orchestrator/src/cli/control/providerPollingHealth.js +435 -0
  117. package/dist/orchestrator/src/cli/control/providerTerminalCleanup.js +516 -0
  118. package/dist/orchestrator/src/cli/control/providerWorkerHosts.js +191 -0
  119. package/dist/orchestrator/src/cli/control/providerWorkflowConfigStore.js +515 -0
  120. package/dist/orchestrator/src/cli/control/questionChildResolutionAdapter.js +361 -0
  121. package/dist/orchestrator/src/cli/control/questionQueueController.js +181 -0
  122. package/dist/orchestrator/src/cli/control/questionReadRetryDeduplication.js +9 -0
  123. package/dist/orchestrator/src/cli/control/questionReadSequence.js +10 -0
  124. package/dist/orchestrator/src/cli/control/securityViolationController.js +27 -0
  125. package/dist/orchestrator/src/cli/control/selectedRunProjection.js +1885 -0
  126. package/dist/orchestrator/src/cli/control/telegramOversightApiClient.js +48 -0
  127. package/dist/orchestrator/src/cli/control/telegramOversightBridge.js +180 -0
  128. package/dist/orchestrator/src/cli/control/telegramOversightBridgeProjectionDeliveryQueue.js +25 -0
  129. package/dist/orchestrator/src/cli/control/telegramOversightBridgeRuntimeLifecycle.js +45 -0
  130. package/dist/orchestrator/src/cli/control/telegramOversightBridgeStateStore.js +77 -0
  131. package/dist/orchestrator/src/cli/control/telegramOversightControlActionApiClient.js +45 -0
  132. package/dist/orchestrator/src/cli/control/trackerDispatchPilot.js +439 -0
  133. package/dist/orchestrator/src/cli/control/uiDataController.js +34 -0
  134. package/dist/orchestrator/src/cli/control/uiSessionController.js +100 -0
  135. package/dist/orchestrator/src/cli/controlHostCliShell.js +860 -0
  136. package/dist/orchestrator/src/cli/controlHostFreshnessGaugeCliShell.js +129 -0
  137. package/dist/orchestrator/src/cli/controlHostSupervisionCliShell.js +2127 -0
  138. package/dist/orchestrator/src/cli/delegationCliShell.js +62 -0
  139. package/dist/orchestrator/src/cli/delegationServer.js +567 -678
  140. package/dist/orchestrator/src/cli/delegationServerCliShell.js +52 -0
  141. package/dist/orchestrator/src/cli/delegationServerQuestionFlowShell.js +228 -0
  142. package/dist/orchestrator/src/cli/delegationServerToolDispatchShell.js +411 -0
  143. package/dist/orchestrator/src/cli/delegationServerTransport.js +274 -0
  144. package/dist/orchestrator/src/cli/delegationSetup.js +51 -171
  145. package/dist/orchestrator/src/cli/devtoolsCliShell.js +34 -0
  146. package/dist/orchestrator/src/cli/doctor.js +678 -164
  147. package/dist/orchestrator/src/cli/doctorCliRequestShell.js +72 -0
  148. package/dist/orchestrator/src/cli/doctorCliShell.js +138 -0
  149. package/dist/orchestrator/src/cli/doctorUsage.js +119 -15
  150. package/dist/orchestrator/src/cli/exec/experience.js +16 -2
  151. package/dist/orchestrator/src/cli/exec/summary.js +3 -0
  152. package/dist/orchestrator/src/cli/execCliShell.js +51 -0
  153. package/dist/orchestrator/src/cli/flowCliRequestShell.js +44 -0
  154. package/dist/orchestrator/src/cli/flowCliShell.js +239 -0
  155. package/dist/orchestrator/src/cli/frontendTestCliRequestShell.js +80 -0
  156. package/dist/orchestrator/src/cli/frontendTestCliShell.js +41 -0
  157. package/dist/orchestrator/src/cli/init.js +95 -1
  158. package/dist/orchestrator/src/cli/initCliShell.js +50 -0
  159. package/dist/orchestrator/src/cli/linearCliShell.js +1200 -0
  160. package/dist/orchestrator/src/cli/mcpEnableCliShell.js +132 -0
  161. package/dist/orchestrator/src/cli/metrics/metricsAggregator.js +3 -2
  162. package/dist/orchestrator/src/cli/metrics/metricsRecorder.js +56 -0
  163. package/dist/orchestrator/src/cli/orchestrator.js +66 -1376
  164. package/dist/orchestrator/src/cli/planCliShell.js +19 -0
  165. package/dist/orchestrator/src/cli/prCliShell.js +41 -0
  166. package/dist/orchestrator/src/cli/providerLinearChildLanePhaseContract.js +204 -0
  167. package/dist/orchestrator/src/cli/providerLinearChildLaneRunner.js +1835 -0
  168. package/dist/orchestrator/src/cli/providerLinearChildLaneShell.js +2420 -0
  169. package/dist/orchestrator/src/cli/providerLinearChildStreamShell.js +385 -0
  170. package/dist/orchestrator/src/cli/providerLinearWorkerRunner.js +6834 -0
  171. package/dist/orchestrator/src/cli/resumeCliShell.js +14 -0
  172. package/dist/orchestrator/src/cli/reviewCliLaunchShell.js +72 -0
  173. package/dist/orchestrator/src/cli/rlm/alignment.js +3 -3
  174. package/dist/orchestrator/src/cli/rlm/context.js +94 -7
  175. package/dist/orchestrator/src/cli/rlm/rlmCodexRuntimeShell.js +546 -0
  176. package/dist/orchestrator/src/cli/rlm/symbolic.js +4 -2
  177. package/dist/orchestrator/src/cli/rlmCliRequestShell.js +42 -0
  178. package/dist/orchestrator/src/cli/rlmCompletionCliShell.js +46 -0
  179. package/dist/orchestrator/src/cli/rlmLaunchCliShell.js +51 -0
  180. package/dist/orchestrator/src/cli/rlmRunner.js +83 -523
  181. package/dist/orchestrator/src/cli/run/blockMemory.js +500 -0
  182. package/dist/orchestrator/src/cli/run/manifest.js +410 -73
  183. package/dist/orchestrator/src/cli/run/manifestPersister.js +45 -14
  184. package/dist/orchestrator/src/cli/run/runMemoryController.js +216 -0
  185. package/dist/orchestrator/src/cli/run/source0.js +690 -0
  186. package/dist/orchestrator/src/cli/run/workspacePath.js +101 -0
  187. package/dist/orchestrator/src/cli/runtime/mode.js +2 -1
  188. package/dist/orchestrator/src/cli/runtime/provider.js +39 -2
  189. package/dist/orchestrator/src/cli/selfCheckCliShell.js +12 -0
  190. package/dist/orchestrator/src/cli/services/commandRunner.js +698 -18
  191. package/dist/orchestrator/src/cli/services/execRuntime.js +66 -1
  192. package/dist/orchestrator/src/cli/services/orchestratorAutoScoutEvidenceRecorder.js +71 -0
  193. package/dist/orchestrator/src/cli/services/orchestratorCloudBranchResolution.js +8 -0
  194. package/dist/orchestrator/src/cli/services/orchestratorCloudEnvironmentResolution.js +22 -0
  195. package/dist/orchestrator/src/cli/services/orchestratorCloudExecutionLifecycleShell.js +39 -0
  196. package/dist/orchestrator/src/cli/services/orchestratorCloudPromptBuilder.js +37 -0
  197. package/dist/orchestrator/src/cli/services/orchestratorCloudRouteFallbackContract.js +45 -0
  198. package/dist/orchestrator/src/cli/services/orchestratorCloudRouteShell.js +36 -0
  199. package/dist/orchestrator/src/cli/services/orchestratorCloudTargetExecutor.js +277 -0
  200. package/dist/orchestrator/src/cli/services/orchestratorControlPlaneLifecycle.js +98 -0
  201. package/dist/orchestrator/src/cli/services/orchestratorControlPlaneLifecycleShell.js +54 -0
  202. package/dist/orchestrator/src/cli/services/orchestratorExecutionLifecycle.js +112 -0
  203. package/dist/orchestrator/src/cli/services/orchestratorExecutionModePolicy.js +27 -0
  204. package/dist/orchestrator/src/cli/services/orchestratorExecutionRouteAdapterShell.js +59 -0
  205. package/dist/orchestrator/src/cli/services/orchestratorExecutionRouteDecisionShell.js +57 -0
  206. package/dist/orchestrator/src/cli/services/orchestratorExecutionRouteState.js +21 -0
  207. package/dist/orchestrator/src/cli/services/orchestratorExecutionRouter.js +2 -0
  208. package/dist/orchestrator/src/cli/services/orchestratorLocalPipelineExecutor.js +149 -0
  209. package/dist/orchestrator/src/cli/services/orchestratorLocalRouteShell.js +63 -0
  210. package/dist/orchestrator/src/cli/services/orchestratorPlanShell.js +54 -0
  211. package/dist/orchestrator/src/cli/services/orchestratorPlanTargetTracker.js +16 -0
  212. package/dist/orchestrator/src/cli/services/orchestratorResumePreparationShell.js +84 -0
  213. package/dist/orchestrator/src/cli/services/orchestratorResumeTokenValidation.js +15 -0
  214. package/dist/orchestrator/src/cli/services/orchestratorRunLifecycleCompletion.js +31 -0
  215. package/dist/orchestrator/src/cli/services/orchestratorRunLifecycleExecutionRegistration.js +37 -0
  216. package/dist/orchestrator/src/cli/services/orchestratorRunLifecycleOrchestrationShell.js +83 -0
  217. package/dist/orchestrator/src/cli/services/orchestratorRunLifecycleTaskManagerShell.js +37 -0
  218. package/dist/orchestrator/src/cli/services/orchestratorRuntimeManifestMutation.js +20 -0
  219. package/dist/orchestrator/src/cli/services/orchestratorStartPreparationShell.js +56 -0
  220. package/dist/orchestrator/src/cli/services/orchestratorStatusShell.js +70 -0
  221. package/dist/orchestrator/src/cli/services/pipelineResolver.js +7 -3
  222. package/dist/orchestrator/src/cli/services/plannerMemory.js +119 -0
  223. package/dist/orchestrator/src/cli/services/runPreparation.js +7 -3
  224. package/dist/orchestrator/src/cli/services/runSummaryWriter.js +9 -0
  225. package/dist/orchestrator/src/cli/setupBootstrapShell.js +114 -0
  226. package/dist/orchestrator/src/cli/setupCliShell.js +51 -0
  227. package/dist/orchestrator/src/cli/skillsCliShell.js +56 -0
  228. package/dist/orchestrator/src/cli/startCliRequestShell.js +53 -0
  229. package/dist/orchestrator/src/cli/startCliShell.js +68 -0
  230. package/dist/orchestrator/src/cli/statusCliShell.js +22 -0
  231. package/dist/orchestrator/src/cli/utils/authProvenanceFingerprint.js +27 -0
  232. package/dist/orchestrator/src/cli/utils/cloudPreflight.js +285 -7
  233. package/dist/orchestrator/src/cli/utils/codexFeatures.js +60 -0
  234. package/dist/orchestrator/src/cli/utils/delegationConfigParser.js +250 -0
  235. package/dist/orchestrator/src/cli/utils/delegationMcpHealth.js +1382 -0
  236. package/dist/orchestrator/src/cli/utils/devtools.js +2 -54
  237. package/dist/orchestrator/src/cli/utils/mcpServerEntry.js +53 -0
  238. package/dist/orchestrator/src/cli/utils/packageProgramResolver.js +151 -0
  239. package/dist/orchestrator/src/cli/utils/providerOverrideEnv.js +71 -0
  240. package/dist/orchestrator/src/cli/utils/trailingJsonObject.js +59 -0
  241. package/dist/orchestrator/src/learning/crystalizer.js +2 -2
  242. package/dist/orchestrator/src/manager.js +74 -4
  243. package/dist/orchestrator/src/persistence/ExperienceStore.js +233 -49
  244. package/dist/orchestrator/src/persistence/TaskStateStore.js +6 -6
  245. package/dist/orchestrator/src/persistence/lockFile.js +70 -4
  246. package/dist/orchestrator/src/persistence/sanitizeIdentifier.js +39 -0
  247. package/dist/orchestrator/src/sync/createCloudSyncWorker.js +3 -2
  248. package/dist/orchestrator/src/utils/atomicWrite.js +17 -2
  249. package/dist/packages/orchestrator/src/exec/unified-exec.js +99 -6
  250. package/dist/packages/orchestrator/src/instructions/promptPacks.js +150 -19
  251. package/dist/packages/sdk-node/src/orchestrator.js +137 -13
  252. package/dist/packages/shared/config/designConfig.js +8 -1
  253. package/dist/packages/shared/streams/stdio.js +1 -1
  254. package/dist/scripts/design/pipeline/permit.js +15 -0
  255. package/dist/scripts/lib/docs-catalog.js +399 -0
  256. package/dist/scripts/lib/docs-helpers.js +87 -5
  257. package/dist/scripts/lib/pr-watch-merge.js +1088 -80
  258. package/dist/scripts/lib/provider-run-contract.js +26 -0
  259. package/dist/scripts/lib/review-command-intent-classification.js +532 -0
  260. package/dist/scripts/lib/review-command-probe-classification.js +385 -0
  261. package/dist/scripts/lib/review-execution-boundary-preflight.js +279 -0
  262. package/dist/scripts/lib/review-execution-runtime.js +753 -0
  263. package/dist/scripts/lib/review-execution-state.js +1144 -0
  264. package/dist/scripts/lib/review-execution-telemetry.js +215 -0
  265. package/dist/scripts/lib/review-inspection-target-parsing.js +78 -0
  266. package/dist/scripts/lib/review-launch-attempt.js +601 -0
  267. package/dist/scripts/lib/review-meta-surface-boundary-analysis.js +300 -0
  268. package/dist/scripts/lib/review-meta-surface-normalization.js +746 -0
  269. package/dist/scripts/lib/review-non-interactive-handoff.js +61 -0
  270. package/dist/scripts/lib/review-prompt-context.js +376 -0
  271. package/dist/scripts/lib/review-scope-advisory.js +286 -0
  272. package/dist/scripts/lib/review-scope-paths.js +123 -0
  273. package/dist/scripts/lib/review-shell-command-parser.js +389 -0
  274. package/dist/scripts/lib/review-shell-env-interpreter.js +340 -0
  275. package/dist/scripts/lib/run-manifests.js +192 -36
  276. package/dist/scripts/lib/spark-policy-classifier.js +593 -0
  277. package/dist/scripts/run-review.js +507 -1777
  278. package/docs/README.md +43 -20
  279. package/docs/book/README.md +19 -0
  280. package/docs/book/codex-cli-0124-adoption.md +68 -0
  281. package/docs/book/local-hook-impact.md +73 -0
  282. package/docs/book/operations.md +60 -0
  283. package/docs/book/public-posture.md +34 -0
  284. package/docs/book/setup.md +91 -0
  285. package/docs/book/skills.md +11 -0
  286. package/docs/guides/codex-version-policy.md +104 -0
  287. package/docs/public/downstream-setup.md +113 -0
  288. package/docs/public/provider-onboarding.md +173 -0
  289. package/package.json +23 -10
  290. package/plugins/codex-orchestrator/.codex-plugin/plugin.json +30 -0
  291. package/plugins/codex-orchestrator/.mcp.json +13 -0
  292. package/plugins/codex-orchestrator/launcher.mjs +361 -0
  293. package/schemas/manifest.json +411 -0
  294. package/skills/README.md +26 -0
  295. package/skills/collab-subagents-first/SKILL.md +1 -1
  296. package/skills/delegation-usage/DELEGATION_GUIDE.md +30 -12
  297. package/skills/delegation-usage/SKILL.md +25 -14
  298. package/skills/land/SKILL.md +77 -0
  299. package/skills/linear/SKILL.md +255 -0
  300. package/skills/release/SKILL.md +47 -3
  301. package/skills/standalone-review/SKILL.md +6 -1
  302. package/templates/README.md +4 -2
  303. package/templates/codex/.codex/agents/awaiter-high.toml +2 -2
  304. package/templates/codex/.codex/agents/worker-complex.toml +1 -1
  305. package/templates/codex/.codex/config.toml +3 -4
  306. package/templates/codex/.codex/providers/README.md +13 -0
  307. package/templates/codex/.codex/providers/control.example.json +18 -0
  308. package/templates/codex/.codex/providers/provider.env.example +15 -0
  309. package/templates/codex/AGENTS.md +15 -8
  310. package/templates/codex/mcp-client.json +5 -1
  311. package/docs/assets/setup.gif +0 -0
@@ -0,0 +1,286 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { createReadStream } from 'node:fs';
3
+ import { stat } from 'node:fs/promises';
4
+ import path from 'node:path';
5
+ import { promisify } from 'node:util';
6
+ import { parseNameStatusPathCollection, parseStatusZPathCollection, parseStatusZPaths } from './review-scope-paths.js';
7
+ const execFileAsync = promisify(execFile);
8
+ const DEFAULT_LARGE_SCOPE_FILE_THRESHOLD = 25;
9
+ const DEFAULT_LARGE_SCOPE_LINE_THRESHOLD = 1200;
10
+ const REVIEW_LARGE_SCOPE_FILE_THRESHOLD_ENV_KEY = 'CODEX_REVIEW_LARGE_SCOPE_FILE_THRESHOLD';
11
+ const REVIEW_LARGE_SCOPE_LINE_THRESHOLD_ENV_KEY = 'CODEX_REVIEW_LARGE_SCOPE_LINE_THRESHOLD';
12
+ export const REVIEW_LARGE_SCOPE_OVERRIDE_REASON_ENV_KEY = 'CODEX_REVIEW_LARGE_SCOPE_OVERRIDE_REASON';
13
+ const IGNORED_REVIEW_SCOPE_PREFIXES = ['.agent/task/', 'tasks/tasks-'];
14
+ export async function collectReviewScopePaths(options, repoRoot) {
15
+ if (options.commit) {
16
+ const summary = await tryGit(['show', '--no-color', '--name-status', '--format=', options.commit], repoRoot);
17
+ return summary ? parseNameStatusPathCollection(summary) : { paths: [], renderedLines: [] };
18
+ }
19
+ if (options.base) {
20
+ const diff = await tryGit(['diff', '--no-color', '--name-status', `${options.base}...HEAD`], repoRoot);
21
+ return diff ? parseNameStatusPathCollection(diff) : { paths: [], renderedLines: [] };
22
+ }
23
+ const status = await tryGit(['status', '--porcelain=v1', '-z', '--untracked-files=all'], repoRoot);
24
+ return status ? parseStatusZPathCollection(status) : { paths: [], renderedLines: [] };
25
+ }
26
+ export function resolveEffectiveScopeMode(options) {
27
+ if (options.commit) {
28
+ return 'commit';
29
+ }
30
+ if (options.base) {
31
+ return 'base';
32
+ }
33
+ return 'uncommitted';
34
+ }
35
+ export function buildScopeNotes(options, scopePathCollection) {
36
+ const lines = [];
37
+ const scopePaths = scopePathCollection.paths;
38
+ const renderedScopeLines = scopePathCollection.renderedLines;
39
+ if (options.commit) {
40
+ lines.push(`Review scope hint: commit \`${options.commit}\``);
41
+ }
42
+ else if (options.base) {
43
+ lines.push(`Review scope hint: diff vs base \`${options.base}\``);
44
+ }
45
+ else {
46
+ lines.push('Review scope hint: uncommitted working tree changes (default).');
47
+ }
48
+ if (scopePaths.length > 0) {
49
+ lines.push('', `Review scope paths (${scopePaths.length}):`, '```', ...renderedScopeLines, '```');
50
+ }
51
+ else {
52
+ lines.push('', 'Review scope paths: unavailable or empty.');
53
+ }
54
+ return lines;
55
+ }
56
+ export async function assessReviewScope(options, repoRoot, env = process.env) {
57
+ const mode = resolveEffectiveScopeMode(options);
58
+ const fileThreshold = resolveLargeScopeFileThreshold(env);
59
+ const lineThreshold = resolveLargeScopeLineThreshold(env);
60
+ if (mode !== 'uncommitted') {
61
+ return {
62
+ mode,
63
+ changedFiles: null,
64
+ changedLines: null,
65
+ largeScope: false,
66
+ fileThreshold,
67
+ lineThreshold
68
+ };
69
+ }
70
+ const status = await tryGit(['status', '--porcelain=v1', '-z', '--untracked-files=all'], repoRoot);
71
+ const diff = await tryGit(['diff', '--numstat', '--no-renames'], repoRoot);
72
+ const cachedDiff = await tryGit(['diff', '--cached', '--numstat', '--no-renames'], repoRoot);
73
+ const untracked = await tryGit(['ls-files', '--others', '--exclude-standard', '-z'], repoRoot);
74
+ const untrackedPaths = untracked
75
+ ? parseNullDelimitedPaths(untracked).filter((filePath) => !isIgnoredReviewScopePath(filePath))
76
+ : [];
77
+ const untrackedLines = untrackedPaths.length > 0 ? await countWorkingTreeLines(untrackedPaths, repoRoot) : null;
78
+ const changedFiles = status
79
+ ? parseStatusZPaths(status).filter((filePath) => !isIgnoredReviewScopePath(filePath)).length
80
+ : null;
81
+ let changedLines = null;
82
+ if (diff || cachedDiff || untrackedLines !== null) {
83
+ changedLines = 0;
84
+ if (diff) {
85
+ changedLines += parseNumstatLineDelta(diff);
86
+ }
87
+ if (cachedDiff) {
88
+ changedLines += parseNumstatLineDelta(cachedDiff);
89
+ }
90
+ if (untrackedLines !== null) {
91
+ changedLines += untrackedLines;
92
+ }
93
+ }
94
+ const exceedsFileThreshold = changedFiles !== null && changedFiles >= fileThreshold;
95
+ const exceedsLineThreshold = changedLines !== null && changedLines >= lineThreshold;
96
+ return {
97
+ mode,
98
+ changedFiles,
99
+ changedLines,
100
+ largeScope: exceedsFileThreshold || exceedsLineThreshold,
101
+ fileThreshold,
102
+ lineThreshold
103
+ };
104
+ }
105
+ export function formatScopeMetrics(scope) {
106
+ const parts = [];
107
+ if (scope.changedFiles !== null) {
108
+ parts.push(`${scope.changedFiles} files`);
109
+ }
110
+ if (scope.changedLines !== null) {
111
+ parts.push(`${scope.changedLines} lines`);
112
+ }
113
+ if (parts.length === 0) {
114
+ return null;
115
+ }
116
+ return parts.join(', ');
117
+ }
118
+ export function logReviewScopeAssessment(scope, scopeMetrics, logger = console, overrideReason = null) {
119
+ if (scope.mode !== 'uncommitted') {
120
+ return;
121
+ }
122
+ if (scopeMetrics) {
123
+ logger.log(`[run-review] review scope metrics: ${scopeMetrics}.`);
124
+ }
125
+ else {
126
+ logger.log('[run-review] review scope metrics unavailable (git scope stats could not be resolved).');
127
+ }
128
+ if (!scope.largeScope) {
129
+ return;
130
+ }
131
+ const detail = scopeMetrics ?? 'metrics unavailable';
132
+ logger.warn(`[run-review] large uncommitted review scope detected (${detail}; thresholds: ${scope.fileThreshold} files / ${scope.lineThreshold} lines).`);
133
+ if (overrideReason) {
134
+ logger.warn(`[run-review] large uncommitted review scope override accepted via ${REVIEW_LARGE_SCOPE_OVERRIDE_REASON_ENV_KEY}: ${overrideReason}`);
135
+ return;
136
+ }
137
+ logger.warn(`[run-review] large uncommitted review scope now requires --base/--commit or ${REVIEW_LARGE_SCOPE_OVERRIDE_REASON_ENV_KEY} for an auditable override.`);
138
+ }
139
+ export function buildLargeScopeAdvisoryPromptLines(scope, scopeMetrics, overrideReason = null) {
140
+ if (scope.mode !== 'uncommitted' || !scope.largeScope) {
141
+ return [];
142
+ }
143
+ const detail = scopeMetrics ?? 'metrics unavailable';
144
+ const lines = [
145
+ `Scope advisory: large uncommitted diff detected (${detail}; thresholds: ${scope.fileThreshold} files / ${scope.lineThreshold} lines).`,
146
+ ];
147
+ if (overrideReason) {
148
+ lines.push(`Large-scope override recorded: ${overrideReason}`);
149
+ }
150
+ lines.push('Prioritize highest-risk findings first and report actionable issues early; avoid exhaustive low-signal traversal before surfacing initial findings.', 'If full coverage is incomplete, call out residual risk areas explicitly.');
151
+ return lines;
152
+ }
153
+ export function resolveLargeScopeOverrideReason(env = process.env) {
154
+ const reason = env[REVIEW_LARGE_SCOPE_OVERRIDE_REASON_ENV_KEY]?.trim();
155
+ return reason && reason.length > 0 ? reason : null;
156
+ }
157
+ export function getLargeScopeGateError(scope, scopeMetrics, overrideReason) {
158
+ if (scope.mode !== 'uncommitted' || !scope.largeScope || overrideReason) {
159
+ return null;
160
+ }
161
+ const detail = scopeMetrics ?? 'metrics unavailable';
162
+ return `large uncommitted review scope requires explicit scoping or override (${detail}; thresholds: ${scope.fileThreshold} files / ${scope.lineThreshold} lines). Rerun with --base <ref> or --commit <sha>, or set ${REVIEW_LARGE_SCOPE_OVERRIDE_REASON_ENV_KEY}=\"<reason>\" to record an auditable override.`;
163
+ }
164
+ function resolveLargeScopeFileThreshold(env) {
165
+ const configured = env[REVIEW_LARGE_SCOPE_FILE_THRESHOLD_ENV_KEY]?.trim();
166
+ if (!configured) {
167
+ return DEFAULT_LARGE_SCOPE_FILE_THRESHOLD;
168
+ }
169
+ const parsed = Number(configured);
170
+ if (!Number.isFinite(parsed) || !Number.isInteger(parsed) || parsed < 1) {
171
+ throw new Error(`${REVIEW_LARGE_SCOPE_FILE_THRESHOLD_ENV_KEY} must be a positive integer.`);
172
+ }
173
+ return parsed;
174
+ }
175
+ function resolveLargeScopeLineThreshold(env) {
176
+ const configured = env[REVIEW_LARGE_SCOPE_LINE_THRESHOLD_ENV_KEY]?.trim();
177
+ if (!configured) {
178
+ return DEFAULT_LARGE_SCOPE_LINE_THRESHOLD;
179
+ }
180
+ const parsed = Number(configured);
181
+ if (!Number.isFinite(parsed) || !Number.isInteger(parsed) || parsed < 1) {
182
+ throw new Error(`${REVIEW_LARGE_SCOPE_LINE_THRESHOLD_ENV_KEY} must be a positive integer.`);
183
+ }
184
+ return parsed;
185
+ }
186
+ function parseNumstatLineDelta(numstatOutput) {
187
+ let total = 0;
188
+ for (const rawLine of numstatOutput.split(/\r?\n/u)) {
189
+ const line = rawLine.trim();
190
+ if (!line) {
191
+ continue;
192
+ }
193
+ const [added, deleted, ...rest] = line.split(/\s+/u);
194
+ const filePath = rest.join(' ').trim();
195
+ if (!filePath || isIgnoredReviewScopePath(filePath)) {
196
+ continue;
197
+ }
198
+ const addCount = Number(added);
199
+ const delCount = Number(deleted);
200
+ total += Number.isFinite(addCount) ? addCount : 0;
201
+ total += Number.isFinite(delCount) ? delCount : 0;
202
+ }
203
+ return total;
204
+ }
205
+ function parseNullDelimitedPaths(raw) {
206
+ return raw.split('\u0000').filter((entry) => entry.length > 0);
207
+ }
208
+ function isIgnoredReviewScopePath(filePath) {
209
+ return IGNORED_REVIEW_SCOPE_PREFIXES.some((prefix) => filePath.startsWith(prefix));
210
+ }
211
+ async function countWorkingTreeFileLines(relativePath, repoRoot) {
212
+ const absolutePath = path.resolve(repoRoot, relativePath);
213
+ try {
214
+ const fileStat = await stat(absolutePath);
215
+ if (!fileStat.isFile()) {
216
+ return 0;
217
+ }
218
+ }
219
+ catch {
220
+ return 0;
221
+ }
222
+ return await new Promise((resolve) => {
223
+ const stream = createReadStream(absolutePath);
224
+ let sawData = false;
225
+ let sawBinaryByte = false;
226
+ let newlineCount = 0;
227
+ let lastByte = 0;
228
+ let settled = false;
229
+ const settle = (value) => {
230
+ if (settled) {
231
+ return;
232
+ }
233
+ settled = true;
234
+ resolve(value);
235
+ };
236
+ stream.once('error', () => settle(0));
237
+ stream.on('data', (chunk) => {
238
+ const buffer = typeof chunk === 'string' ? Buffer.from(chunk) : chunk;
239
+ if (!buffer || buffer.length === 0) {
240
+ return;
241
+ }
242
+ sawData = true;
243
+ if (buffer.includes(0x00)) {
244
+ sawBinaryByte = true;
245
+ stream.destroy();
246
+ return;
247
+ }
248
+ for (const byte of buffer.values()) {
249
+ if (byte === 0x0a) {
250
+ newlineCount += 1;
251
+ }
252
+ }
253
+ lastByte = buffer[buffer.length - 1] ?? lastByte;
254
+ });
255
+ stream.once('close', () => {
256
+ if (!sawData || sawBinaryByte) {
257
+ settle(0);
258
+ }
259
+ });
260
+ stream.once('end', () => {
261
+ if (!sawData || sawBinaryByte) {
262
+ settle(0);
263
+ return;
264
+ }
265
+ settle(newlineCount + (lastByte === 0x0a ? 0 : 1));
266
+ });
267
+ });
268
+ }
269
+ async function countWorkingTreeLines(paths, repoRoot) {
270
+ let total = 0;
271
+ for (const relativePath of paths) {
272
+ total += await countWorkingTreeFileLines(relativePath, repoRoot);
273
+ }
274
+ return total;
275
+ }
276
+ async function tryGit(args, repoRoot) {
277
+ try {
278
+ const { stdout } = await execFileAsync('git', args, { maxBuffer: 1024 * 1024, cwd: repoRoot });
279
+ const trimmed = String(stdout ?? '').trimEnd();
280
+ return trimmed.length > 0 ? trimmed : null;
281
+ }
282
+ catch {
283
+ return null;
284
+ }
285
+ }
286
+ export { REVIEW_LARGE_SCOPE_FILE_THRESHOLD_ENV_KEY, REVIEW_LARGE_SCOPE_LINE_THRESHOLD_ENV_KEY };
@@ -0,0 +1,123 @@
1
+ function normalizeReviewScopePath(value) {
2
+ return value.trim().replace(/\\/gu, '/').replace(/^\.\//u, '');
3
+ }
4
+ function addNormalizedPath(paths, value) {
5
+ const normalized = normalizeReviewScopePath(value);
6
+ if (normalized) {
7
+ paths.add(normalized);
8
+ }
9
+ }
10
+ function formatScopePathForPrompt(value) {
11
+ if (value !== value.trim() || value.includes('\n') || value.includes('\r') || value.includes(' -> ')) {
12
+ return JSON.stringify(value);
13
+ }
14
+ return value;
15
+ }
16
+ function buildScopePathCollection(items) {
17
+ const paths = new Set();
18
+ const renderedLines = [];
19
+ for (const item of items) {
20
+ for (const value of item.pathValues) {
21
+ addNormalizedPath(paths, value);
22
+ }
23
+ renderedLines.push(item.renderedLine);
24
+ }
25
+ return {
26
+ paths: [...paths],
27
+ renderedLines
28
+ };
29
+ }
30
+ export function parseStatusZPathCollection(statusOutput) {
31
+ const items = [];
32
+ const entries = statusOutput.split('\0');
33
+ for (let index = 0; index < entries.length; index += 1) {
34
+ const entry = entries[index] ?? '';
35
+ if (entry.length < 3) {
36
+ continue;
37
+ }
38
+ const status = entry.slice(0, 2);
39
+ const currentPathRaw = entry.slice(3);
40
+ const currentPath = normalizeReviewScopePath(currentPathRaw);
41
+ if ((status.includes('R') || status.includes('C')) && index + 1 < entries.length) {
42
+ const sourcePathRaw = entries[index + 1] ?? '';
43
+ const sourcePath = normalizeReviewScopePath(sourcePathRaw);
44
+ if (sourcePath && currentPath) {
45
+ items.push({
46
+ renderedLine: `${formatScopePathForPrompt(sourcePathRaw)} -> ${formatScopePathForPrompt(currentPathRaw)}`,
47
+ pathValues: [currentPathRaw, sourcePathRaw]
48
+ });
49
+ }
50
+ else if (currentPath) {
51
+ items.push({
52
+ renderedLine: formatScopePathForPrompt(currentPathRaw),
53
+ pathValues: [currentPathRaw]
54
+ });
55
+ }
56
+ else if (sourcePath) {
57
+ items.push({
58
+ renderedLine: formatScopePathForPrompt(sourcePathRaw),
59
+ pathValues: [sourcePathRaw]
60
+ });
61
+ }
62
+ index += 1;
63
+ continue;
64
+ }
65
+ if (currentPath) {
66
+ items.push({
67
+ renderedLine: formatScopePathForPrompt(currentPathRaw),
68
+ pathValues: [currentPathRaw]
69
+ });
70
+ }
71
+ }
72
+ return buildScopePathCollection(items);
73
+ }
74
+ export function parseStatusZPaths(statusOutput) {
75
+ return parseStatusZPathCollection(statusOutput).paths;
76
+ }
77
+ export function parseNameStatusPathCollection(output) {
78
+ const items = [];
79
+ for (const rawLine of output.split(/\r?\n/u)) {
80
+ if (!rawLine.trim()) {
81
+ continue;
82
+ }
83
+ const fields = rawLine.split('\t').filter((entry) => entry.length > 0);
84
+ const status = fields[0] ?? '';
85
+ if (fields.length < 2) {
86
+ continue;
87
+ }
88
+ if ((status.startsWith('R') || status.startsWith('C')) && fields.length >= 3) {
89
+ const sourcePathRaw = fields[1] ?? '';
90
+ const destinationPathRaw = fields[2] ?? '';
91
+ const sourcePath = normalizeReviewScopePath(sourcePathRaw);
92
+ const destinationPath = normalizeReviewScopePath(destinationPathRaw);
93
+ if (sourcePath && destinationPath) {
94
+ items.push({
95
+ renderedLine: `${formatScopePathForPrompt(sourcePathRaw)} -> ${formatScopePathForPrompt(destinationPathRaw)}`,
96
+ pathValues: [sourcePathRaw, destinationPathRaw]
97
+ });
98
+ }
99
+ else if (sourcePath) {
100
+ items.push({
101
+ renderedLine: formatScopePathForPrompt(sourcePathRaw),
102
+ pathValues: [sourcePathRaw]
103
+ });
104
+ }
105
+ else if (destinationPath) {
106
+ items.push({
107
+ renderedLine: formatScopePathForPrompt(destinationPathRaw),
108
+ pathValues: [destinationPathRaw]
109
+ });
110
+ }
111
+ continue;
112
+ }
113
+ const pathRaw = fields[1] ?? '';
114
+ const path = normalizeReviewScopePath(pathRaw);
115
+ if (path) {
116
+ items.push({ renderedLine: formatScopePathForPrompt(pathRaw), pathValues: [pathRaw] });
117
+ }
118
+ }
119
+ return buildScopePathCollection(items);
120
+ }
121
+ export function parseNameStatusPaths(output) {
122
+ return parseNameStatusPathCollection(output).paths;
123
+ }