Commit graph

87 commits

Author SHA1 Message Date
Snider
e4d79ce952 feat(php): add quality commands and split cmd/php for maintainability
Add new PHP quality commands:
- psalm: Psalm static analysis with auto-fix support
- audit: Security audit for composer and npm dependencies
- security: Filesystem security checks (.env exposure, permissions)
- qa: Full QA pipeline with quick/standard/full stages
- rector: Automated code refactoring with dry-run
- infection: Mutation testing

Split cmd/php/php.go (2k+ lines) into logical files:
- php.go: Styles and command registration
- php_dev.go: dev, logs, stop, status, ssl
- php_build.go: build, serve, shell
- php_quality.go: test, fmt, analyse, psalm, audit, security, qa, rector, infection
- php_packages.go: packages link/unlink/update/list
- php_deploy.go: deploy commands

QA pipeline improvements:
- Suppress tool output noise in pipeline mode
- Show actionable "To fix:" suggestions with commands

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 23:58:03 +00:00
Snider
d2c0553b6d refactor: flatten CLI to root, simplify pkg/mcp for CLI-only use
- Move cmd/core/cmd/* to cmd/* (flatten directory structure)
- Update module path from github.com/host-uk/core/cmd/core to github.com/host-uk/core
- Remove go.mod files from pkg/* (single module now)
- Simplify pkg/mcp to file operations only (no GUI deps)
- GUI features (display, webview, process) stay in core-gui/pkg/mcp
- Fix import aliases (sdkpkg) for package name conflicts
- Remove old backup directory (cmdbk)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 18:13:51 +00:00
Snider
9add6cf2ee refactor(cli): restructure cmd packages into subdirectories
- Move CLI commands into subdirectories matching command hierarchy:
  dev/, go/, php/, build/, ci/, sdk/, pkg/, vm/, docs/, setup/, doctor/, test/, ai/
- Create shared/ package for common styles and utilities
- Add new `core ai` root command with claude subcommand
- Update package declarations and imports across all files
- Create commands.go entry points for each package
- Remove GUI-related files (moved to core-gui repo)

This makes the filesystem structure match the CLI command structure,
improving context capture and code organization.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 18:02:43 +00:00
Snider
c9ebb7c781 test: increase coverage to 63.8% across packages
Coverage improvements:
- pkg/build: 89.4%
- pkg/release: 86.7% (from 36.7%)
- pkg/container: 85.7%
- pkg/php: 62.1% (from 26%)
- pkg/devops: 56.7% (from 33.1%)
- pkg/release/publishers: 54.7%

Also:
- Add GEMINI.md for Gemini agent guidance
- Update .gitignore to exclude coverage files
- Remove stray core.go at root
- Add core go cov command for coverage reports

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 14:28:23 +00:00
Snider
50f6839c51 test: increase coverage across packages
- pkg/container: 65.6% → 85.7% (hypervisor, linuxkit, templates tests)
- pkg/release/publishers: 13.3% → 41.7% (homebrew, aur, npm, scoop, chocolatey tests)
- Fix flaky test cleanup in TestLinuxKitManager_Stop_Good_ContextCancelled

Overall coverage: 29.2% → 40.6%

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 13:19:08 +00:00
Snider
331032cd57 refactor(cli): separate build and publish concerns
- Move SDK generation to `core build sdk` subcommand
- Make `core ci` publish-only (expects artifacts in dist/)
- Add release.Publish() for publishing pre-built artifacts
- Keep `core sdk diff` and `core sdk validate` for API validation
- Update SKILL.md documentation

This separation prevents accidental releases - running `core ci`
without first building will fail safely.

Workflow:
  core build          # Build binaries
  core build sdk      # Build SDKs
  core ci             # Publish what's in dist/

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 12:48:28 +00:00
Snider
dbe617c23e refactor: remove GUI packages for CGO-free CLI
Move all Wails-dependent packages to core-gui repo:
- pkg/core, pkg/display, pkg/docs, pkg/help, pkg/ide
- pkg/runtime, pkg/webview, pkg/workspace, pkg/ws
- pkg/plugin, pkg/config, pkg/i18n, pkg/module
- pkg/crypt, pkg/io, pkg/process

Add pkg/errors with simple E() helper for error wrapping.
Update go.work to only include CLI-relevant packages.
CLI now builds with CGO_ENABLED=0 - no linker warnings.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 12:15:01 +00:00
Snider
aa7a1021d3 refactor(cli): add core pkg command group for package management
- Create new pkg.go with search, install, list, update, outdated subcommands
- Remove separate search.go and install.go files
- Update root.go to use AddPkgCommands instead of individual commands
- Update skill documentation with pkg commands in quick reference, decision tree, and common mistakes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 11:42:22 +00:00
Snider
032e5ae4cc test(release): add SDK release integration tests
Add additional test coverage for SDK release functionality:
- TestRunSDK_Good_WithDiffEnabledNoFailOnBreaking
- TestRunSDK_Good_MultipleLanguages
- TestRunSDK_Good_WithPackageConfig
- TestToSDKConfig_Good_EmptyPackageConfig
- TestToSDKConfig_Good_DiffDisabled

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 03:28:05 +00:00
Snider
d9c4af07c2 feat(release): implement RunSDK for SDK-only releases
Add RunSDK function that orchestrates SDK-only releases by:
- Validating config and SDK configuration
- Determining version from git tags or config override
- Running optional breaking change detection via oasdiff
- Generating SDKs for configured languages (unless dry run)

The function supports dry run mode for previewing what would be done
without actually generating SDKs.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 03:20:56 +00:00
Snider
e3d9aa2b90 feat(release): add SDK release types and config converter
Add SDKRelease struct to hold SDK release results and toSDKConfig
helper function to convert release.SDKConfig to sdk.Config.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 03:17:07 +00:00
Snider
eaa35fb718 feat(sdk): add SetVersion method for release integration
Add version field to SDK struct and SetVersion method that updates both
the internal version and the config's Package.Version. This enables the
release system to pass version information to SDK generators.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 03:15:08 +00:00
Snider
ae96820393 test(signing): add integration tests
Tests for skip conditions and disabled configs.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 02:59:11 +00:00
Snider
8852d0a273 feat(signing): add orchestration helpers
SignBinaries, NotarizeBinaries, SignChecksums for pipeline integration.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 02:54:06 +00:00
Snider
1e0d9e4ebd feat(build): add SignConfig to BuildConfig
Loads signing configuration from .core/build.yaml.
Expands environment variables for secrets.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 02:52:12 +00:00
Snider
dff008fff7 feat(signing): add Windows signtool placeholder
Placeholder for future Windows code signing support.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 02:49:51 +00:00
Snider
471cd1f903 feat(signing): add macOS codesign + notarization
Signs binaries with Developer ID and hardened runtime.
Notarization submits to Apple and staples ticket.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 02:48:54 +00:00
Snider
e0c1945f00 feat(signing): add GPG signer
Signs files with detached ASCII-armored signatures (.asc).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 02:47:17 +00:00
Snider
1861274909 feat(signing): add Signer interface and config types
Defines interface for GPG, macOS, and Windows signing.
Config supports env var expansion for secrets.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 02:46:08 +00:00
Snider
c00b374147 feat(devops): add Claude sandbox session
Starts Claude in immutable dev environment with auth forwarding.
Auto-boots VM, mounts project, forwards credentials.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 02:17:34 +00:00
Snider
86ba93edd3 feat(devops): add Serve with project mounting
Mounts project via SSHFS and runs auto-detected dev server.
Supports Laravel, Node.js, PHP, Go, Python projects.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 02:16:01 +00:00
Snider
0664eb2591 feat(devops): add test detection and execution
Auto-detects test framework from project files.
Supports .core/test.yaml for custom configuration.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 02:14:40 +00:00
Snider
fe5cf71d5e feat(devops): add Shell for SSH and console access
Connects to dev VM via SSH (default) or serial console (--console).
Supports SSH agent forwarding for credential access.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 02:12:52 +00:00
Snider
95017cdc8a feat(devops): add Boot/Stop/Status methods
Manages dev VM lifecycle using LinuxKitManager.
Supports fresh boot, status checking, graceful stop.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 02:11:53 +00:00
Snider
cd7930af2a feat(devops): add ImageManager
Manages image downloads, manifest tracking, and update checking.
Tries sources in priority order (GitHub, CDN).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 02:10:16 +00:00
Snider
5d750c4170 feat(devops): add CDN/S3 source
Downloads core-devops images from custom CDN with progress reporting.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 02:07:47 +00:00
Snider
4286052c9e feat(devops): add GitHub Releases source
Downloads core-devops images from GitHub Releases using gh CLI.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 02:06:20 +00:00
Snider
919ecd3eba feat(devops): add ImageSource interface
Defines common interface for GitHub, Registry, and CDN sources.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 02:05:01 +00:00
Snider
7275961769 feat(devops): add config loading
Loads ~/.core/config.yaml with image source preferences.
Defaults to auto-detection with host-uk/core-images.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 02:04:01 +00:00
Snider
cead09feb2 feat(devops): add package structure
Initial pkg/devops setup with DevOps type and path helpers.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 02:02:46 +00:00
Snider
5e0252b5ee chore(deps): sync go modules after SDK implementation
Updates go.mod and go.sum files across all workspace modules
after adding oasdiff and kin-openapi dependencies for SDK generation.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 01:29:39 +00:00
Snider
7970e984e4 feat(release): add SDK configuration to release.yaml
Add SDKConfig struct and related types (SDKPackageConfig, SDKDiffConfig,
SDKPublishConfig) to support SDK generation configuration within the
release.yaml configuration file.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 01:24:37 +00:00
Snider
fe72111236 feat(sdk): wire up Generate to use all generators
SDK.Generate() and SDK.GenerateLanguage() now use the
generator registry to generate SDKs for configured languages.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 01:20:58 +00:00
Snider
5690fa63ae feat(sdk): add breaking change detection with oasdiff
Compares OpenAPI specs to detect breaking changes:
- Removed endpoints
- Changed required parameters
- Modified response schemas

Returns CI-friendly exit codes (0=ok, 1=breaking, 2=error).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 01:19:44 +00:00
Snider
b0c1c1eea5 feat(sdk): add PHP generator
Implements PHP SDK generator using Docker-only approach:
- Requires Docker with openapitools/openapi-generator-cli
- No native PHP generator tool; Docker is the only option

Includes tests following _Good convention for Available and Generate.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 01:16:05 +00:00
Snider
3d241e2a41 feat(sdk): add Go generator
Implements Go SDK generator with two-level fallback:
1. Native oapi-codegen if installed (generates types and client)
2. Docker openapitools/openapi-generator-cli as fallback

Native generation also creates a minimal go.mod file.
Includes tests following _Good convention for Available and Generate.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 01:16:01 +00:00
Snider
ea5b2fabaf feat(sdk): add Python generator
Implements Python SDK generator with two-level fallback:
1. Native openapi-python-client if installed
2. Docker openapitools/openapi-generator-cli as fallback

Includes tests following _Good convention for Available and Generate.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 01:15:57 +00:00
Snider
3a7349ce5f feat(sdk): add TypeScript generator
Implements TypeScript SDK generator with three-level fallback:
1. Native openapi-typescript-codegen if installed globally
2. npx openapi-typescript-codegen if npx available
3. Docker openapitools/openapi-generator-cli as fallback

Includes tests following _Good convention for Available and Generate.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 01:15:47 +00:00
Snider
656ff728ff feat(sdk): add Generator interface and Registry
Defines the common interface for SDK generators with:
- Generate(), Available(), Install() methods
- Registry for managing multiple generators

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 01:13:11 +00:00
Snider
c2b1e5dc61 feat(sdk): add OpenAPI spec detection
Detects OpenAPI spec via:
1. Configured spec path
2. Common paths (api/openapi.yaml, openapi.yaml, etc.)
3. Laravel Scramble (stub for now)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 01:11:15 +00:00
Snider
64a5b0e605 feat(sdk): add SDK package structure with types
Initial pkg/sdk setup with Config types for OpenAPI SDK generation.
Includes language selection, diff config, and publish config.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 01:07:19 +00:00
Snider
02d0167d91 feat(linuxkit): add docker format support for immutable containers
LinuxKit can now output docker format tarballs that can be loaded with
`docker load`. This gives you immutable, reproducible LinuxKit images
in Docker-compatible format.

Supported formats now include:
- iso, iso-bios, iso-efi
- raw, raw-bios, raw-efi
- qcow2, qcow2-bios, qcow2-efi
- vmdk, vhd, gcp, aws
- docker (tarball for `docker load`)
- tar, kernel+initrd

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 00:33:26 +00:00
Snider
513a241c1b feat(release): add package manager publishers for S3.2
Add publishers for distributing CLI binaries to package managers:
- npm: binary wrapper pattern with postinstall download
- Homebrew: formula generation + tap auto-commit
- Scoop: JSON manifest + bucket auto-commit
- AUR: PKGBUILD + .SRCINFO + AUR push
- Chocolatey: NuSpec + install script + optional push

Each publisher supports:
- Dry-run mode for previewing changes
- Auto-commit to own repos (tap/bucket/AUR)
- Generate files for PRs to official repos via `official` config

Also includes Docker and LinuxKit build helpers.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 00:32:04 +00:00
Snider
20f25ca062 feat(agentic): add AI collaboration features
Context gathering:
- BuildTaskContext for AI consumption
- GatherRelatedFiles from task references
- Keyword search for related code
- Git status and recent commits

Task completion:
- AutoCommit with task reference and Co-Authored-By
- CreatePR using gh CLI
- SyncStatus back to agentic service
- CreateBranch with {type}/{id}-{title} format

CLI commands:
- core dev task <id> --context - show with AI context
- core dev task:commit <id> - auto-commit
- core dev task:pr <id> - create PR

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 20:04:45 +00:00
Snider
3b6427f324 feat(agentic): implement core-agentic API client
Add pkg/agentic for AI-assisted task management:
- API client for core-agentic service
- Task listing, claiming, updating, completion
- Config from .env or ~/.core/agentic.yaml

CLI commands:
- core dev tasks - list available tasks
- core dev task <id> - show/claim task
- core dev task --auto - AI picks highest priority
- core dev task:update <id> - update progress
- core dev task:complete <id> - mark complete

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 19:58:41 +00:00
Snider
605ee023ca feat(php): add Coolify deployment integration
Commands:
- core php deploy - deploy to production
- core php deploy --staging - deploy to staging
- core php deploy:status - show deployment status
- core php deploy:rollback - rollback to previous
- core php deploy:list - list recent deployments

Features:
- Coolify API client
- Config from .env (COOLIFY_URL, TOKEN, APP_ID)
- Wait for deployment completion with --wait

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 19:39:04 +00:00
Snider
312fce343d feat(php): add package management for local development
Commands:
- core php packages link <path>... - link local packages
- core php packages unlink <name>... - unlink packages
- core php packages update - update linked packages
- core php packages list - list linked packages

Features:
- Composer path repositories with symlink
- Auto-detect package name from composer.json
- Preserves existing composer.json fields

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 19:33:55 +00:00
Snider
5759d84268 feat(php): add testing and quality commands
Testing:
- core php test - run PHPUnit/Pest (auto-detected)
- core php test --parallel - parallel testing
- core php test --coverage - with coverage
- core php test --filter <pattern> - filter tests

Quality:
- core php fmt - format with Laravel Pint
- core php fmt --fix - auto-fix issues
- core php analyse - run PHPStan/Larastan
- core php analyse --level 9 - set analysis level

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 19:26:57 +00:00
Snider
5568f86768 feat(php): add container build support (Docker + LinuxKit)
Add container commands to pkg/php:
- core php build - Docker/LinuxKit image builds
- core php serve --production - run production container
- core php shell - shell into running container

Features:
- Auto-generate FrankenPHP Dockerfile from project
- Detect PHP extensions from composer.json
- Multi-stage builds with frontend assets
- Laravel optimizations (config/route/view caching)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 19:24:11 +00:00
Snider
96d394435a feat(php): implement Laravel development environment support
Add pkg/php for Laravel/PHP development:
- Auto-detect Laravel project and required services
- FrankenPHP/Octane, Vite, Horizon, Reverb, Redis orchestration
- mkcert SSL integration for local HTTPS
- Unified log streaming with colored service prefixes
- Graceful shutdown handling

CLI commands:
- core php dev - start all services
- core php logs - unified/per-service logs
- core php stop - stop all services
- core php status - show service status
- core php ssl - setup SSL certificates

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 19:14:06 +00:00