@companyhelm/cli 0.0.12 → 0.1.4

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 (581) hide show
  1. package/README.md +40 -37
  2. package/dist/cli.d.ts +1 -0
  3. package/dist/cli.js +13 -52
  4. package/dist/commands/dependencies.d.ts +24 -0
  5. package/dist/commands/dependencies.js +145 -0
  6. package/dist/commands/down.d.ts +3 -0
  7. package/dist/commands/down.js +5 -0
  8. package/dist/commands/interactive.d.ts +6 -0
  9. package/dist/commands/interactive.js +22 -0
  10. package/dist/commands/logs.d.ts +3 -0
  11. package/dist/commands/logs.js +14 -0
  12. package/dist/commands/register-commands.d.ts +3 -0
  13. package/dist/commands/register-commands.js +19 -14
  14. package/dist/commands/reset.d.ts +7 -0
  15. package/dist/commands/reset.js +51 -0
  16. package/dist/commands/set-image-version.d.ts +31 -0
  17. package/dist/commands/set-image-version.js +87 -0
  18. package/dist/commands/setup-github-app.d.ts +10 -0
  19. package/dist/commands/setup-github-app.js +211 -0
  20. package/dist/commands/status.d.ts +3 -0
  21. package/dist/commands/status.js +5 -30
  22. package/dist/commands/up.d.ts +3 -0
  23. package/dist/commands/up.js +14 -0
  24. package/dist/core/bootstrap/DeploymentBootstrapper.d.ts +9 -0
  25. package/dist/core/bootstrap/DeploymentBootstrapper.js +99 -0
  26. package/dist/core/bootstrap/SeedSqlRenderer.d.ts +12 -0
  27. package/dist/core/bootstrap/SeedSqlRenderer.js +44 -0
  28. package/dist/core/config/ApiEnvFileWriter.d.ts +6 -0
  29. package/dist/core/config/ApiEnvFileWriter.js +26 -0
  30. package/dist/core/config/GithubAppConfig.d.ts +6 -0
  31. package/dist/core/config/GithubAppConfig.js +26 -0
  32. package/dist/core/config/GithubAppConfigStore.d.ts +11 -0
  33. package/dist/core/config/GithubAppConfigStore.js +65 -0
  34. package/dist/core/docker/ComposeTemplateRenderer.d.ts +19 -0
  35. package/dist/core/docker/ComposeTemplateRenderer.js +42 -0
  36. package/dist/core/docker/DockerStackManager.d.ts +26 -0
  37. package/dist/core/docker/DockerStackManager.js +161 -0
  38. package/dist/core/logs/LogsService.d.ts +5 -0
  39. package/dist/core/logs/LogsService.js +13 -0
  40. package/dist/core/process/CommandRunner.d.ts +4 -0
  41. package/dist/core/process/CommandRunner.js +43 -0
  42. package/dist/core/runner/RunnerSupervisor.d.ts +21 -0
  43. package/dist/core/runner/RunnerSupervisor.js +61 -0
  44. package/dist/core/runtime/ImageCatalog.d.ts +8 -0
  45. package/dist/core/runtime/ImageCatalog.js +12 -0
  46. package/dist/core/runtime/LocalConfigStore.d.ts +16 -0
  47. package/dist/core/runtime/LocalConfigStore.js +59 -0
  48. package/dist/core/runtime/ManagedImages.d.ts +10 -0
  49. package/dist/core/runtime/ManagedImages.js +27 -0
  50. package/dist/core/runtime/PortAllocator.d.ts +9 -0
  51. package/dist/core/runtime/PortAllocator.js +20 -0
  52. package/dist/core/runtime/ProjectPaths.d.ts +7 -0
  53. package/dist/core/runtime/ProjectPaths.js +16 -0
  54. package/dist/core/runtime/PublicImageTagRegistry.d.ts +16 -0
  55. package/dist/core/runtime/PublicImageTagRegistry.js +148 -0
  56. package/dist/core/runtime/RuntimePaths.d.ts +12 -0
  57. package/dist/core/runtime/RuntimePaths.js +31 -0
  58. package/dist/core/runtime/RuntimeState.d.ts +24 -0
  59. package/dist/core/runtime/RuntimeState.js +1 -0
  60. package/dist/core/runtime/RuntimeStateStore.d.ts +10 -0
  61. package/dist/core/runtime/RuntimeStateStore.js +58 -0
  62. package/dist/core/runtime/Secrets.d.ts +10 -0
  63. package/dist/core/runtime/Secrets.js +26 -0
  64. package/dist/core/runtime/VersionCatalog.d.ts +10 -0
  65. package/dist/core/runtime/VersionCatalog.js +21 -0
  66. package/dist/core/status/StatusService.d.ts +16 -0
  67. package/dist/core/status/StatusService.js +21 -0
  68. package/dist/core/ui/TerminalRenderer.d.ts +17 -0
  69. package/dist/core/ui/TerminalRenderer.js +71 -0
  70. package/dist/templates/docker-compose.yaml.tpl +39 -0
  71. package/dist/templates/seed.sql.tpl +76 -0
  72. package/package.json +19 -28
  73. package/src/templates/docker-compose.yaml.tpl +39 -0
  74. package/src/templates/seed.sql.tpl +76 -0
  75. package/RUNTIME_IMAGE_VERSION +0 -1
  76. package/dist/commands/global-options.js +0 -20
  77. package/dist/commands/root.js +0 -2501
  78. package/dist/commands/runner/common.js +0 -18
  79. package/dist/commands/runner/register-runner-commands.js +0 -12
  80. package/dist/commands/runner/start.js +0 -30
  81. package/dist/commands/runner/stop.js +0 -55
  82. package/dist/commands/sdk/codex/auth.js +0 -200
  83. package/dist/commands/sdk/codex/register-codex-sdk-commands.js +0 -12
  84. package/dist/commands/sdk/codex/use-dedicated-auth.js +0 -18
  85. package/dist/commands/sdk/codex/use-host-auth.js +0 -19
  86. package/dist/commands/sdk/list.js +0 -76
  87. package/dist/commands/sdk/refresh-models.js +0 -25
  88. package/dist/commands/sdk/register-sdk-commands.js +0 -14
  89. package/dist/commands/shell.js +0 -90
  90. package/dist/commands/startup.js +0 -137
  91. package/dist/commands/thread/docker.js +0 -77
  92. package/dist/commands/thread/list.js +0 -37
  93. package/dist/commands/thread/register-thread-commands.js +0 -12
  94. package/dist/config.js +0 -105
  95. package/dist/generated/codex-app-server/AbsolutePathBuf.js +0 -3
  96. package/dist/generated/codex-app-server/AddConversationListenerParams.js +0 -3
  97. package/dist/generated/codex-app-server/AddConversationSubscriptionResponse.js +0 -3
  98. package/dist/generated/codex-app-server/AgentMessageContent.js +0 -3
  99. package/dist/generated/codex-app-server/AgentMessageContentDeltaEvent.js +0 -3
  100. package/dist/generated/codex-app-server/AgentMessageDeltaEvent.js +0 -3
  101. package/dist/generated/codex-app-server/AgentMessageEvent.js +0 -3
  102. package/dist/generated/codex-app-server/AgentMessageItem.js +0 -3
  103. package/dist/generated/codex-app-server/AgentReasoningDeltaEvent.js +0 -3
  104. package/dist/generated/codex-app-server/AgentReasoningEvent.js +0 -3
  105. package/dist/generated/codex-app-server/AgentReasoningRawContentDeltaEvent.js +0 -3
  106. package/dist/generated/codex-app-server/AgentReasoningRawContentEvent.js +0 -3
  107. package/dist/generated/codex-app-server/AgentReasoningSectionBreakEvent.js +0 -3
  108. package/dist/generated/codex-app-server/AgentStatus.js +0 -3
  109. package/dist/generated/codex-app-server/ApplyPatchApprovalParams.js +0 -3
  110. package/dist/generated/codex-app-server/ApplyPatchApprovalRequestEvent.js +0 -3
  111. package/dist/generated/codex-app-server/ApplyPatchApprovalResponse.js +0 -3
  112. package/dist/generated/codex-app-server/ArchiveConversationParams.js +0 -3
  113. package/dist/generated/codex-app-server/ArchiveConversationResponse.js +0 -3
  114. package/dist/generated/codex-app-server/AskForApproval.js +0 -3
  115. package/dist/generated/codex-app-server/AuthMode.js +0 -3
  116. package/dist/generated/codex-app-server/AuthStatusChangeNotification.js +0 -3
  117. package/dist/generated/codex-app-server/BackgroundEventEvent.js +0 -3
  118. package/dist/generated/codex-app-server/ByteRange.js +0 -3
  119. package/dist/generated/codex-app-server/CallToolResult.js +0 -3
  120. package/dist/generated/codex-app-server/CancelLoginChatGptParams.js +0 -3
  121. package/dist/generated/codex-app-server/CancelLoginChatGptResponse.js +0 -3
  122. package/dist/generated/codex-app-server/ClientInfo.js +0 -3
  123. package/dist/generated/codex-app-server/ClientNotification.js +0 -3
  124. package/dist/generated/codex-app-server/ClientRequest.js +0 -3
  125. package/dist/generated/codex-app-server/CodexErrorInfo.js +0 -3
  126. package/dist/generated/codex-app-server/CollabAgentInteractionBeginEvent.js +0 -3
  127. package/dist/generated/codex-app-server/CollabAgentInteractionEndEvent.js +0 -3
  128. package/dist/generated/codex-app-server/CollabAgentSpawnBeginEvent.js +0 -3
  129. package/dist/generated/codex-app-server/CollabAgentSpawnEndEvent.js +0 -3
  130. package/dist/generated/codex-app-server/CollabCloseBeginEvent.js +0 -3
  131. package/dist/generated/codex-app-server/CollabCloseEndEvent.js +0 -3
  132. package/dist/generated/codex-app-server/CollabResumeBeginEvent.js +0 -3
  133. package/dist/generated/codex-app-server/CollabResumeEndEvent.js +0 -3
  134. package/dist/generated/codex-app-server/CollabWaitingBeginEvent.js +0 -3
  135. package/dist/generated/codex-app-server/CollabWaitingEndEvent.js +0 -3
  136. package/dist/generated/codex-app-server/CollaborationMode.js +0 -3
  137. package/dist/generated/codex-app-server/CollaborationModeMask.js +0 -3
  138. package/dist/generated/codex-app-server/ContentItem.js +0 -3
  139. package/dist/generated/codex-app-server/ContextCompactedEvent.js +0 -3
  140. package/dist/generated/codex-app-server/ContextCompactionItem.js +0 -3
  141. package/dist/generated/codex-app-server/ConversationGitInfo.js +0 -3
  142. package/dist/generated/codex-app-server/ConversationSummary.js +0 -3
  143. package/dist/generated/codex-app-server/CreditsSnapshot.js +0 -3
  144. package/dist/generated/codex-app-server/CustomPrompt.js +0 -3
  145. package/dist/generated/codex-app-server/DeprecationNoticeEvent.js +0 -3
  146. package/dist/generated/codex-app-server/DynamicToolCallRequest.js +0 -3
  147. package/dist/generated/codex-app-server/ElicitationRequestEvent.js +0 -3
  148. package/dist/generated/codex-app-server/ErrorEvent.js +0 -3
  149. package/dist/generated/codex-app-server/EventMsg.js +0 -3
  150. package/dist/generated/codex-app-server/ExecApprovalRequestEvent.js +0 -3
  151. package/dist/generated/codex-app-server/ExecCommandApprovalParams.js +0 -3
  152. package/dist/generated/codex-app-server/ExecCommandApprovalResponse.js +0 -3
  153. package/dist/generated/codex-app-server/ExecCommandBeginEvent.js +0 -3
  154. package/dist/generated/codex-app-server/ExecCommandEndEvent.js +0 -3
  155. package/dist/generated/codex-app-server/ExecCommandOutputDeltaEvent.js +0 -3
  156. package/dist/generated/codex-app-server/ExecCommandSource.js +0 -3
  157. package/dist/generated/codex-app-server/ExecCommandStatus.js +0 -3
  158. package/dist/generated/codex-app-server/ExecOneOffCommandParams.js +0 -3
  159. package/dist/generated/codex-app-server/ExecOneOffCommandResponse.js +0 -3
  160. package/dist/generated/codex-app-server/ExecOutputStream.js +0 -3
  161. package/dist/generated/codex-app-server/ExecPolicyAmendment.js +0 -3
  162. package/dist/generated/codex-app-server/ExitedReviewModeEvent.js +0 -3
  163. package/dist/generated/codex-app-server/FileChange.js +0 -3
  164. package/dist/generated/codex-app-server/ForcedLoginMethod.js +0 -3
  165. package/dist/generated/codex-app-server/ForkConversationParams.js +0 -3
  166. package/dist/generated/codex-app-server/ForkConversationResponse.js +0 -3
  167. package/dist/generated/codex-app-server/FunctionCallOutputBody.js +0 -3
  168. package/dist/generated/codex-app-server/FunctionCallOutputContentItem.js +0 -3
  169. package/dist/generated/codex-app-server/FunctionCallOutputPayload.js +0 -3
  170. package/dist/generated/codex-app-server/FuzzyFileSearchParams.js +0 -3
  171. package/dist/generated/codex-app-server/FuzzyFileSearchResponse.js +0 -3
  172. package/dist/generated/codex-app-server/FuzzyFileSearchResult.js +0 -3
  173. package/dist/generated/codex-app-server/FuzzyFileSearchSessionCompletedNotification.js +0 -3
  174. package/dist/generated/codex-app-server/FuzzyFileSearchSessionUpdatedNotification.js +0 -3
  175. package/dist/generated/codex-app-server/GetAuthStatusParams.js +0 -3
  176. package/dist/generated/codex-app-server/GetAuthStatusResponse.js +0 -3
  177. package/dist/generated/codex-app-server/GetConversationSummaryParams.js +0 -3
  178. package/dist/generated/codex-app-server/GetConversationSummaryResponse.js +0 -3
  179. package/dist/generated/codex-app-server/GetHistoryEntryResponseEvent.js +0 -3
  180. package/dist/generated/codex-app-server/GetUserAgentResponse.js +0 -3
  181. package/dist/generated/codex-app-server/GetUserSavedConfigResponse.js +0 -3
  182. package/dist/generated/codex-app-server/GhostCommit.js +0 -3
  183. package/dist/generated/codex-app-server/GitDiffToRemoteParams.js +0 -3
  184. package/dist/generated/codex-app-server/GitDiffToRemoteResponse.js +0 -3
  185. package/dist/generated/codex-app-server/GitSha.js +0 -3
  186. package/dist/generated/codex-app-server/HistoryEntry.js +0 -3
  187. package/dist/generated/codex-app-server/InitializeCapabilities.js +0 -3
  188. package/dist/generated/codex-app-server/InitializeParams.js +0 -3
  189. package/dist/generated/codex-app-server/InitializeResponse.js +0 -3
  190. package/dist/generated/codex-app-server/InputItem.js +0 -3
  191. package/dist/generated/codex-app-server/InputModality.js +0 -3
  192. package/dist/generated/codex-app-server/InterruptConversationParams.js +0 -3
  193. package/dist/generated/codex-app-server/InterruptConversationResponse.js +0 -3
  194. package/dist/generated/codex-app-server/ItemCompletedEvent.js +0 -3
  195. package/dist/generated/codex-app-server/ItemStartedEvent.js +0 -3
  196. package/dist/generated/codex-app-server/ListConversationsParams.js +0 -3
  197. package/dist/generated/codex-app-server/ListConversationsResponse.js +0 -3
  198. package/dist/generated/codex-app-server/ListCustomPromptsResponseEvent.js +0 -3
  199. package/dist/generated/codex-app-server/ListRemoteSkillsResponseEvent.js +0 -3
  200. package/dist/generated/codex-app-server/ListSkillsResponseEvent.js +0 -3
  201. package/dist/generated/codex-app-server/LocalShellAction.js +0 -3
  202. package/dist/generated/codex-app-server/LocalShellExecAction.js +0 -3
  203. package/dist/generated/codex-app-server/LocalShellStatus.js +0 -3
  204. package/dist/generated/codex-app-server/LoginApiKeyParams.js +0 -3
  205. package/dist/generated/codex-app-server/LoginApiKeyResponse.js +0 -3
  206. package/dist/generated/codex-app-server/LoginChatGptCompleteNotification.js +0 -3
  207. package/dist/generated/codex-app-server/LoginChatGptResponse.js +0 -3
  208. package/dist/generated/codex-app-server/LogoutChatGptResponse.js +0 -3
  209. package/dist/generated/codex-app-server/McpAuthStatus.js +0 -3
  210. package/dist/generated/codex-app-server/McpInvocation.js +0 -3
  211. package/dist/generated/codex-app-server/McpListToolsResponseEvent.js +0 -3
  212. package/dist/generated/codex-app-server/McpStartupCompleteEvent.js +0 -3
  213. package/dist/generated/codex-app-server/McpStartupFailure.js +0 -3
  214. package/dist/generated/codex-app-server/McpStartupStatus.js +0 -3
  215. package/dist/generated/codex-app-server/McpStartupUpdateEvent.js +0 -3
  216. package/dist/generated/codex-app-server/McpToolCallBeginEvent.js +0 -3
  217. package/dist/generated/codex-app-server/McpToolCallEndEvent.js +0 -3
  218. package/dist/generated/codex-app-server/MessagePhase.js +0 -3
  219. package/dist/generated/codex-app-server/ModeKind.js +0 -3
  220. package/dist/generated/codex-app-server/ModelRerouteEvent.js +0 -3
  221. package/dist/generated/codex-app-server/ModelRerouteReason.js +0 -3
  222. package/dist/generated/codex-app-server/NetworkAccess.js +0 -3
  223. package/dist/generated/codex-app-server/NetworkApprovalContext.js +0 -3
  224. package/dist/generated/codex-app-server/NetworkApprovalProtocol.js +0 -3
  225. package/dist/generated/codex-app-server/NewConversationParams.js +0 -3
  226. package/dist/generated/codex-app-server/NewConversationResponse.js +0 -3
  227. package/dist/generated/codex-app-server/ParsedCommand.js +0 -3
  228. package/dist/generated/codex-app-server/PatchApplyBeginEvent.js +0 -3
  229. package/dist/generated/codex-app-server/PatchApplyEndEvent.js +0 -3
  230. package/dist/generated/codex-app-server/PatchApplyStatus.js +0 -3
  231. package/dist/generated/codex-app-server/Personality.js +0 -3
  232. package/dist/generated/codex-app-server/PlanDeltaEvent.js +0 -3
  233. package/dist/generated/codex-app-server/PlanItem.js +0 -3
  234. package/dist/generated/codex-app-server/PlanItemArg.js +0 -3
  235. package/dist/generated/codex-app-server/PlanType.js +0 -3
  236. package/dist/generated/codex-app-server/Profile.js +0 -3
  237. package/dist/generated/codex-app-server/RateLimitSnapshot.js +0 -3
  238. package/dist/generated/codex-app-server/RateLimitWindow.js +0 -3
  239. package/dist/generated/codex-app-server/RawResponseItemEvent.js +0 -3
  240. package/dist/generated/codex-app-server/ReadOnlyAccess.js +0 -3
  241. package/dist/generated/codex-app-server/ReasoningContentDeltaEvent.js +0 -3
  242. package/dist/generated/codex-app-server/ReasoningEffort.js +0 -3
  243. package/dist/generated/codex-app-server/ReasoningItem.js +0 -3
  244. package/dist/generated/codex-app-server/ReasoningItemContent.js +0 -3
  245. package/dist/generated/codex-app-server/ReasoningItemReasoningSummary.js +0 -3
  246. package/dist/generated/codex-app-server/ReasoningRawContentDeltaEvent.js +0 -3
  247. package/dist/generated/codex-app-server/ReasoningSummary.js +0 -3
  248. package/dist/generated/codex-app-server/RemoteSkillDownloadedEvent.js +0 -3
  249. package/dist/generated/codex-app-server/RemoteSkillSummary.js +0 -3
  250. package/dist/generated/codex-app-server/RemoveConversationListenerParams.js +0 -3
  251. package/dist/generated/codex-app-server/RemoveConversationSubscriptionResponse.js +0 -3
  252. package/dist/generated/codex-app-server/RequestId.js +0 -3
  253. package/dist/generated/codex-app-server/RequestUserInputEvent.js +0 -3
  254. package/dist/generated/codex-app-server/RequestUserInputQuestion.js +0 -3
  255. package/dist/generated/codex-app-server/RequestUserInputQuestionOption.js +0 -3
  256. package/dist/generated/codex-app-server/Resource.js +0 -3
  257. package/dist/generated/codex-app-server/ResourceTemplate.js +0 -3
  258. package/dist/generated/codex-app-server/ResponseItem.js +0 -3
  259. package/dist/generated/codex-app-server/ResumeConversationParams.js +0 -3
  260. package/dist/generated/codex-app-server/ResumeConversationResponse.js +0 -3
  261. package/dist/generated/codex-app-server/ReviewCodeLocation.js +0 -3
  262. package/dist/generated/codex-app-server/ReviewDecision.js +0 -3
  263. package/dist/generated/codex-app-server/ReviewFinding.js +0 -3
  264. package/dist/generated/codex-app-server/ReviewLineRange.js +0 -3
  265. package/dist/generated/codex-app-server/ReviewOutputEvent.js +0 -3
  266. package/dist/generated/codex-app-server/ReviewRequest.js +0 -3
  267. package/dist/generated/codex-app-server/ReviewTarget.js +0 -3
  268. package/dist/generated/codex-app-server/SandboxMode.js +0 -3
  269. package/dist/generated/codex-app-server/SandboxPolicy.js +0 -3
  270. package/dist/generated/codex-app-server/SandboxSettings.js +0 -3
  271. package/dist/generated/codex-app-server/SendUserMessageParams.js +0 -3
  272. package/dist/generated/codex-app-server/SendUserMessageResponse.js +0 -3
  273. package/dist/generated/codex-app-server/SendUserTurnParams.js +0 -3
  274. package/dist/generated/codex-app-server/SendUserTurnResponse.js +0 -3
  275. package/dist/generated/codex-app-server/ServerNotification.js +0 -3
  276. package/dist/generated/codex-app-server/ServerRequest.js +0 -3
  277. package/dist/generated/codex-app-server/SessionConfiguredEvent.js +0 -3
  278. package/dist/generated/codex-app-server/SessionConfiguredNotification.js +0 -3
  279. package/dist/generated/codex-app-server/SessionNetworkProxyRuntime.js +0 -3
  280. package/dist/generated/codex-app-server/SessionSource.js +0 -3
  281. package/dist/generated/codex-app-server/SetDefaultModelParams.js +0 -3
  282. package/dist/generated/codex-app-server/SetDefaultModelResponse.js +0 -3
  283. package/dist/generated/codex-app-server/Settings.js +0 -3
  284. package/dist/generated/codex-app-server/SkillDependencies.js +0 -3
  285. package/dist/generated/codex-app-server/SkillErrorInfo.js +0 -3
  286. package/dist/generated/codex-app-server/SkillInterface.js +0 -3
  287. package/dist/generated/codex-app-server/SkillMetadata.js +0 -3
  288. package/dist/generated/codex-app-server/SkillScope.js +0 -3
  289. package/dist/generated/codex-app-server/SkillToolDependency.js +0 -3
  290. package/dist/generated/codex-app-server/SkillsListEntry.js +0 -3
  291. package/dist/generated/codex-app-server/StepStatus.js +0 -3
  292. package/dist/generated/codex-app-server/StreamErrorEvent.js +0 -3
  293. package/dist/generated/codex-app-server/SubAgentSource.js +0 -3
  294. package/dist/generated/codex-app-server/TerminalInteractionEvent.js +0 -3
  295. package/dist/generated/codex-app-server/TextElement.js +0 -3
  296. package/dist/generated/codex-app-server/ThreadId.js +0 -3
  297. package/dist/generated/codex-app-server/ThreadNameUpdatedEvent.js +0 -3
  298. package/dist/generated/codex-app-server/ThreadRolledBackEvent.js +0 -3
  299. package/dist/generated/codex-app-server/TokenCountEvent.js +0 -3
  300. package/dist/generated/codex-app-server/TokenUsage.js +0 -3
  301. package/dist/generated/codex-app-server/TokenUsageInfo.js +0 -3
  302. package/dist/generated/codex-app-server/Tool.js +0 -3
  303. package/dist/generated/codex-app-server/Tools.js +0 -3
  304. package/dist/generated/codex-app-server/TurnAbortReason.js +0 -3
  305. package/dist/generated/codex-app-server/TurnAbortedEvent.js +0 -3
  306. package/dist/generated/codex-app-server/TurnCompleteEvent.js +0 -3
  307. package/dist/generated/codex-app-server/TurnDiffEvent.js +0 -3
  308. package/dist/generated/codex-app-server/TurnItem.js +0 -3
  309. package/dist/generated/codex-app-server/TurnStartedEvent.js +0 -3
  310. package/dist/generated/codex-app-server/UndoCompletedEvent.js +0 -3
  311. package/dist/generated/codex-app-server/UndoStartedEvent.js +0 -3
  312. package/dist/generated/codex-app-server/UpdatePlanArgs.js +0 -3
  313. package/dist/generated/codex-app-server/UserInfoResponse.js +0 -3
  314. package/dist/generated/codex-app-server/UserInput.js +0 -3
  315. package/dist/generated/codex-app-server/UserMessageEvent.js +0 -3
  316. package/dist/generated/codex-app-server/UserMessageItem.js +0 -3
  317. package/dist/generated/codex-app-server/UserSavedConfig.js +0 -3
  318. package/dist/generated/codex-app-server/Verbosity.js +0 -3
  319. package/dist/generated/codex-app-server/ViewImageToolCallEvent.js +0 -3
  320. package/dist/generated/codex-app-server/WarningEvent.js +0 -3
  321. package/dist/generated/codex-app-server/WebSearchAction.js +0 -3
  322. package/dist/generated/codex-app-server/WebSearchBeginEvent.js +0 -3
  323. package/dist/generated/codex-app-server/WebSearchEndEvent.js +0 -3
  324. package/dist/generated/codex-app-server/WebSearchItem.js +0 -3
  325. package/dist/generated/codex-app-server/WebSearchMode.js +0 -3
  326. package/dist/generated/codex-app-server/index.js +0 -38
  327. package/dist/generated/codex-app-server/serde_json/JsonValue.js +0 -3
  328. package/dist/generated/codex-app-server/v2/Account.js +0 -3
  329. package/dist/generated/codex-app-server/v2/AccountLoginCompletedNotification.js +0 -3
  330. package/dist/generated/codex-app-server/v2/AccountRateLimitsUpdatedNotification.js +0 -3
  331. package/dist/generated/codex-app-server/v2/AccountUpdatedNotification.js +0 -3
  332. package/dist/generated/codex-app-server/v2/AgentMessageDeltaNotification.js +0 -3
  333. package/dist/generated/codex-app-server/v2/AnalyticsConfig.js +0 -3
  334. package/dist/generated/codex-app-server/v2/AppBranding.js +0 -3
  335. package/dist/generated/codex-app-server/v2/AppDisabledReason.js +0 -3
  336. package/dist/generated/codex-app-server/v2/AppInfo.js +0 -3
  337. package/dist/generated/codex-app-server/v2/AppListUpdatedNotification.js +0 -3
  338. package/dist/generated/codex-app-server/v2/AppMetadata.js +0 -3
  339. package/dist/generated/codex-app-server/v2/AppReview.js +0 -3
  340. package/dist/generated/codex-app-server/v2/AppScreenshot.js +0 -3
  341. package/dist/generated/codex-app-server/v2/AppsConfig.js +0 -3
  342. package/dist/generated/codex-app-server/v2/AppsListParams.js +0 -3
  343. package/dist/generated/codex-app-server/v2/AppsListResponse.js +0 -3
  344. package/dist/generated/codex-app-server/v2/AskForApproval.js +0 -3
  345. package/dist/generated/codex-app-server/v2/ByteRange.js +0 -3
  346. package/dist/generated/codex-app-server/v2/CancelLoginAccountParams.js +0 -3
  347. package/dist/generated/codex-app-server/v2/CancelLoginAccountResponse.js +0 -3
  348. package/dist/generated/codex-app-server/v2/CancelLoginAccountStatus.js +0 -3
  349. package/dist/generated/codex-app-server/v2/ChatgptAuthTokensRefreshParams.js +0 -3
  350. package/dist/generated/codex-app-server/v2/ChatgptAuthTokensRefreshReason.js +0 -3
  351. package/dist/generated/codex-app-server/v2/ChatgptAuthTokensRefreshResponse.js +0 -3
  352. package/dist/generated/codex-app-server/v2/CodexErrorInfo.js +0 -3
  353. package/dist/generated/codex-app-server/v2/CollabAgentState.js +0 -3
  354. package/dist/generated/codex-app-server/v2/CollabAgentStatus.js +0 -3
  355. package/dist/generated/codex-app-server/v2/CollabAgentTool.js +0 -3
  356. package/dist/generated/codex-app-server/v2/CollabAgentToolCallStatus.js +0 -3
  357. package/dist/generated/codex-app-server/v2/CommandAction.js +0 -3
  358. package/dist/generated/codex-app-server/v2/CommandExecParams.js +0 -3
  359. package/dist/generated/codex-app-server/v2/CommandExecResponse.js +0 -3
  360. package/dist/generated/codex-app-server/v2/CommandExecutionApprovalDecision.js +0 -3
  361. package/dist/generated/codex-app-server/v2/CommandExecutionOutputDeltaNotification.js +0 -3
  362. package/dist/generated/codex-app-server/v2/CommandExecutionRequestApprovalParams.js +0 -3
  363. package/dist/generated/codex-app-server/v2/CommandExecutionRequestApprovalResponse.js +0 -3
  364. package/dist/generated/codex-app-server/v2/CommandExecutionStatus.js +0 -3
  365. package/dist/generated/codex-app-server/v2/Config.js +0 -3
  366. package/dist/generated/codex-app-server/v2/ConfigBatchWriteParams.js +0 -3
  367. package/dist/generated/codex-app-server/v2/ConfigEdit.js +0 -3
  368. package/dist/generated/codex-app-server/v2/ConfigLayer.js +0 -3
  369. package/dist/generated/codex-app-server/v2/ConfigLayerMetadata.js +0 -3
  370. package/dist/generated/codex-app-server/v2/ConfigLayerSource.js +0 -3
  371. package/dist/generated/codex-app-server/v2/ConfigReadParams.js +0 -3
  372. package/dist/generated/codex-app-server/v2/ConfigReadResponse.js +0 -3
  373. package/dist/generated/codex-app-server/v2/ConfigRequirements.js +0 -3
  374. package/dist/generated/codex-app-server/v2/ConfigRequirementsReadResponse.js +0 -3
  375. package/dist/generated/codex-app-server/v2/ConfigValueWriteParams.js +0 -3
  376. package/dist/generated/codex-app-server/v2/ConfigWarningNotification.js +0 -3
  377. package/dist/generated/codex-app-server/v2/ConfigWriteResponse.js +0 -3
  378. package/dist/generated/codex-app-server/v2/ContextCompactedNotification.js +0 -3
  379. package/dist/generated/codex-app-server/v2/CreditsSnapshot.js +0 -3
  380. package/dist/generated/codex-app-server/v2/DeprecationNoticeNotification.js +0 -3
  381. package/dist/generated/codex-app-server/v2/DynamicToolCallOutputContentItem.js +0 -3
  382. package/dist/generated/codex-app-server/v2/DynamicToolCallParams.js +0 -3
  383. package/dist/generated/codex-app-server/v2/DynamicToolCallResponse.js +0 -3
  384. package/dist/generated/codex-app-server/v2/DynamicToolSpec.js +0 -3
  385. package/dist/generated/codex-app-server/v2/ErrorNotification.js +0 -3
  386. package/dist/generated/codex-app-server/v2/ExecPolicyAmendment.js +0 -3
  387. package/dist/generated/codex-app-server/v2/ExperimentalFeature.js +0 -3
  388. package/dist/generated/codex-app-server/v2/ExperimentalFeatureListParams.js +0 -3
  389. package/dist/generated/codex-app-server/v2/ExperimentalFeatureListResponse.js +0 -3
  390. package/dist/generated/codex-app-server/v2/ExperimentalFeatureStage.js +0 -3
  391. package/dist/generated/codex-app-server/v2/FeedbackUploadParams.js +0 -3
  392. package/dist/generated/codex-app-server/v2/FeedbackUploadResponse.js +0 -3
  393. package/dist/generated/codex-app-server/v2/FileChangeApprovalDecision.js +0 -3
  394. package/dist/generated/codex-app-server/v2/FileChangeOutputDeltaNotification.js +0 -3
  395. package/dist/generated/codex-app-server/v2/FileChangeRequestApprovalParams.js +0 -3
  396. package/dist/generated/codex-app-server/v2/FileChangeRequestApprovalResponse.js +0 -3
  397. package/dist/generated/codex-app-server/v2/FileUpdateChange.js +0 -3
  398. package/dist/generated/codex-app-server/v2/GetAccountParams.js +0 -3
  399. package/dist/generated/codex-app-server/v2/GetAccountRateLimitsResponse.js +0 -3
  400. package/dist/generated/codex-app-server/v2/GetAccountResponse.js +0 -3
  401. package/dist/generated/codex-app-server/v2/GitInfo.js +0 -3
  402. package/dist/generated/codex-app-server/v2/HazelnutScope.js +0 -3
  403. package/dist/generated/codex-app-server/v2/ItemCompletedNotification.js +0 -3
  404. package/dist/generated/codex-app-server/v2/ItemStartedNotification.js +0 -3
  405. package/dist/generated/codex-app-server/v2/ListMcpServerStatusParams.js +0 -3
  406. package/dist/generated/codex-app-server/v2/ListMcpServerStatusResponse.js +0 -3
  407. package/dist/generated/codex-app-server/v2/LoginAccountParams.js +0 -3
  408. package/dist/generated/codex-app-server/v2/LoginAccountResponse.js +0 -3
  409. package/dist/generated/codex-app-server/v2/LogoutAccountResponse.js +0 -3
  410. package/dist/generated/codex-app-server/v2/McpAuthStatus.js +0 -3
  411. package/dist/generated/codex-app-server/v2/McpServerOauthLoginCompletedNotification.js +0 -3
  412. package/dist/generated/codex-app-server/v2/McpServerOauthLoginParams.js +0 -3
  413. package/dist/generated/codex-app-server/v2/McpServerOauthLoginResponse.js +0 -3
  414. package/dist/generated/codex-app-server/v2/McpServerRefreshResponse.js +0 -3
  415. package/dist/generated/codex-app-server/v2/McpServerStatus.js +0 -3
  416. package/dist/generated/codex-app-server/v2/McpToolCallError.js +0 -3
  417. package/dist/generated/codex-app-server/v2/McpToolCallProgressNotification.js +0 -3
  418. package/dist/generated/codex-app-server/v2/McpToolCallResult.js +0 -3
  419. package/dist/generated/codex-app-server/v2/McpToolCallStatus.js +0 -3
  420. package/dist/generated/codex-app-server/v2/MergeStrategy.js +0 -3
  421. package/dist/generated/codex-app-server/v2/Model.js +0 -3
  422. package/dist/generated/codex-app-server/v2/ModelListParams.js +0 -3
  423. package/dist/generated/codex-app-server/v2/ModelListResponse.js +0 -3
  424. package/dist/generated/codex-app-server/v2/ModelRerouteReason.js +0 -3
  425. package/dist/generated/codex-app-server/v2/ModelReroutedNotification.js +0 -3
  426. package/dist/generated/codex-app-server/v2/NetworkAccess.js +0 -3
  427. package/dist/generated/codex-app-server/v2/NetworkRequirements.js +0 -3
  428. package/dist/generated/codex-app-server/v2/OverriddenMetadata.js +0 -3
  429. package/dist/generated/codex-app-server/v2/PatchApplyStatus.js +0 -3
  430. package/dist/generated/codex-app-server/v2/PatchChangeKind.js +0 -3
  431. package/dist/generated/codex-app-server/v2/PlanDeltaNotification.js +0 -3
  432. package/dist/generated/codex-app-server/v2/ProductSurface.js +0 -3
  433. package/dist/generated/codex-app-server/v2/ProfileV2.js +0 -3
  434. package/dist/generated/codex-app-server/v2/RateLimitSnapshot.js +0 -3
  435. package/dist/generated/codex-app-server/v2/RateLimitWindow.js +0 -3
  436. package/dist/generated/codex-app-server/v2/RawResponseItemCompletedNotification.js +0 -3
  437. package/dist/generated/codex-app-server/v2/ReadOnlyAccess.js +0 -3
  438. package/dist/generated/codex-app-server/v2/ReasoningEffortOption.js +0 -3
  439. package/dist/generated/codex-app-server/v2/ReasoningSummaryPartAddedNotification.js +0 -3
  440. package/dist/generated/codex-app-server/v2/ReasoningSummaryTextDeltaNotification.js +0 -3
  441. package/dist/generated/codex-app-server/v2/ReasoningTextDeltaNotification.js +0 -3
  442. package/dist/generated/codex-app-server/v2/RemoteSkillSummary.js +0 -3
  443. package/dist/generated/codex-app-server/v2/ResidencyRequirement.js +0 -3
  444. package/dist/generated/codex-app-server/v2/ReviewDelivery.js +0 -3
  445. package/dist/generated/codex-app-server/v2/ReviewStartParams.js +0 -3
  446. package/dist/generated/codex-app-server/v2/ReviewStartResponse.js +0 -3
  447. package/dist/generated/codex-app-server/v2/ReviewTarget.js +0 -3
  448. package/dist/generated/codex-app-server/v2/SandboxMode.js +0 -3
  449. package/dist/generated/codex-app-server/v2/SandboxPolicy.js +0 -3
  450. package/dist/generated/codex-app-server/v2/SandboxWorkspaceWrite.js +0 -3
  451. package/dist/generated/codex-app-server/v2/SessionSource.js +0 -3
  452. package/dist/generated/codex-app-server/v2/SkillDependencies.js +0 -3
  453. package/dist/generated/codex-app-server/v2/SkillErrorInfo.js +0 -3
  454. package/dist/generated/codex-app-server/v2/SkillInterface.js +0 -3
  455. package/dist/generated/codex-app-server/v2/SkillMetadata.js +0 -3
  456. package/dist/generated/codex-app-server/v2/SkillScope.js +0 -3
  457. package/dist/generated/codex-app-server/v2/SkillToolDependency.js +0 -3
  458. package/dist/generated/codex-app-server/v2/SkillsConfigWriteParams.js +0 -3
  459. package/dist/generated/codex-app-server/v2/SkillsConfigWriteResponse.js +0 -3
  460. package/dist/generated/codex-app-server/v2/SkillsListEntry.js +0 -3
  461. package/dist/generated/codex-app-server/v2/SkillsListExtraRootsForCwd.js +0 -3
  462. package/dist/generated/codex-app-server/v2/SkillsListParams.js +0 -3
  463. package/dist/generated/codex-app-server/v2/SkillsListResponse.js +0 -3
  464. package/dist/generated/codex-app-server/v2/SkillsRemoteReadParams.js +0 -3
  465. package/dist/generated/codex-app-server/v2/SkillsRemoteReadResponse.js +0 -3
  466. package/dist/generated/codex-app-server/v2/SkillsRemoteWriteParams.js +0 -3
  467. package/dist/generated/codex-app-server/v2/SkillsRemoteWriteResponse.js +0 -3
  468. package/dist/generated/codex-app-server/v2/TerminalInteractionNotification.js +0 -3
  469. package/dist/generated/codex-app-server/v2/TextElement.js +0 -3
  470. package/dist/generated/codex-app-server/v2/TextPosition.js +0 -3
  471. package/dist/generated/codex-app-server/v2/TextRange.js +0 -3
  472. package/dist/generated/codex-app-server/v2/Thread.js +0 -3
  473. package/dist/generated/codex-app-server/v2/ThreadArchiveParams.js +0 -3
  474. package/dist/generated/codex-app-server/v2/ThreadArchiveResponse.js +0 -3
  475. package/dist/generated/codex-app-server/v2/ThreadArchivedNotification.js +0 -3
  476. package/dist/generated/codex-app-server/v2/ThreadCompactStartParams.js +0 -3
  477. package/dist/generated/codex-app-server/v2/ThreadCompactStartResponse.js +0 -3
  478. package/dist/generated/codex-app-server/v2/ThreadForkParams.js +0 -3
  479. package/dist/generated/codex-app-server/v2/ThreadForkResponse.js +0 -3
  480. package/dist/generated/codex-app-server/v2/ThreadItem.js +0 -3
  481. package/dist/generated/codex-app-server/v2/ThreadListParams.js +0 -3
  482. package/dist/generated/codex-app-server/v2/ThreadListResponse.js +0 -3
  483. package/dist/generated/codex-app-server/v2/ThreadLoadedListParams.js +0 -3
  484. package/dist/generated/codex-app-server/v2/ThreadLoadedListResponse.js +0 -3
  485. package/dist/generated/codex-app-server/v2/ThreadNameUpdatedNotification.js +0 -3
  486. package/dist/generated/codex-app-server/v2/ThreadReadParams.js +0 -3
  487. package/dist/generated/codex-app-server/v2/ThreadReadResponse.js +0 -3
  488. package/dist/generated/codex-app-server/v2/ThreadResumeParams.js +0 -3
  489. package/dist/generated/codex-app-server/v2/ThreadResumeResponse.js +0 -3
  490. package/dist/generated/codex-app-server/v2/ThreadRollbackParams.js +0 -3
  491. package/dist/generated/codex-app-server/v2/ThreadRollbackResponse.js +0 -3
  492. package/dist/generated/codex-app-server/v2/ThreadSetNameParams.js +0 -3
  493. package/dist/generated/codex-app-server/v2/ThreadSetNameResponse.js +0 -3
  494. package/dist/generated/codex-app-server/v2/ThreadSortKey.js +0 -3
  495. package/dist/generated/codex-app-server/v2/ThreadSourceKind.js +0 -3
  496. package/dist/generated/codex-app-server/v2/ThreadStartParams.js +0 -3
  497. package/dist/generated/codex-app-server/v2/ThreadStartResponse.js +0 -3
  498. package/dist/generated/codex-app-server/v2/ThreadStartedNotification.js +0 -3
  499. package/dist/generated/codex-app-server/v2/ThreadTokenUsage.js +0 -3
  500. package/dist/generated/codex-app-server/v2/ThreadTokenUsageUpdatedNotification.js +0 -3
  501. package/dist/generated/codex-app-server/v2/ThreadUnarchiveParams.js +0 -3
  502. package/dist/generated/codex-app-server/v2/ThreadUnarchiveResponse.js +0 -3
  503. package/dist/generated/codex-app-server/v2/ThreadUnarchivedNotification.js +0 -3
  504. package/dist/generated/codex-app-server/v2/TokenUsageBreakdown.js +0 -3
  505. package/dist/generated/codex-app-server/v2/ToolRequestUserInputAnswer.js +0 -3
  506. package/dist/generated/codex-app-server/v2/ToolRequestUserInputOption.js +0 -3
  507. package/dist/generated/codex-app-server/v2/ToolRequestUserInputParams.js +0 -3
  508. package/dist/generated/codex-app-server/v2/ToolRequestUserInputQuestion.js +0 -3
  509. package/dist/generated/codex-app-server/v2/ToolRequestUserInputResponse.js +0 -3
  510. package/dist/generated/codex-app-server/v2/ToolsV2.js +0 -3
  511. package/dist/generated/codex-app-server/v2/Turn.js +0 -3
  512. package/dist/generated/codex-app-server/v2/TurnCompletedNotification.js +0 -3
  513. package/dist/generated/codex-app-server/v2/TurnDiffUpdatedNotification.js +0 -3
  514. package/dist/generated/codex-app-server/v2/TurnError.js +0 -3
  515. package/dist/generated/codex-app-server/v2/TurnInterruptParams.js +0 -3
  516. package/dist/generated/codex-app-server/v2/TurnInterruptResponse.js +0 -3
  517. package/dist/generated/codex-app-server/v2/TurnPlanStep.js +0 -3
  518. package/dist/generated/codex-app-server/v2/TurnPlanStepStatus.js +0 -3
  519. package/dist/generated/codex-app-server/v2/TurnPlanUpdatedNotification.js +0 -3
  520. package/dist/generated/codex-app-server/v2/TurnStartParams.js +0 -3
  521. package/dist/generated/codex-app-server/v2/TurnStartResponse.js +0 -3
  522. package/dist/generated/codex-app-server/v2/TurnStartedNotification.js +0 -3
  523. package/dist/generated/codex-app-server/v2/TurnStatus.js +0 -3
  524. package/dist/generated/codex-app-server/v2/TurnSteerParams.js +0 -3
  525. package/dist/generated/codex-app-server/v2/TurnSteerResponse.js +0 -3
  526. package/dist/generated/codex-app-server/v2/UserInput.js +0 -3
  527. package/dist/generated/codex-app-server/v2/WebSearchAction.js +0 -3
  528. package/dist/generated/codex-app-server/v2/WindowsWorldWritableWarningNotification.js +0 -3
  529. package/dist/generated/codex-app-server/v2/WriteStatus.js +0 -3
  530. package/dist/generated/codex-app-server/v2/index.js +0 -3
  531. package/dist/service/app_server.js +0 -441
  532. package/dist/service/buffered_client_message_sender.js +0 -89
  533. package/dist/service/companyhelm_api_client.js +0 -337
  534. package/dist/service/docker/app_server_container.js +0 -319
  535. package/dist/service/docker/dind.js +0 -114
  536. package/dist/service/docker/runtime_app_server_exec.js +0 -97
  537. package/dist/service/host.js +0 -15
  538. package/dist/service/runtime_bashrc.js +0 -57
  539. package/dist/service/runtime_shell.js +0 -23
  540. package/dist/service/sdk/refresh_models.js +0 -91
  541. package/dist/service/thread_lifecycle.js +0 -681
  542. package/dist/service/thread_runtime.js +0 -15
  543. package/dist/service/thread_turn_state.js +0 -46
  544. package/dist/service/thread_user_message_request_store.js +0 -136
  545. package/dist/service/workspace_agents.js +0 -82
  546. package/dist/state/daemon_state.js +0 -83
  547. package/dist/state/db.js +0 -63
  548. package/dist/state/schema.js +0 -59
  549. package/dist/templates/app_server_bootstrap.sh.j2 +0 -52
  550. package/dist/templates/runtime_agents.md.j2 +0 -50
  551. package/dist/templates/runtime_bashrc.j2 +0 -19
  552. package/dist/utils/async_queue.js +0 -102
  553. package/dist/utils/daemon.js +0 -15
  554. package/dist/utils/logger.js +0 -96
  555. package/dist/utils/path.js +0 -10
  556. package/dist/utils/process.js +0 -83
  557. package/dist/utils/terminal.js +0 -34
  558. package/drizzle/0000_nice_stepford_cuckoos.sql +0 -25
  559. package/drizzle/0001_third_vermin.sql +0 -22
  560. package/drizzle/0002_kind_sue_storm.sql +0 -1
  561. package/drizzle/0003_dizzy_micromax.sql +0 -35
  562. package/drizzle/0004_sloppy_alex_wilder.sql +0 -23
  563. package/drizzle/0005_open_toro.sql +0 -23
  564. package/drizzle/0006_fixed_jack_flag.sql +0 -23
  565. package/drizzle/0007_mute_lord_tyger.sql +0 -1
  566. package/drizzle/0008_melted_flatman.sql +0 -8
  567. package/drizzle/0009_powerful_hellcat.sql +0 -1
  568. package/drizzle/0010_wealthy_dorian_gray.sql +0 -24
  569. package/drizzle/0011_actual_lucky.sql +0 -7
  570. package/drizzle/meta/0000_snapshot.json +0 -174
  571. package/drizzle/meta/0001_snapshot.json +0 -212
  572. package/drizzle/meta/0002_snapshot.json +0 -219
  573. package/drizzle/meta/0003_snapshot.json +0 -240
  574. package/drizzle/meta/0004_snapshot.json +0 -240
  575. package/drizzle/meta/0005_snapshot.json +0 -240
  576. package/drizzle/meta/0006_snapshot.json +0 -240
  577. package/drizzle/meta/0007_snapshot.json +0 -247
  578. package/drizzle/meta/0008_snapshot.json +0 -306
  579. package/drizzle/meta/0009_snapshot.json +0 -313
  580. package/drizzle/meta/0010_snapshot.json +0 -261
  581. package/drizzle/meta/_journal.json +0 -90
package/README.md CHANGED
@@ -1,58 +1,61 @@
1
- # CompanyHelm CLI
1
+ # CompanyHelm - Distributed AI Agent Orchestration
2
2
 
3
- Run coding agents in isolated Docker sandboxes on your machine.
3
+ CompanyHelm is an open-source control plane for running AI-agent companies in your own infrastructure.
4
+ It gives teams a way to organize agents by role, keep humans in the loop for approvals and clarification, and run agent workloads in isolated environments instead of opaque hosted black boxes. Each agent can run its own app infrastructure for testing and create PRs autonomously. Spin up container-isolated agent threads with a click.
4
5
 
5
- ## Install
6
+ [Website](https://www.companyhelm.com/)
6
7
 
7
- ```bash
8
- npm install -g @companyhelm/cli
9
- ```
8
+ ## Quick start
10
9
 
11
- Or run it without installing globally:
10
+ Dependecies:
11
+ - Docker
12
+ - Node.js `>=24`
13
+ - Codex subscription or api key
14
+ - Github account
12
15
 
13
16
  ```bash
14
- npx @companyhelm/cli --help
17
+ npx @companyhelm/cli up
15
18
  ```
16
19
 
17
- Package: [@companyhelm/cli](https://www.npmjs.com/package/@companyhelm/cli)
18
-
19
- ## Basic Usage
20
+ After startup, the CLI prints:
20
21
 
21
- Start the CLI in the foreground:
22
+ - the local dashboard UI URL
23
+ - the generated username and password
22
24
 
23
- ```bash
24
- companyhelm-runner
25
- ```
25
+ ## What CompanyHelm is
26
26
 
27
- Start it as a daemon:
28
-
29
- ```bash
30
- companyhelm-runner --daemon
31
- ```
27
+ From the product perspective, CompanyHelm is built around a few core ideas:
32
28
 
33
- Check whether the daemon is running:
29
+ - Your infrastructure, not a vendor-controlled runtime
30
+ - Model-agnostic agent execution through open runners and protocols
31
+ - Easy agent customization: add skills, MCP servers, and custom instructions to agents from the UI
32
+ - Human-in-the-loop workflows: tasks can be steered at any moment through the built-in chat; approvals and questions are still a work in progress
33
+ - Isolated execution so agents can work in parallel with minimal interference. Each runner can spin up the full app infrastructure within Docker and test in isolation
34
+ - YOLO mode by default: agents run commands without pausing for trivial confirmations
35
+ - Remote repository as the source of truth: agents clone the repo and submit PRs automatically
36
+ - Parallel task execution: multiple agents can execute tasks independently in isolated environments
34
37
 
35
- ```bash
36
- companyhelm-runner status
37
- ```
38
+ ## What the CLI boots locally
38
39
 
39
- The `status` command prints:
40
+ `npx @companyhelm/cli up` brings up a local CompanyHelm stack with:
40
41
 
41
- - whether the daemon is running
42
- - the recorded daemon PID
43
- - the daemon log directory and log file path
42
+ - CompanyHelm API
43
+ - Postgres
44
+ - CompanyHelm frontend
45
+ - CompanyHelm agent runner
44
46
 
45
- ## Why Use It
46
47
 
47
- - Runs agents in isolated containers instead of directly on your machine
48
- - Supports Docker-in-Docker for end-to-end workflows
49
- - Keeps runner state in a local SQLite database
50
- - Supports long-running daemon mode for background operation
48
+ ## Command reference
51
49
 
52
- ## For Developers
50
+ For the full CLI help:
53
51
 
54
- Development and maintenance notes live in [DEVELOPING.md](./DEVELOPING.md).
52
+ ```bash
53
+ npx @companyhelm/cli --help
54
+ ```
55
55
 
56
- ## License
56
+ Common commands:
57
57
 
58
- MIT
58
+ ```bash
59
+ npx @companyhelm/cli logs {service]
60
+ npx @companyhelm/cli reset
61
+ ```
package/dist/cli.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare function main(argv?: string[]): Promise<void>;
package/dist/cli.js CHANGED
@@ -1,57 +1,18 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- const node_fs_1 = require("node:fs");
5
- const node_path_1 = require("node:path");
6
- const commander_1 = require("commander");
7
- const global_options_js_1 = require("./commands/global-options.js");
8
- const register_commands_js_1 = require("./commands/register-commands.js");
9
- function getVersion() {
1
+ import { buildProgram } from "./commands/register-commands.js";
2
+ import { InteractiveCommandCancelledError } from "./commands/interactive.js";
3
+ export async function main(argv = process.argv) {
4
+ const program = buildProgram();
10
5
  try {
11
- const pkgPath = (0, node_path_1.join)(__dirname, "..", "package.json");
12
- const pkg = JSON.parse((0, node_fs_1.readFileSync)(pkgPath, "utf8"));
13
- return pkg.version ?? "0.0.0";
14
- }
15
- catch {
16
- return "0.0.0";
17
- }
18
- }
19
- const program = new commander_1.Command();
20
- program
21
- .name("companyhelm")
22
- .description("Run coding agents in fully isolated Docker sandboxes, locally.")
23
- .version(getVersion());
24
- (0, global_options_js_1.addGlobalOptions)(program);
25
- (0, register_commands_js_1.registerCommands)(program);
26
- program.hook("preAction", (_thisCommand, actionCommand) => {
27
- (0, global_options_js_1.applyGlobalOptionEnvironment)(actionCommand);
28
- });
29
- function formatCliError(error) {
30
- if (error instanceof commander_1.CommanderError) {
31
- return {
32
- message: error.message,
33
- exitCode: error.exitCode,
34
- };
35
- }
36
- if (error instanceof Error) {
37
- return {
38
- message: error.message,
39
- exitCode: 1,
40
- };
41
- }
42
- return {
43
- message: String(error),
44
- exitCode: 1,
45
- };
46
- }
47
- async function main() {
48
- try {
49
- await program.parseAsync(process.argv);
6
+ await program.parseAsync(argv);
50
7
  }
51
8
  catch (error) {
52
- const { message, exitCode } = formatCliError(error);
53
- process.stderr.write(`${message}\n`);
54
- process.exitCode = exitCode;
9
+ if (error instanceof InteractiveCommandCancelledError) {
10
+ process.exitCode = 1;
11
+ return;
12
+ }
13
+ throw error;
55
14
  }
56
15
  }
57
- void main();
16
+ if (import.meta.url === `file://${process.argv[1]}`) {
17
+ void main();
18
+ }
@@ -0,0 +1,24 @@
1
+ import { type RuntimeVersions } from "../core/runtime/VersionCatalog.js";
2
+ import { type StatusSnapshot } from "../core/status/StatusService.js";
3
+ export type LogLevel = "debug" | "info" | "warn" | "error";
4
+ export interface UpOptions {
5
+ logLevel?: LogLevel;
6
+ }
7
+ export interface ResetOptions {
8
+ removeGithubAppConfig?: boolean;
9
+ }
10
+ export interface StatusReport {
11
+ services: StatusSnapshot;
12
+ apiUrl?: string;
13
+ uiUrl?: string;
14
+ username?: string;
15
+ versions?: RuntimeVersions;
16
+ }
17
+ export interface CommandDependencies {
18
+ up(options?: UpOptions): Promise<void>;
19
+ down(): Promise<void>;
20
+ status(): Promise<StatusReport>;
21
+ logs(service: string): Promise<void>;
22
+ reset(options?: ResetOptions): Promise<void>;
23
+ }
24
+ export declare function createDefaultDependencies(): CommandDependencies;
@@ -0,0 +1,145 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { DeploymentBootstrapper } from "../core/bootstrap/DeploymentBootstrapper.js";
5
+ import { ApiEnvFileWriter } from "../core/config/ApiEnvFileWriter.js";
6
+ import { GithubAppConfigStore } from "../core/config/GithubAppConfigStore.js";
7
+ import { DockerStackManager } from "../core/docker/DockerStackManager.js";
8
+ import { LogsService } from "../core/logs/LogsService.js";
9
+ import { CommandRunner } from "../core/process/CommandRunner.js";
10
+ import { ProjectPaths } from "../core/runtime/ProjectPaths.js";
11
+ import { RunnerSupervisor } from "../core/runner/RunnerSupervisor.js";
12
+ import { createPasswordHash } from "../core/runtime/Secrets.js";
13
+ import { RuntimePaths } from "../core/runtime/RuntimePaths.js";
14
+ import { RuntimeStateStore } from "../core/runtime/RuntimeStateStore.js";
15
+ import { VersionCatalog } from "../core/runtime/VersionCatalog.js";
16
+ import { StatusService } from "../core/status/StatusService.js";
17
+ import { TerminalRenderer } from "../core/ui/TerminalRenderer.js";
18
+ import { ensureGithubAppConfig } from "./setup-github-app.js";
19
+ function runtimeRoot() {
20
+ return process.env.COMPANYHELM_HOME || path.join(os.homedir(), ".companyhelm");
21
+ }
22
+ export function createDefaultDependencies() {
23
+ const root = runtimeRoot();
24
+ const stateStore = new RuntimeStateStore(root);
25
+ const runtimePaths = new RuntimePaths(root);
26
+ const commandRunner = new CommandRunner();
27
+ const renderer = new TerminalRenderer(process.stdout.isTTY);
28
+ const dockerStackManager = new DockerStackManager(root, commandRunner);
29
+ const runnerSupervisor = new RunnerSupervisor(runtimePaths.runnerConfigPath());
30
+ const bootstrapper = new DeploymentBootstrapper();
31
+ const githubAppConfigStore = new GithubAppConfigStore();
32
+ const apiEnvFileWriter = new ApiEnvFileWriter(process.cwd());
33
+ const projectPaths = new ProjectPaths(process.cwd());
34
+ const versionCatalog = new VersionCatalog();
35
+ const statusService = new StatusService(() => dockerStackManager.runningServices(), {
36
+ runner: async () => {
37
+ try {
38
+ const statusCommand = runnerSupervisor.buildStatusArgs();
39
+ const output = await commandRunner.capture(statusCommand.command, statusCommand.args);
40
+ return output.includes("Daemon: running");
41
+ }
42
+ catch {
43
+ return false;
44
+ }
45
+ }
46
+ });
47
+ const logsService = new LogsService(async (service) => {
48
+ if (service === "runner") {
49
+ if (fs.existsSync(runtimePaths.runnerLogPath())) {
50
+ process.stdout.write(fs.readFileSync(runtimePaths.runnerLogPath(), "utf8"));
51
+ }
52
+ return;
53
+ }
54
+ await dockerStackManager.logs(service);
55
+ });
56
+ return {
57
+ async up(options = {}) {
58
+ const logLevel = options.logLevel ?? "info";
59
+ const githubAppConfig = await ensureGithubAppConfig(githubAppConfigStore, process.stdin, process.stdout);
60
+ const state = stateStore.initialize();
61
+ const versions = versionCatalog.resolve();
62
+ const passwordRecord = createPasswordHash(state.auth.password);
63
+ fs.mkdirSync(root, { recursive: true });
64
+ apiEnvFileWriter.write(githubAppConfig);
65
+ bootstrapper.writeSeedSql(root, state, passwordRecord.passwordHash, passwordRecord.passwordSalt);
66
+ bootstrapper.writeApiConfig(root, state, logLevel);
67
+ bootstrapper.writeFrontendConfig(root, state);
68
+ process.stdout.write(`${renderer.renderBanner()}\n`);
69
+ await dockerStackManager.up(state, { frontendLogLevel: logLevel });
70
+ process.stdout.write(`${renderer.progress("Initializing the database...")}\n`);
71
+ process.stdout.write(`${renderer.progress("Waiting for database migrations...")}\n`);
72
+ await dockerStackManager.applySeedSql(state.auth.username);
73
+ const configureSdkCommand = runnerSupervisor.buildUseHostAuthArgs();
74
+ process.stdout.write(`${renderer.progress("Configuring runner authentication...")}\n`);
75
+ await commandRunner.run(configureSdkCommand.command, configureSdkCommand.args);
76
+ const startCommand = runnerSupervisor.buildStartArgs({
77
+ serverUrl: `127.0.0.1:${state.ports.runnerGrpc}`,
78
+ agentApiUrl: `127.0.0.1:${state.ports.agentCliGrpc}`,
79
+ logPath: runtimePaths.runnerLogPath(),
80
+ secret: state.runner.secret,
81
+ logLevel
82
+ });
83
+ process.stdout.write(`${renderer.progress("Starting the runner...")}\n`);
84
+ await commandRunner.run(startCommand.command, startCommand.args);
85
+ const apiUrl = `http://127.0.0.1:${state.ports.apiHttp}/graphql`;
86
+ const uiUrl = `http://127.0.0.1:${state.ports.ui}`;
87
+ process.stdout.write(`${renderer.success(`API ready: ${apiUrl}`)}\n`);
88
+ process.stdout.write(`CompanyHelm CLI: ${versions.cliPackage}\n`);
89
+ process.stdout.write(`Runner package: ${versions.runnerPackage}\n`);
90
+ process.stdout.write(`API image: ${versions.images.api}\n`);
91
+ process.stdout.write(`Frontend image: ${versions.images.frontend}\n`);
92
+ process.stdout.write(`Postgres image: ${versions.images.postgres}\n`);
93
+ process.stdout.write(`\n${renderer.success("CompanyHelm started successfully.")}\n`);
94
+ process.stdout.write(`${renderer.successHighlight("UI URL")}\n`);
95
+ process.stdout.write(`${renderer.clickableUrl(uiUrl)}\n`);
96
+ process.stdout.write(`${renderer.successHighlight("Login credentials")}\n`);
97
+ process.stdout.write(`username: ${state.auth.username}\n`);
98
+ process.stdout.write(`password: ${state.auth.password}\n`);
99
+ },
100
+ async down() {
101
+ if (!stateStore.load()) {
102
+ return;
103
+ }
104
+ const stopCommand = runnerSupervisor.buildStopArgs();
105
+ try {
106
+ await commandRunner.run(stopCommand.command, stopCommand.args);
107
+ }
108
+ catch {
109
+ // Ignore runner stop failures during teardown so container cleanup still happens.
110
+ }
111
+ await dockerStackManager.down();
112
+ },
113
+ async status() {
114
+ const services = await statusService.read();
115
+ const state = stateStore.load();
116
+ return {
117
+ services,
118
+ apiUrl: state ? `http://127.0.0.1:${state.ports.apiHttp}/graphql` : undefined,
119
+ uiUrl: state ? `http://127.0.0.1:${state.ports.ui}` : undefined,
120
+ username: state?.auth.username,
121
+ versions: versionCatalog.resolve()
122
+ };
123
+ },
124
+ logs(service) {
125
+ return logsService.stream(service);
126
+ },
127
+ async reset(options = {}) {
128
+ if (stateStore.load()) {
129
+ const stopCommand = runnerSupervisor.buildStopArgs();
130
+ try {
131
+ await commandRunner.run(stopCommand.command, stopCommand.args);
132
+ }
133
+ catch {
134
+ // Ignore runner stop failures during teardown so docker cleanup still runs.
135
+ }
136
+ }
137
+ await dockerStackManager.down({ removeVolumes: true });
138
+ fs.rmSync(projectPaths.apiEnvPath(), { force: true });
139
+ fs.rmSync(root, { recursive: true, force: true });
140
+ if (options.removeGithubAppConfig) {
141
+ githubAppConfigStore.delete();
142
+ }
143
+ }
144
+ };
145
+ }
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ import type { CommandDependencies } from "./dependencies.js";
3
+ export declare function registerDownCommand(program: Command, dependencies: CommandDependencies): void;
@@ -0,0 +1,5 @@
1
+ export function registerDownCommand(program, dependencies) {
2
+ program.command("down").description("Stop the local deployment.").action(async () => {
3
+ await dependencies.down();
4
+ });
5
+ }
@@ -0,0 +1,6 @@
1
+ import type { Readable, Writable } from "node:stream";
2
+ export declare class InteractiveCommandCancelledError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ export declare function requireInteractiveTerminal(input: Readable, output: Writable, message: string): void;
6
+ export declare function unwrapPromptResult<T>(value: T | symbol, message: string, output: Writable): T;
@@ -0,0 +1,22 @@
1
+ import * as clack from "@clack/prompts";
2
+ export class InteractiveCommandCancelledError extends Error {
3
+ constructor(message) {
4
+ super(message);
5
+ this.name = "InteractiveCommandCancelledError";
6
+ }
7
+ }
8
+ function isReadableTty(input) {
9
+ return "isTTY" in input && Boolean(input.isTTY);
10
+ }
11
+ export function requireInteractiveTerminal(input, output, message) {
12
+ if (!isReadableTty(input) || !clack.isTTY(output)) {
13
+ throw new Error(message);
14
+ }
15
+ }
16
+ export function unwrapPromptResult(value, message, output) {
17
+ if (clack.isCancel(value)) {
18
+ clack.cancel(message, { output });
19
+ throw new InteractiveCommandCancelledError(message);
20
+ }
21
+ return value;
22
+ }
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ import type { CommandDependencies } from "./dependencies.js";
3
+ export declare function registerLogsCommand(program: Command, dependencies: CommandDependencies): void;
@@ -0,0 +1,14 @@
1
+ const AVAILABLE_LOG_SERVICES = ["postgres", "api", "frontend", "runner"];
2
+ export function registerLogsCommand(program, dependencies) {
3
+ program
4
+ .command("logs")
5
+ .description("Show logs for a managed service.")
6
+ .argument("[service]")
7
+ .action(async (service) => {
8
+ if (!service) {
9
+ process.stdout.write(`Available services:\n${AVAILABLE_LOG_SERVICES.map((name) => `- ${name}`).join("\n")}\n`);
10
+ return;
11
+ }
12
+ await dependencies.logs(service);
13
+ });
14
+ }
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ import { type CommandDependencies } from "./dependencies.js";
3
+ export declare function buildProgram(dependencies?: CommandDependencies): Command;
@@ -1,15 +1,20 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.registerCommands = registerCommands;
4
- const register_runner_commands_js_1 = require("./runner/register-runner-commands.js");
5
- const shell_js_1 = require("./shell.js");
6
- const register_sdk_commands_js_1 = require("./sdk/register-sdk-commands.js");
7
- const status_js_1 = require("./status.js");
8
- const register_thread_commands_js_1 = require("./thread/register-thread-commands.js");
9
- function registerCommands(program) {
10
- (0, register_runner_commands_js_1.registerRunnerCommands)(program);
11
- (0, status_js_1.registerStatusCommand)(program);
12
- (0, register_thread_commands_js_1.registerThreadCommands)(program);
13
- (0, shell_js_1.registerShellCommand)(program);
14
- (0, register_sdk_commands_js_1.registerSdkCommands)(program);
1
+ import { Command } from "commander";
2
+ import { createDefaultDependencies } from "./dependencies.js";
3
+ import { registerDownCommand } from "./down.js";
4
+ import { registerLogsCommand } from "./logs.js";
5
+ import { registerResetCommand } from "./reset.js";
6
+ import { registerSetupGithubAppCommand } from "./setup-github-app.js";
7
+ import { registerSetImageVersionCommand } from "./set-image-version.js";
8
+ import { registerStatusCommand } from "./status.js";
9
+ import { registerUpCommand } from "./up.js";
10
+ export function buildProgram(dependencies = createDefaultDependencies()) {
11
+ const program = new Command().name("companyhelm");
12
+ registerSetupGithubAppCommand(program);
13
+ registerUpCommand(program, dependencies);
14
+ registerDownCommand(program, dependencies);
15
+ registerStatusCommand(program, dependencies);
16
+ registerLogsCommand(program, dependencies);
17
+ registerSetImageVersionCommand(program);
18
+ registerResetCommand(program, dependencies);
19
+ return program;
15
20
  }
@@ -0,0 +1,7 @@
1
+ import type { Readable, Writable } from "node:stream";
2
+ import type { Command } from "commander";
3
+ import { GithubAppConfigStore } from "../core/config/GithubAppConfigStore.js";
4
+ import type { CommandDependencies } from "./dependencies.js";
5
+ export declare function confirmReset(input?: Readable, output?: Writable): Promise<boolean>;
6
+ export declare function confirmRemoveGithubAppConfig(store?: GithubAppConfigStore, input?: Readable, output?: Writable): Promise<boolean>;
7
+ export declare function registerResetCommand(program: Command, dependencies: CommandDependencies): void;
@@ -0,0 +1,51 @@
1
+ import * as clack from "@clack/prompts";
2
+ import { GithubAppConfigStore } from "../core/config/GithubAppConfigStore.js";
3
+ import { requireInteractiveTerminal, unwrapPromptResult } from "./interactive.js";
4
+ export async function confirmReset(input = process.stdin, output = process.stdout) {
5
+ requireInteractiveTerminal(input, output, "reset requires confirmation from a TTY. Re-run with --yes to skip the prompt.");
6
+ const confirmed = await clack.confirm({
7
+ message: "This will remove CompanyHelm containers, Postgres data, local runtime state, and generated .companyhelm/api/.env. Continue?",
8
+ active: "Yes",
9
+ inactive: "No",
10
+ initialValue: false,
11
+ input,
12
+ output
13
+ });
14
+ return unwrapPromptResult(confirmed, "Reset cancelled.", output);
15
+ }
16
+ export async function confirmRemoveGithubAppConfig(store = new GithubAppConfigStore(), input = process.stdin, output = process.stdout) {
17
+ if (!store.hasConfig()) {
18
+ return false;
19
+ }
20
+ requireInteractiveTerminal(input, output, "reset requires confirmation from a TTY. Re-run with --yes to skip the prompt.");
21
+ const confirmed = await clack.confirm({
22
+ message: `Also remove the machine GitHub App config at ${store.configPath()}?`,
23
+ active: "Remove it",
24
+ inactive: "Keep it",
25
+ initialValue: false,
26
+ input,
27
+ output
28
+ });
29
+ return unwrapPromptResult(confirmed, "Reset cancelled.", output);
30
+ }
31
+ export function registerResetCommand(program, dependencies) {
32
+ program
33
+ .command("reset")
34
+ .description("Destroy the local deployment state.")
35
+ .option("-y, --yes", "Skip the confirmation prompt.")
36
+ .option("--remove-github-app-config", "Also remove the machine GitHub App config.")
37
+ .action(async (options) => {
38
+ let removeGithubAppConfig = Boolean(options.removeGithubAppConfig);
39
+ if (!options.yes) {
40
+ const confirmed = await confirmReset();
41
+ if (!confirmed) {
42
+ clack.cancel("Reset cancelled.");
43
+ return;
44
+ }
45
+ if (!removeGithubAppConfig) {
46
+ removeGithubAppConfig = await confirmRemoveGithubAppConfig();
47
+ }
48
+ }
49
+ await dependencies.reset({ removeGithubAppConfig });
50
+ });
51
+ }
@@ -0,0 +1,31 @@
1
+ import type { Readable, Writable } from "node:stream";
2
+ import type { Command } from "commander";
3
+ import { type ManagedImageService } from "../core/runtime/ManagedImages.js";
4
+ export interface SetImageVersionOptions {
5
+ service?: string;
6
+ limit: number;
7
+ }
8
+ export interface AvailableImageTag {
9
+ tag: string;
10
+ createdAt?: string;
11
+ }
12
+ export interface InteractiveImageSelector {
13
+ listAvailableTags(service: ManagedImageService, limit: number): Promise<AvailableImageTag[]>;
14
+ buildImageReference(service: ManagedImageService, tag: string): string;
15
+ }
16
+ export interface ImageConfigStore {
17
+ load(): {
18
+ images: Partial<Record<ManagedImageService, string>>;
19
+ };
20
+ setImage(service: ManagedImageService, image: string): {
21
+ configPath: string;
22
+ image: string;
23
+ };
24
+ }
25
+ export declare function runSetImageVersion(options: SetImageVersionOptions, dependencies?: {
26
+ input?: Readable;
27
+ output?: Writable;
28
+ registry?: InteractiveImageSelector;
29
+ configStore?: ImageConfigStore;
30
+ }): Promise<void>;
31
+ export declare function registerSetImageVersionCommand(program: Command): void;
@@ -0,0 +1,87 @@
1
+ import * as clack from "@clack/prompts";
2
+ import { LocalConfigStore } from "../core/runtime/LocalConfigStore.js";
3
+ import { MANAGED_IMAGE_SERVICES, requireManagedImageService } from "../core/runtime/ManagedImages.js";
4
+ import { PublicImageTagRegistry } from "../core/runtime/PublicImageTagRegistry.js";
5
+ import { requireInteractiveTerminal, unwrapPromptResult } from "./interactive.js";
6
+ function parsePositiveInteger(value) {
7
+ const parsed = Number.parseInt(value, 10);
8
+ if (!Number.isInteger(parsed) || parsed < 1) {
9
+ throw new Error(`Expected a positive integer, received: ${value}`);
10
+ }
11
+ return parsed;
12
+ }
13
+ async function promptForSelection(message, options, input, output, defaultValue) {
14
+ requireInteractiveTerminal(input, output, "set-image-version requires a TTY so you can choose an image interactively.");
15
+ if (options.length === 0) {
16
+ throw new Error("No selectable options were provided.");
17
+ }
18
+ const selected = await clack.select({
19
+ message,
20
+ options: options.map((option, index) => ({
21
+ ...option,
22
+ hint: option.value === defaultValue ? "current" : undefined
23
+ })),
24
+ initialValue: defaultValue,
25
+ input,
26
+ output
27
+ });
28
+ return unwrapPromptResult(selected, "Image selection cancelled.", output);
29
+ }
30
+ async function loadAvailableTags(registry, service, limit, output) {
31
+ const spinner = clack.spinner({ output });
32
+ spinner.start(`Loading the latest ${limit} image tags for ${service}`);
33
+ let tags;
34
+ try {
35
+ tags = await registry.listAvailableTags(service, limit);
36
+ }
37
+ catch (error) {
38
+ spinner.stop("Unable to load image tags");
39
+ throw error;
40
+ }
41
+ if (tags.length === 0) {
42
+ spinner.stop("No image tags found");
43
+ throw new Error(`No image tags found for ${service}.`);
44
+ }
45
+ spinner.stop(`Loaded ${tags.length} image tag${tags.length === 1 ? "" : "s"}`);
46
+ return tags;
47
+ }
48
+ function formatTagTimestamp(createdAt) {
49
+ if (!createdAt) {
50
+ return "timestamp unavailable";
51
+ }
52
+ const timestamp = new Date(createdAt);
53
+ if (Number.isNaN(timestamp.valueOf())) {
54
+ return "timestamp unavailable";
55
+ }
56
+ return timestamp.toISOString().slice(0, 16).replace("T", " ") + " UTC";
57
+ }
58
+ export async function runSetImageVersion(options, dependencies = {}) {
59
+ const input = dependencies.input ?? process.stdin;
60
+ const output = dependencies.output ?? process.stdout;
61
+ const registry = dependencies.registry ?? new PublicImageTagRegistry();
62
+ const configStore = dependencies.configStore ?? new LocalConfigStore();
63
+ clack.intro("CompanyHelm image selection", { output });
64
+ const selectedService = options.service
65
+ ? requireManagedImageService(options.service)
66
+ : await promptForSelection("Which image do you want to pin?", MANAGED_IMAGE_SERVICES.map((service) => ({ value: service, label: service })), input, output).then((value) => requireManagedImageService(value));
67
+ const currentImage = configStore.load().images[selectedService];
68
+ clack.log.info(`Current configured image for ${selectedService}: ${currentImage ?? "default (latest)"}`, { output });
69
+ const tags = await loadAvailableTags(registry, selectedService, options.limit, output);
70
+ const currentTag = currentImage ? currentImage.slice(currentImage.lastIndexOf(":") + 1) : undefined;
71
+ const selectedTag = await promptForSelection(`Choose the ${selectedService} image tag`, tags.map((tag) => ({
72
+ value: tag.tag,
73
+ label: `${tag.tag} (${formatTagTimestamp(tag.createdAt)})`
74
+ })), input, output, currentTag);
75
+ const result = configStore.setImage(selectedService, registry.buildImageReference(selectedService, selectedTag));
76
+ clack.outro(`Updated ${result.configPath} to ${result.image}`, { output });
77
+ }
78
+ export function registerSetImageVersionCommand(program) {
79
+ program
80
+ .command("set-image-version")
81
+ .description("Interactively choose an API or frontend image tag and store it in local config.yaml.")
82
+ .option("-s, --service <service>", "Prefill the service to update (api or frontend)")
83
+ .option("-l, --limit <count>", "How many image tags to show", parsePositiveInteger, 20)
84
+ .action(async (options) => {
85
+ await runSetImageVersion(options);
86
+ });
87
+ }
@@ -0,0 +1,10 @@
1
+ import { Writable, type Readable } from "node:stream";
2
+ import type { Command } from "commander";
3
+ import { GithubAppConfigStore } from "../core/config/GithubAppConfigStore.js";
4
+ import { type GithubAppConfig } from "../core/config/GithubAppConfig.js";
5
+ type BrowserUrlOpener = (url: string) => Promise<void>;
6
+ export declare function readPemFromTerminal(input?: Readable, output?: Writable): Promise<string>;
7
+ export declare function promptGithubAppConfig(input?: Readable, output?: Writable, openBrowser?: BrowserUrlOpener): Promise<GithubAppConfig>;
8
+ export declare function ensureGithubAppConfig(store?: GithubAppConfigStore, input?: Readable, output?: Writable): Promise<GithubAppConfig>;
9
+ export declare function registerSetupGithubAppCommand(program: Command, store?: GithubAppConfigStore): void;
10
+ export {};