mirror of
https://github.com/boshu2/agentops.git
synced 2026-09-14 15:08:13 +08:00
fa6f4048af
Fixes three onboarding defects that surfaced on 2026-04-15 when running against a global ~/.agents corpus from a non-git home directory: 1. `ao compile --full` failed in the installed bundle with "open skills/compile/scripts/compile.sh: file does not exist". The Makefile's sync-hooks target never copied compile.sh into cli/embedded/skills/, so the //go:embed all:skills fallback had nothing to fall back to. Fix: sync-hooks now seeds the script and a regression test (TestMaterializeCompileScriptFallsBackToEmbedded) asserts the embedded copy resolves when no local skills/ exists. 2. Headless compile implicitly required OLLAMA_HOST / OPENAI_API_KEY / ANTHROPIC_API_KEY with no actionable error when none were set, and ignored a locally installed `claude` CLI. Fix: resolveCompileRuntime auto-detects the `claude` binary and selects claude-cli runtime (no API key needed — inherits Claude Code auth). preflightCompileRuntime fails fast with an actionable error naming the exact env var to set. compile.sh gains a matching claude-cli backend and a --preflight flag. 3. The headless compiler concatenated all changed files into one LLM prompt, which is unworkable on 2000+ file corpora. Fix: compile.sh batches by --batch-size (default 25) and --max-batches (default unlimited); ao compile propagates both flags. Onboarding gaps: - $quickstart now detects a global ~/.agents corpus (GLOBAL_AGENTS=true) and, when GIT=false + AO=true, surfaces a harvest → compile → knowledge-activation path instead of only suggesting `git init`. - Harvest SKILL.md clarifies that promotion writes to ~/.agents/learnings/ (not ~/.agents) and adds a "which skill do I need?" decision table. - Compile SKILL.md documents the claude-cli runtime and batching flags. - skills-codex/compile/scripts/compile.sh wrapper now falls back through multiple candidate paths and finally delegates to `ao compile`, so an installed bundle without a sibling skills/ checkout still works. Tests added: - TestMaterializeCompileScriptFallsBackToEmbedded - TestResolveCompileRuntime - TestPreflightCompileRuntimeErrors (5 subtests) - TestPreflightCompileRuntimeSuccess - TestCompileScriptOptionsPassesBatchFlags - TestQuickstartSkillCoversGlobalCorpus (both parity surfaces) Verification: cd cli && go vet ./... && go test ./... # all green bash skills/heal-skill/scripts/heal.sh --strict # clean bash tests/docs/validate-doc-release.sh # PASS bash scripts/check-contract-compatibility.sh # 0 failures bash scripts/regen-codex-hashes.sh # 3 skills rehashed bash scripts/generate-cli-reference.sh # COMMANDS.md regenerated
69 lines
1.8 KiB
Makefile
69 lines
1.8 KiB
Makefile
.PHONY: build test lint clean install sync-hooks
|
|
|
|
# Build variables
|
|
BINARY_NAME=ao
|
|
BUILD_DIR=bin
|
|
VERSION=$(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
|
|
LDFLAGS=-ldflags "-X main.version=$(VERSION)"
|
|
IDENTIFIER=com.12factoragentops.ao
|
|
GOLANGCI_LINT ?= ../scripts/golangci-lint-v2.sh
|
|
|
|
# Default target
|
|
all: build
|
|
|
|
# Sync hooks, scripts, and skills into cli/embedded/ for Go embed
|
|
sync-hooks:
|
|
@mkdir -p embedded/hooks embedded/lib embedded/skills/standards/references embedded/skills/using-agentops embedded/skills/compile/scripts
|
|
@cp ../hooks/*.sh ../hooks/hooks.json embedded/hooks/
|
|
@cp ../lib/hook-helpers.sh embedded/lib/
|
|
@cp ../skills/standards/references/* embedded/skills/standards/references/
|
|
@cp ../skills/using-agentops/SKILL.md embedded/skills/using-agentops/SKILL.md
|
|
@cp ../skills/compile/scripts/compile.sh embedded/skills/compile/scripts/compile.sh
|
|
|
|
# Build the binary
|
|
build: sync-hooks
|
|
@mkdir -p $(BUILD_DIR)
|
|
go build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME) ./cmd/ao
|
|
ifeq ($(shell uname -s),Darwin)
|
|
codesign -f -s - -i $(IDENTIFIER) $(BUILD_DIR)/$(BINARY_NAME)
|
|
endif
|
|
|
|
# Run tests
|
|
test: build
|
|
go test -v -shuffle=on ./...
|
|
|
|
# Run tests with coverage
|
|
test-coverage: build
|
|
go test -v -shuffle=on -coverprofile=coverage.out ./...
|
|
go tool cover -html=coverage.out -o coverage.html
|
|
|
|
# Run linter
|
|
lint:
|
|
$(GOLANGCI_LINT) run ./...
|
|
|
|
# Clean build artifacts
|
|
clean:
|
|
rm -rf $(BUILD_DIR)
|
|
rm -f coverage.out coverage.html
|
|
|
|
# Install to GOPATH/bin (builds first to ensure embedded files are synced)
|
|
install: build
|
|
@GOBIN=$$(go env GOBIN); [ -z "$$GOBIN" ] && GOBIN=$$(go env GOPATH)/bin; \
|
|
/bin/cp $(BUILD_DIR)/$(BINARY_NAME) "$$GOBIN/$(BINARY_NAME)"
|
|
|
|
# Run the binary
|
|
run: build
|
|
./$(BUILD_DIR)/$(BINARY_NAME)
|
|
|
|
# Tidy go modules
|
|
tidy:
|
|
go mod tidy
|
|
|
|
# Format code
|
|
fmt:
|
|
go fmt ./...
|
|
|
|
# Generate (for future code generation)
|
|
generate:
|
|
go generate ./...
|