language-operator 0.0.1 → 0.1.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +125 -0
- data/CHANGELOG.md +53 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +284 -0
- data/LICENSE +229 -21
- data/Makefile +77 -0
- data/README.md +3 -11
- data/Rakefile +34 -0
- data/bin/aictl +7 -0
- data/completions/_aictl +232 -0
- data/completions/aictl.bash +121 -0
- data/completions/aictl.fish +114 -0
- data/docs/architecture/agent-runtime.md +585 -0
- data/docs/dsl/agent-reference.md +591 -0
- data/docs/dsl/best-practices.md +1078 -0
- data/docs/dsl/chat-endpoints.md +895 -0
- data/docs/dsl/constraints.md +671 -0
- data/docs/dsl/mcp-integration.md +1177 -0
- data/docs/dsl/webhooks.md +932 -0
- data/docs/dsl/workflows.md +744 -0
- data/examples/README.md +569 -0
- data/examples/agent_example.rb +86 -0
- data/examples/chat_endpoint_agent.rb +118 -0
- data/examples/github_webhook_agent.rb +171 -0
- data/examples/mcp_agent.rb +158 -0
- data/examples/oauth_callback_agent.rb +296 -0
- data/examples/stripe_webhook_agent.rb +219 -0
- data/examples/webhook_agent.rb +80 -0
- data/lib/language_operator/agent/base.rb +110 -0
- data/lib/language_operator/agent/executor.rb +440 -0
- data/lib/language_operator/agent/instrumentation.rb +54 -0
- data/lib/language_operator/agent/metrics_tracker.rb +183 -0
- data/lib/language_operator/agent/safety/ast_validator.rb +272 -0
- data/lib/language_operator/agent/safety/audit_logger.rb +104 -0
- data/lib/language_operator/agent/safety/budget_tracker.rb +175 -0
- data/lib/language_operator/agent/safety/content_filter.rb +93 -0
- data/lib/language_operator/agent/safety/manager.rb +207 -0
- data/lib/language_operator/agent/safety/rate_limiter.rb +150 -0
- data/lib/language_operator/agent/safety/safe_executor.rb +115 -0
- data/lib/language_operator/agent/scheduler.rb +183 -0
- data/lib/language_operator/agent/telemetry.rb +116 -0
- data/lib/language_operator/agent/web_server.rb +610 -0
- data/lib/language_operator/agent/webhook_authenticator.rb +226 -0
- data/lib/language_operator/agent.rb +149 -0
- data/lib/language_operator/cli/commands/agent.rb +1252 -0
- data/lib/language_operator/cli/commands/cluster.rb +335 -0
- data/lib/language_operator/cli/commands/install.rb +404 -0
- data/lib/language_operator/cli/commands/model.rb +266 -0
- data/lib/language_operator/cli/commands/persona.rb +396 -0
- data/lib/language_operator/cli/commands/quickstart.rb +22 -0
- data/lib/language_operator/cli/commands/status.rb +156 -0
- data/lib/language_operator/cli/commands/tool.rb +537 -0
- data/lib/language_operator/cli/commands/use.rb +47 -0
- data/lib/language_operator/cli/errors/handler.rb +180 -0
- data/lib/language_operator/cli/errors/suggestions.rb +176 -0
- data/lib/language_operator/cli/formatters/code_formatter.rb +81 -0
- data/lib/language_operator/cli/formatters/log_formatter.rb +290 -0
- data/lib/language_operator/cli/formatters/progress_formatter.rb +53 -0
- data/lib/language_operator/cli/formatters/table_formatter.rb +179 -0
- data/lib/language_operator/cli/formatters/value_formatter.rb +113 -0
- data/lib/language_operator/cli/helpers/cluster_context.rb +62 -0
- data/lib/language_operator/cli/helpers/cluster_validator.rb +101 -0
- data/lib/language_operator/cli/helpers/editor_helper.rb +58 -0
- data/lib/language_operator/cli/helpers/kubeconfig_validator.rb +167 -0
- data/lib/language_operator/cli/helpers/resource_dependency_checker.rb +74 -0
- data/lib/language_operator/cli/helpers/schedule_builder.rb +108 -0
- data/lib/language_operator/cli/helpers/user_prompts.rb +69 -0
- data/lib/language_operator/cli/main.rb +232 -0
- data/lib/language_operator/cli/templates/tools/generic.yaml +66 -0
- data/lib/language_operator/cli/wizards/agent_wizard.rb +246 -0
- data/lib/language_operator/cli/wizards/quickstart_wizard.rb +588 -0
- data/lib/language_operator/client/base.rb +214 -0
- data/lib/language_operator/client/config.rb +136 -0
- data/lib/language_operator/client/cost_calculator.rb +37 -0
- data/lib/language_operator/client/mcp_connector.rb +123 -0
- data/lib/language_operator/client.rb +19 -0
- data/lib/language_operator/config/cluster_config.rb +101 -0
- data/lib/language_operator/config/tool_patterns.yaml +57 -0
- data/lib/language_operator/config/tool_registry.rb +96 -0
- data/lib/language_operator/config.rb +138 -0
- data/lib/language_operator/dsl/adapter.rb +124 -0
- data/lib/language_operator/dsl/agent_context.rb +90 -0
- data/lib/language_operator/dsl/agent_definition.rb +427 -0
- data/lib/language_operator/dsl/chat_endpoint_definition.rb +115 -0
- data/lib/language_operator/dsl/config.rb +119 -0
- data/lib/language_operator/dsl/context.rb +50 -0
- data/lib/language_operator/dsl/execution_context.rb +47 -0
- data/lib/language_operator/dsl/helpers.rb +109 -0
- data/lib/language_operator/dsl/http.rb +184 -0
- data/lib/language_operator/dsl/mcp_server_definition.rb +73 -0
- data/lib/language_operator/dsl/parameter_definition.rb +124 -0
- data/lib/language_operator/dsl/registry.rb +36 -0
- data/lib/language_operator/dsl/shell.rb +125 -0
- data/lib/language_operator/dsl/tool_definition.rb +112 -0
- data/lib/language_operator/dsl/webhook_authentication.rb +114 -0
- data/lib/language_operator/dsl/webhook_definition.rb +106 -0
- data/lib/language_operator/dsl/workflow_definition.rb +259 -0
- data/lib/language_operator/dsl.rb +160 -0
- data/lib/language_operator/errors.rb +60 -0
- data/lib/language_operator/kubernetes/client.rb +279 -0
- data/lib/language_operator/kubernetes/resource_builder.rb +194 -0
- data/lib/language_operator/loggable.rb +47 -0
- data/lib/language_operator/logger.rb +141 -0
- data/lib/language_operator/retry.rb +123 -0
- data/lib/language_operator/retryable.rb +132 -0
- data/lib/language_operator/tool_loader.rb +242 -0
- data/lib/language_operator/validators.rb +170 -0
- data/lib/language_operator/version.rb +1 -1
- data/lib/language_operator.rb +65 -3
- data/requirements/tasks/challenge.md +9 -0
- data/requirements/tasks/iterate.md +36 -0
- data/requirements/tasks/optimize.md +21 -0
- data/requirements/tasks/tag.md +5 -0
- data/test_agent_dsl.rb +108 -0
- metadata +503 -20
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'opentelemetry/sdk'
|
|
4
|
+
require 'opentelemetry/exporter/otlp'
|
|
5
|
+
|
|
6
|
+
module LanguageOperator
|
|
7
|
+
module Agent
|
|
8
|
+
# OpenTelemetry configuration for agent runtime
|
|
9
|
+
#
|
|
10
|
+
# Initializes distributed tracing and telemetry for language operator agents.
|
|
11
|
+
# Reads configuration from environment variables and gracefully handles errors.
|
|
12
|
+
#
|
|
13
|
+
# @example Configure telemetry
|
|
14
|
+
# LanguageOperator::Agent::Telemetry.configure
|
|
15
|
+
module Telemetry
|
|
16
|
+
class << self
|
|
17
|
+
# Configure OpenTelemetry for the agent
|
|
18
|
+
#
|
|
19
|
+
# Reads configuration from environment variables:
|
|
20
|
+
# - OTEL_EXPORTER_OTLP_ENDPOINT: OTLP endpoint URL (required)
|
|
21
|
+
# - TRACEPARENT: W3C trace context for distributed tracing
|
|
22
|
+
# - AGENT_NAMESPACE: Kubernetes namespace
|
|
23
|
+
# - AGENT_NAME: Agent name
|
|
24
|
+
# - AGENT_MODE: Agent operating mode
|
|
25
|
+
# - HOSTNAME: Pod hostname
|
|
26
|
+
#
|
|
27
|
+
# @return [void]
|
|
28
|
+
def configure
|
|
29
|
+
endpoint = ENV.fetch('OTEL_EXPORTER_OTLP_ENDPOINT', nil)
|
|
30
|
+
return unless endpoint
|
|
31
|
+
|
|
32
|
+
OpenTelemetry::SDK.configure do |c|
|
|
33
|
+
c.service_name = 'language-operator-agent'
|
|
34
|
+
c.service_version = LanguageOperator::VERSION
|
|
35
|
+
|
|
36
|
+
# Configure resource attributes
|
|
37
|
+
c.resource = OpenTelemetry::SDK::Resources::Resource.create(
|
|
38
|
+
build_resource_attributes
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
# Configure OTLP exporter
|
|
42
|
+
c.add_span_processor(
|
|
43
|
+
OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
|
|
44
|
+
OpenTelemetry::Exporter::OTLP::Exporter.new(
|
|
45
|
+
endpoint: endpoint
|
|
46
|
+
)
|
|
47
|
+
)
|
|
48
|
+
)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Restore trace context from TRACEPARENT if present
|
|
52
|
+
restore_trace_context if ENV['TRACEPARENT']
|
|
53
|
+
rescue StandardError => e
|
|
54
|
+
warn "Failed to configure OpenTelemetry: #{e.message}"
|
|
55
|
+
warn e.backtrace.join("\n")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
private
|
|
59
|
+
|
|
60
|
+
# Build resource attributes from environment variables
|
|
61
|
+
#
|
|
62
|
+
# @return [Hash] Resource attributes
|
|
63
|
+
def build_resource_attributes
|
|
64
|
+
attributes = {}
|
|
65
|
+
|
|
66
|
+
# Service namespace
|
|
67
|
+
if (namespace = ENV.fetch('AGENT_NAMESPACE', nil))
|
|
68
|
+
attributes['service.namespace'] = namespace
|
|
69
|
+
attributes['k8s.namespace.name'] = namespace
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Kubernetes pod name
|
|
73
|
+
attributes['k8s.pod.name'] = ENV['HOSTNAME'] if ENV['HOSTNAME']
|
|
74
|
+
|
|
75
|
+
# Agent-specific attributes
|
|
76
|
+
attributes['agent.name'] = ENV['AGENT_NAME'] if ENV['AGENT_NAME']
|
|
77
|
+
attributes['agent.mode'] = ENV['AGENT_MODE'] if ENV['AGENT_MODE']
|
|
78
|
+
|
|
79
|
+
attributes
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Restore trace context from TRACEPARENT environment variable
|
|
83
|
+
#
|
|
84
|
+
# Extracts W3C trace context and sets it as the current context,
|
|
85
|
+
# enabling distributed tracing across service boundaries.
|
|
86
|
+
#
|
|
87
|
+
# @return [void]
|
|
88
|
+
def restore_trace_context
|
|
89
|
+
traceparent = ENV.fetch('TRACEPARENT', nil)
|
|
90
|
+
return unless traceparent
|
|
91
|
+
|
|
92
|
+
# Parse TRACEPARENT (format: version-trace_id-parent_id-flags)
|
|
93
|
+
parts = traceparent.split('-')
|
|
94
|
+
return unless parts.length == 4
|
|
95
|
+
|
|
96
|
+
_version, trace_id, parent_id, _flags = parts
|
|
97
|
+
|
|
98
|
+
# Create span context from extracted values
|
|
99
|
+
span_context = OpenTelemetry::Trace::SpanContext.new(
|
|
100
|
+
trace_id: [trace_id].pack('H*'),
|
|
101
|
+
span_id: [parent_id].pack('H*'),
|
|
102
|
+
trace_flags: OpenTelemetry::Trace::TraceFlags::SAMPLED,
|
|
103
|
+
remote: true
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
# Set as current context using proper OpenTelemetry API
|
|
107
|
+
span = OpenTelemetry::Trace.non_recording_span(span_context)
|
|
108
|
+
context = OpenTelemetry::Trace.context_with_span(span)
|
|
109
|
+
OpenTelemetry::Context.attach(context)
|
|
110
|
+
rescue StandardError => e
|
|
111
|
+
warn "Failed to restore trace context: #{e.message}"
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|