Remove orphaned daemon_cmd_test.go referencing undefined AddDaemonCommand/
DaemonCommandConfig symbols. Update docs to reflect current API types
(CommandSetup, core.Service). Restore .gitignore entries for dist/, .env,
and coverage artefacts. Extract appendLocales helper to deduplicate locale
registration. Fix test reset to clear registeredLocales for proper isolation.
Co-Authored-By: Virgil <virgil@lethean.io>
commandService.applyI18n() walks registered commands and sets
Short/Long from cmd.{name}.short/long keys automatically. Downstream
packages no longer need to call i18n.T() for command descriptions —
the CLI Conclave handles it via service name derivation.
This is the Conclave pattern: services inside a sealed core.New()
auto-discover each other's capabilities via the lifecycle hooks.
Co-Authored-By: Virgil <virgil@lethean.io>
Commands now attach AFTER i18n service starts — translations resolve.
go-build imports commented out until kin-openapi dep conflict is fixed.
Co-Authored-By: Virgil <virgil@lethean.io>
Both WithCommands() and RegisterCommands() now accept an optional
fs.FS for translations. The CLI collects them via RegisteredLocales()
and the i18n service loads them on startup.
Packages just pass their embed.FS — no i18n import needed:
cli.RegisterCommands(AddDevCommands, locales.FS)
Co-Authored-By: Virgil <virgil@lethean.io>
I18nService now lives in go-i18n as NewCoreService() — any binary can
use it without importing cli. Log convenience functions use go-log
directly. Removed LogService/NewLogService/daemon_cmd wrappers.
Root go.mod: 1 direct forge dep (core/go).
Co-Authored-By: Virgil <virgil@lethean.io>
core/cli is now a pure library (pkg/cli). The binary moves to
cmd/core/ as a separate sub-module with its own go.mod.
Removed from binary: gocmd (→ lint/go-build), service (→ go-process),
session (→ go-session), module (→ go-scm), plugin (→ go-scm).
Removed from framework: go-crypt, workspace, daemon_cmd.
Root go.mod: 1 direct forge dep (core/go). Cross-compiles CGO_ENABLED=0.
Co-Authored-By: Virgil <virgil@lethean.io>
Consistent with cmd/service stopDaemon — polls process directly
instead of PID file removal to avoid PID reuse false positives.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove PIDFile, HealthServer, Daemon, DaemonOptions, HealthCheck,
Run, and RunWithTimeout from daemon.go — all now live in go-process.
Retain Mode type (ModeInteractive/ModePipe/ModeDaemon), DetectMode(),
IsTTY(), IsStdinTTY(), and IsStderrTTY() as CLI-specific helpers.
Co-Authored-By: Virgil <virgil@lethean.io>
Provides a reusable daemon CLI command builder that registers
start/stop/status/run subcommands. Consumers (go-ai, ide, etc.)
call AddDaemonCommand(root, config) with a RunForeground callback
for their business logic. Uses go-process for PID file, health
server, and daemon lifecycle management.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Wraps cobra.RangeArgs for parity with ExactArgs, MinimumNArgs,
MaximumNArgs — allows go-devops to drop its direct cobra import.
Co-Authored-By: Virgil <virgil@lethean.io>
Add Int64Flag and DurationFlag to the flag helper set for commands
needing int64 seeds and time.Duration intervals. Remove NewPassthrough
which enabled the anti-pattern of bypassing cobra flag parsing with
stdlib flag.FlagSet.
Co-Authored-By: Virgil <virgil@lethean.io>
Main() now accepts variadic framework.Option args, allowing commands
to register through the Core lifecycle via WithCommands(). This matches
the pattern from core/go and enables LEM and other consumers to use
the same API.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move pkg/cli from core/go to core/cli. Includes Frame AppShell,
Stream, TaskTracker, Tree, Rich Table. Update imports to v0.0.1
tagged deps and fix openpgp import path for go-crypt split.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>