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.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +125 -0
  3. data/CHANGELOG.md +53 -0
  4. data/Gemfile +8 -0
  5. data/Gemfile.lock +284 -0
  6. data/LICENSE +229 -21
  7. data/Makefile +77 -0
  8. data/README.md +3 -11
  9. data/Rakefile +34 -0
  10. data/bin/aictl +7 -0
  11. data/completions/_aictl +232 -0
  12. data/completions/aictl.bash +121 -0
  13. data/completions/aictl.fish +114 -0
  14. data/docs/architecture/agent-runtime.md +585 -0
  15. data/docs/dsl/agent-reference.md +591 -0
  16. data/docs/dsl/best-practices.md +1078 -0
  17. data/docs/dsl/chat-endpoints.md +895 -0
  18. data/docs/dsl/constraints.md +671 -0
  19. data/docs/dsl/mcp-integration.md +1177 -0
  20. data/docs/dsl/webhooks.md +932 -0
  21. data/docs/dsl/workflows.md +744 -0
  22. data/examples/README.md +569 -0
  23. data/examples/agent_example.rb +86 -0
  24. data/examples/chat_endpoint_agent.rb +118 -0
  25. data/examples/github_webhook_agent.rb +171 -0
  26. data/examples/mcp_agent.rb +158 -0
  27. data/examples/oauth_callback_agent.rb +296 -0
  28. data/examples/stripe_webhook_agent.rb +219 -0
  29. data/examples/webhook_agent.rb +80 -0
  30. data/lib/language_operator/agent/base.rb +110 -0
  31. data/lib/language_operator/agent/executor.rb +440 -0
  32. data/lib/language_operator/agent/instrumentation.rb +54 -0
  33. data/lib/language_operator/agent/metrics_tracker.rb +183 -0
  34. data/lib/language_operator/agent/safety/ast_validator.rb +272 -0
  35. data/lib/language_operator/agent/safety/audit_logger.rb +104 -0
  36. data/lib/language_operator/agent/safety/budget_tracker.rb +175 -0
  37. data/lib/language_operator/agent/safety/content_filter.rb +93 -0
  38. data/lib/language_operator/agent/safety/manager.rb +207 -0
  39. data/lib/language_operator/agent/safety/rate_limiter.rb +150 -0
  40. data/lib/language_operator/agent/safety/safe_executor.rb +115 -0
  41. data/lib/language_operator/agent/scheduler.rb +183 -0
  42. data/lib/language_operator/agent/telemetry.rb +116 -0
  43. data/lib/language_operator/agent/web_server.rb +610 -0
  44. data/lib/language_operator/agent/webhook_authenticator.rb +226 -0
  45. data/lib/language_operator/agent.rb +149 -0
  46. data/lib/language_operator/cli/commands/agent.rb +1252 -0
  47. data/lib/language_operator/cli/commands/cluster.rb +335 -0
  48. data/lib/language_operator/cli/commands/install.rb +404 -0
  49. data/lib/language_operator/cli/commands/model.rb +266 -0
  50. data/lib/language_operator/cli/commands/persona.rb +396 -0
  51. data/lib/language_operator/cli/commands/quickstart.rb +22 -0
  52. data/lib/language_operator/cli/commands/status.rb +156 -0
  53. data/lib/language_operator/cli/commands/tool.rb +537 -0
  54. data/lib/language_operator/cli/commands/use.rb +47 -0
  55. data/lib/language_operator/cli/errors/handler.rb +180 -0
  56. data/lib/language_operator/cli/errors/suggestions.rb +176 -0
  57. data/lib/language_operator/cli/formatters/code_formatter.rb +81 -0
  58. data/lib/language_operator/cli/formatters/log_formatter.rb +290 -0
  59. data/lib/language_operator/cli/formatters/progress_formatter.rb +53 -0
  60. data/lib/language_operator/cli/formatters/table_formatter.rb +179 -0
  61. data/lib/language_operator/cli/formatters/value_formatter.rb +113 -0
  62. data/lib/language_operator/cli/helpers/cluster_context.rb +62 -0
  63. data/lib/language_operator/cli/helpers/cluster_validator.rb +101 -0
  64. data/lib/language_operator/cli/helpers/editor_helper.rb +58 -0
  65. data/lib/language_operator/cli/helpers/kubeconfig_validator.rb +167 -0
  66. data/lib/language_operator/cli/helpers/resource_dependency_checker.rb +74 -0
  67. data/lib/language_operator/cli/helpers/schedule_builder.rb +108 -0
  68. data/lib/language_operator/cli/helpers/user_prompts.rb +69 -0
  69. data/lib/language_operator/cli/main.rb +232 -0
  70. data/lib/language_operator/cli/templates/tools/generic.yaml +66 -0
  71. data/lib/language_operator/cli/wizards/agent_wizard.rb +246 -0
  72. data/lib/language_operator/cli/wizards/quickstart_wizard.rb +588 -0
  73. data/lib/language_operator/client/base.rb +214 -0
  74. data/lib/language_operator/client/config.rb +136 -0
  75. data/lib/language_operator/client/cost_calculator.rb +37 -0
  76. data/lib/language_operator/client/mcp_connector.rb +123 -0
  77. data/lib/language_operator/client.rb +19 -0
  78. data/lib/language_operator/config/cluster_config.rb +101 -0
  79. data/lib/language_operator/config/tool_patterns.yaml +57 -0
  80. data/lib/language_operator/config/tool_registry.rb +96 -0
  81. data/lib/language_operator/config.rb +138 -0
  82. data/lib/language_operator/dsl/adapter.rb +124 -0
  83. data/lib/language_operator/dsl/agent_context.rb +90 -0
  84. data/lib/language_operator/dsl/agent_definition.rb +427 -0
  85. data/lib/language_operator/dsl/chat_endpoint_definition.rb +115 -0
  86. data/lib/language_operator/dsl/config.rb +119 -0
  87. data/lib/language_operator/dsl/context.rb +50 -0
  88. data/lib/language_operator/dsl/execution_context.rb +47 -0
  89. data/lib/language_operator/dsl/helpers.rb +109 -0
  90. data/lib/language_operator/dsl/http.rb +184 -0
  91. data/lib/language_operator/dsl/mcp_server_definition.rb +73 -0
  92. data/lib/language_operator/dsl/parameter_definition.rb +124 -0
  93. data/lib/language_operator/dsl/registry.rb +36 -0
  94. data/lib/language_operator/dsl/shell.rb +125 -0
  95. data/lib/language_operator/dsl/tool_definition.rb +112 -0
  96. data/lib/language_operator/dsl/webhook_authentication.rb +114 -0
  97. data/lib/language_operator/dsl/webhook_definition.rb +106 -0
  98. data/lib/language_operator/dsl/workflow_definition.rb +259 -0
  99. data/lib/language_operator/dsl.rb +160 -0
  100. data/lib/language_operator/errors.rb +60 -0
  101. data/lib/language_operator/kubernetes/client.rb +279 -0
  102. data/lib/language_operator/kubernetes/resource_builder.rb +194 -0
  103. data/lib/language_operator/loggable.rb +47 -0
  104. data/lib/language_operator/logger.rb +141 -0
  105. data/lib/language_operator/retry.rb +123 -0
  106. data/lib/language_operator/retryable.rb +132 -0
  107. data/lib/language_operator/tool_loader.rb +242 -0
  108. data/lib/language_operator/validators.rb +170 -0
  109. data/lib/language_operator/version.rb +1 -1
  110. data/lib/language_operator.rb +65 -3
  111. data/requirements/tasks/challenge.md +9 -0
  112. data/requirements/tasks/iterate.md +36 -0
  113. data/requirements/tasks/optimize.md +21 -0
  114. data/requirements/tasks/tag.md +5 -0
  115. data/test_agent_dsl.rb +108 -0
  116. 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