# Package Analysis — Batch 6 Generated by: gemini-batch-runner.sh Models: gemini-2.5-flash-lite → gemini-3-flash-preview → gemini-3-pro-preview Date: 2026-02-09 Packages: ansible deploy devops framework mcp plugin unifi webview ws collect i18n cache Total tokens: 458153 --- # Framework Documentation This document provides a detailed technical analysis of the core packages within the framework. --- ## === Package: pkg/ansible === ### 1. Overview A native Go implementation of an Ansible playbook runner. Unlike wrappers that call the `ansible` CLI, this package parses YAML playbooks and inventories, handles variable interpolation (Jinja2-style), and executes modules directly over SSH or local connections. It is designed for embedding configuration management directly into the application without external dependencies. ### 2. Public API #### Executor The primary entry point for running playbooks. ```go type Executor struct { ... } func NewExecutor(basePath string) *Executor func (e *Executor) SetInventory(path string) error func (e *Executor) SetInventoryDirect(inv *Inventory) func (e *Executor) SetVar(key string, value any) func (e *Executor) Run(ctx context.Context, playbookPath string) error func (e *Executor) Close() ``` #### Callback Hooks Callbacks to monitor execution progress. ```go e.OnPlayStart = func(play *Play) e.OnTaskStart = func(host string, task *Task) e.OnTaskEnd = func(host string, task *Task, result *TaskResult) e.OnPlayEnd = func(play *Play) ``` #### Types ```go type Playbook struct { Plays []Play } type Play struct { ... } type Task struct { ... } type Inventory struct { ... } type TaskResult struct { Changed, Failed bool; Msg, Stdout string; ... } ``` ### 3. Internal Design * **Parser**: `parser.go` handles recursive YAML parsing, resolving role paths, and `include_tasks`. * **Module Dispatch**: `modules.go` contains a switch statement dispatching tasks to native Go functions (e.g., `moduleShell`, `moduleCopy`, `moduleApt`) based on the task name. * **Templating**: Implements a custom Jinja2-subset parser in `executor.go` (`templateString`, `resolveExpr`) to handle variables like `{{ var }}` and filters. * **SSH Abstraction**: `ssh.go` wraps `golang.org/x/crypto/ssh` to handle connection pooling, key management, and `sudo` escalation (become). ### 4. Dependencies * `github.com/host-uk/core/pkg/log`: structured logging. * `golang.org/x/crypto/ssh`: Underlying SSH transport. * `gopkg.in/yaml.v3`: YAML parsing. ### 5. Test Coverage Notes * **Templating Logic**: Critical to test variable resolution, filters (`default`, `bool`), and nested lookups. * **Module Idempotency**: Verify that file/apt modules return `Changed: false` when state matches. * **SSH/Sudo**: Test `become` functionality with password handling. ### 6. Integration Points Used by higher-level orchestration tools or the `pkg/devops` package to provision environments. --- ## === Package: pkg/devops === ### 1. Overview Manages a portable, sandboxed development environment using LinuxKit images. It handles the lifecycle (download, install, boot, stop) of a QEMU-based VM and provides utilities to bridge the host and VM (SSH forwarding, file mounting). ### 2. Public API #### Lifecycle Management ```go type DevOps struct { ... } func New(m io.Medium) (*DevOps, error) func (d *DevOps) Install(ctx, progress func(int64, int64)) error func (d *DevOps) Boot(ctx, opts BootOptions) error func (d *DevOps) Stop(ctx) error func (d *DevOps) Status(ctx) (*DevStatus, error) ``` #### Interaction ```go func (d *DevOps) Shell(ctx, opts ShellOptions) error func (d *DevOps) Serve(ctx, projectDir, opts ServeOptions) error func (d *DevOps) Test(ctx, projectDir, opts TestOptions) error func (d *DevOps) Claude(ctx, projectDir, opts ClaudeOptions) error ``` ### 3. Internal Design * **Image Management**: `images.go` handles versioning and downloading QCOW2 images from GitHub/CDN. * **Container Abstraction**: Delegates low-level VM execution to `pkg/container` (likely a wrapper around QEMU/LinuxKit). * **SSH Bridging**: Heavily relies on `exec.Command("ssh", ...)` to tunnel ports, mount filesystems via SSHFS, and forward agents. * **Auto-Detection**: `DetectServeCommand` and `DetectTestCommand` inspect project files (`package.json`, `go.mod`) to determine how to run projects. ### 4. Dependencies * `pkg/container`: VM runtime management. * `pkg/io`: Filesystem abstraction. * `pkg/config`: Configuration loading. ### 5. Test Coverage Notes * **Command Detection**: Unit tests for `Detect*Command` with various mock file structures. * **SSH Config**: Verify `ensureHostKey` correctly parses and updates `known_hosts`. ### 6. Integration Points The primary interface for CLI commands (`core dev ...`). Bridges `pkg/mcp` agents into a sandboxed environment. --- ## === Package: pkg/framework === ### 1. Overview A facade package that re-exports types and functions from `pkg/framework/core`. It serves as the primary entry point for the Dependency Injection (DI) framework, providing a cleaner import path for consumers. ### 2. Public API Re-exports `Core`, `Option`, `Message`, `Startable`, `Stoppable`, and constructors like `New`, `WithService`, `ServiceFor`. ### 3. Internal Design Purely structural; contains type aliases and variable assignments to expose the internal `core` package. ### 4. Dependencies * `github.com/host-uk/core/pkg/framework/core` ### 5. Test Coverage Notes No logic to test directly; coverage belongs in `pkg/framework/core`. ### 6. Integration Points Imported by `main.go` and all service packages to register themselves with the DI container. --- ## === Package: pkg/mcp === ### 1. Overview Implements a Model Context Protocol (MCP) server. It acts as a bridge between AI models (like Claude) and the system tools, exposing file operations, process management, web browsing, and RAG capabilities as callable tools. ### 2. Public API ```go type Service struct { ... } func New(opts ...Option) (*Service, error) func (s *Service) Run(ctx context.Context) error func (s *Service) ServeTCP(ctx, addr string) error func (s *Service) ServeStdio(ctx) error ``` #### Configuration Options ```go func WithWorkspaceRoot(root string) Option func WithProcessService(svc *process.Service) Option func WithWSHub(hub *ws.Hub) Option ``` ### 3. Internal Design * **Tool Registry**: Registers functions (e.g., `s.readFile`, `s.processStart`) with the MCP SDK. * **Sandboxing**: `WithWorkspaceRoot` creates a restricted `io.Medium` to prevent AI from accessing files outside the workspace. * **Subsystems**: Segregates tools into files (`tools_rag.go`, `tools_webview.go`, etc.). * **Transports**: Supports Stdio (for CLI pipes), TCP, and Unix sockets. ### 4. Dependencies * `github.com/modelcontextprotocol/go-sdk`: MCP protocol implementation. * `pkg/process`, `pkg/ws`, `pkg/rag`, `pkg/webview`: Capability providers. * `pkg/io`: Filesystem access. ### 5. Test Coverage Notes * **Security**: Verify `WithWorkspaceRoot` actually prevents accessing `/etc/passwd`. * **Tool I/O**: Ensure JSON inputs/outputs for tools map correctly to internal service calls. ### 6. Integration Points Runs as a standalone server or subprocess for AI agents. Consumes `pkg/process` and `pkg/webview`. --- ## === Package: pkg/plugin === ### 1. Overview Provides a plugin system for the CLI, allowing extensions to be installed from GitHub. It manages a local registry of installed plugins and handles their lifecycle (install, update, remove). ### 2. Public API ```go type Plugin interface { Name(); Version(); Init(); Start(); Stop() } type Registry struct { ... } func NewRegistry(m io.Medium, basePath string) *Registry func (r *Registry) List() []*PluginConfig type Installer struct { ... } func (i *Installer) Install(ctx, source string) error // source: "org/repo" func (i *Installer) Update(ctx, name string) error ``` ### 3. Internal Design * **Manifest**: Relies on `plugin.json` in the root of the plugin repo. * **Git Integration**: Uses the `gh` CLI via `exec` to clone/pull repositories. * **Persistence**: Stores plugin metadata in a `registry.json` file. ### 4. Dependencies * `pkg/io`: Filesystem access. * `pkg/framework/core`: Error handling. * External `gh` and `git` binaries. ### 5. Test Coverage Notes * **Manifest Validation**: Test valid/invalid `plugin.json` parsing. * **Source Parsing**: Test parsing of `org/repo`, `org/repo@v1`, etc. ### 6. Integration Points Used by the main CLI application to load dynamic commands at startup. --- ## === Package: pkg/unifi === ### 1. Overview A strongly-typed client for Ubiquiti UniFi controllers. It wraps the `unpoller` SDK but adds configuration resolution (config file -> env var -> flags) and specific helper methods for data extraction not easily accessible in the raw SDK. ### 2. Public API ```go func NewFromConfig(...) (*Client, error) func (c *Client) GetClients(filter ClientFilter) ([]*uf.Client, error) func (c *Client) GetDeviceList(site, type string) ([]DeviceInfo, error) func (c *Client) GetRoutes(site string) ([]Route, error) func (c *Client) GetNetworks(site string) ([]NetworkConf, error) ``` ### 3. Internal Design * **Config Cascade**: `ResolveConfig` logic ensures hierarchical configuration overrides. * **Raw API Fallback**: Methods like `GetRoutes` and `GetNetworks` bypass the SDK's high-level structs to hit specific API endpoints (`/api/s/%s/stat/routing`) and decode into custom structs. ### 4. Dependencies * `github.com/unpoller/unifi/v5`: Base SDK. * `pkg/config`: Config file management. ### 5. Test Coverage Notes * **Config Resolution**: Verify priority order (Flag > Env > Config). * **JSON Unmarshalling**: Test `GetRoutes`/`GetNetworks` against sample JSON responses from a controller. ### 6. Integration Points Used by network management plugins or diagnostic tools. --- ## === Package: pkg/webview === ### 1. Overview A browser automation package using the Chrome DevTools Protocol (CDP). It is designed for headless testing, scraping, and AI-driven interaction. It supports advanced features like Angular-specific waiting strategies. ### 2. Public API ```go type Webview struct { ... } func New(opts ...Option) (*Webview, error) func (wv *Webview) Navigate(url string) error func (wv *Webview) Click(selector string) error func (wv *Webview) Type(selector, text string) error func (wv *Webview) Screenshot() ([]byte, error) func (wv *Webview) Evaluate(script string) (any, error) ``` #### Angular Helpers ```go func NewAngularHelper(wv *Webview) *AngularHelper func (ah *AngularHelper) WaitForAngular() error func (ah *AngularHelper) GetNgModel(selector string) (any, error) ``` ### 3. Internal Design * **CDP Client**: `cdp.go` implements a raw WebSocket client for the DevTools protocol, managing message IDs and event dispatching. * **Action Sequence**: `actions.go` implements the Command pattern (`Action` interface) to chain browser interactions. * **Angular Awareness**: `angular.go` injects JS to probe `window.ng` or `getAllAngularRootElements` to interact with Angular's Zone.js and component state. ### 4. Dependencies * `github.com/gorilla/websocket`: WebSocket transport. ### 5. Test Coverage Notes * **CDP Protocol**: Mock the WebSocket server to ensure correct message serialization/response handling. * **Angular Helpers**: Requires an actual Angular app (or mock environment) to verify Zone.js stabilization logic. ### 6. Integration Points Used by `pkg/mcp` to expose browser tools to AI agents. --- ## === Package: pkg/ws === ### 1. Overview A concurrent WebSocket hub implementation. It handles client registration, broadcasting, and channel-based subscriptions (e.g., subscribing only to logs for a specific process). ### 2. Public API ```go type Hub struct { ... } func NewHub() *Hub func (h *Hub) Run(ctx) func (h *Hub) Handler() http.HandlerFunc func (h *Hub) SendProcessOutput(id, output string) error func (h *Hub) SendEvent(type string, data any) error ``` ### 3. Internal Design * **Hub Pattern**: Central `Hub` struct manages a map of clients and channels. Uses unbuffered channels for registration to avoid race conditions. * **Channel Routing**: Maintains a `map[string]map[*Client]bool` to route messages efficiently to subscribers. * **Goroutines**: Each client spawns a `readPump` and `writePump` to handle I/O concurrently. ### 4. Dependencies * `github.com/gorilla/websocket` ### 5. Test Coverage Notes * **Concurrency**: Test registering/unregistering clients while broadcasting heavily. * **Subscription**: Verify messages only go to subscribed clients. ### 6. Integration Points Used by `pkg/mcp` to stream process output to a web UI. --- ## === Package: pkg/collect === ### 1. Overview A data collection pipeline for gathering data from various sources (GitHub, Forums, Market Data, Papers). It standardizes the collection process into a `Collector` interface and handles common concerns like rate limiting, state tracking (resume support), and formatting. ### 2. Public API ```go type Collector interface { Name() string Collect(ctx, cfg *Config) (*Result, error) } type Excavator struct { Collectors []Collector ... } func (e *Excavator) Run(ctx, cfg) (*Result, error) ``` ### 3. Internal Design * **Excavator**: The orchestrator that runs collectors sequentially. * **RateLimiter**: Implements token bucket-like delays per source type (e.g., GitHub, CoinGecko). * **State Persistence**: Saves a JSON cursor file to resume interrupted collections. * **Formatters**: `process.go` converts raw HTML/JSON into Markdown for easier consumption by LLMs. ### 4. Dependencies * `pkg/io`: File storage. * `golang.org/x/net/html`: HTML parsing for forums/papers. * `gh` CLI: Used for GitHub data fetching. ### 5. Test Coverage Notes * **HTML Parsing**: Test `ParsePostsFromHTML` with sample forum HTML. * **Rate Limit**: Verify `Wait` respects context cancellation and time delays. ### 6. Integration Points Used as a standalone CLI command or by AI agents to gather context. --- ## === Package: pkg/i18n === ### 1. Overview A sophisticated internationalization library that goes beyond simple key-value lookups. It includes a grammar engine to handle pluralization, verb conjugation, and semantic sentence generation ("Subject verbed object"). ### 2. Public API ```go func T(key string, args ...any) string // Main translation function func S(noun string, value any) *Subject // Create a semantic subject func N(format string, value any) string // Number formatting func SetLanguage(lang string) error ``` ### 3. Internal Design * **Grammar Engine**: `grammar.go` applies rules for past tense, gerunds, and pluralization based on language-specific JSON rules or algorithmic fallbacks. * **Namespace Handlers**: `handler.go` intercepts keys like `i18n.count.*` or `i18n.done.*` to auto-generate phrases based on the grammar engine. * **Loader**: `loader.go` flattens nested JSON translation files and extracts grammar rules (`gram.verb.*`). ### 4. Dependencies * `golang.org/x/text/language`: Standard language tag parsing. ### 5. Test Coverage Notes * **Pluralization**: Test complex rules (e.g., Slavic/Arabic plural categories). * **Grammar generation**: Test `PastTense` and `Gerund` for regular and irregular English verbs. ### 6. Integration Points Used pervasively across the CLI for all user-facing output. --- ## === Package: pkg/cache === ### 1. Overview A simple, file-based JSON cache with Time-To-Live (TTL) support. ### 2. Public API ```go func New(m io.Medium, baseDir string, ttl time.Duration) (*Cache, error) func (c *Cache) Get(key string, dest interface{}) (bool, error) func (c *Cache) Set(key string, data interface{}) error ``` ### 3. Internal Design * Stores data as JSON files: `{ "data": ..., "expires_at": ... }`. * Uses `pkg/io` abstraction for storage independence. ### 4. Dependencies * `pkg/io` ### 5. Test Coverage Notes * **Expiry**: Verify `Get` returns false after TTL expires. * **Serialization**: Ensure struct round-tripping works correctly. ### 6. Integration Points Used by `pkg/collect` or `pkg/plugin` to cache API responses (e.g., GitHub releases). --- ## Quick Reference (Flash Summary) ### pkg/ansible **Description:** Implements a Go-based Ansible-lite engine for executing playbooks and roles over SSH with YAML parsing and fact gathering. - **Executor (Type):** Main runner that manages inventory, variables, and execution state. - **NewExecutor (Func):** Initialises the executor with a base path for roles and playbooks. - **Task (Type):** Represents a single Ansible task with module parameters and conditional logic. - **Run (Func):** Parses and executes a playbook from a file path. - **Inventory (Type):** Holds the host and group structure for targeting remote machines. **Dependencies:** `pkg/log` **Complexity:** Complex ### pkg/devops **Description:** Manages a portable development environment using LinuxKit VM images and QEMU/SSH integration. - **DevOps (Type):** Core service for environment lifecycle, mounting, and tool execution. - **Boot (Func):** Configures and starts the dev environment container. - **Claude (Func):** Launches a sandboxed AI session with project mounting and auth forwarding. - **Serve (Func):** Auto-detects project types and runs local development servers inside the VM. - **ImageManager (Type):** Handles downloading and updating dev environment system images. **Dependencies:** `pkg/config`, `pkg/container`, `pkg/io`, `pkg/devops/sources` **Complexity:** Moderate ### pkg/framework **Description:** Provides a facade for the Core dependency injection and service runtime framework. - **Core (Type):** The central DI container and service registry. - **New (Func):** Creates and initialises a new Core instance. - **ServiceFor (Func):** Retrieves a type-safe service from the container by name. - **Runtime (Type):** Manages the lifecycle and configuration of application services. **Dependencies:** `pkg/framework/core` **Complexity:** Simple ### pkg/mcp **Description:** Implements a Model Context Protocol (MCP) server providing filesystem, process, and RAG tools to AI agents. - **Service (Type):** The MCP server instance managing tools and transport. - **New (Func):** Initialises the server with workspace sandboxing and optional service integration. - **WithWorkspaceRoot (Option):** Restricts file operations to a specific directory for security. - **ServeTCP / ServeStdio (Func):** Transport-specific server implementations. - **Subsystem (Interface):** Allows external packages to register custom toolsets. **Dependencies:** `pkg/io`, `pkg/io/local`, `pkg/log`, `pkg/process`, `pkg/ws`, `pkg/ai`, `pkg/rag`, `pkg/webview` **Complexity:** Complex ### pkg/plugin **Description:** A dynamic plugin system that manages gits-based extensions for the core CLI. - **Plugin (Interface):** Defines the lifecycle (Init/Start/Stop) for extensions. - **Registry (Type):** Manages metadata and persistence for installed plugins. - **Installer (Type):** Handles git-based installation and updates from GitHub. - **Loader (Type):** Discovers and loads plugin manifests from the filesystem. **Dependencies:** `pkg/framework/core`, `pkg/io` **Complexity:** Moderate ### pkg/unifi **Description:** A wrapper for the UniFi SDK providing simplified access to network controller devices, clients, and routing. - **Client (Type):** Main API client for interacting with UniFi controllers. - **NewFromConfig (Func):** Resolves credentials from config/env and initialises a client. - **GetClients (Func):** Returns a filtered list of connected wired and wireless clients. - **GetDeviceList (Func):** Returns flat metadata for infrastructure hardware (APs, Switches, Gateways). **Dependencies:** `pkg/config`, `pkg/log` **Complexity:** Simple ### pkg/webview **Description:** Provides browser automation and framework-specific testing (Angular) via the Chrome DevTools Protocol (CDP). - **Webview (Type):** High-level controller for browser navigation and interaction. - **CDPClient (Type):** Manages raw WebSocket communication with Chrome. - **AngularHelper (Type):** Specialized tools for waiting on Zone.js stability and interacting with Angular components. - **ConsoleWatcher (Type):** Captures and filters browser console logs and exceptions. - **ActionSequence (Type):** Chains multiple browser interactions (click, type, navigate) into a single execution. **Dependencies:** None **Complexity:** Complex ### pkg/ws **Description:** Implements a WebSocket hub for real-time message broadcasting and channel-based subscriptions. - **Hub (Type):** Manages client connections, message loops, and channel routing. - **Run (Func):** Starts the central event loop for broadcasting and registration. - **Broadcast (Func):** Sends a message to every connected client. - **SendToChannel (Func):** Targets messages to clients subscribed to specific topics (e.g., process logs). **Dependencies:** None **Complexity:** Moderate ### pkg/collect **Description:** An orchestration subsystem for scraping and processing data from GitHub, forums, market APIs, and academic sources. - **Collector (Interface):** Standard interface for data sources (e.g., `GitHubCollector`, `BitcoinTalkCollector`). - **Excavator (Type):** Orchestrates multiple collectors with rate limiting and state resume support. - **Processor (Type):** Converts raw HTML/JSON data into cleaned Markdown files. - **RateLimiter (Type):** Manages per-source API delays to prevent IP bans. - **State (Type):** Persists progress to allow incremental collection runs. **Dependencies:** `pkg/framework/core`, `pkg/io` **Complexity:** Complex ### pkg/i18n **Description:** A localization engine supporting nested translations, grammatical rules (plurals, gender, verbs), and semantic composition. - **Service (Type):** Manages loaded locales and message resolution logic. - **T / Raw (Func):** Translates keys with or without automatic grammatical composition. - **Subject (Type):** Provides context (count, gender, formality) for semantic intent templates. - **RegisterLocales (Func):** Allows packages to register embedded translation files. - **GrammarData (Type):** Defines language-specific rules for past tense, gerunds, and articles. **Dependencies:** None **Complexity:** Complex ### pkg/cache **Description:** Provides a persistent, file-based JSON cache with TTL-based expiration. - **Cache (Type):** Main handler for storing and retrieving cached entries. - **Entry (Type):** Internal wrapper for data, including cached and expiry timestamps. - **Get / Set (Func):** Thread-safe operations for managing cached data. - **Age (Func):** Calculates how long an item has been stored. **Dependencies:** `pkg/io` **Complexity:** Simple