workflows/default/systems/runtime/modules/ProcessTypes/Invoke-PromptProcess.ps1
|
<# .SYNOPSIS Prompt-based process types: planning, commit, task-creation. .DESCRIPTION Simple single-prompt process types that load a recipe template, optionally append a custom prompt, and stream to the provider. Extracted from launch-process.ps1 as part of v4 Phase 03 (#92). #> param( [Parameter(Mandatory)] [hashtable]$Context ) $Type = $Context.Type $botRoot = $Context.BotRoot $procId = $Context.ProcId $processData = $Context.ProcessData $claudeModelName = $Context.ModelName $claudeSessionId = $Context.SessionId $Prompt = $Context.Prompt $Description = $Context.Description $ShowDebug = $Context.ShowDebug $ShowVerbose = $Context.ShowVerbose $permissionMode = $Context.PermissionMode # Determine workflow template $workflowFile = switch ($Type) { 'planning' { Join-Path $botRoot "recipes\prompts\03-plan-roadmap.md" } 'commit' { Join-Path $botRoot "recipes\prompts\90-commit-and-push.md" } 'task-creation' { Join-Path $botRoot "recipes\prompts\91-new-tasks.md" } } $processData.workflow = switch ($Type) { 'planning' { "03-plan-roadmap.md" } 'commit' { "90-commit-and-push.md" } 'task-creation' { "91-new-tasks.md" } } # Build prompt $systemPrompt = "" if (Test-Path $workflowFile) { $systemPrompt = Get-Content $workflowFile -Raw } # For prompt-based types, append the custom prompt if ($Prompt) { $fullPrompt = @" $systemPrompt ## Additional Context $Prompt "@ } else { $fullPrompt = $systemPrompt } if (-not $Description) { $Description = switch ($Type) { 'planning' { "Plan roadmap" } 'commit' { "Commit and push changes" } 'task-creation' { "Create new tasks" } } } $processData.status = 'running' $processData.description = $Description $processData.heartbeat_status = $Description Write-ProcessFile -Id $procId -Data $processData Write-ProcessActivity -Id $procId -ActivityType "text" -Message "$Description started" try { $streamArgs = @{ Prompt = $fullPrompt Model = $claudeModelName SessionId = $claudeSessionId PersistSession = $false } if ($ShowDebug) { $streamArgs['ShowDebugJson'] = $true } if ($ShowVerbose) { $streamArgs['ShowVerbose'] = $true } if ($permissionMode) { $streamArgs['PermissionMode'] = $permissionMode } Invoke-ProviderStream @streamArgs $processData.status = 'completed' $processData.completed_at = (Get-Date).ToUniversalTime().ToString("o") $processData.heartbeat_status = "Completed: $Description" } catch { $processData.status = 'failed' $processData.failed_at = (Get-Date).ToUniversalTime().ToString("o") $processData.error = $_.Exception.Message $processData.heartbeat_status = "Failed: $($_.Exception.Message)" Write-Status "Process failed: $($_.Exception.Message)" -Type Error } Write-ProcessFile -Id $procId -Data $processData Write-ProcessActivity -Id $procId -ActivityType "text" -Message "Process $procId finished ($($processData.status))" |