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/README.md +1 -1
- package/SKILL.md +2 -2
- package/VERSION +1 -1
- package/autonomy/completion-council.sh +5 -1
- package/autonomy/loki +918 -37
- package/autonomy/run.sh +456 -29
- package/dashboard/__init__.py +1 -1
- package/docs/INSTALLATION.md +2 -2
- package/docs/architecture/STATE-MACHINES.md +1767 -0
- package/mcp/__init__.py +1 -1
- package/package.json +7 -1
- package/providers/aider.sh +6 -6
- package/src/observability/otel.js +62 -23
package/mcp/__init__.py
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "loki-mode",
|
|
3
|
-
"version": "6.
|
|
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",
|
package/providers/aider.sh
CHANGED
|
@@ -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-
|
|
53
|
-
PROVIDER_MODEL_DEVELOPMENT="${LOKI_AIDER_MODEL:-claude-
|
|
54
|
-
PROVIDER_MODEL_FAST="${LOKI_AIDER_MODEL:-claude-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
-
//
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
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
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
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;
|