#!/bin/bash # GreenLight Memory Templates # Standardized logging with emoji tags for BlackRoad memory system set -e MEMORY_SYSTEM="$HOME/memory-system.sh" # Colors GREEN='\033[0;32m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' NC='\033[0m' # Helper to log with GreenLight tags gl_log() { local gl_tags="$1" local action="$2" local entity="$3" local details="$4" # Prepend GreenLight tags to details local full_details="[${gl_tags}] ${details}" $MEMORY_SYSTEM log "$action" "$entity" "$full_details" } # Template: Announce work with GreenLight gl_announce() { local agent_name="$1" local project="$2" local tasks="$3" local goal="$4" local scale="${5:-πŸ‘‰}" # default micro local domain="${6:-πŸ›£οΈ}" # default platform local priority="${7:-πŸ“Œ}" # default medium gl_log "🎯${scale}${domain}${priority}πŸ“£" \ "announce" \ "$agent_name" \ "Working on: ${project}. Tasks: ${tasks}. Goal: ${goal}. Checking memory every 60s!" } # Template: Progress update gl_progress() { local agent_name="$1" local completed="$2" local next="$3" local scale="${4:-πŸ‘‰}" local domain="${5:-πŸ›£οΈ}" gl_log "βœ…${scale}${domain}" \ "progress" \ "$agent_name" \ "Completed: ${completed}. Next: ${next}" } # Template: Coordination request gl_coordinate() { local from_agent="$1" local to_agent="$2" local message="$3" local priority="${4:-πŸ“Œ}" gl_log "🀝${priority}πŸ’¬" \ "coordinate" \ "$from_agent" \ "@${to_agent}: ${message}" } # Template: Blocked gl_blocked() { local agent_name="$1" local reason="$2" local needs="$3" local priority="${4:-🚨}" gl_log "πŸ”’${priority}β›”" \ "blocked" \ "$agent_name" \ "Stuck: ${reason}. Needs: ${needs}" } # Template: Deployment gl_deploy() { local service="$1" local url="$2" local details="$3" local scale="${4:-πŸ‘‰}" local domain="${5:-πŸ”§}" gl_log "πŸš€${scale}${domain}βœ…" \ "deployed" \ "$service" \ "URL: ${url}. ${details}" } # Template: Decision gl_decide() { local topic="$1" local decision="$2" local rationale="$3" local scale="${4:-🎒}" gl_log "βš–οΈ${scale}πŸ“" \ "decided" \ "$topic" \ "Decision: ${decision}. Rationale: ${rationale}" } # Template: Bug report gl_bug() { local component="$1" local description="$2" local priority="${3:-πŸ“Œ}" local scale="${4:-πŸ‘‰}" gl_log "πŸ›${scale}${priority}πŸ”΄" \ "bug" \ "$component" \ "$description" } # Template: Feature request gl_feature() { local feature="$1" local description="$2" local effort="${3:-πŸ₯„}" local priority="${4:-πŸ“Œ}" gl_log "✨${effort}${priority}πŸ’‘" \ "feature" \ "$feature" \ "$description" } # Template: Start phase gl_phase_start() { local phase="$1" # discovery, planning, implementation, testing, deployment local project="$2" local details="$3" local scale="${4:-🎒}" local phase_emoji="" case "$phase" in discovery) phase_emoji="🌱" ;; planning) phase_emoji="πŸ“" ;; implementation) phase_emoji="πŸ”¨" ;; testing) phase_emoji="πŸ§ͺ" ;; deployment) phase_emoji="πŸš€" ;; monitoring) phase_emoji="πŸ“Š" ;; iteration) phase_emoji="πŸ”„" ;; *) phase_emoji="🎯" ;; esac gl_log "🚧${phase_emoji}${scale}⏰" \ "phase_start" \ "$project" \ "Starting ${phase} phase. ${details}" } # Template: Complete phase gl_phase_done() { local phase="$1" local project="$2" local summary="$3" local scale="${4:-🎒}" local phase_emoji="" case "$phase" in discovery) phase_emoji="🌱" ;; planning) phase_emoji="πŸ“" ;; implementation) phase_emoji="πŸ”¨" ;; testing) phase_emoji="πŸ§ͺ" ;; deployment) phase_emoji="πŸš€" ;; monitoring) phase_emoji="πŸ“Š" ;; iteration) phase_emoji="πŸ”„" ;; *) phase_emoji="🎯" ;; esac gl_log "βœ…${phase_emoji}${scale}πŸŽ‰" \ "phase_done" \ "$project" \ "Completed ${phase} phase. ${summary}" } # Template: WIP update gl_wip() { local task="$1" local status="$2" local agent="${3:-🌸}" # default Cece local scale="${4:-πŸ‘‰}" gl_log "🚧${scale}${agent}⚑" \ "wip" \ "$task" \ "$status" } # Template: Dependency gl_depends() { local task="$1" local depends_on="$2" local reason="$3" gl_log "πŸ”„β›”πŸ‘‰" \ "depends" \ "$task" \ "Depends on: ${depends_on}. Reason: ${reason}" } # Template: Workflow trigger gl_workflow_trigger() { local repo="$1" local trigger="$2" # push, pr, manual gl_log "βš‘πŸ‘‰πŸ”§πŸ“Œ" \ "triggered" \ "$repo" \ "Workflow triggered by: ${trigger}" } # Template: Workflow step gl_workflow_step() { local repo="$1" local step="$2" # lint, test, build, deploy local result="$3" # passed, failed local step_emoji="" case "$step" in lint) step_emoji="πŸ”" ;; test) step_emoji="πŸ§ͺ" ;; build) step_emoji="πŸ—οΈ" ;; deploy) step_emoji="πŸš€" ;; *) step_emoji="βš™οΈ" ;; esac local status_emoji="βœ…" [ "$result" = "failed" ] && status_emoji="❌" gl_log "${step_emoji}${status_emoji}πŸ‘‰πŸ”§" \ "$step" \ "$repo" \ "Step $step $result" } # Template: Workflow complete gl_workflow_done() { local repo="$1" local result="$2" # passed, failed local duration="$3" local status_emoji="βœ…" [ "$result" = "failed" ] && status_emoji="❌" gl_log "${status_emoji}πŸŽ’πŸ”§πŸ“£" \ "workflow_${result}" \ "$repo" \ "Pipeline $result in $duration" } # Template: Worker deployment gl_worker_deploy() { local worker="$1" local env="$2" # staging, production local version="$3" local env_emoji="πŸ§ͺ" [ "$env" = "production" ] && env_emoji="πŸš€" gl_log "${env_emoji}βš™οΈπŸŒβœ…" \ "deployed" \ "$worker" \ "Worker deployed to $env v$version" } # Template: D1 migration gl_d1_migrate() { local database="$1" local migration="$2" gl_log "πŸ”„πŸ’ΎπŸ‘‰πŸ“Œ" \ "migrated" \ "$database" \ "Applied migration: ${migration}" } # Template: KV namespace operation gl_kv_update() { local namespace="$1" local operation="$2" # created, updated, deleted gl_log "βœ…πŸ—‚οΈπŸ‘‰πŸ“Œ" \ "$operation" \ "$namespace" \ "KV namespace $operation" } # Template: R2 bucket operation gl_r2_operation() { local bucket="$1" local operation="$2" local size="$3" gl_log "πŸ“¦πŸ‘‰πŸ’Ύ" \ "$operation" \ "$bucket" \ "R2 $operation ($size)" } # ═══════════════════════════════════════════════════════ # BILLING TEMPLATES (Stripe Integration) # ═══════════════════════════════════════════════════════ # Template: Webhook received gl_webhook_received() { local event_type="$1" local event_id="$2" gl_log "⚑πŸ“₯πŸ’³πŸ‘‰" \ "webhook_received" \ "$event_type" \ "Stripe webhook: $event_id" } # Template: Checkout complete gl_checkout_complete() { local customer_email="$1" local tier="$2" local amount="$3" local tier_emoji="" case "$tier" in individual) tier_emoji="πŸ‘€" ;; pro) tier_emoji="πŸ’Ό" ;; team) tier_emoji="πŸ‘₯" ;; enterprise) tier_emoji="🏒" ;; founder) tier_emoji="🌟" ;; *) tier_emoji="🎯" ;; esac gl_log "βœ…πŸ’³${tier_emoji}🎒" \ "checkout_complete" \ "$customer_email" \ "Checkout complete: $tier plan, \$$amount" } # Template: Subscription created gl_subscription_created() { local customer="$1" local tier="$2" local subscription_id="$3" local tier_emoji="" case "$tier" in individual) tier_emoji="πŸ‘€" ;; pro) tier_emoji="πŸ’Ό" ;; team) tier_emoji="πŸ‘₯" ;; enterprise) tier_emoji="🏒" ;; founder) tier_emoji="🌟" ;; *) tier_emoji="🎯" ;; esac gl_log "πŸ†•βš™οΈ${tier_emoji}βœ…" \ "subscription_created" \ "$customer" \ "Subscription created: $tier ($subscription_id)" } # Template: Subscription updated gl_subscription_updated() { local customer="$1" local old_tier="$2" local new_tier="$3" gl_log "πŸ”„πŸŽ―πŸ’ΌπŸ“Œ" \ "subscription_updated" \ "$customer" \ "Plan change: $old_tier β†’ $new_tier" } # Template: Subscription canceled gl_subscription_canceled() { local customer="$1" local tier="$2" local reason="${3:-not specified}" gl_log "πŸš«βš οΈπŸ’ΌπŸ”₯" \ "subscription_canceled" \ "$customer" \ "Canceled $tier plan. Reason: $reason" } # Template: Invoice paid gl_invoice_paid() { local customer="$1" local amount="$2" local currency="${3:-usd}" gl_log "πŸ’°βœ…πŸŽ’πŸŒ" \ "invoice_paid" \ "$customer" \ "Payment successful: \$$amount $currency" } # Template: Invoice payment failed gl_invoice_failed() { local customer="$1" local amount="$2" local error="${3:-declined}" gl_log "βŒπŸš¨πŸ’³πŸ”₯" \ "invoice_failed" \ "$customer" \ "Payment failed: \$$amount ($error)" } # Template: Payment retry gl_payment_retry() { local customer="$1" local attempt="$2" gl_log "πŸ”πŸ’³βš‘β­" \ "payment_retry" \ "$customer" \ "Payment retry attempt #$attempt" } # Template: Coupon applied gl_coupon_applied() { local customer="$1" local coupon_code="$2" local discount="$3" gl_log "πŸŽπŸ’³βœ…πŸ“Œ" \ "coupon_applied" \ "$customer" \ "Coupon $coupon_code applied: $discount" } # Template: Trial started gl_trial_started() { local customer="$1" local tier="$2" local trial_days="$3" gl_log "πŸŽŸοΈπŸ†•πŸ‘€πŸ“Œ" \ "trial_started" \ "$customer" \ "Trial started: $tier plan, $trial_days days" } # Template: Customer created gl_customer_created() { local email="$1" local customer_id="$2" gl_log "πŸ“πŸ‘€βœ…πŸ‘‰" \ "customer_created" \ "$email" \ "Stripe customer: $customer_id" } # Template: Payment method attached gl_payment_method_attached() { local customer="$1" local pm_type="$2" local last4="${3:-****}" gl_log "πŸ”πŸ’³βœ…πŸ“Œ" \ "payment_method" \ "$customer" \ "Payment method added: $pm_type ending in $last4" } # Template: Subscription past due gl_subscription_past_due() { local customer="$1" local days_overdue="$2" gl_log "βš οΈπŸš¨πŸ’ΌπŸ”₯" \ "past_due" \ "$customer" \ "Subscription past due: $days_overdue days" } # Template: Cancel scheduled gl_cancel_scheduled() { local customer="$1" local tier="$2" local cancel_date="$3" gl_log "πŸ“…βš οΈπŸ’Όβ­" \ "cancel_scheduled" \ "$customer" \ "$tier subscription ends on $cancel_date - retention opportunity!" } # ═══════════════════════════════════════════════════════ # AI TEMPLATES (HuggingFace Integration) # ═══════════════════════════════════════════════════════ # Template: Model loading gl_model_loading() { local model_name="$1" local size="${2:-unknown}" gl_log "πŸ€—πŸ“₯πŸ‘‰πŸ“Œ" \ "model_loading" \ "$model_name" \ "Loading model: $size" } # Template: Model ready gl_model_ready() { local model_name="$1" local vram="${2:-unknown}" gl_log "πŸ§ βœ…πŸŽ’β­" \ "model_ready" \ "$model_name" \ "Model loaded, VRAM: $vram" } # Template: Inference started gl_inference_start() { local task_type="$1" local model="$2" local request_id="${3:-unknown}" local task_emoji="" case "$task_type" in chat) task_emoji="πŸ’¬" ;; text_gen) task_emoji="πŸ’¬" ;; image_gen) task_emoji="🎨" ;; embeddings) task_emoji="πŸ”€" ;; ocr) task_emoji="πŸ”" ;; tts) task_emoji="πŸŽ™οΈ" ;; video_gen) task_emoji="πŸŽ₯" ;; *) task_emoji="πŸ€–" ;; esac gl_log "⚑${task_emoji}πŸ‘‰πŸ“Œ" \ "inference_start" \ "$model" \ "$task_type inference started: $request_id" } # Template: Inference complete gl_inference_complete() { local task_type="$1" local model="$2" local duration="${3:-unknown}" local task_emoji="" case "$task_type" in chat) task_emoji="πŸ’¬" ;; text_gen) task_emoji="πŸ’¬" ;; image_gen) task_emoji="🎨" ;; embeddings) task_emoji="πŸ”€" ;; ocr) task_emoji="πŸ”" ;; *) task_emoji="πŸ€–" ;; esac gl_log "βœ…${task_emoji}πŸŽ’πŸŽ‰" \ "inference_complete" \ "$model" \ "$task_type complete in $duration" } # Template: Inference failed gl_inference_failed() { local task_type="$1" local model="$2" local error="${3:-unknown error}" gl_log "βŒβš‘πŸ€–πŸ”₯" \ "inference_failed" \ "$model" \ "$task_type failed: $error" } # Template: Endpoint created gl_endpoint_created() { local endpoint_name="$1" local model="$2" local instance_type="${3:-unknown}" local instance_emoji="" case "$instance_type" in *t4*) instance_emoji="🟒" ;; *l4*) instance_emoji="πŸ”΅" ;; *a10g*) instance_emoji="🟑" ;; *a100*) instance_emoji="🟠" ;; *h100*) instance_emoji="πŸ”΄" ;; *) instance_emoji="πŸ–₯️" ;; esac gl_log "πŸš€πŸŒ${instance_emoji}βœ…" \ "endpoint_created" \ "$endpoint_name" \ "Endpoint created: $model on $instance_type" } # Template: Endpoint paused gl_endpoint_paused() { local endpoint_name="$1" gl_log "βΈοΈπŸŒπŸ‘‰πŸ“Œ" \ "endpoint_paused" \ "$endpoint_name" \ "Endpoint paused (cost savings)" } # Template: Endpoint resumed gl_endpoint_resumed() { local endpoint_name="$1" gl_log "β–ΆοΈπŸŒπŸ‘‰πŸ“Œ" \ "endpoint_resumed" \ "$endpoint_name" \ "Endpoint resumed" } # Template: Space deployed gl_space_deployed() { local space_name="$1" local url="$2" gl_log "πŸš€πŸ€—πŸŒβœ…" \ "space_deployed" \ "$space_name" \ "Space deployed: $url" } # ═══════════════════════════════════════════════════════ # LINEAR TEMPLATES (Project Management Integration) # ═══════════════════════════════════════════════════════ # Template: Issue created gl_issue_created() { local identifier="$1" local title="$2" local label="${3:-feature}" local label_emoji="" case "$label" in feature) label_emoji="✨" ;; bug) label_emoji="πŸ›" ;; improvement) label_emoji="πŸ”§" ;; security) label_emoji="πŸ”’" ;; performance) label_emoji="⚑" ;; *) label_emoji="πŸ“‹" ;; esac gl_log "⚑${label_emoji}πŸ‘‰πŸ“Œ" \ "issue_created" \ "$identifier" \ "$title" } # Template: Issue state changed gl_issue_state_changed() { local identifier="$1" local old_state="$2" local new_state="$3" local state_emoji="" case "$new_state" in "Todo") state_emoji="πŸ“₯πŸ“" ;; "In Progress") state_emoji="βš™οΈπŸ”„" ;; "In Review") state_emoji="βœ”οΈπŸ‘€" ;; "Done") state_emoji="πŸŽ‰βœ…" ;; "Canceled") state_emoji="πŸ“¦βŒ" ;; *) state_emoji="πŸ“‹" ;; esac gl_log "${state_emoji}πŸ‘‰πŸ“Œ" \ "state_changed" \ "$identifier" \ "$old_state β†’ $new_state" } # Template: Issue completed gl_issue_completed() { local identifier="$1" local title="$2" local duration="${3:-unknown}" gl_log "πŸŽ‰βœ…πŸŽ’πŸŒ" \ "issue_completed" \ "$identifier" \ "$title (completed in $duration)" } # Template: Issue blocked gl_issue_blocked() { local identifier="$1" local reason="$2" gl_log "πŸ”’βš οΈπŸ‘‰πŸ”₯" \ "issue_blocked" \ "$identifier" \ "Blocked: $reason" } # Template: PR linked gl_pr_linked() { local identifier="$1" local pr_url="$2" gl_log "πŸ”—πŸ“‹πŸŽ’πŸ“Œ" \ "pr_linked" \ "$identifier" \ "PR: $pr_url" } # Template: PR merged gl_pr_merged() { local identifier="$1" local pr_number="$2" gl_log "βœ…πŸ”—πŸŽ’πŸŽ‰" \ "pr_merged" \ "$identifier" \ "PR #$pr_number merged, issue completed" } # ═══════════════════════════════════════════════════════ # SLACK TEMPLATES (Team Communication Integration) # ═══════════════════════════════════════════════════════ # Template: Slash command executed gl_slack_command() { local command="$1" local user="$2" local args="${3:-}" gl_log "πŸ’¬βš‘πŸ‘‰πŸ“Œ" \ "slack_command" \ "$command" \ "Executed by: $user, args: $args" } # Template: Message sent to channel gl_slack_message_sent() { local channel="$1" local message_type="${2:-notification}" gl_log "πŸ’¬πŸ“€πŸ‘‰πŸ“Œ" \ "message_sent" \ "$channel" \ "Type: $message_type" } # Template: Mention received gl_slack_mention() { local user="$1" local channel="$2" gl_log "πŸ””πŸ’¬πŸ‘‰β­" \ "mention_received" \ "$user" \ "In channel: $channel" } # Template: Alert sent to Slack gl_slack_alert() { local severity="$1" # critical, warning, info local title="$2" local channel="${3:-ops-alerts}" local severity_emoji="" case "$severity" in critical) severity_emoji="🚨" ;; warning) severity_emoji="⚠️" ;; info) severity_emoji="ℹ️" ;; *) severity_emoji="πŸ“’" ;; esac gl_log "${severity_emoji}πŸ’¬πŸŽ’πŸ”₯" \ "slack_alert" \ "$title" \ "Severity: $severity, Channel: #$channel" } # Template: Deployment notification sent gl_slack_deployment_notification() { local status="$1" # started, success, failed local service="$2" local environment="$3" local status_emoji="" case "$status" in started) status_emoji="πŸš€" ;; success) status_emoji="βœ…" ;; failed) status_emoji="❌" ;; *) status_emoji="βš™οΈ" ;; esac gl_log "${status_emoji}πŸ’¬πŸŽ’πŸ“Œ" \ "slack_deployment" \ "$service" \ "Status: $status, Env: $environment" } # Template: GreenLight update posted gl_slack_greenlight_update() { local item_id="$1" local from_state="$2" local to_state="$3" gl_log "πŸš¦πŸ’¬πŸ‘‰πŸ“Œ" \ "slack_greenlight" \ "$item_id" \ "$from_state β†’ $to_state" } # Template: Linear notification sent gl_slack_linear_notification() { local action="$1" # created, updated, completed local identifier="$2" local action_emoji="" case "$action" in created) action_emoji="πŸ†•" ;; updated) action_emoji="πŸ“" ;; completed) action_emoji="βœ…" ;; *) action_emoji="πŸ“‹" ;; esac gl_log "${action_emoji}πŸ’¬πŸ‘‰πŸ“Œ" \ "slack_linear" \ "$identifier" \ "Action: $action" } # Template: GitHub notification sent gl_slack_github_notification() { local type="$1" # pr_opened, pr_merged, push, issue local repo="$2" local title="${3:-}" local type_emoji="" case "$type" in pr_opened) type_emoji="πŸ”€" ;; pr_merged) type_emoji="πŸŽ‰" ;; push) type_emoji="πŸ“€" ;; issue) type_emoji="πŸ›" ;; *) type_emoji="πŸ™" ;; esac gl_log "${type_emoji}πŸ’¬πŸ‘‰πŸ“Œ" \ "slack_github" \ "$repo" \ "Type: $type, $title" } # Template: Stripe notification sent gl_slack_stripe_notification() { local event="$1" # payment_success, payment_failed, subscription_created, etc. local customer="$2" local amount="${3:-}" local event_emoji="" case "$event" in payment_success) event_emoji="πŸ’°" ;; payment_failed) event_emoji="❌" ;; subscription_created) event_emoji="πŸŽ‰" ;; subscription_canceled) event_emoji="πŸ‘‹" ;; *) event_emoji="πŸ’³" ;; esac gl_log "${event_emoji}πŸ’¬πŸ‘‰πŸ“Œ" \ "slack_stripe" \ "$customer" \ "Event: $event, Amount: $amount" } # Template: Approval request sent gl_slack_approval_request() { local type="$1" # deployment, access, expense, other local requester="$2" local title="${3:-}" gl_log "πŸ””πŸ’¬πŸ‘‰β­" \ "approval_request" \ "$requester" \ "Type: $type, $title" } # Template: Approval decision gl_slack_approval_decision() { local decision="$1" # approved, rejected local approver="$2" local request_id="$3" local decision_emoji="" case "$decision" in approved) decision_emoji="βœ…" ;; rejected) decision_emoji="❌" ;; *) decision_emoji="πŸ’¬" ;; esac gl_log "${decision_emoji}πŸ’¬πŸ‘‰πŸ“Œ" \ "approval_decision" \ "$request_id" \ "Decision: $decision by $approver" } # Template: Reaction added gl_slack_reaction() { local emoji="$1" local message_id="$2" local user="$3" gl_log "πŸ‘πŸ’¬πŸ‘‰πŸ“Œ" \ "reaction_added" \ "$message_id" \ "Emoji: $emoji by $user" } # Template: Standup posted gl_slack_standup() { local user="$1" local date="$2" gl_log "β˜€οΈπŸ’¬πŸ‘‰πŸ“Œ" \ "standup_posted" \ "$user" \ "Date: $date" } # Template: Modal opened gl_slack_modal_opened() { local modal_type="$1" local user="$2" gl_log "πŸ“‹πŸ’¬πŸ‘‰πŸ“Œ" \ "modal_opened" \ "$modal_type" \ "User: $user" } # ═══════════════════════════════════════════════════════ # NOTION TEMPLATES (Knowledge Management Integration) # ═══════════════════════════════════════════════════════ # Template: Page created gl_notion_page_created() { local page_title="$1" local database="$2" local creator="${3:-unknown}" gl_log "βš‘πŸ“„πŸ‘‰πŸ“Œ" \ "page_created" \ "$page_title" \ "Database: $database, Creator: $creator" } # Template: Page updated gl_notion_page_updated() { local page_title="$1" local update_type="${2:-content}" local update_emoji="" case "$update_type" in content) update_emoji="✏️" ;; properties) update_emoji="πŸ”’" ;; title) update_emoji="πŸ“" ;; *) update_emoji="βš™οΈ" ;; esac gl_log "${update_emoji}πŸ“„πŸ‘‰πŸ“Œ" \ "page_updated" \ "$page_title" \ "Type: $update_type" } # Template: Page published gl_notion_page_published() { local page_title="$1" local public_url="$2" gl_log "πŸŽ‰πŸ“°πŸŽ’πŸŒ" \ "page_published" \ "$page_title" \ "Public URL: $public_url" } # Template: Database item added gl_notion_db_item_added() { local database_name="$1" local item_title="$2" gl_log "πŸ“ŠπŸ“₯πŸ‘‰πŸ“Œ" \ "db_item_added" \ "$database_name" \ "$item_title" } # Template: Status changed gl_notion_status_changed() { local item_title="$1" local old_status="$2" local new_status="$3" local status_emoji="" case "$new_status" in "Not started") status_emoji="βšͺ" ;; "In progress") status_emoji="πŸ”΅" ;; "Done") status_emoji="βœ…" ;; "Blocked") status_emoji="πŸ”΄" ;; *) status_emoji="🚦" ;; esac gl_log "${status_emoji}πŸš¦πŸ‘‰πŸ“Œ" \ "status_changed" \ "$item_title" \ "$old_status β†’ $new_status" } # Template: Task completed gl_notion_task_completed() { local task_title="$1" local assignee="$2" local duration="${3:-unknown}" gl_log "β˜‘οΈβœ…πŸŽ’πŸ“Œ" \ "task_completed" \ "$task_title" \ "By: $assignee, Duration: $duration" } # Template: Comment added gl_notion_comment_added() { local page_title="$1" local commenter="$2" local preview="${3:0:50}" gl_log "πŸ’¬πŸ“πŸ‘‰β­" \ "comment_added" \ "$page_title" \ "$commenter: $preview..." } # Template: Notion sync completed gl_notion_sync_completed() { local sync_type="$1" local items_synced="$2" local duration="$3" gl_log "βœ…πŸ”„πŸŽ’πŸ“Œ" \ "sync_completed" \ "$sync_type" \ "$items_synced items synced in $duration" } # ═══════════════════════════════════════════════════════ # CANVA TEMPLATES (Design Workflow Integration) # ═══════════════════════════════════════════════════════ # Template: Design created gl_canva_design_created() { local design_title="$1" local design_type="$2" local creator="${3:-unknown}" local type_emoji="" case "$design_type" in social_post|instagram|facebook|twitter) type_emoji="πŸ“±" ;; presentation|slides) type_emoji="πŸ“„" ;; document|report) type_emoji="πŸ“°" ;; video|animation) type_emoji="🎬" ;; graphic|logo|icon) type_emoji="πŸ–ΌοΈ" ;; email|newsletter) type_emoji="πŸ“§" ;; infographic|chart) type_emoji="πŸ“Š" ;; *) type_emoji="🎨" ;; esac gl_log "⚑${type_emoji}πŸ‘‰πŸ“Œ" \ "design_created" \ "$design_title" \ "Type: $design_type, Creator: $creator" } # Template: Design edited gl_canva_design_edited() { local design_title="$1" local edit_type="${2:-content}" local edit_emoji="" case "$edit_type" in content) edit_emoji="✏️" ;; layout) edit_emoji="⊞" ;; style) edit_emoji="🎨" ;; text) edit_emoji="πŸ“" ;; *) edit_emoji="βš™οΈ" ;; esac gl_log "${edit_emoji}πŸŽ¨πŸ‘‰πŸ“Œ" \ "design_edited" \ "$design_title" \ "Edit type: $edit_type" } # Template: Design published gl_canva_design_published() { local design_title="$1" local platform="${2:-web}" local url="${3:-}" local platform_emoji="" case "$platform" in web) platform_emoji="🌐" ;; instagram) platform_emoji="πŸ“±" ;; facebook) platform_emoji="πŸ“˜" ;; twitter) platform_emoji="🐦" ;; linkedin) platform_emoji="πŸ’Ό" ;; *) platform_emoji="🎨" ;; esac gl_log "πŸŽ‰${platform_emoji}🎒🌍" \ "design_published" \ "$design_title" \ "Platform: $platform, URL: $url" } # Template: Asset uploaded gl_canva_asset_uploaded() { local asset_type="$1" local asset_name="$2" local size="${3:-unknown}" local asset_emoji="" case "$asset_type" in image|photo) asset_emoji="πŸ–ΌοΈ" ;; video|clip) asset_emoji="🎬" ;; audio|sound) asset_emoji="🎡" ;; *) asset_emoji="πŸ“€" ;; esac gl_log "πŸ“€${asset_emoji}πŸ‘‰πŸ“Œ" \ "asset_uploaded" \ "$asset_name" \ "Type: $asset_type, Size: $size" } # Template: Export completed gl_canva_export_completed() { local design_title="$1" local format="$2" local file_size="$3" local duration="${4:-unknown}" local format_emoji="" case "$format" in PNG|JPG|JPEG) format_emoji="πŸ–ΌοΈ" ;; PDF) format_emoji="πŸ“„" ;; MP4|MOV) format_emoji="🎬" ;; GIF) format_emoji="🎞️" ;; SVG) format_emoji="🎨" ;; *) format_emoji="πŸ“¦" ;; esac gl_log "βœ…${format_emoji}πŸŽ’πŸ“Œ" \ "export_completed" \ "$design_title" \ "Format: $format, Size: $file_size, Duration: $duration" } # Template: Approval granted gl_canva_approval_granted() { local design_title="$1" local approver="$2" local feedback="${3:-approved}" gl_log "βœ…πŸ‘πŸŽ’πŸ“Œ" \ "approval_granted" \ "$design_title" \ "By: $approver, Feedback: $feedback" } # Template: Comment added gl_canva_comment_added() { local design_title="$1" local commenter="$2" local preview="${3:0:50}" gl_log "πŸ’¬πŸŽ¨πŸ‘‰β­" \ "comment_added" \ "$design_title" \ "$commenter: $preview..." } # Template: Brand kit updated gl_canva_brand_kit_updated() { local brand_name="$1" local update_type="$2" local details="$3" local update_emoji="" case "$update_type" in logo) update_emoji="🏷️" ;; colors) update_emoji="🎨" ;; fonts) update_emoji="πŸ”€" ;; templates) update_emoji="πŸ–ΌοΈ" ;; *) update_emoji="🎯" ;; esac gl_log "${update_emoji}πŸŽ―πŸŽ’πŸ“Œ" \ "brand_kit_updated" \ "$brand_name" \ "Updated: $update_type - $details" } # ═══════════════════════════════════════════════════════ # CONTEXT PROPAGATION TEMPLATES (Layer 12) # ═══════════════════════════════════════════════════════ # Template: Context snapshot gl_context_snapshot() { local context_id="$1" local summary="$2" local key_files="${3:-}" local state="${4:-wip}" gl_log "πŸ“ΈπŸ§ πŸ‘‰πŸ“Œ" \ "context_snapshot" \ "$context_id" \ "$summary | Files: $key_files | State: $state" } # Template: Learning discovered gl_learning_discovered() { local topic="$1" local insight="$2" local evidence="${3:-observation}" gl_log "πŸ’‘βœ¨πŸ‘‰β­" \ "learning_discovered" \ "$topic" \ "Insight: $insight | Evidence: $evidence" } # Template: Learning applied gl_learning_applied() { local pattern="$1" local application="$2" local result="${3:-applied}" gl_log "βœ…πŸŽ“πŸ‘‰πŸ“Œ" \ "learning_applied" \ "$pattern" \ "Applied: $application | Result: $result" } # Template: Decision rationale gl_decision_rationale() { local decision="$1" local rationale="$2" local alternatives="${3:-none considered}" local impact="${4:-medium}" local impact_emoji="" case "$impact" in critical|high) impact_emoji="🎒" ;; medium) impact_emoji="πŸ‘‰" ;; low) impact_emoji="πŸ‘‰" ;; *) impact_emoji="πŸ‘‰" ;; esac gl_log "πŸ€”πŸ“${impact_emoji}⭐" \ "decision_rationale" \ "$decision" \ "Why: $rationale | Alternatives: $alternatives | Impact: $impact" } # Template: User intent captured gl_user_intent_captured() { local user="$1" local goal="$2" local context="${3:-}" local priority="${4:-medium}" local priority_emoji="" case "$priority" in urgent|critical) priority_emoji="πŸ”₯" ;; high) priority_emoji="⭐" ;; medium) priority_emoji="πŸ“Œ" ;; low) priority_emoji="πŸ’€" ;; *) priority_emoji="πŸ“Œ" ;; esac gl_log "πŸŽ―πŸ’­πŸ‘‰${priority_emoji}" \ "user_intent_captured" \ "$user" \ "Goal: $goal | Context: $context" } # Template: Debugging state captured gl_debug_state_captured() { local issue_id="$1" local error_type="$2" local reproduction_steps="$3" local environment="${4:-production}" gl_log "πŸ›πŸ”πŸ‘‰πŸ”₯" \ "debug_state_captured" \ "$issue_id" \ "Type: $error_type | Env: $environment | Steps: $reproduction_steps" } # Template: Root cause identified gl_root_cause_identified() { local issue_id="$1" local root_cause="$2" local confidence="${3:-high}" gl_log "πŸŽ―πŸ›πŸŽ’β­" \ "root_cause_identified" \ "$issue_id" \ "Root cause: $root_cause | Confidence: $confidence" } # Template: Warning documented gl_warning_documented() { local topic="$1" local warning="$2" local severity="${3:-medium}" local severity_emoji="" case "$severity" in critical) severity_emoji="🚨" ;; high) severity_emoji="⚠️" ;; medium) severity_emoji="⚠️" ;; low) severity_emoji="ℹ️" ;; *) severity_emoji="⚠️" ;; esac gl_log "${severity_emoji}πŸ“πŸ‘‰β­" \ "warning_documented" \ "$topic" \ "Warning: $warning | Severity: $severity" } # Template: Best practice established gl_best_practice() { local practice="$1" local rationale="$2" local source="${3:-experience}" gl_log "β­πŸ“šπŸŽ’πŸŒ" \ "best_practice" \ "$practice" \ "Rationale: $rationale | Source: $source" } # ═══════════════════════════════════════════════════════ # ANALYTICS & OBSERVABILITY TEMPLATES (Layer 13) # ═══════════════════════════════════════════════════════ # Template: Error detected gl_error_detected() { local service="$1" local error_type="$2" local message="$3" local severity="${4:-error}" local severity_emoji="" case "$severity" in critical|fatal) severity_emoji="🚨" ;; error) severity_emoji="❌" ;; warning) severity_emoji="⚠️" ;; *) severity_emoji="ℹ️" ;; esac gl_log "${severity_emoji}βŒπŸ‘‰πŸ”₯" \ "error_detected" \ "$service" \ "Type: $error_type | Message: $message | Severity: $severity" } # Template: Performance alert gl_performance_alert() { local metric_type="$1" local service="$2" local current_value="$3" local threshold="$4" local severity="${5:-warning}" local severity_emoji="" case "$severity" in critical) severity_emoji="🚨" ;; warning) severity_emoji="⚠️" ;; info) severity_emoji="ℹ️" ;; *) severity_emoji="πŸ“Š" ;; esac gl_log "${severity_emoji}βš‘πŸ‘‰πŸ”₯" \ "performance_alert" \ "$service" \ "$metric_type: $current_value (threshold: $threshold)" } # Template: User action tracked gl_user_action_tracked() { local event_name="$1" local user_id="${2:-anonymous}" local properties="${3:-}" gl_log "πŸ‘€πŸ“ŠπŸ‘‰πŸ“Œ" \ "user_action" \ "$event_name" \ "User: $user_id | Properties: $properties" } # Template: Conversion event gl_conversion_event() { local funnel="$1" local user_id="$2" local value="${3:-}" gl_log "πŸŽ―βœ…πŸŽ’πŸŒ" \ "conversion" \ "$funnel" \ "User: $user_id | Value: $value" } # Template: Service down gl_service_down() { local service="$1" local error="${2:-unknown}" local impact="${3:-all users}" gl_log "πŸš¨β›”πŸ‘‰πŸ”₯" \ "service_down" \ "$service" \ "Error: $error | Impact: $impact" } # Template: Service recovered gl_service_recovered() { local service="$1" local downtime_duration="$2" local recovery_action="${3:-automatic}" gl_log "βœ…πŸ”„πŸŽ’πŸŽ‰" \ "service_recovered" \ "$service" \ "Downtime: $downtime_duration | Recovery: $recovery_action" } # Template: Metric threshold exceeded gl_metric_threshold() { local metric_name="$1" local current_value="$2" local threshold="$3" local severity="${4:-warning}" local severity_emoji="" case "$severity" in critical) severity_emoji="🚨" ;; warning) severity_emoji="⚠️" ;; info) severity_emoji="ℹ️" ;; *) severity_emoji="πŸ“Š" ;; esac gl_log "${severity_emoji}πŸ“ŠπŸ‘‰πŸ”₯" \ "metric_threshold" \ "$metric_name" \ "Value: $current_value exceeds threshold: $threshold" } # ═══════════════════════════════════════════════════════ # AI AGENT COORDINATION TEMPLATES (Layer 14) # ═══════════════════════════════════════════════════════ # Template: Agent available gl_agent_available() { local agent_id="$1" local agent_type="$2" local capabilities="$3" local availability="${4:-available}" local type_emoji="" case "$agent_type" in frontend) type_emoji="🎨" ;; backend) type_emoji="βš™οΈ" ;; devops) type_emoji="πŸ”§" ;; ai|ml) type_emoji="🧠" ;; data) type_emoji="πŸ“Š" ;; security) type_emoji="πŸ”’" ;; mobile) type_emoji="πŸ“±" ;; docs) type_emoji="πŸ“š" ;; testing) type_emoji="πŸ§ͺ" ;; general) type_emoji="🌸" ;; *) type_emoji="πŸ€–" ;; esac gl_log "πŸ‘‹${type_emoji}πŸ‘‰πŸ“Œ" \ "agent_available" \ "$agent_id" \ "Type: $agent_type | Capabilities: $capabilities | Status: $availability" } # Template: Task claimed gl_task_claimed() { local task_id="$1" local agent_id="$2" local task_type="$3" local estimated_duration="${4:-unknown}" gl_log "πŸƒπŸ’ΌπŸ‘‰πŸ“Œ" \ "task_claimed" \ "$task_id" \ "Agent: $agent_id | Type: $task_type | ETA: $estimated_duration" } # Template: Task handoff gl_task_handoff_agent() { local task_id="$1" local from_agent="$2" local to_agent="$3" local reason="$4" local context_summary="$5" gl_log "πŸ€πŸ“¦πŸ‘‰β­" \ "task_handoff" \ "$task_id" \ "From: $from_agent β†’ To: $to_agent | Reason: $reason | Context: $context_summary" } # Template: Consensus requested gl_consensus_requested() { local decision_id="$1" local topic="$2" local options="$3" local deadline="${4:-24h}" gl_log "πŸ—³οΈπŸ“‹πŸŽ’β­" \ "consensus_requested" \ "$decision_id" \ "Topic: $topic | Options: $options | Deadline: $deadline" } # Template: Vote cast gl_vote_cast() { local decision_id="$1" local agent_id="$2" local vote="$3" local rationale="${4:-}" gl_log "βœ‹πŸ“ŠπŸ‘‰πŸ“Œ" \ "vote_cast" \ "$decision_id" \ "Agent: $agent_id | Vote: $vote | Rationale: $rationale" } # Template: Consensus reached gl_consensus_reached() { local decision_id="$1" local outcome="$2" local vote_breakdown="$3" gl_log "βœ…πŸŽ―πŸŽ’πŸŒ" \ "consensus_reached" \ "$decision_id" \ "Outcome: $outcome | Votes: $vote_breakdown" } # Template: Help requested gl_help_requested() { local requesting_agent="$1" local help_needed="$2" local urgency="${3:-normal}" local urgency_emoji="" case "$urgency" in urgent|critical) urgency_emoji="πŸ”₯" ;; high) urgency_emoji="⭐" ;; normal) urgency_emoji="πŸ“Œ" ;; low) urgency_emoji="πŸ’€" ;; *) urgency_emoji="πŸ“Œ" ;; esac gl_log "πŸ“žπŸ’¬πŸ‘‰${urgency_emoji}" \ "help_requested" \ "$requesting_agent" \ "Help needed: $help_needed | Urgency: $urgency" } # Template: Collaboration success gl_collaboration_success() { local task_id="$1" local agents="$2" local outcome="$3" gl_log "βœ…πŸ€–πŸŽ’πŸŽ‰" \ "collaboration_success" \ "$task_id" \ "Agents: $agents | Outcome: $outcome" } # Show help show_help() { cat <<'EOF' GreenLight Memory Templates USAGE: source memory-greenlight-templates.sh gl_