loki-mode 7.90.1 → 7.90.2
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/SKILL.md +2 -2
- package/VERSION +1 -1
- package/dashboard/__init__.py +1 -1
- package/dashboard/static/index.html +0 -139
- package/docs/INSTALLATION.md +2 -2
- package/loki-ts/dist/loki.js +2 -2
- package/mcp/__init__.py +1 -1
- package/package.json +1 -1
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
package/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: loki-mode
|
|
|
3
3
|
description: Autonomous spec-driven build system with a built-in trust layer. It does not call work done until it is verified (RARV-C closure loop, 8 quality gates, completion council, verified-completion evidence gate). Triggers on "Loki Mode". Takes a spec (PRD, GitHub issue, OpenAPI doc, etc.) to deployed product with minimal human intervention. Provider-agnostic. Requires --dangerously-skip-permissions flag.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Loki Mode v7.90.
|
|
6
|
+
# Loki Mode v7.90.2
|
|
7
7
|
|
|
8
8
|
**You are an autonomous agent. You make decisions. You do not ask questions. You do not stop.**
|
|
9
9
|
|
|
@@ -408,4 +408,4 @@ See `CHANGELOG.md` entries [7.5.7], [7.5.8], [7.5.13] for the per-fix list and r
|
|
|
408
408
|
|
|
409
409
|
---
|
|
410
410
|
|
|
411
|
-
**v7.90.
|
|
411
|
+
**v7.90.2 | [Autonomi](https://www.autonomi.dev/) flagship product | ~260 lines core**
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
7.90.
|
|
1
|
+
7.90.2
|
package/dashboard/__init__.py
CHANGED
|
@@ -389,9 +389,6 @@
|
|
|
389
389
|
flex-shrink: 0;
|
|
390
390
|
}
|
|
391
391
|
|
|
392
|
-
.theme-toggle {
|
|
393
|
-
margin-left: auto;
|
|
394
|
-
}
|
|
395
392
|
|
|
396
393
|
.footer-settings {
|
|
397
394
|
position: relative;
|
|
@@ -741,105 +738,6 @@
|
|
|
741
738
|
::-webkit-scrollbar-thumb:hover { background: rgba(0,0,0,0.2); }
|
|
742
739
|
|
|
743
740
|
/* Keyboard Shortcuts Help Overlay */
|
|
744
|
-
.shortcuts-overlay {
|
|
745
|
-
display: none;
|
|
746
|
-
position: fixed;
|
|
747
|
-
inset: 0;
|
|
748
|
-
background: rgba(0, 0, 0, 0.6);
|
|
749
|
-
z-index: 1000;
|
|
750
|
-
align-items: center;
|
|
751
|
-
justify-content: center;
|
|
752
|
-
}
|
|
753
|
-
|
|
754
|
-
.shortcuts-overlay.visible {
|
|
755
|
-
display: flex;
|
|
756
|
-
}
|
|
757
|
-
|
|
758
|
-
.shortcuts-dialog {
|
|
759
|
-
background: var(--loki-glass-bg);
|
|
760
|
-
backdrop-filter: blur(20px) saturate(1.4);
|
|
761
|
-
-webkit-backdrop-filter: blur(20px) saturate(1.4);
|
|
762
|
-
border: 1px solid var(--loki-glass-border);
|
|
763
|
-
border-radius: 12px;
|
|
764
|
-
padding: 24px;
|
|
765
|
-
max-width: 480px;
|
|
766
|
-
width: 90%;
|
|
767
|
-
max-height: 80vh;
|
|
768
|
-
overflow-y: auto;
|
|
769
|
-
box-shadow: var(--loki-glass-shadow);
|
|
770
|
-
}
|
|
771
|
-
|
|
772
|
-
.shortcuts-header {
|
|
773
|
-
display: flex;
|
|
774
|
-
justify-content: space-between;
|
|
775
|
-
align-items: center;
|
|
776
|
-
margin-bottom: 16px;
|
|
777
|
-
padding-bottom: 12px;
|
|
778
|
-
border-bottom: 1px solid var(--loki-border);
|
|
779
|
-
}
|
|
780
|
-
|
|
781
|
-
.shortcuts-title {
|
|
782
|
-
font-size: 16px;
|
|
783
|
-
font-weight: 600;
|
|
784
|
-
color: var(--loki-text-primary);
|
|
785
|
-
}
|
|
786
|
-
|
|
787
|
-
.shortcuts-close {
|
|
788
|
-
background: none;
|
|
789
|
-
border: none;
|
|
790
|
-
color: var(--loki-text-muted);
|
|
791
|
-
cursor: pointer;
|
|
792
|
-
padding: 4px;
|
|
793
|
-
font-size: 18px;
|
|
794
|
-
line-height: 1;
|
|
795
|
-
}
|
|
796
|
-
|
|
797
|
-
.shortcuts-close:hover {
|
|
798
|
-
color: var(--loki-text-primary);
|
|
799
|
-
}
|
|
800
|
-
|
|
801
|
-
.shortcuts-group {
|
|
802
|
-
margin-bottom: 16px;
|
|
803
|
-
}
|
|
804
|
-
|
|
805
|
-
.shortcuts-group-title {
|
|
806
|
-
font-size: 11px;
|
|
807
|
-
font-weight: 500;
|
|
808
|
-
text-transform: uppercase;
|
|
809
|
-
letter-spacing: 0.05em;
|
|
810
|
-
color: var(--loki-text-muted);
|
|
811
|
-
margin-bottom: 8px;
|
|
812
|
-
}
|
|
813
|
-
|
|
814
|
-
.shortcut-row {
|
|
815
|
-
display: flex;
|
|
816
|
-
justify-content: space-between;
|
|
817
|
-
align-items: center;
|
|
818
|
-
padding: 4px 0;
|
|
819
|
-
}
|
|
820
|
-
|
|
821
|
-
.shortcut-keys {
|
|
822
|
-
display: flex;
|
|
823
|
-
gap: 4px;
|
|
824
|
-
}
|
|
825
|
-
|
|
826
|
-
.shortcut-key {
|
|
827
|
-
display: inline-block;
|
|
828
|
-
padding: 2px 8px;
|
|
829
|
-
background: var(--loki-bg-tertiary);
|
|
830
|
-
border: 1px solid var(--loki-border);
|
|
831
|
-
border-radius: 6px;
|
|
832
|
-
font-size: 12px;
|
|
833
|
-
font-family: 'JetBrains Mono', monospace;
|
|
834
|
-
color: var(--loki-text-primary);
|
|
835
|
-
min-width: 24px;
|
|
836
|
-
text-align: center;
|
|
837
|
-
}
|
|
838
|
-
|
|
839
|
-
.shortcut-desc {
|
|
840
|
-
font-size: 13px;
|
|
841
|
-
color: var(--loki-text-secondary);
|
|
842
|
-
}
|
|
843
741
|
|
|
844
742
|
/* USAGE.md markdown render styles */
|
|
845
743
|
.usage-md { max-height: 480px; overflow: auto; padding: 12px; background: var(--loki-bg-secondary, #F2F0EB); border-radius: 4px; color: var(--loki-text-primary, #1A1614); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; font-size: 13px; line-height: 1.6; }
|
|
@@ -1498,43 +1396,6 @@
|
|
|
1498
1396
|
</div>
|
|
1499
1397
|
|
|
1500
1398
|
<!-- Keyboard Shortcuts Help Overlay -->
|
|
1501
|
-
<div class="shortcuts-overlay" id="shortcuts-overlay">
|
|
1502
|
-
<div class="shortcuts-dialog">
|
|
1503
|
-
<div class="shortcuts-header">
|
|
1504
|
-
<span class="shortcuts-title">Keyboard Shortcuts</span>
|
|
1505
|
-
<button class="shortcuts-close" id="shortcuts-close" aria-label="Close">×</button>
|
|
1506
|
-
</div>
|
|
1507
|
-
<div class="shortcuts-group">
|
|
1508
|
-
<div class="shortcuts-group-title">Navigation</div>
|
|
1509
|
-
<div class="shortcut-row"><span class="shortcut-desc">Overview</span><span class="shortcut-keys"><kbd class="shortcut-key">1</kbd></span></div>
|
|
1510
|
-
<div class="shortcut-row"><span class="shortcut-desc">Insights</span><span class="shortcut-keys"><kbd class="shortcut-key">2</kbd></span></div>
|
|
1511
|
-
<div class="shortcut-row"><span class="shortcut-desc">Spec Checklist</span><span class="shortcut-keys"><kbd class="shortcut-key">3</kbd></span></div>
|
|
1512
|
-
<div class="shortcut-row"><span class="shortcut-desc">App Runner</span><span class="shortcut-keys"><kbd class="shortcut-key">4</kbd></span></div>
|
|
1513
|
-
<div class="shortcut-row"><span class="shortcut-desc">Council</span><span class="shortcut-keys"><kbd class="shortcut-key">5</kbd></span></div>
|
|
1514
|
-
<div class="shortcut-row"><span class="shortcut-desc">Quality</span><span class="shortcut-keys"><kbd class="shortcut-key">6</kbd></span></div>
|
|
1515
|
-
<div class="shortcut-row"><span class="shortcut-desc">Cost</span><span class="shortcut-keys"><kbd class="shortcut-key">7</kbd></span></div>
|
|
1516
|
-
<div class="shortcut-row"><span class="shortcut-desc">Checkpoints</span><span class="shortcut-keys"><kbd class="shortcut-key">8</kbd></span></div>
|
|
1517
|
-
<div class="shortcut-row"><span class="shortcut-desc">Context</span><span class="shortcut-keys"><kbd class="shortcut-key">9</kbd></span></div>
|
|
1518
|
-
<div class="shortcut-row"><span class="shortcut-desc">Notifications</span><span class="shortcut-keys"><kbd class="shortcut-key">0</kbd></span></div>
|
|
1519
|
-
<div class="shortcut-row"><span class="shortcut-desc">Migration</span><span class="shortcut-keys"><kbd class="shortcut-key">m</kbd></span></div>
|
|
1520
|
-
<div class="shortcut-row"><span class="shortcut-desc">Analytics</span><span class="shortcut-keys"><kbd class="shortcut-key">a</kbd></span></div>
|
|
1521
|
-
<div class="shortcut-row"><span class="shortcut-desc">Escalations</span><span class="shortcut-keys"><kbd class="shortcut-key">e</kbd></span></div>
|
|
1522
|
-
</div>
|
|
1523
|
-
<div class="shortcuts-group">
|
|
1524
|
-
<div class="shortcuts-group-title">Session</div>
|
|
1525
|
-
<div class="shortcut-row"><span class="shortcut-desc">Pause session</span><span class="shortcut-keys"><kbd class="shortcut-key">p</kbd></span></div>
|
|
1526
|
-
<div class="shortcut-row"><span class="shortcut-desc">Resume session</span><span class="shortcut-keys"><kbd class="shortcut-key">r</kbd></span></div>
|
|
1527
|
-
<div class="shortcut-row"><span class="shortcut-desc">Stop session</span><span class="shortcut-keys"><kbd class="shortcut-key">s</kbd></span></div>
|
|
1528
|
-
</div>
|
|
1529
|
-
<div class="shortcuts-group">
|
|
1530
|
-
<div class="shortcuts-group-title">General</div>
|
|
1531
|
-
<div class="shortcut-row"><span class="shortcut-desc">Toggle theme</span><span class="shortcut-keys"><kbd class="shortcut-key">t</kbd></span></div>
|
|
1532
|
-
<div class="shortcut-row"><span class="shortcut-desc">Focus API URL</span><span class="shortcut-keys"><kbd class="shortcut-key">/</kbd></span></div>
|
|
1533
|
-
<div class="shortcut-row"><span class="shortcut-desc">Show shortcuts</span><span class="shortcut-keys"><kbd class="shortcut-key">?</kbd></span></div>
|
|
1534
|
-
<div class="shortcut-row"><span class="shortcut-desc">Close overlay</span><span class="shortcut-keys"><kbd class="shortcut-key">Esc</kbd></span></div>
|
|
1535
|
-
</div>
|
|
1536
|
-
</div>
|
|
1537
|
-
</div>
|
|
1538
1399
|
|
|
1539
1400
|
<!-- Inlined JavaScript Bundle -->
|
|
1540
1401
|
<script>
|
package/docs/INSTALLATION.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
The flagship product of [Autonomi](https://www.autonomi.dev/). Loki Mode is a spec-driven autonomous builder with a built-in trust layer that takes any spec to a deployed product and verifies completion with evidence (quality gates plus a completion council), not just a "done" claim. Complete installation instructions for all platforms and use cases.
|
|
4
4
|
|
|
5
|
-
**Version:** v7.90.
|
|
5
|
+
**Version:** v7.90.2
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -395,7 +395,7 @@ provider works inside the container. Provide auth with your Anthropic API key:
|
|
|
395
395
|
# Run Loki Mode in Docker (Claude provider, API-key auth)
|
|
396
396
|
docker run --rm -e ANTHROPIC_API_KEY="$ANTHROPIC_API_KEY" \
|
|
397
397
|
-v $(pwd):/workspace -w /workspace \
|
|
398
|
-
asklokesh/loki-mode:7.90.
|
|
398
|
+
asklokesh/loki-mode:7.90.2 start ./my-spec.md
|
|
399
399
|
```
|
|
400
400
|
|
|
401
401
|
##### docker compose + .env (no host install)
|
package/loki-ts/dist/loki.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var z8=Object.defineProperty;var X8=($)=>$;function K8($,Q){this[$]=X8.bind(null,Q)}var b=($,Q)=>{for(var Z in Q)z8($,Z,{get:Q[Z],enumerable:!0,configurable:!0,set:K8.bind(Q,Z)})};var L=($,Q)=>()=>($&&(Q=$($=0)),Q);var J$=import.meta.require;var y1={};b(y1,{lokiDir:()=>P,homeLokiDir:()=>T$,findRepoRootForVersion:()=>e$,REPO_ROOT:()=>h});import{resolve as t,dirname as i$}from"path";import{fileURLToPath as q8}from"url";import{existsSync as E$}from"fs";import{homedir as J8}from"os";function V8(){let $=h1;for(let Q=0;Q<6;Q++){if(E$(t($,"VERSION"))&&E$(t($,"autonomy/run.sh")))return $;let Z=i$($);if(Z===$)break;$=Z}return t(h1,"..","..","..")}function e$($){let Q=$;for(let Z=0;Z<6;Z++){if(E$(t(Q,"VERSION"))&&E$(t(Q,"autonomy/run.sh")))return Q;let z=i$(Q);if(z===Q)break;Q=z}return t($,"..","..","..")}function P(){return process.env.LOKI_DIR??t(process.cwd(),".loki")}function T$(){return t(J8(),".loki")}var h1,h;var C=L(()=>{h1=i$(q8(import.meta.url));h=V8()});import{readFileSync as W8}from"fs";import{resolve as U8,dirname as H8}from"path";import{fileURLToPath as G8}from"url";function N$(){if(Q$!==null)return Q$;let $="7.90.
|
|
2
|
+
var z8=Object.defineProperty;var X8=($)=>$;function K8($,Q){this[$]=X8.bind(null,Q)}var b=($,Q)=>{for(var Z in Q)z8($,Z,{get:Q[Z],enumerable:!0,configurable:!0,set:K8.bind(Q,Z)})};var L=($,Q)=>()=>($&&(Q=$($=0)),Q);var J$=import.meta.require;var y1={};b(y1,{lokiDir:()=>P,homeLokiDir:()=>T$,findRepoRootForVersion:()=>e$,REPO_ROOT:()=>h});import{resolve as t,dirname as i$}from"path";import{fileURLToPath as q8}from"url";import{existsSync as E$}from"fs";import{homedir as J8}from"os";function V8(){let $=h1;for(let Q=0;Q<6;Q++){if(E$(t($,"VERSION"))&&E$(t($,"autonomy/run.sh")))return $;let Z=i$($);if(Z===$)break;$=Z}return t(h1,"..","..","..")}function e$($){let Q=$;for(let Z=0;Z<6;Z++){if(E$(t(Q,"VERSION"))&&E$(t(Q,"autonomy/run.sh")))return Q;let z=i$(Q);if(z===Q)break;Q=z}return t($,"..","..","..")}function P(){return process.env.LOKI_DIR??t(process.cwd(),".loki")}function T$(){return t(J8(),".loki")}var h1,h;var C=L(()=>{h1=i$(q8(import.meta.url));h=V8()});import{readFileSync as W8}from"fs";import{resolve as U8,dirname as H8}from"path";import{fileURLToPath as G8}from"url";function N$(){if(Q$!==null)return Q$;let $="7.90.2";if(typeof $==="string"&&$.length>0)return Q$=$,Q$;try{let Q=H8(G8(import.meta.url)),Z=e$(Q);Q$=W8(U8(Z,"VERSION"),"utf-8").trim()}catch{Q$="unknown"}return Q$}var Q$=null;var $1=L(()=>{C()});var u1={};b(u1,{runOrThrow:()=>x8,run:()=>F,readStreamCapped:()=>f1,commandVersion:()=>N8,commandExists:()=>f,ShellError:()=>Q1,MAX_STDOUT_BYTES:()=>m1});async function f1($,Q=m1){let Z=$.getReader(),z=new TextDecoder,X="",q=0;try{while(q<Q){let{done:K,value:W}=await Z.read();if(K)break;if(!W)continue;if(q+=W.byteLength,q>Q){let V=W.byteLength-(q-Q);X+=z.decode(W.subarray(0,V),{stream:!0});break}X+=z.decode(W,{stream:!0})}X+=z.decode()}finally{try{await Z.cancel()}catch{}Z.releaseLock()}return X}async function F($,Q={}){let Z=Bun.spawn({cmd:[...$],stdout:"pipe",stderr:"pipe",env:Q.env?{...process.env,...Q.env}:process.env,cwd:Q.cwd}),z,X;if(Q.timeoutMs&&Q.timeoutMs>0)z=setTimeout(()=>{try{Z.kill("SIGTERM")}catch{}X=setTimeout(()=>{try{Z.kill("SIGKILL")}catch{}},2000)},Q.timeoutMs);try{let[q,K,W]=await Promise.all([f1(Z.stdout),new Response(Z.stderr).text(),Z.exited]);return{stdout:q,stderr:K,exitCode:W}}finally{if(z)clearTimeout(z);if(X)clearTimeout(X)}}async function x8($,Q={}){let Z=await F($,Q);if(Z.exitCode!==0)throw new Q1(`command failed (${Z.exitCode}): ${$.join(" ")}`,Z.exitCode,Z.stdout,Z.stderr);return Z}async function f($){let Q=E8($),Z=await F(["sh","-c",`command -v ${Q}`],{timeoutMs:5000});if(Z.exitCode===0)return Z.stdout.trim()||null;return null}function E8($){if(!/^[A-Za-z0-9._/-]+$/.test($))throw Error(`refused to shell-escape suspect token: ${$}`);return $}async function N8($,Q="--version"){if(!await f($))return null;let z=await F([$,Q],{timeoutMs:5000});if(z.exitCode!==0)return null;return((z.stdout||z.stderr).split(/\r?\n/)[0]?.trim()??"")||null}var m1=16777216,Q1;var d=L(()=>{Q1=class Q1 extends Error{message;exitCode;stdout;stderr;constructor($,Q,Z,z){super($);this.message=$;this.exitCode=Q;this.stdout=Z;this.stderr=z;this.name="ShellError"}}});function r($){return S8?"":$}var S8,T,S,_,lZ,I,k,y,J;var c=L(()=>{S8=(process.env.NO_COLOR??"").length>0;T=r("\x1B[0;31m"),S=r("\x1B[0;32m"),_=r("\x1B[1;33m"),lZ=r("\x1B[0;34m"),I=r("\x1B[0;36m"),k=r("\x1B[1m"),y=r("\x1B[2m"),J=r("\x1B[0m")});import{existsSync as u8}from"fs";async function Z$(){if(A$!==void 0)return A$;let $="/opt/homebrew/bin/python3.12";if(u8($))return A$=$,$;let Q=await f("python3.12");if(Q)return A$=Q,Q;let Z=await f("python3");return A$=Z,Z}async function z$($,Q={}){let Z=await Z$();if(!Z)return{stdout:"",stderr:"python3 not found",exitCode:127};return F([Z,"-c",$],Q)}var A$;var V$=L(()=>{d()});var q0={};b(q0,{runStatus:()=>W3});import{existsSync as v,readFileSync as U$,readdirSync as i1,statSync as e1}from"fs";import{resolve as D,basename as $3}from"path";import{homedir as Q3}from"os";function $0($){let Q=Math.trunc($);if(Q>=1e6)return`${(Math.trunc(Q/1e6*10)/10).toFixed(1)}M`;if(Q>=1000)return`${(Math.trunc(Q/1000*10)/10).toFixed(1)}K`;return String(Q)}function Q0($,Q,Z){if(Q===0)return null;let z=Math.trunc($*100/Q),X=Math.trunc($*D$/Q);if(X>D$)X=D$;let q=D$-X,K=S;if(z>=80)K=T;else if(z>=50)K=_;let W="=".repeat(Math.max(0,X))+" ".repeat(Math.max(0,q)),V=$0($),U=$0(Q);return` ${k}${Z}${J} ${K}[${W}]${J} ${z}% (${V} / ${U})`}async function z3(){if(await f("jq"))return!0;return process.stdout.write(`${T}Error: jq is required but not installed.${J}
|
|
3
3
|
`),process.stdout.write(`Install with:
|
|
4
4
|
`),process.stdout.write(` brew install jq (macOS)
|
|
5
5
|
`),process.stdout.write(` apt install jq (Debian/Ubuntu)
|
|
@@ -802,4 +802,4 @@ Set LOKI_LEGACY_BASH=1 to force the bash CLI for every command.
|
|
|
802
802
|
`),2}default:return process.stderr.write(`Unknown command: ${Q}
|
|
803
803
|
`),process.stderr.write(Z8),2}}r1();process.on("SIGINT",()=>process.exit(130));process.on("SIGTERM",()=>process.exit(143));var FZ=await jZ(Bun.argv.slice(2));process.exit(FZ);
|
|
804
804
|
|
|
805
|
-
//# debugId=
|
|
805
|
+
//# debugId=0A25C50D5896B93C64756E2164756E21
|
package/mcp/__init__.py
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "loki-mode",
|
|
3
3
|
"mcpName": "io.github.asklokesh/loki-mode",
|
|
4
|
-
"version": "7.90.
|
|
4
|
+
"version": "7.90.2",
|
|
5
5
|
"description": "Loki Mode by Autonomi. Autonomous spec-to-product system: takes a PRD, GitHub issue, OpenAPI/JSON/YAML, or one-line brief to a deployed app via the RARV-C closure loop with 8 quality gates. Provider-agnostic (Claude Code, OpenAI Codex, Cline, Aider).",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"agent",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
3
3
|
"name": "loki-mode",
|
|
4
4
|
"displayName": "Loki Mode",
|
|
5
|
-
"version": "7.90.
|
|
5
|
+
"version": "7.90.2",
|
|
6
6
|
"description": "Autonomous spec-to-product build system with a built-in trust layer (RARV-C closure loop, 8 quality gates, completion council). Ships Loki's spec-hardening, drift-detection, and deterministic PR verification commands plus the Loki MCP server.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Autonomi",
|