Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module github.com/agenticgokit/agk
go 1.24.1

require (
github.com/agenticgokit/agenticgokit v0.5.2
github.com/agenticgokit/agenticgokit v0.5.3
github.com/charmbracelet/bubbles v0.21.0
github.com/charmbracelet/bubbletea v1.3.10
github.com/charmbracelet/lipgloss v1.1.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
github.com/agenticgokit/agenticgokit v0.5.2 h1:RdzMQB7E2S8TMVgz6MOjiRMUyN1tGWXV7om/SYWpwMc=
github.com/agenticgokit/agenticgokit v0.5.2/go.mod h1:0EwU951CZIGYwEOLnC5hJbC9lhNvM85FhrL6NTTDIZo=
github.com/agenticgokit/agenticgokit v0.5.3 h1:k9/oSwxJbpCVQCDNPY9yWaXkiCNRsttn2DLQbwcQvXY=
github.com/agenticgokit/agenticgokit v0.5.3/go.mod h1:0EwU951CZIGYwEOLnC5hJbC9lhNvM85FhrL6NTTDIZo=
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
github.com/cenkalti/backoff/v5 v5.0.2 h1:rIfFVxEf1QsI7E1ZHfp/B4DF/6QBAUhmgkxc0H7Zss8=
Expand Down
98 changes: 0 additions & 98 deletions pkg/scaffold/engine.go

This file was deleted.

151 changes: 0 additions & 151 deletions pkg/scaffold/generator.go

This file was deleted.

93 changes: 28 additions & 65 deletions pkg/scaffold/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
import (
"context"
"fmt"
"os"
"path/filepath"

"github.com/fatih/color"
"github.com/rs/zerolog"
Expand All @@ -28,18 +26,14 @@
// Service handles project scaffolding and generation
type Service struct {
logger *zerolog.Logger
templateEngine *Engine
configGenerator *config.Generator
generator *Generator
}

// NewService creates a new scaffold service
func NewService(logger *zerolog.Logger) *Service {
return &Service{
logger: logger,
templateEngine: NewEngine(),
configGenerator: config.NewGenerator(),
generator: NewGenerator(),
}
}

Expand All @@ -49,70 +43,39 @@
s.logger.Info().Str("project", opts.ProjectName).Msg("starting project generation")
}

// Collect user input if interactive
projectConfig := &config.ProjectConfig{
Name: opts.ProjectName,
Description: opts.Description,
Template: opts.Template,
LLMProvider: opts.LLMProvider,
AgentType: opts.AgentType,
}

if opts.Interactive {
var err error
projectConfig, err = s.collectUserInput(ctx, projectConfig)
if err != nil {
return fmt.Errorf("failed to collect user input: %w", err)
// Resolve template type
var templateType TemplateType
switch opts.Template {
case "quickstart":
templateType = TemplateQuickstart
case "single-agent":
templateType = TemplateSingleAgent
case "multi-agent":
templateType = TemplateMultiAgent
case "mcp-tools":
templateType = TemplateMCPTools
case "workflow":
templateType = TemplateWorkflow
default:
// Default to single-agent if not specified or unknown
if opts.Template == "" {
templateType = TemplateSingleAgent
} else {
// Try to match string to type, otherwise error
templateType = TemplateType(opts.Template)
}
}

// Create project directory
fmt.Println(color.CyanString(" ✓ Creating directory structure"))
if err := os.MkdirAll(opts.ProjectPath, 0750); err != nil {
return fmt.Errorf("failed to create project directory: %w", err)
}

// Generate directory structure
fmt.Println(color.CyanString(" ✓ Generating project structure"))
if err := s.generator.GenerateStructure(ctx, opts.ProjectPath); err != nil {
return fmt.Errorf("failed to generate project structure: %w", err)
}

// Generate configuration file
fmt.Println(color.CyanString(" ✓ Generating agk.toml configuration"))
configPath := filepath.Join(opts.ProjectPath, "agk.toml")
if err := s.configGenerator.GenerateConfig(projectConfig, configPath); err != nil {
return fmt.Errorf("failed to generate configuration: %w", err)
}

// Generate workflow files
fmt.Println(color.CyanString(" ✓ Creating workflow definitions"))
if err := s.templateEngine.RenderWorkflow(opts.ProjectPath, projectConfig); err != nil {
return fmt.Errorf("failed to generate workflow: %w", err)
}

// Generate main.go
fmt.Println(color.CyanString(" ✓ Creating main.go entry point"))
if err := s.generator.GenerateMainGo(opts.ProjectPath, opts.ProjectName); err != nil {
return fmt.Errorf("failed to generate main.go: %w", err)
}

// Generate README
fmt.Println(color.CyanString(" ✓ Generating README.md"))
if err := s.templateEngine.RenderREADME(opts.ProjectPath, projectConfig); err != nil {
return fmt.Errorf("failed to generate README: %w", err)
}

// Generate go.mod
fmt.Println(color.CyanString(" ✓ Creating go.mod"))
if err := s.generator.GenerateGoMod(opts.ProjectPath, opts.ProjectName); err != nil {
return fmt.Errorf("failed to generate go.mod: %w", err)
// Get generator for template
generator, err := GetTemplateGenerator(templateType)
if err != nil {
return fmt.Errorf("failed to get template generator: %w", err)
}

// Generate test fixtures
fmt.Println(color.CyanString(" ✓ Creating test fixtures"))
if err := s.generator.GenerateTestFixtures(opts.ProjectPath); err != nil {
return fmt.Errorf("failed to generate test fixtures: %w", err)
// Execute generation
fmt.Println(color.CyanString(" ✓ Generating %s project...", templateType))
if err := generator.Generate(ctx, opts); err != nil {
return fmt.Errorf("project generation failed: %w", err)
}

if s.logger != nil {
Expand All @@ -122,7 +85,7 @@
}

// collectUserInput gathers configuration from the user
func (s *Service) collectUserInput(ctx context.Context, cfg *config.ProjectConfig) (*config.ProjectConfig, error) {

Check failure on line 88 in pkg/scaffold/service.go

View workflow job for this annotation

GitHub Actions / Lint

func `(*Service).collectUserInput` is unused (unused)
// For now, return the provided config
// TODO: Implement interactive prompts using survey/v2
return cfg, nil
Expand Down
Loading
Loading