loki-mode 6.6.0 → 6.7.0

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.
package/mcp/__init__.py CHANGED
@@ -57,4 +57,4 @@ try:
57
57
  except ImportError:
58
58
  __all__ = ['mcp']
59
59
 
60
- __version__ = '6.6.0'
60
+ __version__ = '6.7.0'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "loki-mode",
3
- "version": "6.6.0",
3
+ "version": "6.7.0",
4
4
  "description": "Loki Mode by Autonomi - Multi-agent autonomous startup system for Claude Code, Codex CLI, and Gemini CLI",
5
5
  "keywords": [
6
6
  "agent",
@@ -100,6 +100,12 @@
100
100
  "darwin",
101
101
  "linux"
102
102
  ],
103
+ "optionalDependencies": {
104
+ "@opentelemetry/api": "^1.9.0",
105
+ "@opentelemetry/sdk-trace-node": "^1.30.0",
106
+ "@opentelemetry/sdk-trace-base": "^1.30.0",
107
+ "@opentelemetry/exporter-trace-otlp-http": "^0.57.0"
108
+ },
103
109
  "devDependencies": {
104
110
  "@types/node": "^25.2.0",
105
111
  "jest": "^29.7.0",
@@ -49,9 +49,9 @@ PROVIDER_MAX_PARALLEL=1
49
49
  # Model Configuration
50
50
  # Aider supports 18+ providers; model configured via LOKI_AIDER_MODEL env var
51
51
  # or provider-specific env vars (OPENAI_API_KEY, OPENAI_API_BASE, etc.)
52
- PROVIDER_MODEL_PLANNING="${LOKI_AIDER_MODEL:-claude-3.7-sonnet}"
53
- PROVIDER_MODEL_DEVELOPMENT="${LOKI_AIDER_MODEL:-claude-3.7-sonnet}"
54
- PROVIDER_MODEL_FAST="${LOKI_AIDER_MODEL:-claude-3.7-sonnet}"
52
+ PROVIDER_MODEL_PLANNING="${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}"
53
+ PROVIDER_MODEL_DEVELOPMENT="${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}"
54
+ PROVIDER_MODEL_FAST="${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}"
55
55
 
56
56
  # No Task tool - model is configured externally
57
57
  PROVIDER_TASK_MODEL_PARAM=""
@@ -95,7 +95,7 @@ provider_version() {
95
95
  provider_invoke() {
96
96
  local prompt="$1"
97
97
  shift
98
- local model="${LOKI_AIDER_MODEL:-claude-3.7-sonnet}"
98
+ local model="${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}"
99
99
  local extra_flags="${LOKI_AIDER_FLAGS:-}"
100
100
  # shellcheck disable=SC2086
101
101
  aider --message "$prompt" \
@@ -108,7 +108,7 @@ provider_invoke() {
108
108
  # Model tier to parameter (Aider uses single model, returns model name)
109
109
  provider_get_tier_param() {
110
110
  local tier="$1"
111
- echo "${LOKI_AIDER_MODEL:-claude-3.7-sonnet}"
111
+ echo "${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}"
112
112
  }
113
113
 
114
114
  # Dynamic model resolution (v6.0.0)
@@ -116,7 +116,7 @@ provider_get_tier_param() {
116
116
  # just returns the configured model name. maxTier has no effect.
117
117
  resolve_model_for_tier() {
118
118
  local tier="$1"
119
- echo "${LOKI_AIDER_MODEL:-claude-3.7-sonnet}"
119
+ echo "${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}"
120
120
  }
121
121
 
122
122
  # Tier-aware invocation
@@ -581,6 +581,8 @@ class OTLPExporter {
581
581
  let _initialized = false;
582
582
  let _tracerProvider = null;
583
583
  let _meterProvider = null;
584
+ let _realSDKProvider = null;
585
+ let _usingRealSDK = false;
584
586
 
585
587
  function initialize() {
586
588
  if (_initialized) return;
@@ -590,44 +592,80 @@ function initialize() {
590
592
  throw new Error('LOKI_OTEL_ENDPOINT is not set. Use index.js for conditional loading.');
591
593
  }
592
594
 
593
- // OTLPExporter constructor validates the URL scheme (http/https only)
594
- _activeExporter = new OTLPExporter(endpoint);
595
- _tracerProvider = {
596
- getTracer: (name) => ({
597
- startSpan: (spanName, options) => {
598
- const opts = options || {};
599
- return new Span(
600
- spanName,
601
- opts.traceId,
602
- opts.parentSpanId,
603
- opts.attributes
604
- );
605
- },
606
- }),
607
- };
595
+ // Try real OpenTelemetry SDK first, fall back to custom OTLP exporter
596
+ let usingRealSDK = false;
597
+ try {
598
+ const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node');
599
+ const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
600
+ const { SimpleSpanProcessor } = require('@opentelemetry/sdk-trace-base');
601
+ const api = require('@opentelemetry/api');
602
+
603
+ const exporter = new OTLPTraceExporter({ url: endpoint + '/v1/traces' });
604
+ const provider = new NodeTracerProvider();
605
+ provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
606
+ provider.register();
607
+
608
+ _tracerProvider = {
609
+ getTracer: (name) => api.trace.getTracer(name),
610
+ };
611
+ _meterProvider = {
612
+ getMeter: (name) => ({
613
+ createCounter: (n, desc, unit) => new Counter(n, desc, unit),
614
+ createGauge: (n, desc, unit) => new Gauge(n, desc, unit),
615
+ createHistogram: (n, desc, unit, boundaries) => new Histogram(n, desc, unit, boundaries),
616
+ }),
617
+ };
618
+ _realSDKProvider = provider;
619
+ usingRealSDK = true;
620
+ } catch (_sdkErr) {
621
+ // Real SDK not available -- fall back to custom OTLP exporter
622
+ _activeExporter = new OTLPExporter(endpoint);
623
+ _tracerProvider = {
624
+ getTracer: (name) => ({
625
+ startSpan: (spanName, options) => {
626
+ const opts = options || {};
627
+ return new Span(
628
+ spanName,
629
+ opts.traceId,
630
+ opts.parentSpanId,
631
+ opts.attributes
632
+ );
633
+ },
634
+ }),
635
+ };
608
636
 
609
- _meterProvider = {
610
- getMeter: (name) => ({
611
- createCounter: (n, desc, unit) => new Counter(n, desc, unit),
612
- createGauge: (n, desc, unit) => new Gauge(n, desc, unit),
613
- createHistogram: (n, desc, unit, boundaries) => new Histogram(n, desc, unit, boundaries),
614
- }),
615
- };
637
+ _meterProvider = {
638
+ getMeter: (name) => ({
639
+ createCounter: (n, desc, unit) => new Counter(n, desc, unit),
640
+ createGauge: (n, desc, unit) => new Gauge(n, desc, unit),
641
+ createHistogram: (n, desc, unit, boundaries) => new Histogram(n, desc, unit, boundaries),
642
+ }),
643
+ };
644
+ }
616
645
 
617
646
  _initialized = true;
647
+ _usingRealSDK = usingRealSDK;
618
648
  }
619
649
 
620
650
  function shutdown() {
651
+ if (_realSDKProvider) {
652
+ try { _realSDKProvider.shutdown(); } catch (_e) { /* ignore */ }
653
+ _realSDKProvider = null;
654
+ }
621
655
  if (_activeExporter) {
622
- // Flush pending spans before nullifying to prevent data loss
623
656
  _activeExporter.shutdown();
624
657
  }
625
658
  _activeExporter = null;
626
659
  _initialized = false;
660
+ _usingRealSDK = false;
627
661
  _tracerProvider = null;
628
662
  _meterProvider = null;
629
663
  }
630
664
 
665
+ function isUsingRealSDK() {
666
+ return _usingRealSDK;
667
+ }
668
+
631
669
  function isInitialized() {
632
670
  return _initialized;
633
671
  }
@@ -640,6 +678,7 @@ module.exports = {
640
678
  initialize,
641
679
  shutdown,
642
680
  isInitialized,
681
+ isUsingRealSDK,
643
682
  getExporter,
644
683
  get tracerProvider() {
645
684
  return _tracerProvider;