@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,402 @@
1
+ /* eslint-disable patterns/prefer-logger-over-console */
2
+ import { readFile } from 'node:fs/promises';
3
+ import { dirname, resolve } from 'node:path';
4
+ import process from 'node:process';
5
+ import { resolveEnvironmentPaths } from '../../../scripts/lib/run-manifests.js';
6
+ import { loadControlEndpoint, resolveRunManifestPath } from './delegationServer.js';
7
+ import { shouldEnableControlStatusDashboard, startAttachedControlStatusDashboard } from './control/controlStatusDashboard.js';
8
+ import { normalizeEnvironmentPaths, normalizeTaskId } from './run/environment.js';
9
+ import { resolveRunPaths } from './run/runPaths.js';
10
+ const DEFAULT_ATTACH_REFRESH_INTERVAL_MS = 1_000;
11
+ export const DEFAULT_ATTACH_REQUEST_TIMEOUT_MS = 15_000;
12
+ const CSRF_HEADER = 'x-csrf-token';
13
+ export class CoStatusAttachRequestError extends Error {
14
+ kind;
15
+ statusCode;
16
+ constructor(kind, message, options = {}) {
17
+ super(message, options.cause === undefined ? undefined : { cause: options.cause });
18
+ this.name = 'CoStatusAttachRequestError';
19
+ this.kind = kind;
20
+ this.statusCode = options.statusCode ?? null;
21
+ }
22
+ }
23
+ export async function runCoStatusAttachCliShell(params) {
24
+ if (params.flags.help !== undefined) {
25
+ params.printHelp();
26
+ return;
27
+ }
28
+ const format = readStringFlag(params.flags, 'format') === 'json' ? 'json' : 'text';
29
+ const refreshIntervalMs = readIntervalFlag(params.flags, 'refresh-interval-ms');
30
+ const target = await resolveAttachTarget(params.flags);
31
+ if (format === 'json') {
32
+ console.log(JSON.stringify({
33
+ status: 'ready',
34
+ mode: 'attach',
35
+ read_only: true,
36
+ base_url: target.baseUrl.toString(),
37
+ task_id: target.taskId,
38
+ run_id: target.runId,
39
+ run_dir: target.runDir,
40
+ manifest_path: target.manifestPath,
41
+ refresh_interval_ms: refreshIntervalMs
42
+ }, null, 2));
43
+ return;
44
+ }
45
+ if (!shouldEnableControlStatusDashboard({
46
+ format,
47
+ stdoutIsTTY: process.stdout.isTTY === true,
48
+ stderrIsTTY: process.stderr.isTTY === true,
49
+ term: process.env.TERM ?? null,
50
+ env: process.env
51
+ })) {
52
+ console.log(`CO STATUS attach target: ${target.baseUrl}`);
53
+ console.log(`Task: ${target.taskId ?? 'n/a'}`);
54
+ console.log(`Run: ${target.runId ?? 'n/a'}`);
55
+ console.log(`Run dir: ${target.runDir}`);
56
+ console.log(`Manifest: ${target.manifestPath}`);
57
+ return;
58
+ }
59
+ let dashboard = null;
60
+ const attachAbortController = new AbortController();
61
+ let activeTarget = target;
62
+ try {
63
+ dashboard = startAttachedControlStatusDashboard({
64
+ readDataset: async (signal) => await readUiDatasetWithEndpointRecovery({
65
+ flags: params.flags,
66
+ getTarget: () => activeTarget,
67
+ setTarget: (nextTarget) => {
68
+ activeTarget = nextTarget;
69
+ },
70
+ signal: AbortSignal.any([attachAbortController.signal, signal])
71
+ }),
72
+ baseUrl: target.baseUrl.toString(),
73
+ taskId: target.taskId ?? 'unknown',
74
+ runId: target.runId ?? 'unknown',
75
+ runDir: target.runDir,
76
+ startPipelineId: 'attach-viewer',
77
+ refreshIntervalMs
78
+ });
79
+ await waitForSignal();
80
+ }
81
+ finally {
82
+ attachAbortController.abort();
83
+ dashboard?.stop();
84
+ await dashboard?.flush();
85
+ }
86
+ }
87
+ export async function resolveAttachTarget(flags) {
88
+ const manifestFlag = readStringFlag(flags, 'manifest-path');
89
+ const runDirFlag = readStringFlag(flags, 'run-dir');
90
+ const requestedTaskId = readStringFlag(flags, 'task');
91
+ const requestedRunId = readStringFlag(flags, 'run');
92
+ const locator = resolveAttachLocator({
93
+ manifestPath: manifestFlag,
94
+ runDir: runDirFlag,
95
+ taskId: requestedTaskId,
96
+ runId: requestedRunId
97
+ });
98
+ const resolvedManifestPath = resolveRunManifestPath(locator.manifestPath, undefined, 'manifest_path');
99
+ const { baseUrl, token } = await loadControlEndpoint(resolvedManifestPath);
100
+ const runDir = dirname(resolvedManifestPath);
101
+ const manifest = await readAttachManifest(resolvedManifestPath);
102
+ return {
103
+ manifestPath: resolvedManifestPath,
104
+ taskId: manifest.taskId ?? locator.taskId,
105
+ runId: manifest.runId ?? locator.runId,
106
+ runDir,
107
+ baseUrl,
108
+ token
109
+ };
110
+ }
111
+ function resolveAttachLocator(input) {
112
+ if (input.manifestPath) {
113
+ const manifestPath = resolve(input.manifestPath);
114
+ const derived = deriveTaskRunFromManifestPath(manifestPath);
115
+ return {
116
+ manifestPath,
117
+ taskId: input.taskId ?? derived.taskId,
118
+ runId: input.runId ?? derived.runId
119
+ };
120
+ }
121
+ if (input.runDir) {
122
+ const runDir = resolve(input.runDir);
123
+ const derived = deriveTaskRunFromRunDir(runDir);
124
+ return {
125
+ manifestPath: resolve(runDir, 'manifest.json'),
126
+ taskId: input.taskId ?? derived.taskId,
127
+ runId: input.runId ?? derived.runId
128
+ };
129
+ }
130
+ const baseEnv = normalizeEnvironmentPaths(resolveEnvironmentPaths());
131
+ const taskId = normalizeTaskId(input.taskId ?? 'local-mcp');
132
+ const runId = input.runId ?? 'control-host';
133
+ return {
134
+ manifestPath: resolveRunPaths({ ...baseEnv, taskId }, runId).manifestPath,
135
+ taskId,
136
+ runId
137
+ };
138
+ }
139
+ async function readAttachManifest(manifestPath) {
140
+ try {
141
+ const raw = await readFile(manifestPath, 'utf8');
142
+ const parsed = JSON.parse(raw);
143
+ return {
144
+ taskId: normalizeOptionalString(parsed.task_id),
145
+ runId: normalizeOptionalString(parsed.run_id)
146
+ };
147
+ }
148
+ catch {
149
+ return { taskId: null, runId: null };
150
+ }
151
+ }
152
+ export async function fetchUiDataset(baseUrl, token, options = {}) {
153
+ const url = new URL('/ui/data.json', baseUrl);
154
+ const controller = new AbortController();
155
+ const linkedSignal = options.signal;
156
+ const onAbort = () => controller.abort();
157
+ if (linkedSignal) {
158
+ if (linkedSignal.aborted) {
159
+ controller.abort();
160
+ }
161
+ else {
162
+ linkedSignal.addEventListener('abort', onAbort, { once: true });
163
+ }
164
+ }
165
+ const requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_ATTACH_REQUEST_TIMEOUT_MS;
166
+ const timer = setTimeout(() => controller.abort(), requestTimeoutMs);
167
+ let response;
168
+ try {
169
+ response = await fetch(url.toString(), {
170
+ method: 'GET',
171
+ headers: {
172
+ Authorization: `Bearer ${token}`,
173
+ [CSRF_HEADER]: token
174
+ },
175
+ signal: controller.signal
176
+ });
177
+ }
178
+ catch (error) {
179
+ if (error?.name === 'AbortError') {
180
+ if (linkedSignal?.aborted) {
181
+ throw new CoStatusAttachRequestError('cancelled', 'control-host ui request cancelled', { cause: error });
182
+ }
183
+ throw new CoStatusAttachRequestError('timeout', `control-host ui request timeout after ${requestTimeoutMs}ms`, { cause: error });
184
+ }
185
+ throw new CoStatusAttachRequestError('network', `control-host unavailable at ${url.toString()}: ${formatFetchNetworkError(error)}`, { cause: error });
186
+ }
187
+ finally {
188
+ clearTimeout(timer);
189
+ linkedSignal?.removeEventListener('abort', onAbort);
190
+ }
191
+ if (!response.ok) {
192
+ const statusText = response.statusText.trim() || 'HTTP error';
193
+ if (response.status === 401 || response.status === 403) {
194
+ throw new CoStatusAttachRequestError('auth', `control-host ui auth failed: ${response.status} ${statusText}; refresh control_auth.json or restart co-status attach against the current control-host.`, { statusCode: response.status });
195
+ }
196
+ throw new CoStatusAttachRequestError('http', `control-host ui request failed: ${response.status} ${statusText}`, { statusCode: response.status });
197
+ }
198
+ const payload = (await response.json());
199
+ if (!isOperatorDashboardDataset(payload)) {
200
+ throw new Error('control-host ui dataset invalid');
201
+ }
202
+ return payload;
203
+ }
204
+ export async function readUiDatasetWithEndpointRecovery(input) {
205
+ const previousTarget = input.getTarget();
206
+ try {
207
+ return await fetchUiDataset(previousTarget.baseUrl, previousTarget.token, {
208
+ signal: input.signal,
209
+ requestTimeoutMs: input.requestTimeoutMs
210
+ });
211
+ }
212
+ catch (error) {
213
+ if (isCancelledAttachRequestError(error)) {
214
+ throw error;
215
+ }
216
+ let resolvedTarget;
217
+ try {
218
+ resolvedTarget = await resolveAttachTarget(input.flags);
219
+ }
220
+ catch (resolveError) {
221
+ throw new Error(`${formatAttachRequestFailure(error, previousTarget)} Re-resolving control_endpoint.json failed: ${resolveError?.message ?? String(resolveError)}.`);
222
+ }
223
+ if (!isAttachTargetEndpointEquivalent(previousTarget, resolvedTarget)) {
224
+ input.setTarget(resolvedTarget);
225
+ try {
226
+ return await fetchUiDataset(resolvedTarget.baseUrl, resolvedTarget.token, {
227
+ signal: input.signal,
228
+ requestTimeoutMs: input.requestTimeoutMs
229
+ });
230
+ }
231
+ catch (retryError) {
232
+ if (isCancelledAttachRequestError(retryError)) {
233
+ throw retryError;
234
+ }
235
+ throw new Error(`control-host endpoint rotated from ${previousTarget.baseUrl.toString()} to ${resolvedTarget.baseUrl.toString()}, but the refreshed endpoint is not readable. ${formatAttachRequestFailure(retryError, resolvedTarget, { endpointAlreadyRotated: true })}`);
236
+ }
237
+ }
238
+ if (input.recoverSameEndpointTimeout === true && isTimeoutAttachRequestError(error)) {
239
+ try {
240
+ return await fetchUiDataset(previousTarget.baseUrl, previousTarget.token, {
241
+ signal: input.signal,
242
+ requestTimeoutMs: input.requestTimeoutMs
243
+ });
244
+ }
245
+ catch (retryError) {
246
+ if (isCancelledAttachRequestError(retryError)) {
247
+ throw retryError;
248
+ }
249
+ if (isTimeoutAttachRequestError(retryError)) {
250
+ throw new Error(formatSameEndpointTimeoutFailure(retryError, previousTarget));
251
+ }
252
+ throw new Error(formatAttachRequestFailure(retryError, previousTarget));
253
+ }
254
+ }
255
+ throw new Error(formatAttachRequestFailure(error, previousTarget));
256
+ }
257
+ }
258
+ function isAttachTargetEndpointEquivalent(left, right) {
259
+ return left.baseUrl.toString() === right.baseUrl.toString() && left.token === right.token;
260
+ }
261
+ function isCancelledAttachRequestError(error) {
262
+ return error instanceof CoStatusAttachRequestError && error.kind === 'cancelled';
263
+ }
264
+ function isTimeoutAttachRequestError(error) {
265
+ return error instanceof CoStatusAttachRequestError && error.kind === 'timeout';
266
+ }
267
+ function formatSameEndpointTimeoutFailure(error, target) {
268
+ return [
269
+ `${error.message}.`,
270
+ `The current resolved /ui/data.json endpoint at ${target.baseUrl.toString()} timed out again after endpoint re-resolution returned the same endpoint/token; this is a same-endpoint current-endpoint timeout, not stale/dead endpoint ECONNREFUSED recovery or attach restart/rotation.`,
271
+ 'Inspect local control-host polling.stuck, polling.restart_required, and running claim evidence before treating the host as unhealthy.'
272
+ ].join(' ');
273
+ }
274
+ function formatAttachRequestFailure(error, target, options = {}) {
275
+ if (error instanceof CoStatusAttachRequestError) {
276
+ if (error.kind === 'network') {
277
+ if (options.endpointAlreadyRotated) {
278
+ return `${error.message}. The refreshed control-host endpoint is still unreachable; wait for the new host to come up or rerun co-status attach.`;
279
+ }
280
+ return `stale endpoint after control-host restart; control-host unavailable; control_endpoint.json has not rotated to a reachable host. ${error.message}. Waiting for ${resolve(target.runDir, 'control_endpoint.json')} to rotate or rerun co-status attach.`;
281
+ }
282
+ if (error.kind === 'timeout') {
283
+ return `${error.message}. The control-host did not answer before the attach timeout; if restart is in progress, wait for endpoint rotation or rerun co-status attach.`;
284
+ }
285
+ return error.message;
286
+ }
287
+ return `control-host ui request failed: ${error?.message ?? String(error)}`;
288
+ }
289
+ function formatFetchNetworkError(error) {
290
+ const message = error?.message ?? String(error);
291
+ const code = extractFetchErrorCode(error);
292
+ return code ? `${message} (${code})` : message;
293
+ }
294
+ function extractFetchErrorCode(error) {
295
+ if (!error || typeof error !== 'object') {
296
+ return null;
297
+ }
298
+ const cause = error.cause;
299
+ if (!cause || typeof cause !== 'object') {
300
+ return null;
301
+ }
302
+ const code = cause.code;
303
+ return typeof code === 'string' && code.trim().length > 0 ? code : null;
304
+ }
305
+ function readStringFlag(flags, key) {
306
+ const value = flags[key];
307
+ if (typeof value !== 'string') {
308
+ return undefined;
309
+ }
310
+ const trimmed = value.trim();
311
+ return trimmed.length > 0 ? trimmed : undefined;
312
+ }
313
+ function readIntervalFlag(flags, key) {
314
+ const value = flags[key];
315
+ if (value === undefined) {
316
+ return DEFAULT_ATTACH_REFRESH_INTERVAL_MS;
317
+ }
318
+ if (value === true || typeof value !== 'string') {
319
+ throw new Error(`Invalid --${key}: expected integer milliseconds >= 250`);
320
+ }
321
+ const raw = value.trim();
322
+ if (raw.length === 0) {
323
+ throw new Error(`Invalid --${key}: expected integer milliseconds >= 250`);
324
+ }
325
+ if (!/^\d+$/u.test(raw)) {
326
+ throw new Error(`Invalid --${key}: expected integer milliseconds >= 250`);
327
+ }
328
+ const parsed = Number(raw);
329
+ if (!Number.isSafeInteger(parsed) || parsed < 250) {
330
+ throw new Error(`Invalid --${key}: expected integer milliseconds >= 250`);
331
+ }
332
+ return parsed;
333
+ }
334
+ function normalizeOptionalString(value) {
335
+ if (typeof value !== 'string') {
336
+ return null;
337
+ }
338
+ const trimmed = value.trim();
339
+ return trimmed.length > 0 ? trimmed : null;
340
+ }
341
+ function isOperatorDashboardDataset(value) {
342
+ if (!isRecord(value)) {
343
+ return false;
344
+ }
345
+ if (value.mode !== 'operator_dashboard' || value.read_only !== true) {
346
+ return false;
347
+ }
348
+ if (typeof value.generated_at !== 'string' || typeof value.host !== 'string') {
349
+ return false;
350
+ }
351
+ if (!isRecord(value.counts) ||
352
+ !isFiniteNumber(value.counts.running) ||
353
+ !isFiniteNumber(value.counts.retrying) ||
354
+ !isFiniteNumber(value.counts.issues)) {
355
+ return false;
356
+ }
357
+ if (!isRecord(value.totals) ||
358
+ !isNumberOrNull(value.totals.input_tokens) ||
359
+ !isNumberOrNull(value.totals.output_tokens) ||
360
+ !isNumberOrNull(value.totals.total_tokens) ||
361
+ !isFiniteNumber(value.totals.seconds_running)) {
362
+ return false;
363
+ }
364
+ return Array.isArray(value.running) && Array.isArray(value.retrying) && Array.isArray(value.issues);
365
+ }
366
+ function isRecord(value) {
367
+ return typeof value === 'object' && value !== null;
368
+ }
369
+ function isFiniteNumber(value) {
370
+ return typeof value === 'number' && Number.isFinite(value);
371
+ }
372
+ function isNumberOrNull(value) {
373
+ return value === null || isFiniteNumber(value);
374
+ }
375
+ function deriveTaskRunFromManifestPath(manifestPath) {
376
+ return deriveTaskRunFromRunDir(dirname(resolve(manifestPath)));
377
+ }
378
+ function deriveTaskRunFromRunDir(runDir) {
379
+ const resolvedRunDir = resolve(runDir);
380
+ const parts = resolvedRunDir.split(/[\\/]+/u).filter((part) => part.length > 0);
381
+ if (parts.length < 3) {
382
+ return { taskId: null, runId: null };
383
+ }
384
+ const runId = parts.at(-1) ?? null;
385
+ const cliSegment = parts.at(-2) ?? null;
386
+ const taskId = parts.at(-3) ?? null;
387
+ if (cliSegment !== 'cli') {
388
+ return { taskId: null, runId: null };
389
+ }
390
+ return { taskId, runId };
391
+ }
392
+ async function waitForSignal() {
393
+ await new Promise((resolve) => {
394
+ const handle = () => {
395
+ process.off('SIGINT', handle);
396
+ process.off('SIGTERM', handle);
397
+ resolve();
398
+ };
399
+ process.on('SIGINT', handle);
400
+ process.on('SIGTERM', handle);
401
+ });
402
+ }