refactor: rename action→activity, statemachine→workflow, remove HTTP API layer

- action/ → activity/ (Temporal activities)
- statemachine/ → workflow/ (Temporal workflows)
- Removed internal/api/ and cmd/server/ (api-gw handles HTTP, Temporal is the API)
- Created pkg/types/types.go as single source of truth for all shared types
- Extracted CallRoleLLM helper (DRY: implementer/planner/judge shared pattern)
- Fixed circular import: workflow_graph_query uses string activity names
- Fixed logger.logf → logger.Info/Warn (method didn't exist)
- Fixed routing types: added Branches, Activity, BackoffSeconds, TaskActivity
- Fixed db.Canvas.Name, db.Client→DB, GetWorkflow→FetchWorkflow
- Removed unused imports
- All tests pass, build clean, vet clean
This commit is contained in:
Test
2026-09-05 23:59:13 -07:00
parent b7aa1fb293
commit 9ec7e6a344
54 changed files with 847 additions and 1901 deletions
+223
View File
@@ -0,0 +1,223 @@
// Package types defines the shared domain model for Poimen workflows.
// Both workflow/ (orchestration) and activity/ (execution) import from here.
package types
import (
"time"
"github.com/rockliang/poimen/workflows/pkg/db"
)
// ===== LLM Configuration =====
type ModelSpec struct {
ModelID string
Thinking string // "adaptive" or ""
Effort string // "low", "medium", "high", "xhigh", "max"
}
type PromptSpec struct {
TemplateRef string
RawTemplate string
Variables map[string]any
Model ModelSpec
LessonsRef string
}
type SkillRef struct {
Name string
URL string
}
// ===== Retry & Tuning =====
type PiRetryPolicy struct {
ScheduleToCloseTimeout time.Duration
InitialInterval time.Duration
MaximumInterval time.Duration
BackoffCoefficient float64
StreamTimeout time.Duration
StreamTimeoutMax time.Duration
}
type ActivityTuning struct {
ImplementerBaseTimeout time.Duration
ImplementerMaxRetries int
JudgeTimeout time.Duration
PiRetry PiRetryPolicy
InitialRetryInterval time.Duration
MaxRetryInterval time.Duration
RetryBackoffCoefficient float64
}
// ===== Orchestrator =====
type OrchestratorConfig struct {
SystemPrompt string
Skills []SkillRef
RolePrompts map[string]PromptSpec
Tuning ActivityTuning
}
type OrchestratorInput struct {
TargetRepoPath string
RemoteURL string
Milestone string
Config OrchestratorConfig
DryRun bool
CycleCount int
MaxCyclesBeforeCAN int
PiProvider string
}
type OrchestratorOutput struct {
MilestoneComplete bool
Done bool
LastError string
}
// ===== TaskUnit =====
type TaskUnitInput struct {
TaskID string
RemoteURL string
TargetRepoPath string
Milestone string
Config OrchestratorConfig
DryRun bool
}
type TaskUnitOutput struct {
TaskID string
Status string
Verdict string
Critique string
Branch string
Reason string
Changes string
}
// ===== Canvas & Relations =====
type RelationWording struct {
Verb string `json:"verb"`
SourceOutput string `json:"source_output"`
TargetInput string `json:"target_input"`
ConnectionType string `json:"connection_type"`
Confidence float64 `json:"confidence"`
SemanticMatch string `json:"semantic_match"`
TransformerNeeded string `json:"transformer_needed,omitempty"`
}
type EdgeWithWording struct {
ID string `json:"id,omitempty"`
Source string `json:"source"`
Target string `json:"target"`
RelationType string `json:"relation_type"`
RelationLabel string `json:"relation_label"`
RelationWording RelationWording `json:"relation_wording"`
CreatedAt string `json:"created_at,omitempty"`
}
type CanvasWithRelationsData struct {
WorkflowID string `json:"workflow_id"`
Version int `json:"version"`
Nodes []db.WorkflowNode `json:"nodes"`
Edges []db.WorkflowEdge `json:"edges"`
Relations []EdgeWithWording `json:"relations"`
UpdatedAt string `json:"updated_at"`
}
// ===== Activity I/O =====
type FetchCanvasRelationsInput struct {
WorkflowID string `json:"workflow_id"`
Version int `json:"version"`
}
type CanvasReasonerInput struct {
Nodes []db.WorkflowNode `json:"nodes"`
Edges []db.WorkflowEdge `json:"edges"`
PreserveExisting bool `json:"preserve_existing,omitempty"`
AuthToken string `json:"auth_token,omitempty"`
}
type QueryPathData struct {
SourceID string `json:"source_id"`
TargetID string `json:"target_id"`
Distance int `json:"distance"`
PathCount int `json:"path_count"`
NodeIDs []string `json:"node_ids"`
Confidence float64 `json:"total_confidence"`
}
type GraphRAGQueryInput struct {
WorkflowID string `json:"workflow_id"`
Query string `json:"query"`
SearchType string `json:"search_type"`
RelationType string `json:"relation_type"`
ConfidenceFloor float64 `json:"confidence_floor"`
TopK int `json:"top_k"`
RankingProfile string `json:"ranking_profile"`
Canvas CanvasWithRelationsData `json:"canvas"`
}
type GraphRAGQueryOutput struct {
WorkflowID string `json:"workflow_id"`
Query string `json:"query"`
Edges []EdgeWithWording `json:"edges"`
Paths []QueryPathData `json:"paths"`
TotalCount int `json:"total_count"`
HasMore bool `json:"has_more"`
ExecutionMs int64 `json:"execution_time_ms"`
}
type CanvasCompatibilityInput struct {
Nodes []db.WorkflowNode `json:"nodes"`
Edges []db.WorkflowEdge `json:"edges"`
Query string `json:"query,omitempty"`
}
type IndexGraphRAGInput struct {
WorkflowID string `json:"workflow_id"`
Version int `json:"version"`
Nodes []db.WorkflowNode `json:"nodes"`
Relations []EdgeWithWording `json:"relations"`
}
type IndexGraphRAGOutput struct {
WorkflowID string `json:"workflow_id"`
Version int `json:"version"`
IndexedEntities int `json:"indexed_entities"`
IndexedEdges int `json:"indexed_edges"`
Status string `json:"status"`
GraphRAGChecksum string `json:"graph_rag_checksum"`
IndexedAt string `json:"indexed_at"`
}
type PromptUpdate struct {
Role string
Spec PromptSpec
}
// ===== Defaults =====
func NewPiRetryPolicy() PiRetryPolicy {
return PiRetryPolicy{
ScheduleToCloseTimeout: 5 * time.Minute,
InitialInterval: 2 * time.Second,
MaximumInterval: 30 * time.Second,
BackoffCoefficient: 2.0,
StreamTimeout: 30 * time.Second,
StreamTimeoutMax: 2 * time.Minute,
}
}
func NewActivityTuning() ActivityTuning {
return ActivityTuning{
ImplementerBaseTimeout: 10 * time.Minute,
ImplementerMaxRetries: 3,
JudgeTimeout: 5 * time.Minute,
PiRetry: NewPiRetryPolicy(),
}
}