loki-mode 6.37.0 → 6.37.1
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/autonomy/run.sh +2 -1
- package/dashboard/__init__.py +1 -1
- package/docs/INSTALLATION.md +1 -1
- package/mcp/__init__.py +1 -1
- package/package.json +1 -1
- package/providers/codex.sh +5 -1
- package/web-app/server.py +30 -13
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 v6.37.
|
|
6
|
+
# Loki Mode v6.37.1
|
|
7
7
|
|
|
8
8
|
**You are an autonomous agent. You make decisions. You do not ask questions. You do not stop.**
|
|
9
9
|
|
|
@@ -267,4 +267,4 @@ The following features are documented in skill modules but not yet fully automat
|
|
|
267
267
|
| Quality gates 3-reviewer system | Implemented (v5.35.0) | 5 specialist reviewers in `skills/quality-gates.md`; execution in run.sh |
|
|
268
268
|
| Benchmarks (HumanEval, SWE-bench) | Infrastructure only | Runner scripts and datasets exist in `benchmarks/`; no published results |
|
|
269
269
|
|
|
270
|
-
**v6.37.
|
|
270
|
+
**v6.37.1 | [Autonomi](https://www.autonomi.dev/) flagship product | ~260 lines core**
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
6.37.
|
|
1
|
+
6.37.1
|
package/autonomy/run.sh
CHANGED
|
@@ -8872,7 +8872,8 @@ if __name__ == "__main__":
|
|
|
8872
8872
|
# Uses positional prompt after exec subcommand
|
|
8873
8873
|
# Note: Effort is set via env var, not CLI flag
|
|
8874
8874
|
# Uses dynamic tier from RARV phase (tier_param already set above)
|
|
8875
|
-
{
|
|
8875
|
+
{ LOKI_CODEX_REASONING_EFFORT="$tier_param" \
|
|
8876
|
+
CODEX_MODEL_REASONING_EFFORT="$tier_param" \
|
|
8876
8877
|
codex exec --full-auto \
|
|
8877
8878
|
"$prompt" 2>&1 | tee -a "$log_file" "$agent_log"; \
|
|
8878
8879
|
} && exit_code=0 || exit_code=$?
|
package/dashboard/__init__.py
CHANGED
package/docs/INSTALLATION.md
CHANGED
package/mcp/__init__.py
CHANGED
package/package.json
CHANGED
package/providers/codex.sh
CHANGED
|
@@ -153,11 +153,15 @@ resolve_model_for_tier() {
|
|
|
153
153
|
|
|
154
154
|
# Tier-aware invocation
|
|
155
155
|
# Codex CLI uses CODEX_MODEL_REASONING_EFFORT env var for effort control
|
|
156
|
+
# LOKI_CODEX_REASONING_EFFORT is the canonical namespaced env var (v6.37.1+)
|
|
157
|
+
# CODEX_MODEL_REASONING_EFFORT is supported for backward compatibility (deprecated)
|
|
156
158
|
provider_invoke_with_tier() {
|
|
157
159
|
local tier="$1"
|
|
158
160
|
local prompt="$2"
|
|
159
161
|
shift 2
|
|
160
162
|
local effort
|
|
161
163
|
effort=$(resolve_model_for_tier "$tier")
|
|
162
|
-
|
|
164
|
+
LOKI_CODEX_REASONING_EFFORT="$effort" \
|
|
165
|
+
CODEX_MODEL_REASONING_EFFORT="$effort" \
|
|
166
|
+
codex exec --full-auto "$prompt" "$@"
|
|
163
167
|
}
|
package/web-app/server.py
CHANGED
|
@@ -316,7 +316,8 @@ async def start_session(req: StartRequest) -> JSONResponse:
|
|
|
316
316
|
text=True,
|
|
317
317
|
cwd=project_dir,
|
|
318
318
|
env={**os.environ, "LOKI_DIR": os.path.join(project_dir, ".loki")},
|
|
319
|
-
start_new_session
|
|
319
|
+
**({"start_new_session": True} if sys.platform != "win32"
|
|
320
|
+
else {"creationflags": subprocess.CREATE_NEW_PROCESS_GROUP}),
|
|
320
321
|
)
|
|
321
322
|
except FileNotFoundError:
|
|
322
323
|
return JSONResponse(
|
|
@@ -371,23 +372,37 @@ async def stop_session() -> JSONResponse:
|
|
|
371
372
|
await session.cleanup()
|
|
372
373
|
|
|
373
374
|
# 3. Kill the process group (catches child processes too)
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
375
|
+
if sys.platform != "win32":
|
|
376
|
+
try:
|
|
377
|
+
pgid = os.getpgid(proc.pid)
|
|
378
|
+
os.killpg(pgid, signal.SIGTERM)
|
|
379
|
+
except (ProcessLookupError, PermissionError, OSError):
|
|
380
|
+
try:
|
|
381
|
+
proc.terminate()
|
|
382
|
+
except Exception:
|
|
383
|
+
pass
|
|
384
|
+
else:
|
|
379
385
|
try:
|
|
380
|
-
proc.
|
|
386
|
+
subprocess.call(["taskkill", "/F", "/T", "/PID", str(proc.pid)])
|
|
381
387
|
except Exception:
|
|
382
|
-
|
|
388
|
+
try:
|
|
389
|
+
proc.terminate()
|
|
390
|
+
except Exception:
|
|
391
|
+
pass
|
|
383
392
|
|
|
384
393
|
try:
|
|
385
394
|
proc.wait(timeout=5)
|
|
386
395
|
except subprocess.TimeoutExpired:
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
396
|
+
if sys.platform != "win32":
|
|
397
|
+
try:
|
|
398
|
+
pgid = os.getpgid(proc.pid)
|
|
399
|
+
os.killpg(pgid, signal.SIGKILL)
|
|
400
|
+
except (ProcessLookupError, PermissionError, OSError):
|
|
401
|
+
try:
|
|
402
|
+
proc.kill()
|
|
403
|
+
except Exception:
|
|
404
|
+
pass
|
|
405
|
+
else:
|
|
391
406
|
try:
|
|
392
407
|
proc.kill()
|
|
393
408
|
except Exception:
|
|
@@ -1032,7 +1047,9 @@ async def onboard_session(req: OnboardRequest) -> JSONResponse:
|
|
|
1032
1047
|
except (ValueError, OSError):
|
|
1033
1048
|
return JSONResponse(status_code=400, content={"error": "Invalid path"})
|
|
1034
1049
|
home = Path.home().resolve()
|
|
1035
|
-
|
|
1050
|
+
try:
|
|
1051
|
+
target.relative_to(home)
|
|
1052
|
+
except ValueError:
|
|
1036
1053
|
return JSONResponse(status_code=400, content={"error": "Path must be within your home directory"})
|
|
1037
1054
|
if not target.exists():
|
|
1038
1055
|
return JSONResponse(status_code=400, content={"error": "Path does not exist"})
|