loki-mode 7.17.1 → 7.18.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.
@@ -10,14 +10,50 @@
10
10
  <head>
11
11
  <meta charset="utf-8">
12
12
  <meta name="viewport" content="width=device-width, initial-scale=1">
13
+ <script>
14
+ // Match the embedding SPA's theme via the ?theme=dark|light param it passes
15
+ // when loading this page in its iframe. Set before paint to avoid a flash;
16
+ // with no/invalid param, OS prefers-color-scheme applies.
17
+ (function () {
18
+ try {
19
+ var t = new URLSearchParams(location.search).get('theme');
20
+ if (t === 'dark' || t === 'light') {
21
+ document.documentElement.setAttribute('data-loki-theme', t);
22
+ }
23
+ } catch (e) { /* no-op: fall back to OS preference */ }
24
+ })();
25
+ </script>
13
26
  <title>Loki Mode - Proofs of Run</title>
27
+ <link rel="preconnect" href="https://fonts.googleapis.com">
28
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
29
+ <link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display&family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
14
30
  <style>
31
+ /* Match the dashboard SPA design language (cream/light + serif headings),
32
+ so this page reads as one product when embedded in the SPA iframe. The
33
+ local --bg/--panel/--text/--mono/--sans names are kept (the rest of the
34
+ CSS references them) and remapped to the SPA --loki-* palette, with a
35
+ prefers-color-scheme dark variant mirroring the SPA. */
15
36
  :root {
16
- --bg: #0f1115; --panel: #171a21; --panel-2: #1d2129; --border: #2a2f3a;
17
- --text: #e7e9ee; --muted: #9aa1ad; --faint: #6b7280; --accent: #6f7bf7;
18
- --green: #34d399; --red: #f87171; --amber: #fbbf24;
19
- --mono: ui-monospace, "SF Mono", "Menlo", "Consolas", monospace;
37
+ --bg: #FAFAF7; --panel: rgba(255,255,255,0.72); --panel-2: #E8E5DE; --border: rgba(0,0,0,0.08);
38
+ --text: #1A1614; --muted: #4A4640; --faint: #8A857C; --accent: #553DE9;
39
+ --green: #1AAF95; --red: #C04848; --amber: #C4922E;
40
+ --mono: 'JetBrains Mono', ui-monospace, "SF Mono", "Menlo", monospace;
20
41
  --sans: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
42
+ --serif: 'DM Serif Display', Georgia, serif;
43
+ }
44
+ /* Dark palette. data-loki-theme (set from the SPA's ?theme= param) wins over
45
+ the OS preference so the iframe follows the SPA's manual Dark toggle. */
46
+ html[data-loki-theme="dark"] {
47
+ --bg: #0F0B1A; --panel: rgba(30,21,51,0.72); --panel-2: #1E1533; --border: rgba(255,255,255,0.08);
48
+ --text: #F0ECF8; --muted: #B8B0C8; --faint: #7B6FA0; --accent: #7B6BF0;
49
+ --green: #2ED8B6; --red: #E07070; --amber: #E8B84A;
50
+ }
51
+ @media (prefers-color-scheme: dark) {
52
+ html:not([data-loki-theme]) {
53
+ --bg: #0F0B1A; --panel: rgba(30,21,51,0.72); --panel-2: #1E1533; --border: rgba(255,255,255,0.08);
54
+ --text: #F0ECF8; --muted: #B8B0C8; --faint: #7B6FA0; --accent: #7B6BF0;
55
+ --green: #2ED8B6; --red: #E07070; --amber: #E8B84A;
56
+ }
21
57
  }
22
58
  * { box-sizing: border-box; }
23
59
  body { margin: 0; background: var(--bg); color: var(--text); font-family: var(--sans); line-height: 1.5; }
@@ -25,7 +61,7 @@
25
61
  a:hover { text-decoration: underline; }
26
62
  .wrap { max-width: 880px; margin: 0 auto; padding: 40px 20px 80px; }
27
63
  .head { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 8px; }
28
- h1 { font-size: 24px; font-weight: 650; letter-spacing: -0.3px; margin: 0; }
64
+ h1 { font-family: var(--serif); font-size: 28px; font-weight: 400; letter-spacing: -0.3px; margin: 0; }
29
65
  .head a { font-size: 13px; }
30
66
  .sub { color: var(--muted); font-size: 14px; margin: 0 0 26px; }
31
67
  .list { display: flex; flex-direction: column; gap: 12px; }
@@ -15,14 +15,53 @@
15
15
  <head>
16
16
  <meta charset="utf-8">
17
17
  <meta name="viewport" content="width=device-width, initial-scale=1">
18
+ <script>
19
+ // Match the embedding SPA's theme. The SPA passes ?theme=dark|light when it
20
+ // loads this page in its iframe (it toggles via data-loki-theme, which an
21
+ // iframe cannot read). Set the attribute before paint to avoid a flash. With
22
+ // no/invalid param, leave it unset so the OS prefers-color-scheme applies.
23
+ (function () {
24
+ try {
25
+ var t = new URLSearchParams(location.search).get('theme');
26
+ if (t === 'dark' || t === 'light') {
27
+ document.documentElement.setAttribute('data-loki-theme', t);
28
+ }
29
+ } catch (e) { /* no-op: fall back to OS preference */ }
30
+ })();
31
+ </script>
18
32
  <title>Loki Mode - Trust Trajectory</title>
33
+ <link rel="preconnect" href="https://fonts.googleapis.com">
34
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
35
+ <link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display&family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
19
36
  <style>
37
+ /* Match the dashboard SPA design language (cream/light + serif headings),
38
+ so this page reads as one product when embedded in the SPA iframe. The
39
+ local --bg/--panel/--text/--mono/--sans names are kept (the rest of the
40
+ CSS references them) and remapped to the SPA --loki-* palette, with a
41
+ prefers-color-scheme dark variant mirroring the SPA. */
20
42
  :root {
21
- --bg: #0f1115; --panel: #171a21; --panel-2: #1d2129; --border: #2a2f3a;
22
- --text: #e7e9ee; --muted: #9aa1ad; --faint: #6b7280; --accent: #6f7bf7;
23
- --green: #34d399; --red: #f87171; --amber: #fbbf24;
24
- --mono: ui-monospace, "SF Mono", "Menlo", "Consolas", monospace;
43
+ --bg: #FAFAF7; --panel: rgba(255,255,255,0.72); --panel-2: #E8E5DE; --border: rgba(0,0,0,0.08);
44
+ --text: #1A1614; --muted: #4A4640; --faint: #8A857C; --accent: #553DE9;
45
+ --green: #1AAF95; --red: #C04848; --amber: #C4922E;
46
+ --mono: 'JetBrains Mono', ui-monospace, "SF Mono", "Menlo", monospace;
25
47
  --sans: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
48
+ --serif: 'DM Serif Display', Georgia, serif;
49
+ }
50
+ /* Dark palette. Applied when the SPA toggle passed ?theme=dark (sets
51
+ data-loki-theme="dark" on <html>) OR, when no explicit theme was passed,
52
+ when the OS prefers dark. The explicit attribute always wins so the iframe
53
+ follows the SPA's manual Dark toggle, not just the OS setting. */
54
+ html[data-loki-theme="dark"] {
55
+ --bg: #0F0B1A; --panel: rgba(30,21,51,0.72); --panel-2: #1E1533; --border: rgba(255,255,255,0.08);
56
+ --text: #F0ECF8; --muted: #B8B0C8; --faint: #7B6FA0; --accent: #7B6BF0;
57
+ --green: #2ED8B6; --red: #E07070; --amber: #E8B84A;
58
+ }
59
+ @media (prefers-color-scheme: dark) {
60
+ html:not([data-loki-theme]) {
61
+ --bg: #0F0B1A; --panel: rgba(30,21,51,0.72); --panel-2: #1E1533; --border: rgba(255,255,255,0.08);
62
+ --text: #F0ECF8; --muted: #B8B0C8; --faint: #7B6FA0; --accent: #7B6BF0;
63
+ --green: #2ED8B6; --red: #E07070; --amber: #E8B84A;
64
+ }
26
65
  }
27
66
  * { box-sizing: border-box; }
28
67
  body { margin: 0; background: var(--bg); color: var(--text); font-family: var(--sans); line-height: 1.5; }
@@ -30,7 +69,7 @@
30
69
  a:hover { text-decoration: underline; }
31
70
  .wrap { max-width: 960px; margin: 0 auto; padding: 40px 20px 80px; }
32
71
  .head { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 8px; }
33
- h1 { font-size: 24px; font-weight: 650; letter-spacing: -0.3px; margin: 0; }
72
+ h1 { font-family: var(--serif); font-size: 28px; font-weight: 400; letter-spacing: -0.3px; margin: 0; }
34
73
  h2 { font-size: 15px; font-weight: 600; color: var(--muted); margin: 30px 0 12px; text-transform: uppercase; letter-spacing: 0.5px; }
35
74
  .head a { font-size: 13px; }
36
75
  .sub { color: var(--muted); font-size: 14px; margin: 0 0 26px; }
@@ -2,7 +2,7 @@
2
2
 
3
3
  The flagship product of [Autonomi](https://www.autonomi.dev/). Complete installation instructions for all platforms and use cases.
4
4
 
5
- **Version:** v7.17.1
5
+ **Version:** v7.18.0
6
6
 
7
7
  ---
8
8
 
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- var I7=Object.defineProperty;var P7=($)=>$;function L7($,Q){this[$]=P7.bind(null,Q)}var g=($,Q)=>{for(var K in Q)I7($,K,{get:Q[K],enumerable:!0,configurable:!0,set:L7.bind(Q,K)})};var k=($,Q)=>()=>($&&(Q=$($=0)),Q);var z1=import.meta.require;var w$={};g(w$,{lokiDir:()=>L,homeLokiDir:()=>c1,findRepoRootForVersion:()=>u1,REPO_ROOT:()=>p});import{resolve as o,dirname as f1}from"path";import{fileURLToPath as k7}from"url";import{existsSync as P1}from"fs";import{homedir as j7}from"os";function F7(){let $=A$;for(let Q=0;Q<6;Q++){if(P1(o($,"VERSION"))&&P1(o($,"autonomy/run.sh")))return $;let K=f1($);if(K===$)break;$=K}return o(A$,"..","..","..")}function u1($){let Q=$;for(let K=0;K<6;K++){if(P1(o(Q,"VERSION"))&&P1(o(Q,"autonomy/run.sh")))return Q;let Z=f1(Q);if(Z===Q)break;Q=Z}return o($,"..","..","..")}function L(){return process.env.LOKI_DIR??o(process.cwd(),".loki")}function c1(){return o(j7(),".loki")}var A$,p;var m=k(()=>{A$=f1(k7(import.meta.url));p=F7()});import{readFileSync as R7}from"fs";import{resolve as E7,dirname as S7}from"path";import{fileURLToPath as x7}from"url";function L1(){if($1!==null)return $1;let $="7.17.1";if(typeof $==="string"&&$.length>0)return $1=$,$1;try{let Q=S7(x7(import.meta.url)),K=u1(Q);$1=R7(E7(K,"VERSION"),"utf-8").trim()}catch{$1="unknown"}return $1}var $1=null;var p1=k(()=>{m()});var P$={};g(P$,{runOrThrow:()=>N7,run:()=>F,commandVersion:()=>D7,commandExists:()=>v,ShellError:()=>l1});async function F($,Q={}){let K=Bun.spawn({cmd:[...$],stdout:"pipe",stderr:"pipe",env:Q.env?{...process.env,...Q.env}:process.env,cwd:Q.cwd}),Z,z;if(Q.timeoutMs&&Q.timeoutMs>0)Z=setTimeout(()=>{try{K.kill("SIGTERM")}catch{}z=setTimeout(()=>{try{K.kill("SIGKILL")}catch{}},2000)},Q.timeoutMs);try{let[U,X,W]=await Promise.all([new Response(K.stdout).text(),new Response(K.stderr).text(),K.exited]);return{stdout:U,stderr:X,exitCode:W}}finally{if(Z)clearTimeout(Z);if(z)clearTimeout(z)}}async function N7($,Q={}){let K=await F($,Q);if(K.exitCode!==0)throw new l1(`command failed (${K.exitCode}): ${$.join(" ")}`,K.exitCode,K.stdout,K.stderr);return K}async function v($){let Q=C7($),K=await F(["sh","-c",`command -v ${Q}`],{timeoutMs:5000});if(K.exitCode===0)return K.stdout.trim()||null;return null}function C7($){if(!/^[A-Za-z0-9._/-]+$/.test($))throw Error(`refused to shell-escape suspect token: ${$}`);return $}async function D7($,Q="--version"){if(!await v($))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 l1;var n=k(()=>{l1=class l1 extends Error{message;exitCode;stdout;stderr;constructor($,Q,K,Z){super($);this.message=$;this.exitCode=Q;this.stdout=K;this.stderr=Z;this.name="ShellError"}}});function a($){return h7?"":$}var h7,O,C,I,I3,A,x,h,H;var l=k(()=>{h7=(process.env.NO_COLOR??"").length>0;O=a("\x1B[0;31m"),C=a("\x1B[0;32m"),I=a("\x1B[1;33m"),I3=a("\x1B[0;34m"),A=a("\x1B[0;36m"),x=a("\x1B[1m"),h=a("\x1B[2m"),H=a("\x1B[0m")});import{existsSync as l7}from"fs";async function X1(){if(G1!==void 0)return G1;let $="/opt/homebrew/bin/python3.12";if(l7($))return G1=$,$;let Q=await v("python3.12");if(Q)return G1=Q,Q;let K=await v("python3");return G1=K,K}async function Q1($,Q={}){let K=await X1();if(!K)return{stdout:"",stderr:"python3 not found",exitCode:127};return F([K,"-c",$],Q)}var G1;var B1=k(()=>{n()});var D$={};g(D$,{runStatus:()=>z8});import{existsSync as b,readFileSync as H1,readdirSync as R$,statSync as E$}from"fs";import{resolve as N,basename as s7}from"path";import{homedir as r7}from"os";async function i7(){if(await v("jq"))return!0;return process.stdout.write(`${O}Error: jq is required but not installed.${H}
2
+ var I7=Object.defineProperty;var P7=($)=>$;function L7($,Q){this[$]=P7.bind(null,Q)}var g=($,Q)=>{for(var K in Q)I7($,K,{get:Q[K],enumerable:!0,configurable:!0,set:L7.bind(Q,K)})};var k=($,Q)=>()=>($&&(Q=$($=0)),Q);var z1=import.meta.require;var w$={};g(w$,{lokiDir:()=>L,homeLokiDir:()=>c1,findRepoRootForVersion:()=>u1,REPO_ROOT:()=>p});import{resolve as o,dirname as f1}from"path";import{fileURLToPath as k7}from"url";import{existsSync as P1}from"fs";import{homedir as j7}from"os";function F7(){let $=A$;for(let Q=0;Q<6;Q++){if(P1(o($,"VERSION"))&&P1(o($,"autonomy/run.sh")))return $;let K=f1($);if(K===$)break;$=K}return o(A$,"..","..","..")}function u1($){let Q=$;for(let K=0;K<6;K++){if(P1(o(Q,"VERSION"))&&P1(o(Q,"autonomy/run.sh")))return Q;let Z=f1(Q);if(Z===Q)break;Q=Z}return o($,"..","..","..")}function L(){return process.env.LOKI_DIR??o(process.cwd(),".loki")}function c1(){return o(j7(),".loki")}var A$,p;var m=k(()=>{A$=f1(k7(import.meta.url));p=F7()});import{readFileSync as R7}from"fs";import{resolve as E7,dirname as S7}from"path";import{fileURLToPath as x7}from"url";function L1(){if($1!==null)return $1;let $="7.18.0";if(typeof $==="string"&&$.length>0)return $1=$,$1;try{let Q=S7(x7(import.meta.url)),K=u1(Q);$1=R7(E7(K,"VERSION"),"utf-8").trim()}catch{$1="unknown"}return $1}var $1=null;var p1=k(()=>{m()});var P$={};g(P$,{runOrThrow:()=>N7,run:()=>F,commandVersion:()=>D7,commandExists:()=>v,ShellError:()=>l1});async function F($,Q={}){let K=Bun.spawn({cmd:[...$],stdout:"pipe",stderr:"pipe",env:Q.env?{...process.env,...Q.env}:process.env,cwd:Q.cwd}),Z,z;if(Q.timeoutMs&&Q.timeoutMs>0)Z=setTimeout(()=>{try{K.kill("SIGTERM")}catch{}z=setTimeout(()=>{try{K.kill("SIGKILL")}catch{}},2000)},Q.timeoutMs);try{let[U,X,W]=await Promise.all([new Response(K.stdout).text(),new Response(K.stderr).text(),K.exited]);return{stdout:U,stderr:X,exitCode:W}}finally{if(Z)clearTimeout(Z);if(z)clearTimeout(z)}}async function N7($,Q={}){let K=await F($,Q);if(K.exitCode!==0)throw new l1(`command failed (${K.exitCode}): ${$.join(" ")}`,K.exitCode,K.stdout,K.stderr);return K}async function v($){let Q=C7($),K=await F(["sh","-c",`command -v ${Q}`],{timeoutMs:5000});if(K.exitCode===0)return K.stdout.trim()||null;return null}function C7($){if(!/^[A-Za-z0-9._/-]+$/.test($))throw Error(`refused to shell-escape suspect token: ${$}`);return $}async function D7($,Q="--version"){if(!await v($))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 l1;var n=k(()=>{l1=class l1 extends Error{message;exitCode;stdout;stderr;constructor($,Q,K,Z){super($);this.message=$;this.exitCode=Q;this.stdout=K;this.stderr=Z;this.name="ShellError"}}});function a($){return h7?"":$}var h7,O,C,I,I3,A,x,h,H;var l=k(()=>{h7=(process.env.NO_COLOR??"").length>0;O=a("\x1B[0;31m"),C=a("\x1B[0;32m"),I=a("\x1B[1;33m"),I3=a("\x1B[0;34m"),A=a("\x1B[0;36m"),x=a("\x1B[1m"),h=a("\x1B[2m"),H=a("\x1B[0m")});import{existsSync as l7}from"fs";async function X1(){if(G1!==void 0)return G1;let $="/opt/homebrew/bin/python3.12";if(l7($))return G1=$,$;let Q=await v("python3.12");if(Q)return G1=Q,Q;let K=await v("python3");return G1=K,K}async function Q1($,Q={}){let K=await X1();if(!K)return{stdout:"",stderr:"python3 not found",exitCode:127};return F([K,"-c",$],Q)}var G1;var B1=k(()=>{n()});var D$={};g(D$,{runStatus:()=>z8});import{existsSync as b,readFileSync as H1,readdirSync as R$,statSync as E$}from"fs";import{resolve as N,basename as s7}from"path";import{homedir as r7}from"os";async function i7(){if(await v("jq"))return!0;return process.stdout.write(`${O}Error: jq is required but not installed.${H}
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)
@@ -748,4 +748,4 @@ Set LOKI_LEGACY_BASH=1 to force the bash CLI for every command.
748
748
  `),2}default:return process.stderr.write(`Unknown command: ${Q}
749
749
  `),process.stderr.write(w7),2}}process.on("SIGINT",()=>process.exit(130));process.on("SIGTERM",()=>process.exit(143));var H3=await U3(Bun.argv.slice(2));process.exit(H3);
750
750
 
751
- //# debugId=F5A8D252FFE962D764756E2164756E21
751
+ //# debugId=EE6C6F023419008E64756E2164756E21
package/mcp/__init__.py CHANGED
@@ -57,4 +57,4 @@ try:
57
57
  except ImportError:
58
58
  __all__ = ['mcp']
59
59
 
60
- __version__ = '7.17.1'
60
+ __version__ = '7.18.0'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "loki-mode",
3
- "version": "7.17.1",
3
+ "version": "7.18.0",
4
4
  "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 11 quality gates. Provider-agnostic (Claude Code, OpenAI Codex, Cline, Aider).",
5
5
  "keywords": [
6
6
  "agent",