@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.
- package/README.md +40 -37
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +13 -52
- package/dist/commands/dependencies.d.ts +24 -0
- package/dist/commands/dependencies.js +145 -0
- package/dist/commands/down.d.ts +3 -0
- package/dist/commands/down.js +5 -0
- package/dist/commands/interactive.d.ts +6 -0
- package/dist/commands/interactive.js +22 -0
- package/dist/commands/logs.d.ts +3 -0
- package/dist/commands/logs.js +14 -0
- package/dist/commands/register-commands.d.ts +3 -0
- package/dist/commands/register-commands.js +19 -14
- package/dist/commands/reset.d.ts +7 -0
- package/dist/commands/reset.js +51 -0
- package/dist/commands/set-image-version.d.ts +31 -0
- package/dist/commands/set-image-version.js +87 -0
- package/dist/commands/setup-github-app.d.ts +10 -0
- package/dist/commands/setup-github-app.js +211 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.js +5 -30
- package/dist/commands/up.d.ts +3 -0
- package/dist/commands/up.js +14 -0
- package/dist/core/bootstrap/DeploymentBootstrapper.d.ts +9 -0
- package/dist/core/bootstrap/DeploymentBootstrapper.js +99 -0
- package/dist/core/bootstrap/SeedSqlRenderer.d.ts +12 -0
- package/dist/core/bootstrap/SeedSqlRenderer.js +44 -0
- package/dist/core/config/ApiEnvFileWriter.d.ts +6 -0
- package/dist/core/config/ApiEnvFileWriter.js +26 -0
- package/dist/core/config/GithubAppConfig.d.ts +6 -0
- package/dist/core/config/GithubAppConfig.js +26 -0
- package/dist/core/config/GithubAppConfigStore.d.ts +11 -0
- package/dist/core/config/GithubAppConfigStore.js +65 -0
- package/dist/core/docker/ComposeTemplateRenderer.d.ts +19 -0
- package/dist/core/docker/ComposeTemplateRenderer.js +42 -0
- package/dist/core/docker/DockerStackManager.d.ts +26 -0
- package/dist/core/docker/DockerStackManager.js +161 -0
- package/dist/core/logs/LogsService.d.ts +5 -0
- package/dist/core/logs/LogsService.js +13 -0
- package/dist/core/process/CommandRunner.d.ts +4 -0
- package/dist/core/process/CommandRunner.js +43 -0
- package/dist/core/runner/RunnerSupervisor.d.ts +21 -0
- package/dist/core/runner/RunnerSupervisor.js +61 -0
- package/dist/core/runtime/ImageCatalog.d.ts +8 -0
- package/dist/core/runtime/ImageCatalog.js +12 -0
- package/dist/core/runtime/LocalConfigStore.d.ts +16 -0
- package/dist/core/runtime/LocalConfigStore.js +59 -0
- package/dist/core/runtime/ManagedImages.d.ts +10 -0
- package/dist/core/runtime/ManagedImages.js +27 -0
- package/dist/core/runtime/PortAllocator.d.ts +9 -0
- package/dist/core/runtime/PortAllocator.js +20 -0
- package/dist/core/runtime/ProjectPaths.d.ts +7 -0
- package/dist/core/runtime/ProjectPaths.js +16 -0
- package/dist/core/runtime/PublicImageTagRegistry.d.ts +16 -0
- package/dist/core/runtime/PublicImageTagRegistry.js +148 -0
- package/dist/core/runtime/RuntimePaths.d.ts +12 -0
- package/dist/core/runtime/RuntimePaths.js +31 -0
- package/dist/core/runtime/RuntimeState.d.ts +24 -0
- package/dist/core/runtime/RuntimeState.js +1 -0
- package/dist/core/runtime/RuntimeStateStore.d.ts +10 -0
- package/dist/core/runtime/RuntimeStateStore.js +58 -0
- package/dist/core/runtime/Secrets.d.ts +10 -0
- package/dist/core/runtime/Secrets.js +26 -0
- package/dist/core/runtime/VersionCatalog.d.ts +10 -0
- package/dist/core/runtime/VersionCatalog.js +21 -0
- package/dist/core/status/StatusService.d.ts +16 -0
- package/dist/core/status/StatusService.js +21 -0
- package/dist/core/ui/TerminalRenderer.d.ts +17 -0
- package/dist/core/ui/TerminalRenderer.js +71 -0
- package/dist/templates/docker-compose.yaml.tpl +39 -0
- package/dist/templates/seed.sql.tpl +76 -0
- package/package.json +19 -28
- package/src/templates/docker-compose.yaml.tpl +39 -0
- package/src/templates/seed.sql.tpl +76 -0
- package/RUNTIME_IMAGE_VERSION +0 -1
- package/dist/commands/global-options.js +0 -20
- package/dist/commands/root.js +0 -2501
- package/dist/commands/runner/common.js +0 -18
- package/dist/commands/runner/register-runner-commands.js +0 -12
- package/dist/commands/runner/start.js +0 -30
- package/dist/commands/runner/stop.js +0 -55
- package/dist/commands/sdk/codex/auth.js +0 -200
- package/dist/commands/sdk/codex/register-codex-sdk-commands.js +0 -12
- package/dist/commands/sdk/codex/use-dedicated-auth.js +0 -18
- package/dist/commands/sdk/codex/use-host-auth.js +0 -19
- package/dist/commands/sdk/list.js +0 -76
- package/dist/commands/sdk/refresh-models.js +0 -25
- package/dist/commands/sdk/register-sdk-commands.js +0 -14
- package/dist/commands/shell.js +0 -90
- package/dist/commands/startup.js +0 -137
- package/dist/commands/thread/docker.js +0 -77
- package/dist/commands/thread/list.js +0 -37
- package/dist/commands/thread/register-thread-commands.js +0 -12
- package/dist/config.js +0 -105
- package/dist/generated/codex-app-server/AbsolutePathBuf.js +0 -3
- package/dist/generated/codex-app-server/AddConversationListenerParams.js +0 -3
- package/dist/generated/codex-app-server/AddConversationSubscriptionResponse.js +0 -3
- package/dist/generated/codex-app-server/AgentMessageContent.js +0 -3
- package/dist/generated/codex-app-server/AgentMessageContentDeltaEvent.js +0 -3
- package/dist/generated/codex-app-server/AgentMessageDeltaEvent.js +0 -3
- package/dist/generated/codex-app-server/AgentMessageEvent.js +0 -3
- package/dist/generated/codex-app-server/AgentMessageItem.js +0 -3
- package/dist/generated/codex-app-server/AgentReasoningDeltaEvent.js +0 -3
- package/dist/generated/codex-app-server/AgentReasoningEvent.js +0 -3
- package/dist/generated/codex-app-server/AgentReasoningRawContentDeltaEvent.js +0 -3
- package/dist/generated/codex-app-server/AgentReasoningRawContentEvent.js +0 -3
- package/dist/generated/codex-app-server/AgentReasoningSectionBreakEvent.js +0 -3
- package/dist/generated/codex-app-server/AgentStatus.js +0 -3
- package/dist/generated/codex-app-server/ApplyPatchApprovalParams.js +0 -3
- package/dist/generated/codex-app-server/ApplyPatchApprovalRequestEvent.js +0 -3
- package/dist/generated/codex-app-server/ApplyPatchApprovalResponse.js +0 -3
- package/dist/generated/codex-app-server/ArchiveConversationParams.js +0 -3
- package/dist/generated/codex-app-server/ArchiveConversationResponse.js +0 -3
- package/dist/generated/codex-app-server/AskForApproval.js +0 -3
- package/dist/generated/codex-app-server/AuthMode.js +0 -3
- package/dist/generated/codex-app-server/AuthStatusChangeNotification.js +0 -3
- package/dist/generated/codex-app-server/BackgroundEventEvent.js +0 -3
- package/dist/generated/codex-app-server/ByteRange.js +0 -3
- package/dist/generated/codex-app-server/CallToolResult.js +0 -3
- package/dist/generated/codex-app-server/CancelLoginChatGptParams.js +0 -3
- package/dist/generated/codex-app-server/CancelLoginChatGptResponse.js +0 -3
- package/dist/generated/codex-app-server/ClientInfo.js +0 -3
- package/dist/generated/codex-app-server/ClientNotification.js +0 -3
- package/dist/generated/codex-app-server/ClientRequest.js +0 -3
- package/dist/generated/codex-app-server/CodexErrorInfo.js +0 -3
- package/dist/generated/codex-app-server/CollabAgentInteractionBeginEvent.js +0 -3
- package/dist/generated/codex-app-server/CollabAgentInteractionEndEvent.js +0 -3
- package/dist/generated/codex-app-server/CollabAgentSpawnBeginEvent.js +0 -3
- package/dist/generated/codex-app-server/CollabAgentSpawnEndEvent.js +0 -3
- package/dist/generated/codex-app-server/CollabCloseBeginEvent.js +0 -3
- package/dist/generated/codex-app-server/CollabCloseEndEvent.js +0 -3
- package/dist/generated/codex-app-server/CollabResumeBeginEvent.js +0 -3
- package/dist/generated/codex-app-server/CollabResumeEndEvent.js +0 -3
- package/dist/generated/codex-app-server/CollabWaitingBeginEvent.js +0 -3
- package/dist/generated/codex-app-server/CollabWaitingEndEvent.js +0 -3
- package/dist/generated/codex-app-server/CollaborationMode.js +0 -3
- package/dist/generated/codex-app-server/CollaborationModeMask.js +0 -3
- package/dist/generated/codex-app-server/ContentItem.js +0 -3
- package/dist/generated/codex-app-server/ContextCompactedEvent.js +0 -3
- package/dist/generated/codex-app-server/ContextCompactionItem.js +0 -3
- package/dist/generated/codex-app-server/ConversationGitInfo.js +0 -3
- package/dist/generated/codex-app-server/ConversationSummary.js +0 -3
- package/dist/generated/codex-app-server/CreditsSnapshot.js +0 -3
- package/dist/generated/codex-app-server/CustomPrompt.js +0 -3
- package/dist/generated/codex-app-server/DeprecationNoticeEvent.js +0 -3
- package/dist/generated/codex-app-server/DynamicToolCallRequest.js +0 -3
- package/dist/generated/codex-app-server/ElicitationRequestEvent.js +0 -3
- package/dist/generated/codex-app-server/ErrorEvent.js +0 -3
- package/dist/generated/codex-app-server/EventMsg.js +0 -3
- package/dist/generated/codex-app-server/ExecApprovalRequestEvent.js +0 -3
- package/dist/generated/codex-app-server/ExecCommandApprovalParams.js +0 -3
- package/dist/generated/codex-app-server/ExecCommandApprovalResponse.js +0 -3
- package/dist/generated/codex-app-server/ExecCommandBeginEvent.js +0 -3
- package/dist/generated/codex-app-server/ExecCommandEndEvent.js +0 -3
- package/dist/generated/codex-app-server/ExecCommandOutputDeltaEvent.js +0 -3
- package/dist/generated/codex-app-server/ExecCommandSource.js +0 -3
- package/dist/generated/codex-app-server/ExecCommandStatus.js +0 -3
- package/dist/generated/codex-app-server/ExecOneOffCommandParams.js +0 -3
- package/dist/generated/codex-app-server/ExecOneOffCommandResponse.js +0 -3
- package/dist/generated/codex-app-server/ExecOutputStream.js +0 -3
- package/dist/generated/codex-app-server/ExecPolicyAmendment.js +0 -3
- package/dist/generated/codex-app-server/ExitedReviewModeEvent.js +0 -3
- package/dist/generated/codex-app-server/FileChange.js +0 -3
- package/dist/generated/codex-app-server/ForcedLoginMethod.js +0 -3
- package/dist/generated/codex-app-server/ForkConversationParams.js +0 -3
- package/dist/generated/codex-app-server/ForkConversationResponse.js +0 -3
- package/dist/generated/codex-app-server/FunctionCallOutputBody.js +0 -3
- package/dist/generated/codex-app-server/FunctionCallOutputContentItem.js +0 -3
- package/dist/generated/codex-app-server/FunctionCallOutputPayload.js +0 -3
- package/dist/generated/codex-app-server/FuzzyFileSearchParams.js +0 -3
- package/dist/generated/codex-app-server/FuzzyFileSearchResponse.js +0 -3
- package/dist/generated/codex-app-server/FuzzyFileSearchResult.js +0 -3
- package/dist/generated/codex-app-server/FuzzyFileSearchSessionCompletedNotification.js +0 -3
- package/dist/generated/codex-app-server/FuzzyFileSearchSessionUpdatedNotification.js +0 -3
- package/dist/generated/codex-app-server/GetAuthStatusParams.js +0 -3
- package/dist/generated/codex-app-server/GetAuthStatusResponse.js +0 -3
- package/dist/generated/codex-app-server/GetConversationSummaryParams.js +0 -3
- package/dist/generated/codex-app-server/GetConversationSummaryResponse.js +0 -3
- package/dist/generated/codex-app-server/GetHistoryEntryResponseEvent.js +0 -3
- package/dist/generated/codex-app-server/GetUserAgentResponse.js +0 -3
- package/dist/generated/codex-app-server/GetUserSavedConfigResponse.js +0 -3
- package/dist/generated/codex-app-server/GhostCommit.js +0 -3
- package/dist/generated/codex-app-server/GitDiffToRemoteParams.js +0 -3
- package/dist/generated/codex-app-server/GitDiffToRemoteResponse.js +0 -3
- package/dist/generated/codex-app-server/GitSha.js +0 -3
- package/dist/generated/codex-app-server/HistoryEntry.js +0 -3
- package/dist/generated/codex-app-server/InitializeCapabilities.js +0 -3
- package/dist/generated/codex-app-server/InitializeParams.js +0 -3
- package/dist/generated/codex-app-server/InitializeResponse.js +0 -3
- package/dist/generated/codex-app-server/InputItem.js +0 -3
- package/dist/generated/codex-app-server/InputModality.js +0 -3
- package/dist/generated/codex-app-server/InterruptConversationParams.js +0 -3
- package/dist/generated/codex-app-server/InterruptConversationResponse.js +0 -3
- package/dist/generated/codex-app-server/ItemCompletedEvent.js +0 -3
- package/dist/generated/codex-app-server/ItemStartedEvent.js +0 -3
- package/dist/generated/codex-app-server/ListConversationsParams.js +0 -3
- package/dist/generated/codex-app-server/ListConversationsResponse.js +0 -3
- package/dist/generated/codex-app-server/ListCustomPromptsResponseEvent.js +0 -3
- package/dist/generated/codex-app-server/ListRemoteSkillsResponseEvent.js +0 -3
- package/dist/generated/codex-app-server/ListSkillsResponseEvent.js +0 -3
- package/dist/generated/codex-app-server/LocalShellAction.js +0 -3
- package/dist/generated/codex-app-server/LocalShellExecAction.js +0 -3
- package/dist/generated/codex-app-server/LocalShellStatus.js +0 -3
- package/dist/generated/codex-app-server/LoginApiKeyParams.js +0 -3
- package/dist/generated/codex-app-server/LoginApiKeyResponse.js +0 -3
- package/dist/generated/codex-app-server/LoginChatGptCompleteNotification.js +0 -3
- package/dist/generated/codex-app-server/LoginChatGptResponse.js +0 -3
- package/dist/generated/codex-app-server/LogoutChatGptResponse.js +0 -3
- package/dist/generated/codex-app-server/McpAuthStatus.js +0 -3
- package/dist/generated/codex-app-server/McpInvocation.js +0 -3
- package/dist/generated/codex-app-server/McpListToolsResponseEvent.js +0 -3
- package/dist/generated/codex-app-server/McpStartupCompleteEvent.js +0 -3
- package/dist/generated/codex-app-server/McpStartupFailure.js +0 -3
- package/dist/generated/codex-app-server/McpStartupStatus.js +0 -3
- package/dist/generated/codex-app-server/McpStartupUpdateEvent.js +0 -3
- package/dist/generated/codex-app-server/McpToolCallBeginEvent.js +0 -3
- package/dist/generated/codex-app-server/McpToolCallEndEvent.js +0 -3
- package/dist/generated/codex-app-server/MessagePhase.js +0 -3
- package/dist/generated/codex-app-server/ModeKind.js +0 -3
- package/dist/generated/codex-app-server/ModelRerouteEvent.js +0 -3
- package/dist/generated/codex-app-server/ModelRerouteReason.js +0 -3
- package/dist/generated/codex-app-server/NetworkAccess.js +0 -3
- package/dist/generated/codex-app-server/NetworkApprovalContext.js +0 -3
- package/dist/generated/codex-app-server/NetworkApprovalProtocol.js +0 -3
- package/dist/generated/codex-app-server/NewConversationParams.js +0 -3
- package/dist/generated/codex-app-server/NewConversationResponse.js +0 -3
- package/dist/generated/codex-app-server/ParsedCommand.js +0 -3
- package/dist/generated/codex-app-server/PatchApplyBeginEvent.js +0 -3
- package/dist/generated/codex-app-server/PatchApplyEndEvent.js +0 -3
- package/dist/generated/codex-app-server/PatchApplyStatus.js +0 -3
- package/dist/generated/codex-app-server/Personality.js +0 -3
- package/dist/generated/codex-app-server/PlanDeltaEvent.js +0 -3
- package/dist/generated/codex-app-server/PlanItem.js +0 -3
- package/dist/generated/codex-app-server/PlanItemArg.js +0 -3
- package/dist/generated/codex-app-server/PlanType.js +0 -3
- package/dist/generated/codex-app-server/Profile.js +0 -3
- package/dist/generated/codex-app-server/RateLimitSnapshot.js +0 -3
- package/dist/generated/codex-app-server/RateLimitWindow.js +0 -3
- package/dist/generated/codex-app-server/RawResponseItemEvent.js +0 -3
- package/dist/generated/codex-app-server/ReadOnlyAccess.js +0 -3
- package/dist/generated/codex-app-server/ReasoningContentDeltaEvent.js +0 -3
- package/dist/generated/codex-app-server/ReasoningEffort.js +0 -3
- package/dist/generated/codex-app-server/ReasoningItem.js +0 -3
- package/dist/generated/codex-app-server/ReasoningItemContent.js +0 -3
- package/dist/generated/codex-app-server/ReasoningItemReasoningSummary.js +0 -3
- package/dist/generated/codex-app-server/ReasoningRawContentDeltaEvent.js +0 -3
- package/dist/generated/codex-app-server/ReasoningSummary.js +0 -3
- package/dist/generated/codex-app-server/RemoteSkillDownloadedEvent.js +0 -3
- package/dist/generated/codex-app-server/RemoteSkillSummary.js +0 -3
- package/dist/generated/codex-app-server/RemoveConversationListenerParams.js +0 -3
- package/dist/generated/codex-app-server/RemoveConversationSubscriptionResponse.js +0 -3
- package/dist/generated/codex-app-server/RequestId.js +0 -3
- package/dist/generated/codex-app-server/RequestUserInputEvent.js +0 -3
- package/dist/generated/codex-app-server/RequestUserInputQuestion.js +0 -3
- package/dist/generated/codex-app-server/RequestUserInputQuestionOption.js +0 -3
- package/dist/generated/codex-app-server/Resource.js +0 -3
- package/dist/generated/codex-app-server/ResourceTemplate.js +0 -3
- package/dist/generated/codex-app-server/ResponseItem.js +0 -3
- package/dist/generated/codex-app-server/ResumeConversationParams.js +0 -3
- package/dist/generated/codex-app-server/ResumeConversationResponse.js +0 -3
- package/dist/generated/codex-app-server/ReviewCodeLocation.js +0 -3
- package/dist/generated/codex-app-server/ReviewDecision.js +0 -3
- package/dist/generated/codex-app-server/ReviewFinding.js +0 -3
- package/dist/generated/codex-app-server/ReviewLineRange.js +0 -3
- package/dist/generated/codex-app-server/ReviewOutputEvent.js +0 -3
- package/dist/generated/codex-app-server/ReviewRequest.js +0 -3
- package/dist/generated/codex-app-server/ReviewTarget.js +0 -3
- package/dist/generated/codex-app-server/SandboxMode.js +0 -3
- package/dist/generated/codex-app-server/SandboxPolicy.js +0 -3
- package/dist/generated/codex-app-server/SandboxSettings.js +0 -3
- package/dist/generated/codex-app-server/SendUserMessageParams.js +0 -3
- package/dist/generated/codex-app-server/SendUserMessageResponse.js +0 -3
- package/dist/generated/codex-app-server/SendUserTurnParams.js +0 -3
- package/dist/generated/codex-app-server/SendUserTurnResponse.js +0 -3
- package/dist/generated/codex-app-server/ServerNotification.js +0 -3
- package/dist/generated/codex-app-server/ServerRequest.js +0 -3
- package/dist/generated/codex-app-server/SessionConfiguredEvent.js +0 -3
- package/dist/generated/codex-app-server/SessionConfiguredNotification.js +0 -3
- package/dist/generated/codex-app-server/SessionNetworkProxyRuntime.js +0 -3
- package/dist/generated/codex-app-server/SessionSource.js +0 -3
- package/dist/generated/codex-app-server/SetDefaultModelParams.js +0 -3
- package/dist/generated/codex-app-server/SetDefaultModelResponse.js +0 -3
- package/dist/generated/codex-app-server/Settings.js +0 -3
- package/dist/generated/codex-app-server/SkillDependencies.js +0 -3
- package/dist/generated/codex-app-server/SkillErrorInfo.js +0 -3
- package/dist/generated/codex-app-server/SkillInterface.js +0 -3
- package/dist/generated/codex-app-server/SkillMetadata.js +0 -3
- package/dist/generated/codex-app-server/SkillScope.js +0 -3
- package/dist/generated/codex-app-server/SkillToolDependency.js +0 -3
- package/dist/generated/codex-app-server/SkillsListEntry.js +0 -3
- package/dist/generated/codex-app-server/StepStatus.js +0 -3
- package/dist/generated/codex-app-server/StreamErrorEvent.js +0 -3
- package/dist/generated/codex-app-server/SubAgentSource.js +0 -3
- package/dist/generated/codex-app-server/TerminalInteractionEvent.js +0 -3
- package/dist/generated/codex-app-server/TextElement.js +0 -3
- package/dist/generated/codex-app-server/ThreadId.js +0 -3
- package/dist/generated/codex-app-server/ThreadNameUpdatedEvent.js +0 -3
- package/dist/generated/codex-app-server/ThreadRolledBackEvent.js +0 -3
- package/dist/generated/codex-app-server/TokenCountEvent.js +0 -3
- package/dist/generated/codex-app-server/TokenUsage.js +0 -3
- package/dist/generated/codex-app-server/TokenUsageInfo.js +0 -3
- package/dist/generated/codex-app-server/Tool.js +0 -3
- package/dist/generated/codex-app-server/Tools.js +0 -3
- package/dist/generated/codex-app-server/TurnAbortReason.js +0 -3
- package/dist/generated/codex-app-server/TurnAbortedEvent.js +0 -3
- package/dist/generated/codex-app-server/TurnCompleteEvent.js +0 -3
- package/dist/generated/codex-app-server/TurnDiffEvent.js +0 -3
- package/dist/generated/codex-app-server/TurnItem.js +0 -3
- package/dist/generated/codex-app-server/TurnStartedEvent.js +0 -3
- package/dist/generated/codex-app-server/UndoCompletedEvent.js +0 -3
- package/dist/generated/codex-app-server/UndoStartedEvent.js +0 -3
- package/dist/generated/codex-app-server/UpdatePlanArgs.js +0 -3
- package/dist/generated/codex-app-server/UserInfoResponse.js +0 -3
- package/dist/generated/codex-app-server/UserInput.js +0 -3
- package/dist/generated/codex-app-server/UserMessageEvent.js +0 -3
- package/dist/generated/codex-app-server/UserMessageItem.js +0 -3
- package/dist/generated/codex-app-server/UserSavedConfig.js +0 -3
- package/dist/generated/codex-app-server/Verbosity.js +0 -3
- package/dist/generated/codex-app-server/ViewImageToolCallEvent.js +0 -3
- package/dist/generated/codex-app-server/WarningEvent.js +0 -3
- package/dist/generated/codex-app-server/WebSearchAction.js +0 -3
- package/dist/generated/codex-app-server/WebSearchBeginEvent.js +0 -3
- package/dist/generated/codex-app-server/WebSearchEndEvent.js +0 -3
- package/dist/generated/codex-app-server/WebSearchItem.js +0 -3
- package/dist/generated/codex-app-server/WebSearchMode.js +0 -3
- package/dist/generated/codex-app-server/index.js +0 -38
- package/dist/generated/codex-app-server/serde_json/JsonValue.js +0 -3
- package/dist/generated/codex-app-server/v2/Account.js +0 -3
- package/dist/generated/codex-app-server/v2/AccountLoginCompletedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/AccountRateLimitsUpdatedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/AccountUpdatedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/AgentMessageDeltaNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/AnalyticsConfig.js +0 -3
- package/dist/generated/codex-app-server/v2/AppBranding.js +0 -3
- package/dist/generated/codex-app-server/v2/AppDisabledReason.js +0 -3
- package/dist/generated/codex-app-server/v2/AppInfo.js +0 -3
- package/dist/generated/codex-app-server/v2/AppListUpdatedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/AppMetadata.js +0 -3
- package/dist/generated/codex-app-server/v2/AppReview.js +0 -3
- package/dist/generated/codex-app-server/v2/AppScreenshot.js +0 -3
- package/dist/generated/codex-app-server/v2/AppsConfig.js +0 -3
- package/dist/generated/codex-app-server/v2/AppsListParams.js +0 -3
- package/dist/generated/codex-app-server/v2/AppsListResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/AskForApproval.js +0 -3
- package/dist/generated/codex-app-server/v2/ByteRange.js +0 -3
- package/dist/generated/codex-app-server/v2/CancelLoginAccountParams.js +0 -3
- package/dist/generated/codex-app-server/v2/CancelLoginAccountResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/CancelLoginAccountStatus.js +0 -3
- package/dist/generated/codex-app-server/v2/ChatgptAuthTokensRefreshParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ChatgptAuthTokensRefreshReason.js +0 -3
- package/dist/generated/codex-app-server/v2/ChatgptAuthTokensRefreshResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/CodexErrorInfo.js +0 -3
- package/dist/generated/codex-app-server/v2/CollabAgentState.js +0 -3
- package/dist/generated/codex-app-server/v2/CollabAgentStatus.js +0 -3
- package/dist/generated/codex-app-server/v2/CollabAgentTool.js +0 -3
- package/dist/generated/codex-app-server/v2/CollabAgentToolCallStatus.js +0 -3
- package/dist/generated/codex-app-server/v2/CommandAction.js +0 -3
- package/dist/generated/codex-app-server/v2/CommandExecParams.js +0 -3
- package/dist/generated/codex-app-server/v2/CommandExecResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/CommandExecutionApprovalDecision.js +0 -3
- package/dist/generated/codex-app-server/v2/CommandExecutionOutputDeltaNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/CommandExecutionRequestApprovalParams.js +0 -3
- package/dist/generated/codex-app-server/v2/CommandExecutionRequestApprovalResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/CommandExecutionStatus.js +0 -3
- package/dist/generated/codex-app-server/v2/Config.js +0 -3
- package/dist/generated/codex-app-server/v2/ConfigBatchWriteParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ConfigEdit.js +0 -3
- package/dist/generated/codex-app-server/v2/ConfigLayer.js +0 -3
- package/dist/generated/codex-app-server/v2/ConfigLayerMetadata.js +0 -3
- package/dist/generated/codex-app-server/v2/ConfigLayerSource.js +0 -3
- package/dist/generated/codex-app-server/v2/ConfigReadParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ConfigReadResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/ConfigRequirements.js +0 -3
- package/dist/generated/codex-app-server/v2/ConfigRequirementsReadResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/ConfigValueWriteParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ConfigWarningNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/ConfigWriteResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/ContextCompactedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/CreditsSnapshot.js +0 -3
- package/dist/generated/codex-app-server/v2/DeprecationNoticeNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/DynamicToolCallOutputContentItem.js +0 -3
- package/dist/generated/codex-app-server/v2/DynamicToolCallParams.js +0 -3
- package/dist/generated/codex-app-server/v2/DynamicToolCallResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/DynamicToolSpec.js +0 -3
- package/dist/generated/codex-app-server/v2/ErrorNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/ExecPolicyAmendment.js +0 -3
- package/dist/generated/codex-app-server/v2/ExperimentalFeature.js +0 -3
- package/dist/generated/codex-app-server/v2/ExperimentalFeatureListParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ExperimentalFeatureListResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/ExperimentalFeatureStage.js +0 -3
- package/dist/generated/codex-app-server/v2/FeedbackUploadParams.js +0 -3
- package/dist/generated/codex-app-server/v2/FeedbackUploadResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/FileChangeApprovalDecision.js +0 -3
- package/dist/generated/codex-app-server/v2/FileChangeOutputDeltaNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/FileChangeRequestApprovalParams.js +0 -3
- package/dist/generated/codex-app-server/v2/FileChangeRequestApprovalResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/FileUpdateChange.js +0 -3
- package/dist/generated/codex-app-server/v2/GetAccountParams.js +0 -3
- package/dist/generated/codex-app-server/v2/GetAccountRateLimitsResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/GetAccountResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/GitInfo.js +0 -3
- package/dist/generated/codex-app-server/v2/HazelnutScope.js +0 -3
- package/dist/generated/codex-app-server/v2/ItemCompletedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/ItemStartedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/ListMcpServerStatusParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ListMcpServerStatusResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/LoginAccountParams.js +0 -3
- package/dist/generated/codex-app-server/v2/LoginAccountResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/LogoutAccountResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/McpAuthStatus.js +0 -3
- package/dist/generated/codex-app-server/v2/McpServerOauthLoginCompletedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/McpServerOauthLoginParams.js +0 -3
- package/dist/generated/codex-app-server/v2/McpServerOauthLoginResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/McpServerRefreshResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/McpServerStatus.js +0 -3
- package/dist/generated/codex-app-server/v2/McpToolCallError.js +0 -3
- package/dist/generated/codex-app-server/v2/McpToolCallProgressNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/McpToolCallResult.js +0 -3
- package/dist/generated/codex-app-server/v2/McpToolCallStatus.js +0 -3
- package/dist/generated/codex-app-server/v2/MergeStrategy.js +0 -3
- package/dist/generated/codex-app-server/v2/Model.js +0 -3
- package/dist/generated/codex-app-server/v2/ModelListParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ModelListResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/ModelRerouteReason.js +0 -3
- package/dist/generated/codex-app-server/v2/ModelReroutedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/NetworkAccess.js +0 -3
- package/dist/generated/codex-app-server/v2/NetworkRequirements.js +0 -3
- package/dist/generated/codex-app-server/v2/OverriddenMetadata.js +0 -3
- package/dist/generated/codex-app-server/v2/PatchApplyStatus.js +0 -3
- package/dist/generated/codex-app-server/v2/PatchChangeKind.js +0 -3
- package/dist/generated/codex-app-server/v2/PlanDeltaNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/ProductSurface.js +0 -3
- package/dist/generated/codex-app-server/v2/ProfileV2.js +0 -3
- package/dist/generated/codex-app-server/v2/RateLimitSnapshot.js +0 -3
- package/dist/generated/codex-app-server/v2/RateLimitWindow.js +0 -3
- package/dist/generated/codex-app-server/v2/RawResponseItemCompletedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/ReadOnlyAccess.js +0 -3
- package/dist/generated/codex-app-server/v2/ReasoningEffortOption.js +0 -3
- package/dist/generated/codex-app-server/v2/ReasoningSummaryPartAddedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/ReasoningSummaryTextDeltaNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/ReasoningTextDeltaNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/RemoteSkillSummary.js +0 -3
- package/dist/generated/codex-app-server/v2/ResidencyRequirement.js +0 -3
- package/dist/generated/codex-app-server/v2/ReviewDelivery.js +0 -3
- package/dist/generated/codex-app-server/v2/ReviewStartParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ReviewStartResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/ReviewTarget.js +0 -3
- package/dist/generated/codex-app-server/v2/SandboxMode.js +0 -3
- package/dist/generated/codex-app-server/v2/SandboxPolicy.js +0 -3
- package/dist/generated/codex-app-server/v2/SandboxWorkspaceWrite.js +0 -3
- package/dist/generated/codex-app-server/v2/SessionSource.js +0 -3
- package/dist/generated/codex-app-server/v2/SkillDependencies.js +0 -3
- package/dist/generated/codex-app-server/v2/SkillErrorInfo.js +0 -3
- package/dist/generated/codex-app-server/v2/SkillInterface.js +0 -3
- package/dist/generated/codex-app-server/v2/SkillMetadata.js +0 -3
- package/dist/generated/codex-app-server/v2/SkillScope.js +0 -3
- package/dist/generated/codex-app-server/v2/SkillToolDependency.js +0 -3
- package/dist/generated/codex-app-server/v2/SkillsConfigWriteParams.js +0 -3
- package/dist/generated/codex-app-server/v2/SkillsConfigWriteResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/SkillsListEntry.js +0 -3
- package/dist/generated/codex-app-server/v2/SkillsListExtraRootsForCwd.js +0 -3
- package/dist/generated/codex-app-server/v2/SkillsListParams.js +0 -3
- package/dist/generated/codex-app-server/v2/SkillsListResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/SkillsRemoteReadParams.js +0 -3
- package/dist/generated/codex-app-server/v2/SkillsRemoteReadResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/SkillsRemoteWriteParams.js +0 -3
- package/dist/generated/codex-app-server/v2/SkillsRemoteWriteResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/TerminalInteractionNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/TextElement.js +0 -3
- package/dist/generated/codex-app-server/v2/TextPosition.js +0 -3
- package/dist/generated/codex-app-server/v2/TextRange.js +0 -3
- package/dist/generated/codex-app-server/v2/Thread.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadArchiveParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadArchiveResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadArchivedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadCompactStartParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadCompactStartResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadForkParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadForkResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadItem.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadListParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadListResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadLoadedListParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadLoadedListResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadNameUpdatedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadReadParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadReadResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadResumeParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadResumeResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadRollbackParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadRollbackResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadSetNameParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadSetNameResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadSortKey.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadSourceKind.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadStartParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadStartResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadStartedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadTokenUsage.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadTokenUsageUpdatedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadUnarchiveParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadUnarchiveResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/ThreadUnarchivedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/TokenUsageBreakdown.js +0 -3
- package/dist/generated/codex-app-server/v2/ToolRequestUserInputAnswer.js +0 -3
- package/dist/generated/codex-app-server/v2/ToolRequestUserInputOption.js +0 -3
- package/dist/generated/codex-app-server/v2/ToolRequestUserInputParams.js +0 -3
- package/dist/generated/codex-app-server/v2/ToolRequestUserInputQuestion.js +0 -3
- package/dist/generated/codex-app-server/v2/ToolRequestUserInputResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/ToolsV2.js +0 -3
- package/dist/generated/codex-app-server/v2/Turn.js +0 -3
- package/dist/generated/codex-app-server/v2/TurnCompletedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/TurnDiffUpdatedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/TurnError.js +0 -3
- package/dist/generated/codex-app-server/v2/TurnInterruptParams.js +0 -3
- package/dist/generated/codex-app-server/v2/TurnInterruptResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/TurnPlanStep.js +0 -3
- package/dist/generated/codex-app-server/v2/TurnPlanStepStatus.js +0 -3
- package/dist/generated/codex-app-server/v2/TurnPlanUpdatedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/TurnStartParams.js +0 -3
- package/dist/generated/codex-app-server/v2/TurnStartResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/TurnStartedNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/TurnStatus.js +0 -3
- package/dist/generated/codex-app-server/v2/TurnSteerParams.js +0 -3
- package/dist/generated/codex-app-server/v2/TurnSteerResponse.js +0 -3
- package/dist/generated/codex-app-server/v2/UserInput.js +0 -3
- package/dist/generated/codex-app-server/v2/WebSearchAction.js +0 -3
- package/dist/generated/codex-app-server/v2/WindowsWorldWritableWarningNotification.js +0 -3
- package/dist/generated/codex-app-server/v2/WriteStatus.js +0 -3
- package/dist/generated/codex-app-server/v2/index.js +0 -3
- package/dist/service/app_server.js +0 -441
- package/dist/service/buffered_client_message_sender.js +0 -89
- package/dist/service/companyhelm_api_client.js +0 -337
- package/dist/service/docker/app_server_container.js +0 -319
- package/dist/service/docker/dind.js +0 -114
- package/dist/service/docker/runtime_app_server_exec.js +0 -97
- package/dist/service/host.js +0 -15
- package/dist/service/runtime_bashrc.js +0 -57
- package/dist/service/runtime_shell.js +0 -23
- package/dist/service/sdk/refresh_models.js +0 -91
- package/dist/service/thread_lifecycle.js +0 -681
- package/dist/service/thread_runtime.js +0 -15
- package/dist/service/thread_turn_state.js +0 -46
- package/dist/service/thread_user_message_request_store.js +0 -136
- package/dist/service/workspace_agents.js +0 -82
- package/dist/state/daemon_state.js +0 -83
- package/dist/state/db.js +0 -63
- package/dist/state/schema.js +0 -59
- package/dist/templates/app_server_bootstrap.sh.j2 +0 -52
- package/dist/templates/runtime_agents.md.j2 +0 -50
- package/dist/templates/runtime_bashrc.j2 +0 -19
- package/dist/utils/async_queue.js +0 -102
- package/dist/utils/daemon.js +0 -15
- package/dist/utils/logger.js +0 -96
- package/dist/utils/path.js +0 -10
- package/dist/utils/process.js +0 -83
- package/dist/utils/terminal.js +0 -34
- package/drizzle/0000_nice_stepford_cuckoos.sql +0 -25
- package/drizzle/0001_third_vermin.sql +0 -22
- package/drizzle/0002_kind_sue_storm.sql +0 -1
- package/drizzle/0003_dizzy_micromax.sql +0 -35
- package/drizzle/0004_sloppy_alex_wilder.sql +0 -23
- package/drizzle/0005_open_toro.sql +0 -23
- package/drizzle/0006_fixed_jack_flag.sql +0 -23
- package/drizzle/0007_mute_lord_tyger.sql +0 -1
- package/drizzle/0008_melted_flatman.sql +0 -8
- package/drizzle/0009_powerful_hellcat.sql +0 -1
- package/drizzle/0010_wealthy_dorian_gray.sql +0 -24
- package/drizzle/0011_actual_lucky.sql +0 -7
- package/drizzle/meta/0000_snapshot.json +0 -174
- package/drizzle/meta/0001_snapshot.json +0 -212
- package/drizzle/meta/0002_snapshot.json +0 -219
- package/drizzle/meta/0003_snapshot.json +0 -240
- package/drizzle/meta/0004_snapshot.json +0 -240
- package/drizzle/meta/0005_snapshot.json +0 -240
- package/drizzle/meta/0006_snapshot.json +0 -240
- package/drizzle/meta/0007_snapshot.json +0 -247
- package/drizzle/meta/0008_snapshot.json +0 -306
- package/drizzle/meta/0009_snapshot.json +0 -313
- package/drizzle/meta/0010_snapshot.json +0 -261
- package/drizzle/meta/_journal.json +0 -90
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { buildManagedImageReference, getManagedImageDefinition } from "./ManagedImages.js";
|
|
2
|
+
const RETRYABLE_STATUS_CODES = new Set([429, 500, 502, 503, 504]);
|
|
3
|
+
const MAX_FETCH_ATTEMPTS = 3;
|
|
4
|
+
const DEFAULT_RETRY_DELAY_MS = 250;
|
|
5
|
+
class PublicRegistryRequestError extends Error {
|
|
6
|
+
status;
|
|
7
|
+
retryAfterMs;
|
|
8
|
+
constructor(url, status, retryAfterMs) {
|
|
9
|
+
super(`Public registry returned ${status} for ${url}.`);
|
|
10
|
+
this.status = status;
|
|
11
|
+
this.retryAfterMs = retryAfterMs;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export class PublicImageTagRegistry {
|
|
15
|
+
async listAvailableTags(service, limit = 20) {
|
|
16
|
+
if (!Number.isInteger(limit) || limit < 1) {
|
|
17
|
+
throw new Error("Image tag limit must be a positive integer.");
|
|
18
|
+
}
|
|
19
|
+
const { repositoryPath } = getManagedImageDefinition(service);
|
|
20
|
+
const token = await this.fetchToken(repositoryPath);
|
|
21
|
+
const response = await fetch(`https://public.ecr.aws/v2/${repositoryPath}/tags/list`, {
|
|
22
|
+
headers: {
|
|
23
|
+
Authorization: `Bearer ${token}`
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
if (!response.ok) {
|
|
27
|
+
throw new Error(`Public registry returned ${response.status} for ${service} tags.`);
|
|
28
|
+
}
|
|
29
|
+
const payload = (await response.json());
|
|
30
|
+
if (payload.errors?.length) {
|
|
31
|
+
throw new Error(payload.errors[0]?.message || `Unable to load ${service} image tags.`);
|
|
32
|
+
}
|
|
33
|
+
const uniqueTags = [...new Set(payload.tags ?? [])].map((tag, position) => ({ tag, position }));
|
|
34
|
+
const createdAtByDigest = new Map();
|
|
35
|
+
const tagsWithMetadata = [];
|
|
36
|
+
for (const { tag, position } of uniqueTags) {
|
|
37
|
+
tagsWithMetadata.push({
|
|
38
|
+
tag,
|
|
39
|
+
position,
|
|
40
|
+
createdAt: await this.fetchCreatedAt(repositoryPath, token, tag, createdAtByDigest)
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return tagsWithMetadata
|
|
44
|
+
.sort((left, right) => {
|
|
45
|
+
const leftTimestamp = left.createdAt ? Date.parse(left.createdAt) : Number.NEGATIVE_INFINITY;
|
|
46
|
+
const rightTimestamp = right.createdAt ? Date.parse(right.createdAt) : Number.NEGATIVE_INFINITY;
|
|
47
|
+
if (rightTimestamp !== leftTimestamp) {
|
|
48
|
+
return rightTimestamp - leftTimestamp;
|
|
49
|
+
}
|
|
50
|
+
return left.position - right.position;
|
|
51
|
+
})
|
|
52
|
+
.slice(0, limit)
|
|
53
|
+
.map(({ tag, createdAt }) => ({ tag, createdAt }));
|
|
54
|
+
}
|
|
55
|
+
buildImageReference(service, tag) {
|
|
56
|
+
return buildManagedImageReference(service, tag);
|
|
57
|
+
}
|
|
58
|
+
async fetchToken(repositoryPath) {
|
|
59
|
+
const scope = `repository:${repositoryPath}:pull`;
|
|
60
|
+
const response = await fetch(`https://public.ecr.aws/token/?service=public.ecr.aws&scope=${encodeURIComponent(scope)}`);
|
|
61
|
+
if (!response.ok) {
|
|
62
|
+
throw new Error(`Public registry token request returned ${response.status}.`);
|
|
63
|
+
}
|
|
64
|
+
const payload = (await response.json());
|
|
65
|
+
if (!payload.token) {
|
|
66
|
+
throw new Error("Public registry token response did not include a token.");
|
|
67
|
+
}
|
|
68
|
+
return payload.token;
|
|
69
|
+
}
|
|
70
|
+
async fetchCreatedAt(repositoryPath, token, tag, createdAtByDigest) {
|
|
71
|
+
try {
|
|
72
|
+
const manifestReference = await this.fetchJson(`https://public.ecr.aws/v2/${repositoryPath}/manifests/${encodeURIComponent(tag)}`, {
|
|
73
|
+
Authorization: `Bearer ${token}`,
|
|
74
|
+
Accept: [
|
|
75
|
+
"application/vnd.oci.image.index.v1+json",
|
|
76
|
+
"application/vnd.docker.distribution.manifest.list.v2+json",
|
|
77
|
+
"application/vnd.oci.image.manifest.v1+json",
|
|
78
|
+
"application/vnd.docker.distribution.manifest.v2+json"
|
|
79
|
+
].join(", ")
|
|
80
|
+
});
|
|
81
|
+
const digest = this.selectManifestDigest(manifestReference);
|
|
82
|
+
const manifest = digest
|
|
83
|
+
? await this.fetchJson(`https://public.ecr.aws/v2/${repositoryPath}/manifests/${encodeURIComponent(digest)}`, {
|
|
84
|
+
Authorization: `Bearer ${token}`,
|
|
85
|
+
Accept: ["application/vnd.oci.image.manifest.v1+json", "application/vnd.docker.distribution.manifest.v2+json"].join(", ")
|
|
86
|
+
})
|
|
87
|
+
: manifestReference;
|
|
88
|
+
const configDigest = "config" in manifest ? manifest.config?.digest : undefined;
|
|
89
|
+
if (!configDigest) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
if (createdAtByDigest.has(configDigest)) {
|
|
93
|
+
return createdAtByDigest.get(configDigest);
|
|
94
|
+
}
|
|
95
|
+
const config = await this.fetchJson(`https://public.ecr.aws/v2/${repositoryPath}/blobs/${configDigest}`, {
|
|
96
|
+
Authorization: `Bearer ${token}`
|
|
97
|
+
});
|
|
98
|
+
createdAtByDigest.set(configDigest, config.created);
|
|
99
|
+
return config.created;
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
if (error instanceof PublicRegistryRequestError) {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
throw error;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
selectManifestDigest(manifest) {
|
|
109
|
+
if (!("manifests" in manifest) || !manifest.manifests?.length) {
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
return (manifest.manifests.find((entry) => entry.platform?.os === "linux" && entry.platform?.architecture === "amd64")
|
|
113
|
+
?.digest ?? manifest.manifests[0]?.digest);
|
|
114
|
+
}
|
|
115
|
+
async fetchJson(url, headers) {
|
|
116
|
+
for (let attempt = 1; attempt <= MAX_FETCH_ATTEMPTS; attempt += 1) {
|
|
117
|
+
const response = await fetch(url, { headers });
|
|
118
|
+
if (response.ok) {
|
|
119
|
+
return (await response.json());
|
|
120
|
+
}
|
|
121
|
+
const retryAfterMs = this.parseRetryAfterMs(response);
|
|
122
|
+
if (attempt < MAX_FETCH_ATTEMPTS && RETRYABLE_STATUS_CODES.has(response.status)) {
|
|
123
|
+
await this.sleep(retryAfterMs ?? DEFAULT_RETRY_DELAY_MS * attempt);
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
throw new PublicRegistryRequestError(url, response.status, retryAfterMs);
|
|
127
|
+
}
|
|
128
|
+
throw new PublicRegistryRequestError(url, 500);
|
|
129
|
+
}
|
|
130
|
+
parseRetryAfterMs(response) {
|
|
131
|
+
const retryAfter = response.headers.get("retry-after");
|
|
132
|
+
if (!retryAfter) {
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
const retryAfterSeconds = Number.parseInt(retryAfter, 10);
|
|
136
|
+
if (Number.isFinite(retryAfterSeconds)) {
|
|
137
|
+
return Math.max(retryAfterSeconds, 0) * 1000;
|
|
138
|
+
}
|
|
139
|
+
const retryAt = Date.parse(retryAfter);
|
|
140
|
+
if (Number.isNaN(retryAt)) {
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
return Math.max(retryAt - Date.now(), 0);
|
|
144
|
+
}
|
|
145
|
+
async sleep(delayMs) {
|
|
146
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class RuntimePaths {
|
|
2
|
+
private readonly root;
|
|
3
|
+
constructor(root: string);
|
|
4
|
+
stateFilePath(): string;
|
|
5
|
+
composeFilePath(): string;
|
|
6
|
+
apiConfigPath(): string;
|
|
7
|
+
frontendConfigPath(): string;
|
|
8
|
+
seedFilePath(): string;
|
|
9
|
+
runnerConfigPath(): string;
|
|
10
|
+
runnerStateDbPath(): string;
|
|
11
|
+
runnerLogPath(): string;
|
|
12
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
export class RuntimePaths {
|
|
3
|
+
root;
|
|
4
|
+
constructor(root) {
|
|
5
|
+
this.root = root;
|
|
6
|
+
}
|
|
7
|
+
stateFilePath() {
|
|
8
|
+
return path.join(this.root, "state.json");
|
|
9
|
+
}
|
|
10
|
+
composeFilePath() {
|
|
11
|
+
return path.join(this.root, "docker-compose.yaml");
|
|
12
|
+
}
|
|
13
|
+
apiConfigPath() {
|
|
14
|
+
return path.join(this.root, "api-config.yaml");
|
|
15
|
+
}
|
|
16
|
+
frontendConfigPath() {
|
|
17
|
+
return path.join(this.root, "frontend-config.yaml");
|
|
18
|
+
}
|
|
19
|
+
seedFilePath() {
|
|
20
|
+
return path.join(this.root, "seed.sql");
|
|
21
|
+
}
|
|
22
|
+
runnerConfigPath() {
|
|
23
|
+
return path.join(this.root, "runner");
|
|
24
|
+
}
|
|
25
|
+
runnerStateDbPath() {
|
|
26
|
+
return path.join(this.runnerConfigPath(), "state.db");
|
|
27
|
+
}
|
|
28
|
+
runnerLogPath() {
|
|
29
|
+
return path.join(this.runnerConfigPath(), "daemon.log");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface RuntimePorts {
|
|
2
|
+
apiHttp: number;
|
|
3
|
+
ui: number;
|
|
4
|
+
runnerGrpc: number;
|
|
5
|
+
agentCliGrpc: number;
|
|
6
|
+
}
|
|
7
|
+
export interface RuntimeState {
|
|
8
|
+
version: 1;
|
|
9
|
+
company: {
|
|
10
|
+
id: string;
|
|
11
|
+
name: string;
|
|
12
|
+
};
|
|
13
|
+
auth: {
|
|
14
|
+
username: string;
|
|
15
|
+
password: string;
|
|
16
|
+
jwtPrivateKeyPem: string;
|
|
17
|
+
jwtPublicKeyPem: string;
|
|
18
|
+
};
|
|
19
|
+
runner: {
|
|
20
|
+
name: string;
|
|
21
|
+
secret: string;
|
|
22
|
+
};
|
|
23
|
+
ports: RuntimePorts;
|
|
24
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { RuntimeState } from "./RuntimeState.js";
|
|
2
|
+
export declare class RuntimeStateStore {
|
|
3
|
+
private readonly root;
|
|
4
|
+
private readonly runtimePaths;
|
|
5
|
+
private static readonly DEFAULT_USERNAME;
|
|
6
|
+
constructor(root: string);
|
|
7
|
+
initialize(): RuntimeState;
|
|
8
|
+
load(): RuntimeState | null;
|
|
9
|
+
private save;
|
|
10
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import { PortAllocator } from "./PortAllocator.js";
|
|
3
|
+
import { RuntimePaths } from "./RuntimePaths.js";
|
|
4
|
+
import { createPemKeyPair, randomCompanyId, randomSecret } from "./Secrets.js";
|
|
5
|
+
export class RuntimeStateStore {
|
|
6
|
+
root;
|
|
7
|
+
runtimePaths;
|
|
8
|
+
static DEFAULT_USERNAME = "admin@local";
|
|
9
|
+
constructor(root) {
|
|
10
|
+
this.root = root;
|
|
11
|
+
this.runtimePaths = new RuntimePaths(root);
|
|
12
|
+
}
|
|
13
|
+
initialize() {
|
|
14
|
+
const existingState = this.load();
|
|
15
|
+
if (existingState) {
|
|
16
|
+
return existingState;
|
|
17
|
+
}
|
|
18
|
+
fs.mkdirSync(this.root, { recursive: true });
|
|
19
|
+
const authKeys = createPemKeyPair();
|
|
20
|
+
const state = {
|
|
21
|
+
version: 1,
|
|
22
|
+
company: {
|
|
23
|
+
id: randomCompanyId(),
|
|
24
|
+
name: "Local CompanyHelm"
|
|
25
|
+
},
|
|
26
|
+
auth: {
|
|
27
|
+
username: RuntimeStateStore.DEFAULT_USERNAME,
|
|
28
|
+
password: randomSecret(),
|
|
29
|
+
jwtPrivateKeyPem: authKeys.privateKeyPem,
|
|
30
|
+
jwtPublicKeyPem: authKeys.publicKeyPem
|
|
31
|
+
},
|
|
32
|
+
runner: {
|
|
33
|
+
name: "local-runner",
|
|
34
|
+
secret: randomSecret()
|
|
35
|
+
},
|
|
36
|
+
ports: new PortAllocator().allocate()
|
|
37
|
+
};
|
|
38
|
+
this.save(state);
|
|
39
|
+
return state;
|
|
40
|
+
}
|
|
41
|
+
load() {
|
|
42
|
+
if (!fs.existsSync(this.runtimePaths.stateFilePath())) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
const state = JSON.parse(fs.readFileSync(this.runtimePaths.stateFilePath(), "utf8"));
|
|
46
|
+
if (state.auth.username !== RuntimeStateStore.DEFAULT_USERNAME && state.auth.username === "admin") {
|
|
47
|
+
state.auth.username = RuntimeStateStore.DEFAULT_USERNAME;
|
|
48
|
+
this.save(state);
|
|
49
|
+
}
|
|
50
|
+
return state;
|
|
51
|
+
}
|
|
52
|
+
save(state) {
|
|
53
|
+
fs.writeFileSync(this.runtimePaths.stateFilePath(), `${JSON.stringify(state, null, 2)}\n`, {
|
|
54
|
+
encoding: "utf8",
|
|
55
|
+
mode: 0o600
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function randomSecret(length?: number): string;
|
|
2
|
+
export declare function randomCompanyId(): string;
|
|
3
|
+
export declare function createPasswordHash(password: string): {
|
|
4
|
+
passwordSalt: string;
|
|
5
|
+
passwordHash: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function createPemKeyPair(): {
|
|
8
|
+
privateKeyPem: string;
|
|
9
|
+
publicKeyPem: string;
|
|
10
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { generateKeyPairSync, randomBytes, randomUUID, scryptSync } from "node:crypto";
|
|
2
|
+
export function randomSecret(length = 24) {
|
|
3
|
+
return randomBytes(length).toString("base64url");
|
|
4
|
+
}
|
|
5
|
+
export function randomCompanyId() {
|
|
6
|
+
return randomUUID();
|
|
7
|
+
}
|
|
8
|
+
export function createPasswordHash(password) {
|
|
9
|
+
const passwordSalt = randomBytes(16).toString("hex");
|
|
10
|
+
const passwordHash = scryptSync(password, passwordSalt, 64).toString("hex");
|
|
11
|
+
return {
|
|
12
|
+
passwordSalt,
|
|
13
|
+
passwordHash
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export function createPemKeyPair() {
|
|
17
|
+
const { privateKey, publicKey } = generateKeyPairSync("rsa", {
|
|
18
|
+
modulusLength: 2048,
|
|
19
|
+
privateKeyEncoding: { format: "pem", type: "pkcs1" },
|
|
20
|
+
publicKeyEncoding: { format: "pem", type: "pkcs1" }
|
|
21
|
+
});
|
|
22
|
+
return {
|
|
23
|
+
privateKeyPem: privateKey,
|
|
24
|
+
publicKeyPem: publicKey
|
|
25
|
+
};
|
|
26
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type RuntimeImages } from "./ImageCatalog.js";
|
|
2
|
+
export interface RuntimeVersions {
|
|
3
|
+
cliPackage: string;
|
|
4
|
+
runnerPackage: string;
|
|
5
|
+
images: RuntimeImages;
|
|
6
|
+
}
|
|
7
|
+
export declare class VersionCatalog {
|
|
8
|
+
resolve(): RuntimeVersions;
|
|
9
|
+
private readPackageVersion;
|
|
10
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { createRequire } from "node:module";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { ImageCatalog } from "./ImageCatalog.js";
|
|
6
|
+
const require = createRequire(import.meta.url);
|
|
7
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
+
const __dirname = path.dirname(__filename);
|
|
9
|
+
export class VersionCatalog {
|
|
10
|
+
resolve() {
|
|
11
|
+
return {
|
|
12
|
+
cliPackage: this.readPackageVersion(path.resolve(__dirname, "../../../package.json")),
|
|
13
|
+
runnerPackage: this.readPackageVersion(require.resolve("@companyhelm/runner/package.json")),
|
|
14
|
+
images: new ImageCatalog().resolve()
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
readPackageVersion(packageJsonPath) {
|
|
18
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
|
|
19
|
+
return `${packageJson.name}@${packageJson.version}`;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type ManagedServiceStatus = "running" | "stopped";
|
|
2
|
+
export interface StatusSnapshot {
|
|
3
|
+
postgres: ManagedServiceStatus;
|
|
4
|
+
api: ManagedServiceStatus;
|
|
5
|
+
frontend: ManagedServiceStatus;
|
|
6
|
+
runner: ManagedServiceStatus;
|
|
7
|
+
}
|
|
8
|
+
export interface StatusOverrides {
|
|
9
|
+
runner?: () => Promise<boolean> | boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare class StatusService {
|
|
12
|
+
private readonly listRunningServices;
|
|
13
|
+
private readonly overrides;
|
|
14
|
+
constructor(listRunningServices: () => Promise<string>, overrides?: StatusOverrides);
|
|
15
|
+
read(): Promise<StatusSnapshot>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export class StatusService {
|
|
2
|
+
listRunningServices;
|
|
3
|
+
overrides;
|
|
4
|
+
constructor(listRunningServices, overrides = {}) {
|
|
5
|
+
this.listRunningServices = listRunningServices;
|
|
6
|
+
this.overrides = overrides;
|
|
7
|
+
}
|
|
8
|
+
async read() {
|
|
9
|
+
const running = new Set((await this.listRunningServices())
|
|
10
|
+
.split("\n")
|
|
11
|
+
.map((service) => service.trim())
|
|
12
|
+
.filter(Boolean));
|
|
13
|
+
const runnerRunning = this.overrides.runner ? await this.overrides.runner() : running.has("runner");
|
|
14
|
+
return {
|
|
15
|
+
postgres: running.has("postgres") ? "running" : "stopped",
|
|
16
|
+
api: running.has("api") ? "running" : "stopped",
|
|
17
|
+
frontend: running.has("frontend") ? "running" : "stopped",
|
|
18
|
+
runner: runnerRunning ? "running" : "stopped"
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { StatusReport } from "../../commands/dependencies.js";
|
|
2
|
+
export declare class TerminalRenderer {
|
|
3
|
+
private readonly useColor;
|
|
4
|
+
private static readonly OSC;
|
|
5
|
+
private static readonly BEL;
|
|
6
|
+
constructor(useColor?: boolean);
|
|
7
|
+
renderBanner(): string;
|
|
8
|
+
success(message: string): string;
|
|
9
|
+
progress(message: string): string;
|
|
10
|
+
successHighlight(message: string): string;
|
|
11
|
+
clickableUrl(url: string): string;
|
|
12
|
+
renderStatus(report: StatusReport): string;
|
|
13
|
+
private renderServiceLine;
|
|
14
|
+
private warn;
|
|
15
|
+
private formatDetail;
|
|
16
|
+
private colorize;
|
|
17
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import figlet from "figlet";
|
|
3
|
+
export class TerminalRenderer {
|
|
4
|
+
useColor;
|
|
5
|
+
static OSC = "\u001B]";
|
|
6
|
+
static BEL = "\u0007";
|
|
7
|
+
constructor(useColor = true) {
|
|
8
|
+
this.useColor = useColor;
|
|
9
|
+
}
|
|
10
|
+
renderBanner() {
|
|
11
|
+
const banner = figlet.textSync("COMPANYHELM", {
|
|
12
|
+
horizontalLayout: "fitted"
|
|
13
|
+
});
|
|
14
|
+
return this.colorize(`COMPANYHELM\n${banner}`, "cyan");
|
|
15
|
+
}
|
|
16
|
+
success(message) {
|
|
17
|
+
return `${this.colorize("[ok]", "green")} ${message}`;
|
|
18
|
+
}
|
|
19
|
+
progress(message) {
|
|
20
|
+
return this.colorize(`... ${message}`, "cyan");
|
|
21
|
+
}
|
|
22
|
+
successHighlight(message) {
|
|
23
|
+
if (!this.useColor) {
|
|
24
|
+
return message;
|
|
25
|
+
}
|
|
26
|
+
return chalk.green.bold(message);
|
|
27
|
+
}
|
|
28
|
+
clickableUrl(url) {
|
|
29
|
+
if (!this.useColor) {
|
|
30
|
+
return url;
|
|
31
|
+
}
|
|
32
|
+
const display = this.successHighlight(url);
|
|
33
|
+
return `${TerminalRenderer.OSC}8;;${url}${TerminalRenderer.BEL}${display}${TerminalRenderer.OSC}8;;${TerminalRenderer.BEL}`;
|
|
34
|
+
}
|
|
35
|
+
renderStatus(report) {
|
|
36
|
+
const lines = ["Status"];
|
|
37
|
+
lines.push(this.renderServiceLine("Postgres", report.services.postgres));
|
|
38
|
+
lines.push(this.renderServiceLine("API", report.services.api, report.apiUrl));
|
|
39
|
+
lines.push(this.renderServiceLine("Frontend", report.services.frontend, report.uiUrl));
|
|
40
|
+
lines.push(this.renderServiceLine("Runner", report.services.runner));
|
|
41
|
+
if (report.versions) {
|
|
42
|
+
lines.push(`CompanyHelm CLI: ${report.versions.cliPackage}`);
|
|
43
|
+
lines.push(`Runner package: ${report.versions.runnerPackage}`);
|
|
44
|
+
lines.push(`API image: ${report.versions.images.api}`);
|
|
45
|
+
lines.push(`Frontend image: ${report.versions.images.frontend}`);
|
|
46
|
+
lines.push(`Postgres image: ${report.versions.images.postgres}`);
|
|
47
|
+
}
|
|
48
|
+
if (report.username) {
|
|
49
|
+
lines.push(`username: ${report.username}`);
|
|
50
|
+
}
|
|
51
|
+
return lines.join("\n");
|
|
52
|
+
}
|
|
53
|
+
renderServiceLine(label, status, detail) {
|
|
54
|
+
const statusLabel = status === "running" ? this.success("running") : this.warn("stopped");
|
|
55
|
+
return detail && status === "running"
|
|
56
|
+
? `${label}: ${statusLabel} (${this.formatDetail(detail)})`
|
|
57
|
+
: `${label}: ${statusLabel}`;
|
|
58
|
+
}
|
|
59
|
+
warn(message) {
|
|
60
|
+
return `${this.colorize("[!]", "yellow")} ${message}`;
|
|
61
|
+
}
|
|
62
|
+
formatDetail(detail) {
|
|
63
|
+
return detail.startsWith("http://") || detail.startsWith("https://") ? this.clickableUrl(detail) : detail;
|
|
64
|
+
}
|
|
65
|
+
colorize(text, color) {
|
|
66
|
+
if (!this.useColor) {
|
|
67
|
+
return text;
|
|
68
|
+
}
|
|
69
|
+
return chalk[color](text);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
services:
|
|
2
|
+
postgres:
|
|
3
|
+
image: {{POSTGRES_IMAGE}}
|
|
4
|
+
environment:
|
|
5
|
+
POSTGRES_USER: postgres
|
|
6
|
+
POSTGRES_PASSWORD: postgres
|
|
7
|
+
POSTGRES_DB: companyhelm
|
|
8
|
+
volumes:
|
|
9
|
+
- companyhelm_postgres_data:/var/lib/postgresql/data
|
|
10
|
+
- "{{SEED_FILE_PATH}}:/run/companyhelm/seed.sql:ro"
|
|
11
|
+
networks:
|
|
12
|
+
- companyhelm
|
|
13
|
+
|
|
14
|
+
api:
|
|
15
|
+
image: {{API_IMAGE}}
|
|
16
|
+
platform: linux/amd64
|
|
17
|
+
depends_on:
|
|
18
|
+
- postgres
|
|
19
|
+
env_file:
|
|
20
|
+
- "{{API_ENV_PATH}}"
|
|
21
|
+
environment:
|
|
22
|
+
COMPANYHELM_CONFIG_PATH: /run/companyhelm/config.yaml
|
|
23
|
+
ports:
|
|
24
|
+
- "{{API_HTTP_PORT}}:4000"
|
|
25
|
+
- "{{RUNNER_GRPC_PORT}}:{{RUNNER_GRPC_PORT}}"
|
|
26
|
+
- "{{AGENT_CLI_GRPC_PORT}}:{{AGENT_CLI_GRPC_PORT}}"
|
|
27
|
+
volumes:
|
|
28
|
+
- "{{API_CONFIG_PATH}}:/run/companyhelm/config.yaml:ro"
|
|
29
|
+
networks:
|
|
30
|
+
- companyhelm
|
|
31
|
+
|
|
32
|
+
{{FRONTEND_SERVICE_BLOCK}}
|
|
33
|
+
|
|
34
|
+
networks:
|
|
35
|
+
companyhelm:
|
|
36
|
+
driver: bridge
|
|
37
|
+
|
|
38
|
+
volumes:
|
|
39
|
+
companyhelm_postgres_data:
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
BEGIN;
|
|
2
|
+
|
|
3
|
+
INSERT INTO companies (id, name)
|
|
4
|
+
VALUES ('{{COMPANY_ID}}', '{{COMPANY_NAME}}')
|
|
5
|
+
ON CONFLICT (id) DO UPDATE
|
|
6
|
+
SET name = EXCLUDED.name;
|
|
7
|
+
|
|
8
|
+
UPDATE users
|
|
9
|
+
SET first_name = '{{USER_FIRST_NAME}}',
|
|
10
|
+
last_name = NULL,
|
|
11
|
+
email = '{{USER_EMAIL}}',
|
|
12
|
+
auth_provider = 'companyhelm',
|
|
13
|
+
updated_at = NOW()
|
|
14
|
+
WHERE id = '{{USER_ID}}'
|
|
15
|
+
OR email = '{{USER_EMAIL}}';
|
|
16
|
+
|
|
17
|
+
INSERT INTO users (id, first_name, last_name, email, auth_provider, created_at, updated_at)
|
|
18
|
+
SELECT
|
|
19
|
+
'{{USER_ID}}',
|
|
20
|
+
'{{USER_FIRST_NAME}}',
|
|
21
|
+
NULL,
|
|
22
|
+
'{{USER_EMAIL}}',
|
|
23
|
+
'companyhelm',
|
|
24
|
+
NOW(),
|
|
25
|
+
NOW()
|
|
26
|
+
WHERE NOT EXISTS (
|
|
27
|
+
SELECT 1
|
|
28
|
+
FROM users
|
|
29
|
+
WHERE id = '{{USER_ID}}'
|
|
30
|
+
OR email = '{{USER_EMAIL}}'
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
UPDATE user_auths
|
|
34
|
+
SET user_id = '{{USER_ID}}',
|
|
35
|
+
email = '{{USER_EMAIL}}',
|
|
36
|
+
password_salt = '{{PASSWORD_SALT}}',
|
|
37
|
+
password_hash = '{{PASSWORD_HASH}}',
|
|
38
|
+
updated_at = NOW()
|
|
39
|
+
WHERE user_id = '{{USER_ID}}'
|
|
40
|
+
OR email = '{{USER_EMAIL}}';
|
|
41
|
+
|
|
42
|
+
INSERT INTO user_auths (id, user_id, email, password_salt, password_hash, created_at, updated_at)
|
|
43
|
+
SELECT
|
|
44
|
+
'{{USER_AUTH_ID}}',
|
|
45
|
+
'{{USER_ID}}',
|
|
46
|
+
'{{USER_EMAIL}}',
|
|
47
|
+
'{{PASSWORD_SALT}}',
|
|
48
|
+
'{{PASSWORD_HASH}}',
|
|
49
|
+
NOW(),
|
|
50
|
+
NOW()
|
|
51
|
+
WHERE NOT EXISTS (
|
|
52
|
+
SELECT 1
|
|
53
|
+
FROM user_auths
|
|
54
|
+
WHERE user_id = '{{USER_ID}}'
|
|
55
|
+
OR email = '{{USER_EMAIL}}'
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
INSERT INTO company_members (company_id, user_id)
|
|
59
|
+
VALUES ('{{COMPANY_ID}}', '{{USER_ID}}')
|
|
60
|
+
ON CONFLICT (company_id, user_id) DO NOTHING;
|
|
61
|
+
|
|
62
|
+
INSERT INTO agent_runners (id, company_id, secret_hash, status, name)
|
|
63
|
+
VALUES (
|
|
64
|
+
'{{RUNNER_ID}}',
|
|
65
|
+
'{{COMPANY_ID}}',
|
|
66
|
+
'{{RUNNER_SECRET_HASH}}',
|
|
67
|
+
'ready',
|
|
68
|
+
'{{RUNNER_NAME}}'
|
|
69
|
+
)
|
|
70
|
+
ON CONFLICT (id) DO UPDATE
|
|
71
|
+
SET company_id = EXCLUDED.company_id,
|
|
72
|
+
secret_hash = EXCLUDED.secret_hash,
|
|
73
|
+
status = EXCLUDED.status,
|
|
74
|
+
name = EXCLUDED.name;
|
|
75
|
+
|
|
76
|
+
COMMIT;
|