Skip to content
Merged

Dev #186

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
6bf0e01
fix(deploy-app): enrich agent enqueue env configs
robotizeit May 14, 2026
fa05a28
phase1
robotizeit May 14, 2026
c9e124a
Config inventory implemented
robotizeit May 17, 2026
a195b94
config promote and docs
robotizeit May 17, 2026
9e95eec
formatting columns for inventory list
robotizeit May 17, 2026
3b8bf50
prevent npm duplicate run
robotizeit May 18, 2026
e495e6c
conflict fix
robotizeit May 18, 2026
b870322
merged config-inventory + prevent port conflict
robotizeit May 18, 2026
8666235
remote metadata warnings are now concise by default
robotizeit May 18, 2026
d8da95c
stacker proxy, npm reinstall, cloud firewall debug.
robotizeit May 18, 2026
7451851
Merge branch 'ai-state-contracts' into dev
robotizeit May 18, 2026
29c40a7
merge from AI-state/MCP work
robotizeit May 19, 2026
f9e8ee7
agent.system_info in status output
robotizeit May 19, 2026
5caffef
MCP fixes for local deployments, config setup ai
robotizeit May 19, 2026
aa87888
default server type fix
robotizeit May 19, 2026
92e07c4
Stacker now mirrors deploy-time config files like .env
robotizeit May 19, 2026
5f3a5f3
test fix
robotizeit May 19, 2026
c7a3acb
location fix
robotizeit May 19, 2026
fac7749
merge from main
robotizeit May 19, 2026
39e83b3
deserialization error fix
robotizeit May 21, 2026
78f2526
proxy fixes, pipe fixes, custom service deploy fix
robotizeit May 21, 2026
fda9dc2
pipe scan --containers web, now detects the html forms locally
robotizeit May 21, 2026
0b64f84
pipe crate for adapters, imap/pop3, sdk
robotizeit May 22, 2026
363b933
extend pipe target with adapetrs
robotizeit May 22, 2026
6a82683
local pipe validation, trigger, activate, tested
robotizeit May 22, 2026
433788e
include crates dir
robotizeit May 22, 2026
e113f55
migrations
robotizeit May 22, 2026
02ded4d
activate_pipe, deactivate_pipe, and trigger_pipe are now
robotizeit May 23, 2026
0e1fa87
security fix, agent capabilities endpoint casbin rule set
robotizeit May 23, 2026
63e5933
Changed Stacker to generate stable runtime label
robotizeit May 23, 2026
e1a6cc4
npm creds fix
robotizeit May 23, 2026
fb621bc
preflight fix for --force-new
robotizeit May 25, 2026
f2a75c0
pipe mcp, seed npm default creds
robotizeit May 26, 2026
00ae0b6
ai scenarios, integrated scenario-aware prompting
robotizeit May 27, 2026
9d995d2
few prompt examples
robotizeit May 27, 2026
bd3c936
ommit --server-id in firewall and cred commands when lock file for cl…
robotizeit May 28, 2026
276d72e
default auth url, api url to ~/.config/stacker/config.yml, device au…
robotizeit May 29, 2026
b4688de
oauth login, /me fix
robotizeit May 30, 2026
0340488
fmt all
robotizeit May 30, 2026
fbc4236
copy scenarios
robotizeit May 30, 2026
9c102e5
inject default external network when npm is used
robotizeit Jun 1, 2026
6b90df8
stacker agent health fix, npm detection fix, logs fix
robotizeit Jun 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 0 additions & 18 deletions .claude/settings.local.json

This file was deleted.

8 changes: 8 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,3 +135,11 @@ Unit tests (lib) use `--test-threads=1` (see Makefile) because many share global
### CLI commands

`stacker-cli` commands are implemented in `src/cli/`. `console` commands are in `src/console/commands/`. Both use `clap` with `#[derive(Parser, Subcommand)]`. Interactive prompts use `dialoguer`; progress bars use `indicatif`.

### Service deployment scope

`stacker service deploy <name>` is project-scoped by default for services declared in `stacker.yml`. Normal custom services must update `/home/trydirect/project/docker-compose.yml` and must not create `/home/trydirect/<service>/docker-compose.yml` unless the user explicitly chooses standalone mode, such as a future `--standalone` or `--scope standalone` flag.

Only platform-managed services live outside the project directory by default. Current examples are Status Panel (`/home/trydirect/statuspanel`) and Nginx Proxy Manager (`/home/trydirect/nginx_proxy_manager`). Add regression tests for any service/proxy deploy change that could duplicate a project-scoped service as a standalone compose project.

Stacker-managed compose services use stable runtime labels with the `my.stacker.*` prefix: `my.stacker.project_id`, `my.stacker.target`, `my.stacker.scope`, `my.stacker.service`, and `my.stacker.dns`. Keep logical service codes and Docker DNS names separate; for Nginx Proxy Manager use `my.stacker.service=nginx_proxy_manager` and `my.stacker.dns=nginx-proxy-manager`.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@ configuration.yaml.orig
docker/local/
docs/*.sql
config-to-validate.yaml
*.bak
*.bak
.claude/settings.local.json
101 changes: 101 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,56 @@ All notable changes to this project will be documented in this file.

## [Unreleased]

### Added — Onboarding setup helpers

- Added `stacker config setup ai` to enable and update `ai.*` settings from the
CLI, including Ollama-friendly `--provider`, `--endpoint`, `--model`,
`--timeout`, and repeatable `--task` options.
- Cloud/server deploys now bootstrap missing `.env` files from adjacent
`.env.example` files when compose or `stacker.yml` references them, using
restrictive local permissions where supported.
- Cloud deploy `--key` and `--key-id` overrides are resolved through the active
logged-in Stacker API before prompt selection, and non-interactive shells now
receive actionable cloud credential guidance instead of hanging.
- Deploy validation now prints concise private registry credential guidance when
images may require authentication and no registry auth is resolved.
- `stacker config validate` now points users to `stacker config fix` when it
finds empty structural path fields.
- Cloud/server deploys now skip post-deploy server IP polling and local backup
key installation after terminal paused/error statuses, avoiding repeated
"server IP not yet assigned" retries after a failed installer run.
- Hetzner cloud deploys now normalize user-facing location aliases such as
`nbg1` to installer-compatible datacenter values such as `nbg1-dc3` before
publishing install-service payloads.
- `stacker config setup cloud` now suggests Hetzner `cx23` by default instead
of older `cpx*` examples.
- Remote config bundles now keep compose `env_file` and bind-mount references
project-relative so Docker Compose sees copied files under
`/home/trydirect/project`.
- Cloud/server deploy output now lists config-bundle file mappings and rejects
absolute config-bundle destinations before sending a deploy request.
- Deploy-time config files are now mirrored into the installer runtime-file
contract so non-compose files such as `.env` are materialized before Docker
Compose starts.

## [0.2.8] — 2026-05-15
### Added — Configuration inventory, diff, check, and promotion planning

- Added `stacker config inventory --env <name>` to list effective configuration
keys by app/service target and source without printing secret values.
- Added `stacker config diff --from <env> --to <env>` to compare local
environment/profile inventories and report missing, target-only, and changed
keys.
- Added optional `config_contract` support in `stacker.yml` and
`stacker config check --env <name> --strict` to fail when required keys are
missing from an environment.
- Added `stacker config contract suggest --env <name>` to generate a
reviewable `config_contract` snippet from the current inventory.
- Added `--remote` support for `config inventory`, `config diff`, and
`config check`, enriching target inventories with remote service secret
metadata without fetching plaintext Vault values.
- Added `stacker config promote --from <env> --to <env>` to generate safe
target placeholders for missing keys; secret values are not copied.

### Added — App-only deploy environment selection

Expand All @@ -14,6 +63,58 @@ All notable changes to this project will be documented in this file.
`--env <environment>` / `--environment <environment>` for one-off environment
selection during app-only updates.

### Fixed — App-local compose env files for deploy-app

- `stacker agent deploy-app <app>` now reads
`<app>/docker/<env>/compose.yml` when that app-local compose file exists and
merges that app's service definition into the full project-level compose,
instead of replacing the remote stack compose with a single-service file.
- App-local deploys now bundle only the target app-local config files while
using the project-level compose as topology, so missing env/config files for
unrelated services no longer block `deploy-app <app>`.
- App-local `env_file` references are uploaded in the deploy-app config bundle,
and Vault-rendered service secrets for the same target are merged into the
matching remote `.env` file before the Status agent writes it.
- Deploy-app command creation now fails if Stacker cannot render the target's
runtime env, instead of silently falling back to a stale/raw `.env` that may
omit Vault-backed service secrets.
- `stacker agent deploy-app` and `stacker secrets push` now use the same
server-side deploy-app enrichment path when enqueueing agent commands, so
app-local `.env` files receive Vault-rendered service secrets during direct
agent pushes as well as command-create flows.
- Missing config-bundle file errors now include the resolved path instead of a
bare `No such file or directory` message.
- If an app-local `.env` exists but the selected compose service has no
`env_file` entry, the CLI prints a warning explaining that Docker Compose will
not inject local or remote-rendered env values into that container.

### Added — Canonical runtime environment rendering

- Remote runtime environment files now use the canonical host path
`/home/trydirect/project/.env`; generated compose files reference it as
`env_file: .env`.
- `stacker config show --resolved` prints the local env source path, canonical
remote env path, compose env reference, config hash/version metadata, and
contributing layers without printing secret values.
- Runtime env rendering now has deterministic precedence and hashing, rejects
reserved `STACKER_*`, `DOCKER_*`, `VAULT_*`, and `AGENT_*` keys, and provides
drift checks that require `--force` before overwriting changed remote env
content.

### Fixed — Reuse private registry auth for agent-managed pulls

- Deploy-time `deploy.registry` credentials are now stored in trusted Stacker
secret storage and reused for later Status-managed pulls such as
`stacker agent deploy-app`.
- The Status agent now performs private-image pulls with a temporary
`DOCKER_CONFIG` auth context and cleans it up immediately after the pull,
instead of relying on host Docker login state.
- When no stored registry auth exists, pull behavior remains backward
compatible: anonymous pull is attempted first and cached local images can
still allow the redeploy to complete with warnings.

## [0.2.8] — 2026-05-12

### Added — Remote service/app target secrets

- `stacker secrets set --scope service --service <target>` now supports real
Expand Down
Loading
Loading