278 lines
12 KiB
Plaintext
Raw Normal View History

# Intelligent Hints and Next-Step Guidance System
# Provides contextual hints, documentation links, and next-step suggestions
# Show next step suggestion after successful operation
export def show-next-step [
operation: string # Operation that just completed
context?: record # Optional context (infra, taskserv name, etc)
] {
let ctx = ($context | default {})
match $operation {
"server_create" => {
print $"\n(_ansi green_bold)✓ Servers created successfully!(_ansi reset)\n"
print $"(_ansi cyan_bold)Next steps:(_ansi reset)"
print $" 1. (_ansi blue)Install task services:(_ansi reset) provisioning taskserv create <service>"
print $" (_ansi default_dimmed)Popular services: kubernetes, redis, postgres, containerd(_ansi reset)"
print $" 2. (_ansi blue)SSH into servers:(_ansi reset) provisioning server ssh <hostname>"
print $" 3. (_ansi blue)List servers:(_ansi reset) provisioning server list"
print $"\n(_ansi yellow)💡 Quick guide:(_ansi reset) provisioning guide from-scratch"
print $"(_ansi yellow)💡 Documentation:(_ansi reset) provisioning help infrastructure\n"
}
"taskserv_create" => {
let service_name = ($ctx | get name? | default "service")
print $"\n(_ansi green_bold)✓ Taskserv '($service_name)' installed successfully!(_ansi reset)\n"
print $"(_ansi cyan_bold)Next steps:(_ansi reset)"
print $" 1. (_ansi blue)Verify installation:(_ansi reset) provisioning taskserv validate ($service_name)"
print $" 2. (_ansi blue)Create cluster:(_ansi reset) provisioning cluster create <cluster-name>"
print $" (_ansi default_dimmed)Available clusters: buildkit, ci-cd, monitoring(_ansi reset)"
print $" 3. (_ansi blue)Install more services:(_ansi reset) provisioning taskserv create <service>"
print $"\n(_ansi yellow)💡 Quick guide:(_ansi reset) provisioning guide from-scratch"
print $"(_ansi yellow)💡 Documentation:(_ansi reset) provisioning help infrastructure\n"
}
"workspace_init" => {
let ws_name = ($ctx | get name? | default "workspace")
print $"\n(_ansi green_bold)✓ Workspace '($ws_name)' initialized successfully!(_ansi reset)\n"
print $"(_ansi cyan_bold)Next steps:(_ansi reset)"
print $" 1. (_ansi blue)Discover modules:(_ansi reset) provisioning module discover taskservs"
print $" 2. (_ansi blue)Configure environment:(_ansi reset) provisioning workspace config edit main"
print $" 3. (_ansi blue)Create servers:(_ansi reset) provisioning server create --infra ($ws_name)"
print $"\n(_ansi yellow)💡 Quick start:(_ansi reset) provisioning sc"
print $"(_ansi yellow)💡 Complete guide:(_ansi reset) provisioning guide from-scratch"
print $"(_ansi yellow)💡 Documentation:(_ansi reset) provisioning help workspace\n"
}
"cluster_create" => {
let cluster_name = ($ctx | get name? | default "cluster")
print $"\n(_ansi green_bold)✓ Cluster '($cluster_name)' created successfully!(_ansi reset)\n"
print $"(_ansi cyan_bold)Next steps:(_ansi reset)"
print $" 1. (_ansi blue)Verify deployment:(_ansi reset) provisioning cluster list"
print $" 2. (_ansi blue)Check workflows:(_ansi reset) provisioning workflow list"
print $" 3. (_ansi blue)Monitor status:(_ansi reset) provisioning workflow monitor <id>"
print $"\n(_ansi yellow)💡 Documentation:(_ansi reset) provisioning help orchestration\n"
}
"workspace_activate" => {
let ws_name = ($ctx | get name? | default "workspace")
print $"\n(_ansi green_bold)✓ Workspace '($ws_name)' activated!(_ansi reset)\n"
print $"(_ansi cyan_bold)All provisioning commands will now use this workspace.(_ansi reset)\n"
print $"(_ansi cyan_bold)Next steps:(_ansi reset)"
print $" 1. (_ansi blue)View workspace info:(_ansi reset) provisioning workspace info"
print $" 2. (_ansi blue)List servers:(_ansi reset) provisioning server list"
print $" 3. (_ansi blue)Check configuration:(_ansi reset) provisioning workspace config show"
print $"\n(_ansi yellow)💡 Documentation:(_ansi reset) provisioning help workspace\n"
}
_ => {
print $"\n(_ansi green_bold)✓ Operation completed successfully!(_ansi reset)\n"
}
}
}
# Show documentation link reference
export def show-doc-link [
topic: string # Documentation topic
--compact (-c) # Compact format (no newlines)
] {
let link = match $topic {
"infrastructure" | "infra" => "provisioning help infrastructure"
"orchestration" | "orch" => "provisioning help orchestration"
"workspace" | "ws" => "provisioning help workspace"
"development" | "dev" => "provisioning help development"
"authentication" | "auth" => "provisioning help authentication"
"guides" | "guide" => "provisioning help guides"
"quickstart" => "provisioning guide quickstart"
"from-scratch" => "provisioning guide from-scratch"
"concepts" => "provisioning help concepts"
_ => $"provisioning help ($topic)"
}
if $compact {
$"(_ansi yellow)💡 See:(_ansi reset) ($link)"
} else {
$"\n(_ansi yellow)💡 Documentation:(_ansi reset) ($link)\n"
}
}
# Show contextual example based on operation
export def show-example [
operation: string # Operation type
context?: record # Optional context
] {
let ctx = ($context | default {})
match $operation {
"server_create" => {
print $"\n(_ansi cyan_bold)Examples:(_ansi reset)"
print $" # Create servers with check mode"
print $" provisioning server create --check"
print $""
print $" # Create servers and wait for completion"
print $" provisioning server create --wait"
print $""
print $" # Create for specific infrastructure"
print $" provisioning server create --infra my-project\n"
}
"taskserv_create" => {
print $"\n(_ansi cyan_bold)Examples:(_ansi reset)"
print $" # Install Kubernetes"
print $" provisioning taskserv create kubernetes"
print $""
print $" # Install Redis with check mode"
print $" provisioning taskserv create redis --check"
print $""
print $" # Install Postgres on specific infrastructure"
print $" provisioning taskserv create postgres --infra my-project\n"
}
"workspace_init" => {
print $"\n(_ansi cyan_bold)Examples:(_ansi reset)"
print $" # Initialize and activate workspace"
print $" provisioning workspace init my-project --activate"
print $""
print $" # Interactive workspace creation"
print $" provisioning workspace init --interactive"
print $""
print $" # Initialize specific path"
print $" provisioning workspace init /path/to/workspace --activate\n"
}
"module_discover" => {
print $"\n(_ansi cyan_bold)Examples:(_ansi reset)"
print $" # Discover all taskservs"
print $" provisioning module discover taskservs"
print $""
print $" # Discover providers"
print $" provisioning module discover providers"
print $""
print $" # Discover clusters"
print $" provisioning module discover clusters\n"
}
_ => {
print $"\n(_ansi yellow)💡 Use --help for command options(_ansi reset)\n"
}
}
}
# Enhanced error message with suggestion and documentation link
export def show-error [
error_type: string # Type of error
message: string # Error message
suggestion?: string # Suggestion to fix
doc_topic?: string # Documentation topic
] {
print $"(_ansi red_bold)❌ Error:(_ansi reset) ($message)"
if ($suggestion | is-not-empty) {
print $"(_ansi yellow_bold)💡 Suggestion:(_ansi reset) ($suggestion)"
}
if ($doc_topic | is-not-empty) {
print (show-doc-link $doc_topic --compact)
}
# Provide common error-specific help
match $error_type {
"workspace_not_found" => {
print $"(_ansi cyan)Try:(_ansi reset) provisioning workspace init <name> --activate"
}
"no_servers" => {
print $"(_ansi cyan)Try:(_ansi reset) provisioning server create --infra <infrastructure>"
}
"taskserv_not_found" => {
print $"(_ansi cyan)Available:(_ansi reset) provisioning taskserv list"
print $"(_ansi cyan)Discover:(_ansi reset) provisioning module discover taskservs"
}
"invalid_config" => {
print $"(_ansi cyan)Validate:(_ansi reset) provisioning validate config"
print $"(_ansi cyan)Show:(_ansi reset) provisioning workspace config show"
}
"orchestrator_not_running" => {
print $"(_ansi cyan)Start:(_ansi reset) provisioning orchestrator start --background"
print $"(_ansi cyan)Status:(_ansi reset) provisioning orchestrator status"
}
_ => {}
}
print ""
}
# Show contextual hint based on system state
export def show-contextual-hint [
state: record # System state from diagnostics
] {
# Check various conditions and provide hints
if ($state | get workspace? | default null | is-empty) {
print $"(_ansi yellow_bold)💡 Hint:(_ansi reset) No workspace detected. Initialize one with:"
print $" provisioning workspace init my-project --activate\n"
return
}
if (($state | get servers? | default [] | length) == 0) {
print $"(_ansi yellow_bold)💡 Hint:(_ansi reset) No servers found. Create some with:"
print $" provisioning server create\n"
return
}
if (($state | get taskservs? | default [] | length) == 0) {
print $"(_ansi yellow_bold)💡 Hint:(_ansi reset) No taskservs installed. Install services with:"
print $" provisioning taskserv create <service>\n"
print $" Available: kubernetes, redis, postgres, containerd\n"
return
}
}
# Format success message with icon
export def success-message [
message: string
--icon: string = "✓"
] {
print $"(_ansi green_bold)($icon) ($message)(_ansi reset)"
}
# Format warning message with icon
export def warning-message [
message: string
--icon: string = "⚠️"
] {
print $"(_ansi yellow_bold)($icon) ($message)(_ansi reset)"
}
# Format info message with icon
export def info-message [
message: string
--icon: string = ""
] {
print $"(_ansi cyan_bold)($icon) ($message)(_ansi reset)"
}
# Show progress indicator
export def show-progress [
step: int # Current step
total: int # Total steps
message: string # Progress message
] {
let percentage = (($step / $total) * 100 | math round)
print $"(_ansi cyan)[($step)/($total) - ($percentage)%](_ansi reset) ($message)"
}
# Show quick tip
export def show-tip [
message: string
--compact (-c)
] {
if $compact {
print $"(_ansi yellow)💡 Tip:(_ansi reset) ($message)"
} else {
print $"\n(_ansi yellow_bold)💡 Tip:(_ansi reset) ($message)\n"
}
}