loki-mode 7.5.8 → 7.5.9

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 CHANGED
@@ -3,7 +3,7 @@ name: loki-mode
3
3
  description: Multi-agent autonomous startup system. Triggers on "Loki Mode". Takes PRD to deployed product with minimal human intervention. Requires --dangerously-skip-permissions flag.
4
4
  ---
5
5
 
6
- # Loki Mode v7.5.8
6
+ # Loki Mode v7.5.9
7
7
 
8
8
  **You are an autonomous agent. You make decisions. You do not ask questions. You do not stop.**
9
9
 
@@ -89,7 +89,7 @@ These rules guide autonomous operation. Test results and code quality always tak
89
89
 
90
90
  ## Model Selection
91
91
 
92
- **Default since v5.3.0 (reaffirmed in v7.5.8):** Haiku disabled for quality. Use `--allow-haiku` or `LOKI_ALLOW_HAIKU=true` to enable.
92
+ **Default since v5.3.0 (reaffirmed in v7.5.9):** Haiku disabled for quality. Use `--allow-haiku` or `LOKI_ALLOW_HAIKU=true` to enable.
93
93
 
94
94
  | Task Type | Tier | Claude (default) | Claude (--allow-haiku) | Codex (GPT-5.3) | Gemini |
95
95
  |-----------|------|------------------|------------------------|------------------|--------|
@@ -365,4 +365,4 @@ See `references/core-workflow.md` for the full RARV-C contract.
365
365
 
366
366
  ---
367
367
 
368
- **v7.5.8 | [Autonomi](https://www.autonomi.dev/) flagship product | ~260 lines core**
368
+ **v7.5.9 | [Autonomi](https://www.autonomi.dev/) flagship product | ~260 lines core**
package/VERSION CHANGED
@@ -1 +1 @@
1
- 7.5.8
1
+ 7.5.9
@@ -7,7 +7,7 @@ Modules:
7
7
  control: Session control API (start/stop/pause/resume)
8
8
  """
9
9
 
10
- __version__ = "7.5.8"
10
+ __version__ = "7.5.9"
11
11
 
12
12
  # Expose the control app for easy import
13
13
  try:
@@ -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.5.8
5
+ **Version:** v7.5.9
6
6
 
7
7
  ---
8
8
 
@@ -340,7 +340,7 @@ Start a session with: loki start <prd>`}}let Z=u6(X);return{exitCode:0,stdout:Q?
340
340
  `),process.stderr.write(`Usage: loki doctor [--json]
341
341
  `),1;if(Q){let z=await I0();return process.stdout.write(JSON.stringify(z,null,2)+`
342
342
  `),0}return Q3()}var r6,M1,e6,$3;var L0=w(()=>{p();Q1();n();r6=/(\d+\.\d+(?:\.\d+)*)/;M1={fn:y1};e6=[{name:"Claude Code",dir:".claude/skills/loki-mode"},{name:"Codex CLI",dir:".codex/skills/loki-mode"},{name:"Gemini CLI",dir:".gemini/skills/loki-mode"},{name:"Cline CLI",dir:".cline/skills/loki-mode"},{name:"Aider CLI",dir:".aider/skills/loki-mode"}];$3=[{displayName:"Node.js (>= 18)",jsonName:"Node.js",cmd:"node",required:"required",min:"18.0"},{displayName:"Python 3 (>= 3.8)",jsonName:"Python 3",cmd:"python3",required:"required",min:"3.8"},{displayName:"jq",jsonName:"jq",cmd:"jq",required:"required"},{displayName:"git",jsonName:"git",cmd:"git",required:"required"},{displayName:"curl",jsonName:"curl",cmd:"curl",required:"required"},{displayName:"bash (>= 4.0)",jsonName:"bash",cmd:"bash",required:"recommended",min:"4.0"},{displayName:"Bun (>= 1.3)",jsonName:"Bun",cmd:"bun",required:"recommended",min:"1.3"},{displayName:"Claude CLI",jsonName:"Claude CLI",cmd:"claude",required:"optional"},{displayName:"Codex CLI",jsonName:"Codex CLI",cmd:"codex",required:"optional"},{displayName:"Gemini CLI",jsonName:"Gemini CLI",cmd:"gemini",required:"optional"},{displayName:"Cline CLI",jsonName:"Cline CLI",cmd:"cline",required:"optional"},{displayName:"Aider CLI",jsonName:"Aider CLI",cmd:"aider",required:"optional"}]});import{closeSync as A7,fstatSync as T7,lstatSync as O7,mkdirSync as Z3,openSync as j7,readSync as _7,renameSync as K3,rmSync as I7,statSync as x7,unlinkSync as L7,writeFileSync as V3,writeSync as P7}from"fs";import{dirname as W3}from"path";function K1($,Q){Z3(W3($),{recursive:!0});let z=`${$}.tmp.${process.pid}.${++U3}`;V3(z,`${JSON.stringify(Q,null,2)}
343
- `),K3(z,$)}async function P0($,Q){let z=A1.get($)??Promise.resolve(),X=()=>{},Z=new Promise((V)=>{X=V}),K=z.catch(()=>{}).then(()=>Z);A1.set($,K);try{return await z.catch(()=>{}),await Q()}finally{if(X(),A1.get($)===K)A1.delete($)}}var U3=0,A1;var T1=w(()=>{A1=new Map});import{existsSync as O1,mkdirSync as q3,copyFileSync as H3,readFileSync as G3,readdirSync as J3,statSync as B3,writeFileSync as S7,renameSync as Y3,appendFileSync as N7,rmSync as D7}from"fs";import{join as r,dirname as M3}from"path";function j1($){return r($,"state","checkpoints")}function T3($){let Q=j1($);if(!O1(Q))return[];return J3(Q).filter((z)=>z.startsWith("cp-")).filter((z)=>{try{return B3(r(Q,z)).isDirectory()}catch{return!1}})}function O3($){return[...$].sort((Q,z)=>{let X=R0(Q),Z=R0(z);return X-Z})}function R0($){let Q=$.split("-");if(Q.length<3)return 0;let z=Q[Q.length-1],X=Number.parseInt(z??"0",10);return Number.isFinite(X)?X:0}function v1($){let Q=$??P(),z=O3(T3(Q)),X=[];for(let Z of z){let K=E0(Q,Z);if(K)X.push(K)}return X}function E0($,Q){let z=r(j1($),Q,"metadata.json");if(!O1(z))return null;try{let X=JSON.parse(G3(z,"utf-8"));return j3(X,z)}catch{return null}}function j3($,Q){let z=x3($,Q);return z.ok?z.value:null}function x3($,Q){if($===null||typeof $!=="object")return console.warn(`[checkpoint] invalid metadata at ${Q}: not an object`),{ok:!1,reason:"invalid_type",field:"<root>"};let z=$,X=["id","timestamp","task_id","task_description","git_sha","git_branch","provider","phase"];for(let Z of X){if(!(Z in z))return console.warn(`[checkpoint] invalid metadata at ${Q}: field "${Z}" missing`),{ok:!1,reason:"missing_field",field:Z};if(typeof z[Z]!=="string")return console.warn(`[checkpoint] invalid metadata at ${Q}: field "${Z}" not a string`),{ok:!1,reason:"invalid_type",field:Z}}if(!("iteration"in z))return console.warn(`[checkpoint] invalid metadata at ${Q}: field "iteration" missing`),{ok:!1,reason:"missing_field",field:"iteration"};if(typeof z.iteration!=="number"||!Number.isFinite(z.iteration))return console.warn(`[checkpoint] invalid metadata at ${Q}: field "iteration" not a finite number`),{ok:!1,reason:"invalid_type",field:"iteration"};for(let Z of I3){let K=z[Z];if(_3.test(K))return console.warn(`[checkpoint] invalid metadata at ${Q}: field "${Z}" contains control characters`),{ok:!1,reason:"control_chars",field:Z}}return{ok:!0,value:{id:z.id,timestamp:z.timestamp,iteration:z.iteration,task_id:z.task_id,task_description:z.task_description,git_sha:z.git_sha,git_branch:z.git_branch,provider:z.provider,phase:z.phase}}}function m1($,Q){if(!L3.test($))throw new F0($);let z=Q??P(),X=r(j1(z),$);if(!O1(X))throw new h1($);let Z=E0(z,$);if(!Z)throw new h1($);return Z}function w0($,Q){let z=m1($,Q),X=Q??P(),Z=r(j1(X),$),K=[];for(let V of P3){let U=r(Z,V);if(!O1(U))continue;K.push({from:U,to:r(X,V)})}return{id:$,metadata:z,restore:K}}function S0($){let Q=[],z=0;for(let X of $.restore)try{q3(M3(X.to),{recursive:!0});let Z=`${X.to}.tmp.${process.pid}.${++A3}`;H3(X.from,Z),Y3(Z,X.to),z+=1}catch(Z){Q.push(`${X.from} -> ${X.to}: ${Z.message}`)}return{restored:z,errors:Q}}var h7,A3=0,_3,I3,L3,h1,F0,P3;var N0=w(()=>{m();p();T1();h7=Promise.resolve();_3=/[\x00-\x08\x0a-\x1f]/,I3=["id","task_id","git_sha","git_branch","provider","phase"];L3=/^[a-zA-Z0-9_-]+$/;h1=class h1 extends Error{id;constructor($){super(`Checkpoint not found: ${$}`);this.id=$;this.name="CheckpointNotFoundError"}};F0=class F0 extends Error{id;constructor($){super(`Invalid checkpoint ID: must be alphanumeric, hyphens, underscores only (got: ${$})`);this.id=$;this.name="InvalidCheckpointIdError"}};P3=["state/orchestrator.json","queue/pending.json","queue/completed.json","queue/in-progress.json","queue/current-task.json"]});var k0={};b(k0,{runRollback:()=>R3});async function R3($){let Q=$[0],z=$.slice(1);if(Q===void 0||Q==="help"||Q==="--help"||Q==="-h")return process.stdout.write(D0),Q===void 0?1:0;switch(Q){case"list":{let X=[...v1()].reverse();if(X.length===0)return process.stdout.write(`${R}No checkpoints found.${W}
343
+ `),K3(z,$)}async function P0($,Q){let z=A1.get($)??Promise.resolve(),X=()=>{},Z=new Promise((V)=>{X=V}),K=z.catch(()=>{}).then(()=>Z);A1.set($,K);try{return await z.catch(()=>{}),await Q()}finally{if(X(),A1.get($)===K)A1.delete($)}}var U3=0,A1;var T1=w(()=>{A1=new Map});import{existsSync as O1,mkdirSync as q3,copyFileSync as H3,readFileSync as G3,readdirSync as J3,statSync as B3,writeFileSync as S7,renameSync as Y3,appendFileSync as N7,rmSync as D7}from"fs";import{join as r,dirname as M3}from"path";function j1($){return r($,"state","checkpoints")}function T3($){let Q=j1($);if(!O1(Q))return[];return J3(Q).filter((z)=>z.startsWith("cp-")).filter((z)=>{try{return B3(r(Q,z)).isDirectory()}catch{return!1}})}function O3($){return[...$].sort((Q,z)=>{let X=R0(Q),Z=R0(z);return X-Z})}function R0($){let Q=$.split("-");if(Q.length<3)return 0;let z=Q[Q.length-1],X=Number.parseInt(z??"0",10);return Number.isFinite(X)?X:0}function v1($){let Q=$??P(),z=O3(T3(Q)),X=[];for(let Z of z){let K=E0(Q,Z);if(K)X.push(K)}return X}function E0($,Q){let z=r(j1($),Q,"metadata.json");if(!O1(z))return null;try{let X=JSON.parse(G3(z,"utf-8"));return j3(X,z)}catch{return null}}function j3($,Q){let z=x3($,Q);return z.ok?z.value:null}function x3($,Q){if($===null||typeof $!=="object")return console.warn(`[checkpoint] invalid metadata at ${Q}: not an object`),{ok:!1,reason:"invalid_type",field:"<root>"};let z=$,X=["id","timestamp","task_id","task_description","git_sha","git_branch","provider","phase"];for(let Z of X){if(!(Z in z))return console.warn(`[checkpoint] invalid metadata at ${Q}: field "${Z}" missing`),{ok:!1,reason:"missing_field",field:Z};if(typeof z[Z]!=="string")return console.warn(`[checkpoint] invalid metadata at ${Q}: field "${Z}" not a string`),{ok:!1,reason:"invalid_type",field:Z}}if(!Object.prototype.hasOwnProperty.call(z,"iteration"))return console.warn(`[checkpoint] invalid metadata at ${Q}: field "iteration" missing`),{ok:!1,reason:"missing_field",field:"iteration"};if(typeof z.iteration!=="number"||!Number.isFinite(z.iteration))return console.warn(`[checkpoint] invalid metadata at ${Q}: field "iteration" not a finite number`),{ok:!1,reason:"invalid_type",field:"iteration"};for(let Z of I3){let K=z[Z];if(_3.test(K))return console.warn(`[checkpoint] invalid metadata at ${Q}: field "${Z}" contains control characters`),{ok:!1,reason:"control_chars",field:Z}}return{ok:!0,value:{id:z.id,timestamp:z.timestamp,iteration:z.iteration,task_id:z.task_id,task_description:z.task_description,git_sha:z.git_sha,git_branch:z.git_branch,provider:z.provider,phase:z.phase}}}function m1($,Q){if(!L3.test($))throw new F0($);let z=Q??P(),X=r(j1(z),$);if(!O1(X))throw new h1($);let Z=E0(z,$);if(!Z)throw new h1($);return Z}function w0($,Q){let z=m1($,Q),X=Q??P(),Z=r(j1(X),$),K=[];for(let V of P3){let U=r(Z,V);if(!O1(U))continue;K.push({from:U,to:r(X,V)})}return{id:$,metadata:z,restore:K}}function S0($){let Q=[],z=0;for(let X of $.restore)try{q3(M3(X.to),{recursive:!0});let Z=`${X.to}.tmp.${process.pid}.${++A3}`;H3(X.from,Z),Y3(Z,X.to),z+=1}catch(Z){Q.push(`${X.from} -> ${X.to}: ${Z.message}`)}return{restored:z,errors:Q}}var h7,A3=0,_3,I3,L3,h1,F0,P3;var N0=w(()=>{m();p();T1();h7=Promise.resolve();_3=/[\x00-\x08\x0a-\x1f\x7f-\x9f]/,I3=["id","task_id","git_sha","git_branch","provider","phase"];L3=/^[a-zA-Z0-9_-]+$/;h1=class h1 extends Error{id;constructor($){super(`Checkpoint not found: ${$}`);this.id=$;this.name="CheckpointNotFoundError"}};F0=class F0 extends Error{id;constructor($){super(`Invalid checkpoint ID: must be alphanumeric, hyphens, underscores only (got: ${$})`);this.id=$;this.name="InvalidCheckpointIdError"}};P3=["state/orchestrator.json","queue/pending.json","queue/completed.json","queue/in-progress.json","queue/current-task.json"]});var k0={};b(k0,{runRollback:()=>R3});async function R3($){let Q=$[0],z=$.slice(1);if(Q===void 0||Q==="help"||Q==="--help"||Q==="-h")return process.stdout.write(D0),Q===void 0?1:0;switch(Q){case"list":{let X=[...v1()].reverse();if(X.length===0)return process.stdout.write(`${R}No checkpoints found.${W}
344
344
  `),0;process.stdout.write(`${D}Checkpoints${W} (${X.length}, newest first):
345
345
  `);for(let Z of X)process.stdout.write(` ${A}${Z.id}${W} iter=${Z.iteration} ${Z.git_branch||"(no branch)"}@${(Z.git_sha||"").slice(0,7)} ${Z.timestamp}
346
346
  `);return 0}case"show":{let X=z[0];if(!X)return process.stderr.write(`${x}Missing checkpoint id.${W} Use \`loki rollback list\`.
@@ -423,7 +423,7 @@ Subcommands:
423
423
 
424
424
  This command is invoked by autonomy/run.sh between iterations. Users
425
425
  should not run it directly -- run \`loki start\` instead.
426
- `,T5;var $6=w(()=>{m();T1();T5=c1});m();import{readFileSync as U6}from"fs";import{resolve as q6,dirname as H6}from"path";import{fileURLToPath as G6}from"url";var o=null;function r1(){if(o!==null)return o;let $="7.5.8";if(typeof $==="string"&&$.length>0)return o=$,o;try{let Q=H6(G6(import.meta.url)),z=E1(Q);o=U6(q6(z,"VERSION"),"utf-8").trim()}catch{o="unknown"}return o}function s1(){return process.stdout.write(`Loki Mode v${r1()}
426
+ `,T5;var $6=w(()=>{m();T1();T5=c1});m();import{readFileSync as U6}from"fs";import{resolve as q6,dirname as H6}from"path";import{fileURLToPath as G6}from"url";var o=null;function r1(){if(o!==null)return o;let $="7.5.9";if(typeof $==="string"&&$.length>0)return o=$,o;try{let Q=H6(G6(import.meta.url)),z=E1(Q);o=U6(q6(z,"VERSION"),"utf-8").trim()}catch{o="unknown"}return o}function s1(){return process.stdout.write(`Loki Mode v${r1()}
427
427
  `),0}p();n();m();import{readFileSync as A6,existsSync as T6}from"fs";import{resolve as O6}from"path";var j6=["claude","codex","gemini","cline","aider"];function i1(){let $=O6(P(),"state","provider");if(!T6($))return"";try{return A6($,"utf-8").trim()}catch{return""}}function _6($,Q){return $||Q||process.env.LOKI_PROVIDER||"claude"}function I6($){let Q=i1(),z=_6($,Q);switch(process.stdout.write(`${D}Current Provider${W}
428
428
  `),process.stdout.write(`
429
429
  `),process.stdout.write(`${A}Provider:${W} ${z}
@@ -506,4 +506,4 @@ Set LOKI_LEGACY_BASH=1 to force the bash CLI for every command.
506
506
  `),2}default:return process.stderr.write(`Unknown command: ${Q}
507
507
  `),process.stderr.write(z6),2}}process.on("SIGINT",()=>process.exit(130));process.on("SIGTERM",()=>process.exit(143));var _5=await j5(Bun.argv.slice(2));process.exit(_5);
508
508
 
509
- //# debugId=6C8E7FC38A38CF9964756E2164756E21
509
+ //# debugId=CACEACF76B85BD5C64756E2164756E21
package/mcp/__init__.py CHANGED
@@ -57,4 +57,4 @@ try:
57
57
  except ImportError:
58
58
  __all__ = ['mcp']
59
59
 
60
- __version__ = '7.5.8'
60
+ __version__ = '7.5.9'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "loki-mode",
3
- "version": "7.5.8",
3
+ "version": "7.5.9",
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",
@@ -124,7 +124,7 @@
124
124
  "@opentelemetry/exporter-trace-otlp-http": "^0.57.0"
125
125
  },
126
126
  "overrides": {
127
- "protobufjs": ">=7.5.8"
127
+ "protobufjs": ">=7.5.9"
128
128
  },
129
129
  "devDependencies": {
130
130
  "@types/node": "^25.2.0",
@@ -48,7 +48,7 @@
48
48
 
49
49
  ### quality-gates.md
50
50
  **When:** Code review, pre-commit checks, quality assurance
51
- - 10-gate quality system (Gate 10: backward compatibility for healing)
51
+ - 11-gate quality system (Gate 10: backward compatibility for healing; Gate 11: documentation coverage, v6.75.0)
52
52
  - Blind review + anti-sycophancy
53
53
  - Velocity-quality feedback loop (arXiv research)
54
54
  - Mandatory quality checks per task