 065dddf8d5
			
		
	
	065dddf8d5
	
	
	
		
			
			- Add FUTURE_DEVELOPMENT.md with comprehensive v2 protocol specification - Add MCP integration design and implementation foundation - Add infrastructure and deployment configurations - Update system architecture for v2 evolution 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			222 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package config
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| // SlurpConfig holds SLURP event system integration configuration
 | |
| type SlurpConfig struct {
 | |
| 	// Connection settings
 | |
| 	Enabled             bool          `yaml:"enabled" json:"enabled"`
 | |
| 	BaseURL             string        `yaml:"base_url" json:"base_url"`
 | |
| 	APIKey              string        `yaml:"api_key" json:"api_key"`
 | |
| 	Timeout             time.Duration `yaml:"timeout" json:"timeout"`
 | |
| 	RetryCount          int           `yaml:"retry_count" json:"retry_count"`
 | |
| 	RetryDelay          time.Duration `yaml:"retry_delay" json:"retry_delay"`
 | |
| 	
 | |
| 	// Event generation settings
 | |
| 	EventGeneration     EventGenerationConfig `yaml:"event_generation" json:"event_generation"`
 | |
| 	
 | |
| 	// Project-specific event mappings
 | |
| 	ProjectMappings     map[string]ProjectEventMapping `yaml:"project_mappings" json:"project_mappings"`
 | |
| 	
 | |
| 	// Default event settings
 | |
| 	DefaultEventSettings DefaultEventConfig `yaml:"default_event_settings" json:"default_event_settings"`
 | |
| 	
 | |
| 	// Batch processing settings
 | |
| 	BatchProcessing     BatchConfig `yaml:"batch_processing" json:"batch_processing"`
 | |
| }
 | |
| 
 | |
| // EventGenerationConfig controls when and how SLURP events are generated
 | |
| type EventGenerationConfig struct {
 | |
| 	// Consensus requirements
 | |
| 	MinConsensusStrength    float64       `yaml:"min_consensus_strength" json:"min_consensus_strength"`
 | |
| 	MinParticipants         int           `yaml:"min_participants" json:"min_participants"`
 | |
| 	RequireUnanimity        bool          `yaml:"require_unanimity" json:"require_unanimity"`
 | |
| 	
 | |
| 	// Time-based triggers
 | |
| 	MaxDiscussionDuration   time.Duration `yaml:"max_discussion_duration" json:"max_discussion_duration"`
 | |
| 	MinDiscussionDuration   time.Duration `yaml:"min_discussion_duration" json:"min_discussion_duration"`
 | |
| 	
 | |
| 	// Event type generation rules
 | |
| 	EnabledEventTypes       []string      `yaml:"enabled_event_types" json:"enabled_event_types"`
 | |
| 	DisabledEventTypes      []string      `yaml:"disabled_event_types" json:"disabled_event_types"`
 | |
| 	
 | |
| 	// Severity calculation
 | |
| 	SeverityRules           SeverityConfig `yaml:"severity_rules" json:"severity_rules"`
 | |
| }
 | |
| 
 | |
| // SeverityConfig defines how to calculate event severity from HMMM discussions
 | |
| type SeverityConfig struct {
 | |
| 	// Base severity for each event type (1-10 scale)
 | |
| 	BaseSeverity          map[string]int `yaml:"base_severity" json:"base_severity"`
 | |
| 	
 | |
| 	// Modifiers based on discussion characteristics
 | |
| 	ParticipantMultiplier float64        `yaml:"participant_multiplier" json:"participant_multiplier"`
 | |
| 	DurationMultiplier    float64        `yaml:"duration_multiplier" json:"duration_multiplier"`
 | |
| 	UrgencyKeywords       []string       `yaml:"urgency_keywords" json:"urgency_keywords"`
 | |
| 	UrgencyBoost          int            `yaml:"urgency_boost" json:"urgency_boost"`
 | |
| 	
 | |
| 	// Severity caps
 | |
| 	MinSeverity           int            `yaml:"min_severity" json:"min_severity"`
 | |
| 	MaxSeverity           int            `yaml:"max_severity" json:"max_severity"`
 | |
| }
 | |
| 
 | |
| // ProjectEventMapping defines project-specific event mapping rules
 | |
| type ProjectEventMapping struct {
 | |
| 	ProjectPath           string                    `yaml:"project_path" json:"project_path"`
 | |
| 	CustomEventTypes      map[string]string         `yaml:"custom_event_types" json:"custom_event_types"`
 | |
| 	SeverityOverrides     map[string]int            `yaml:"severity_overrides" json:"severity_overrides"`
 | |
| 	AdditionalMetadata    map[string]interface{}    `yaml:"additional_metadata" json:"additional_metadata"`
 | |
| 	EventFilters          []EventFilter             `yaml:"event_filters" json:"event_filters"`
 | |
| }
 | |
| 
 | |
| // EventFilter defines conditions for filtering or modifying events
 | |
| type EventFilter struct {
 | |
| 	Name              string            `yaml:"name" json:"name"`
 | |
| 	Conditions        map[string]string `yaml:"conditions" json:"conditions"`
 | |
| 	Action            string            `yaml:"action" json:"action"` // "allow", "deny", "modify"
 | |
| 	Modifications     map[string]string `yaml:"modifications" json:"modifications"`
 | |
| }
 | |
| 
 | |
| // DefaultEventConfig provides default settings for generated events
 | |
| type DefaultEventConfig struct {
 | |
| 	DefaultSeverity       int               `yaml:"default_severity" json:"default_severity"`
 | |
| 	DefaultCreatedBy      string            `yaml:"default_created_by" json:"default_created_by"`
 | |
| 	DefaultTags           []string          `yaml:"default_tags" json:"default_tags"`
 | |
| 	MetadataTemplate      map[string]string `yaml:"metadata_template" json:"metadata_template"`
 | |
| }
 | |
| 
 | |
| // BatchConfig controls batch processing of SLURP events
 | |
| type BatchConfig struct {
 | |
| 	Enabled               bool          `yaml:"enabled" json:"enabled"`
 | |
| 	MaxBatchSize          int           `yaml:"max_batch_size" json:"max_batch_size"`
 | |
| 	MaxBatchWait          time.Duration `yaml:"max_batch_wait" json:"max_batch_wait"`
 | |
| 	FlushOnShutdown       bool          `yaml:"flush_on_shutdown" json:"flush_on_shutdown"`
 | |
| }
 | |
| 
 | |
| // HmmmToSlurpMapping defines the mapping between HMMM discussion outcomes and SLURP event types
 | |
| type HmmmToSlurpMapping struct {
 | |
| 	// Consensus types to SLURP event types
 | |
| 	ConsensusApproval     string `yaml:"consensus_approval" json:"consensus_approval"`         // -> "approval"
 | |
| 	RiskIdentified        string `yaml:"risk_identified" json:"risk_identified"`             // -> "warning"
 | |
| 	CriticalBlocker       string `yaml:"critical_blocker" json:"critical_blocker"`           // -> "blocker"
 | |
| 	PriorityChange        string `yaml:"priority_change" json:"priority_change"`             // -> "priority_change"
 | |
| 	AccessRequest         string `yaml:"access_request" json:"access_request"`               // -> "access_update"
 | |
| 	ArchitectureDecision  string `yaml:"architecture_decision" json:"architecture_decision"` // -> "structural_change"
 | |
| 	InformationShare      string `yaml:"information_share" json:"information_share"`         // -> "announcement"
 | |
| 	
 | |
| 	// Keywords that trigger specific event types
 | |
| 	ApprovalKeywords      []string `yaml:"approval_keywords" json:"approval_keywords"`
 | |
| 	WarningKeywords       []string `yaml:"warning_keywords" json:"warning_keywords"`
 | |
| 	BlockerKeywords       []string `yaml:"blocker_keywords" json:"blocker_keywords"`
 | |
| 	PriorityKeywords      []string `yaml:"priority_keywords" json:"priority_keywords"`
 | |
| 	AccessKeywords        []string `yaml:"access_keywords" json:"access_keywords"`
 | |
| 	StructuralKeywords    []string `yaml:"structural_keywords" json:"structural_keywords"`
 | |
| 	AnnouncementKeywords  []string `yaml:"announcement_keywords" json:"announcement_keywords"`
 | |
| }
 | |
| 
 | |
| // GetDefaultSlurpConfig returns default SLURP configuration
 | |
| func GetDefaultSlurpConfig() SlurpConfig {
 | |
| 	return SlurpConfig{
 | |
| 		Enabled:     false, // Disabled by default until configured
 | |
| 		BaseURL:     "http://localhost:8080",
 | |
| 		Timeout:     30 * time.Second,
 | |
| 		RetryCount:  3,
 | |
| 		RetryDelay:  5 * time.Second,
 | |
| 		
 | |
| 		EventGeneration: EventGenerationConfig{
 | |
| 			MinConsensusStrength:  0.7,
 | |
| 			MinParticipants:       2,
 | |
| 			RequireUnanimity:      false,
 | |
| 			MaxDiscussionDuration: 30 * time.Minute,
 | |
| 			MinDiscussionDuration: 1 * time.Minute,
 | |
| 			EnabledEventTypes: []string{
 | |
| 				"announcement", "warning", "blocker", "approval", 
 | |
| 				"priority_change", "access_update", "structural_change",
 | |
| 			},
 | |
| 			DisabledEventTypes: []string{},
 | |
| 			SeverityRules: SeverityConfig{
 | |
| 				BaseSeverity: map[string]int{
 | |
| 					"announcement":     3,
 | |
| 					"warning":          5,
 | |
| 					"blocker":          8,
 | |
| 					"approval":         4,
 | |
| 					"priority_change":  6,
 | |
| 					"access_update":    5,
 | |
| 					"structural_change": 7,
 | |
| 				},
 | |
| 				ParticipantMultiplier: 0.2,
 | |
| 				DurationMultiplier:    0.1,
 | |
| 				UrgencyKeywords:       []string{"urgent", "critical", "blocker", "emergency", "immediate"},
 | |
| 				UrgencyBoost:          2,
 | |
| 				MinSeverity:           1,
 | |
| 				MaxSeverity:           10,
 | |
| 			},
 | |
| 		},
 | |
| 		
 | |
| 		ProjectMappings: make(map[string]ProjectEventMapping),
 | |
| 		
 | |
| 		DefaultEventSettings: DefaultEventConfig{
 | |
| 			DefaultSeverity:  5,
 | |
| 			DefaultCreatedBy: "hmmm-consensus",
 | |
| 			DefaultTags:      []string{"hmmm-generated", "automated"},
 | |
| 			MetadataTemplate: map[string]string{
 | |
| 				"source":           "hmmm-discussion",
 | |
| 				"generation_type":  "consensus-based",
 | |
| 			},
 | |
| 		},
 | |
| 		
 | |
| 		BatchProcessing: BatchConfig{
 | |
| 			Enabled:         true,
 | |
| 			MaxBatchSize:    10,
 | |
| 			MaxBatchWait:    5 * time.Second,
 | |
| 			FlushOnShutdown: true,
 | |
| 		},
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // GetHmmmToSlurpMapping returns the default mapping configuration
 | |
| func GetHmmmToSlurpMapping() HmmmToSlurpMapping {
 | |
| 	return HmmmToSlurpMapping{
 | |
| 		ConsensusApproval:     "approval",
 | |
| 		RiskIdentified:        "warning",
 | |
| 		CriticalBlocker:       "blocker",
 | |
| 		PriorityChange:        "priority_change",
 | |
| 		AccessRequest:         "access_update",
 | |
| 		ArchitectureDecision:  "structural_change",
 | |
| 		InformationShare:      "announcement",
 | |
| 		
 | |
| 		ApprovalKeywords:      []string{"approve", "approved", "looks good", "lgtm", "accepted", "agree"},
 | |
| 		WarningKeywords:       []string{"warning", "caution", "risk", "potential issue", "concern", "careful"},
 | |
| 		BlockerKeywords:       []string{"blocker", "blocked", "critical", "urgent", "cannot proceed", "show stopper"},
 | |
| 		PriorityKeywords:      []string{"priority", "urgent", "high priority", "low priority", "reprioritize"},
 | |
| 		AccessKeywords:        []string{"access", "permission", "auth", "authorization", "credentials", "token"},
 | |
| 		StructuralKeywords:    []string{"architecture", "structure", "design", "refactor", "framework", "pattern"},
 | |
| 		AnnouncementKeywords:  []string{"announce", "fyi", "information", "update", "news", "notice"},
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // ValidateSlurpConfig validates SLURP configuration
 | |
| func ValidateSlurpConfig(config SlurpConfig) error {
 | |
| 	if config.Enabled {
 | |
| 		if config.BaseURL == "" {
 | |
| 			return fmt.Errorf("slurp.base_url is required when SLURP is enabled")
 | |
| 		}
 | |
| 		
 | |
| 		if config.EventGeneration.MinConsensusStrength < 0 || config.EventGeneration.MinConsensusStrength > 1 {
 | |
| 			return fmt.Errorf("slurp.event_generation.min_consensus_strength must be between 0 and 1")
 | |
| 		}
 | |
| 		
 | |
| 		if config.EventGeneration.MinParticipants < 1 {
 | |
| 			return fmt.Errorf("slurp.event_generation.min_participants must be at least 1")
 | |
| 		}
 | |
| 		
 | |
| 		if config.DefaultEventSettings.DefaultSeverity < 1 || config.DefaultEventSettings.DefaultSeverity > 10 {
 | |
| 			return fmt.Errorf("slurp.default_event_settings.default_severity must be between 1 and 10")
 | |
| 		}
 | |
| 	}
 | |
| 	
 | |
| 	return nil
 | |
| } |