Directories
ยถ
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
hoist
command
Command hoist is a terminal UI that promotes container images between environments in an Argo CD GitOps repository and follows the change through PR, merge and rollout.
|
Command hoist is a terminal UI that promotes container images between environments in an Argo CD GitOps repository and follows the change through PR, merge and rollout. |
|
internal
|
|
|
app
Package app is the root Bubble Tea model for the hoist TUI.
|
Package app is the root Bubble Tea model for the hoist TUI. |
|
app/activity
Package activity is the root's own record of what has happened this session โ every promotion started, landed, blocked or failed, every abandon, every browser-launch outcome โ kept as an append-only, capped Log (AGENTS.md ยง4.8) rather than the single transient "notice" string app.Model carried before this package existed.
|
Package activity is the root's own record of what has happened this session โ every promotion started, landed, blocked or failed, every abandon, every browser-launch outcome โ kept as an append-only, capped Log (AGENTS.md ยง4.8) rather than the single transient "notice" string app.Model carried before this package existed. |
|
app/config
Package config is the read-only config screen (#104): what `hoist config show` and `hoist config path` print, on the TUI.
|
Package config is the read-only config screen (#104): what `hoist config show` and `hoist config path` print, on the TUI. |
|
app/deploy
Package deploy is the confirm screen for writing one named image into one env โ the "image bump" half of hoist's problem statement, reached with d on the matrix and a tag chosen in internal/app/tags.
|
Package deploy is the confirm screen for writing one named image into one env โ the "image bump" half of hoist's problem statement, reached with d on the matrix and a tag chosen in internal/app/tags. |
|
app/flight
Package flight is the flight screen: shown once a promotion starts driving through engine.AllSteps (branch, commit, push, PR, CI green, approved, merged, then (M5) Argo refresh, Argo sync, rollout), it lists every step with a glyph for its current state, the active step's own human detail text, a stopwatch since the promotion started, and a togglable scrollback of PromotionState.History.
|
Package flight is the flight screen: shown once a promotion starts driving through engine.AllSteps (branch, commit, push, PR, CI green, approved, merged, then (M5) Argo refresh, Argo sync, rollout), it lists every step with a glyph for its current state, the active step's own human detail text, a stopwatch since the promotion started, and a togglable scrollback of PromotionState.History. |
|
app/history
Package history holds the function types through which screens ask about commit history and migration deltas โ types only, no Bubble Tea, no adaptor construction.
|
Package history holds the function types through which screens ask about commit history and migration deltas โ types only, no Bubble Tea, no adaptor construction. |
|
app/matrix
Package matrix is the env ร family screen: one row per family, one column per env, the family's image tag in each cell with its state spelled out โ pinned, unpinned, split, external, drifted โ as a word an operator can read without a legend.
|
Package matrix is the env ร family screen: one row per family, one column per env, the family's image tag in each cell with its state spelled out โ pinned, unpinned, split, external, drifted โ as a word an operator can read without a legend. |
|
app/plan
Package plan is the plan/confirm screen: it runs discovery + digest resolution + gitops.BuildPlan for one source/target env pair, shows a tickable list of image repos on the left and, on the right, what the promotion ships for the repo under the cursor โ the commits between what the target declares and what the source resolved to, and the migrations among them (M10, #85 screen 04/12) โ with the unified diff one key away.
|
Package plan is the plan/confirm screen: it runs discovery + digest resolution + gitops.BuildPlan for one source/target env pair, shows a tickable list of image repos on the left and, on the right, what the promotion ships for the repo under the cursor โ the commits between what the target declares and what the source resolved to, and the migrations among them (M10, #85 screen 04/12) โ with the unified diff one key away. |
|
app/restart
Package restart is the matrix's shift+r key: the screen that shows what a restart would roll, takes the confirmation, and follows the rollout.
|
Package restart is the matrix's shift+r key: the screen that shows what a restart would roll, takes the confirmation, and follows the rollout. |
|
app/scope
Package scope stamps an async command's result with the screen instance that issued it, so Update can tell a request its own current instance is still waiting on from one an earlier instance of the same kind of screen never got to see land.
|
Package scope stamps an async command's result with the screen instance that issued it, so Update can tell a request its own current instance is still waiting on from one an earlier instance of the same kind of screen never got to see land. |
|
app/session
Package session is the controller that owns every drive a promotion or deploy goes through once the operator confirms it: starting it (internal/service.Service.StartPromotion), resuming one already on disk (Resume), stepping it to completion one poll at a time, abandoning it, and keeping the matrix's in-flight pane listed โ all of it re-observed, never trusted from a screen's own memory (AGENTS.md ยง4.1).
|
Package session is the controller that owns every drive a promotion or deploy goes through once the operator confirms it: starting it (internal/service.Service.StartPromotion), resuming one already on disk (Resume), stepping it to completion one poll at a time, abandoning it, and keeping the matrix's in-flight pane listed โ all of it re-observed, never trusted from a screen's own memory (AGENTS.md ยง4.1). |
|
app/tags
Package tags is the tag-picker screen: given one image repo, it lists the registry's own tags and, once each row's metadata loads, its created time and digest โ sorted per AGENTS.md's M6 brief invariant 3 (prefer the app repo's own git tags for ordering when the image repo is mapped; fall back to the registry's own Created metadata otherwise).
|
Package tags is the tag-picker screen: given one image repo, it lists the registry's own tags and, once each row's metadata loads, its created time and digest โ sorted per AGENTS.md's M6 brief invariant 3 (prefer the app repo's own git tags for ordering when the image repo is mapped; fall back to the registry's own Created metadata otherwise). |
|
app/watch
Package watch is the matrix's w key: one Argo Application's sync/health/revision and the rollout state of every workload its family declares, re-read on a cadence โ the TUI face of `hoist watch --app <name>` (#101).
|
Package watch is the matrix's w key: one Argo Application's sync/health/revision and the rollout state of every workload its family declares, re-read on a cadence โ the TUI face of `hoist watch --app <name>` (#101). |
|
app/writepath
Package writepath holds what the plan and deploy confirm screens share about the write they are about to make: the Mode values their StartMsgs carry and the diff both render.
|
Package writepath holds what the plan and deploy confirm screens share about the write they are about to make: the Mode values their StartMsgs carry and the diff both render. |
|
config
Package config loads hoist's config file: $XDG_CONFIG_HOME/hoist/config.yaml, or ~/.config/hoist/config.yaml when XDG_CONFIG_HOME is unset โ the same rule on every platform, so the docs stay one sentence โ overridable with --config <path>.
|
Package config loads hoist's config file: $XDG_CONFIG_HOME/hoist/config.yaml, or ~/.config/hoist/config.yaml when XDG_CONFIG_HOME is unset โ the same rule on every platform, so the docs stay one sentence โ overridable with --config <path>. |
|
engine
Package engine drives one promotion's four steps โ branch, commit, push, PR โ to completion, re-observing the remote before every action (AGENTS.md ยง4.1: "the world is the state").
|
Package engine drives one promotion's four steps โ branch, commit, push, PR โ to completion, re-observing the remote before every action (AGENTS.md ยง4.1: "the world is the state"). |
|
restart
Package restart is the shared core of `hoist restart` and the matrix's R key: what a restart targets, what is worth warning about before it runs, how the write is made safely, and how the rollout that follows is observed.
|
Package restart is the shared core of `hoist restart` and the matrix's R key: what a restart targets, what is worth warning about before it runs, how the write is made safely, and how the rollout that follows is observed. |
|
service
Package service is the one use-case layer both cmd/hoist and the TUI call โ application logic that used to live only in package main, duplicated (and quietly diverging) between the CLI's flags-to-render path and the TUI's own wiring.
|
Package service is the one use-case layer both cmd/hoist and the TUI call โ application logic that used to live only in package main, duplicated (and quietly diverging) between the CLI's flags-to-render path and the TUI's own wiring. |
|
ui
Package ui holds what every hoist screen shares: one Styles palette built from a light/dark flag, the frame and pane chrome every screen is drawn in (frame.go), the dialog compositor (dialog.go), relative-time wording (time.go) and the status-bar line helper.
|
Package ui holds what every hoist screen shares: one Styles palette built from a light/dark flag, the frame and pane chrome every screen is drawn in (frame.go), the dialog compositor (dialog.go), relative-time wording (time.go) and the status-bar line helper. |
|
ui/confirm
Package confirm builds the standalone huh.Confirm every screen raises inside a ui.Dialog.
|
Package confirm builds the standalone huh.Confirm every screen raises inside a ui.Dialog. |
|
ui/keys
Package keys is the one registry of the whole approved screen ร key table (docs/audit/2026-09-ux-arch-audit.md, "Proposed keymap"), plus the two things every screen needs to act on it: a write-binding matcher that tells legacy-shift from caps lock (ยง9 entry 13), and the footer helper that lays out hints under ยง9 entry 10's "the frame owns every row" rule.
|
Package keys is the one registry of the whole approved screen ร key table (docs/audit/2026-09-ux-arch-audit.md, "Proposed keymap"), plus the two things every screen needs to act on it: a write-binding matcher that tells legacy-shift from caps lock (ยง9 entry 13), and the footer helper that lays out hints under ยง9 entry 10's "the frame owns every row" rule. |
|
ui/uitest
Package uitest is the one harness every screen's tests render through (AGENTS.md ยง4.8, M10): a golden comparison at a stated terminal size that also asserts the shape a terminal would actually show โ exactly height lines, none wider than width โ and a way to drive a screen with real keypresses, so a test can never pass by setting the field a key would have set.
|
Package uitest is the one harness every screen's tests render through (AGENTS.md ยง4.8, M10): a golden comparison at a stated terminal size that also asserts the shape a terminal would actually show โ exactly height lines, none wider than width โ and a way to drive a screen with real keypresses, so a test can never pass by setting the field a key would have set. |
|
pkg
|
|
|
argo
Package argo drives Argo CD entirely through the Kubernetes API: the dynamic client against the Application custom resource (argoproj.io/v1alpha1), never Argo's own REST/gRPC server and never an Argo API token (AGENTS.md ยง4.7, docs/repo-map.md's Kubernetes API row).
|
Package argo drives Argo CD entirely through the Kubernetes API: the dynamic client against the Application custom resource (argoproj.io/v1alpha1), never Argo's own REST/gRPC server and never an Argo API token (AGENTS.md ยง4.7, docs/repo-map.md's Kubernetes API row). |
|
forge
Package forge is the code-host boundary (GitHub today; AGENTS.md ยง11 leaves GitLab as an interface with no adaptor until a GitLab repo needs one).
|
Package forge is the code-host boundary (GitHub today; AGENTS.md ยง11 leaves GitLab as an interface with no adaptor until a GitLab repo needs one). |
|
forge/github
Package github implements pkg/forge.Forge against the real GitHub REST API, using github.com/cli/go-gh/v2 (AGENTS.md ยง4.7's one sanctioned new dependency for M3 โ not google/go-github, not a hand-rolled REST client, not the full gh CLI as a library).
|
Package github implements pkg/forge.Forge against the real GitHub REST API, using github.com/cli/go-gh/v2 (AGENTS.md ยง4.7's one sanctioned new dependency for M3 โ not google/go-github, not a hand-rolled REST client, not the full gh CLI as a library). |
|
git
Package git drives the git binary โ never go-git (AGENTS.md ยง4.6) โ so that a commit made on the user's behalf inherits the user's own signing configuration (gpg.format=ssh, user.signingkey, 1Password's gpg.ssh.program, includeIf) exactly as if the user had typed the command themselves.
|
Package git drives the git binary โ never go-git (AGENTS.md ยง4.6) โ so that a commit made on the user's behalf inherits the user's own signing configuration (gpg.format=ssh, user.signingkey, 1Password's gpg.ssh.program, includeIf) exactly as if the user had typed the command themselves. |
|
gitops
Package gitops reads an Argo CD GitOps repository and plans, applies and verifies byte-minimal image promotions between its environments.
|
Package gitops reads an Argo CD GitOps repository and plans, applies and verifies byte-minimal image promotions between its environments. |
|
image
Package image parses, prints and identifies container image references.
|
Package image parses, prints and identifies container image references. |
|
k8s
Package k8s reads what a namespace is running and, opt-in, one image pull secret.
|
Package k8s reads what a namespace is running and, opt-in, one image pull secret. |
|
migrate
Package migrate answers the question the confirm screens lead with: between the build an env is running and the build about to be written into it, which commits ship, and does any of them migrate the database (R-005 in docs/repo-map.md โ on the target repo every Application auto-syncs and the app entrypoint runs db:prepare, so a merge can migrate production as a side effect).
|
Package migrate answers the question the confirm screens lead with: between the build an env is running and the build about to be written into it, which commits ship, and does any of them migrate the database (R-005 in docs/repo-map.md โ on the target repo every Application auto-syncs and the app entrypoint runs db:prepare, so a merge can migrate production as a side effect). |
|
redact
Package redact turns transport errors into messages that carry no address and no secret.
|
Package redact turns transport errors into messages that carry no address and no secret. |
|
registry
Package registry resolves tags to digests and lists tags, behind an ordered, explicit credential chain.
|
Package registry resolves tags to digests and lists tags, behind an ordered, explicit credential chain. |
|
resolve
Package resolve turns the source env's image occurrences into the pinned references a promotion writes, from what the env is running first, then its manifests, then the registry โ never a guess (AGENTS.md ยง4.2, principle 3).
|
Package resolve turns the source env's image occurrences into the pinned references a promotion writes, from what the env is running first, then its manifests, then the registry โ never a guess (AGENTS.md ยง4.2, principle 3). |
|
rollout
Package rollout reads Deployment rollout completeness, and reports current Job/CronJob state, through the typed client-go clientset (k8s.io/api/apps/v1, k8s.io/api/batch/v1) โ no dynamic client needed, since these are stable, already-vendored Go types โ following the same client-go adaptor shape pkg/k8s established (cluster.go/kubeconfig.go/fake.go): a thin wrapper over kubernetes.Interface, redaction at every error boundary, a fake clientset for tests.
|
Package rollout reads Deployment rollout completeness, and reports current Job/CronJob state, through the typed client-go clientset (k8s.io/api/apps/v1, k8s.io/api/batch/v1) โ no dynamic client needed, since these are stable, already-vendored Go types โ following the same client-go adaptor shape pkg/k8s established (cluster.go/kubeconfig.go/fake.go): a thin wrapper over kubernetes.Interface, redaction at every error boundary, a fake clientset for tests. |
Click to show internal directories.
Click to hide internal directories.