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 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.0
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.0 | [Autonomi](https://www.autonomi.dev/) flagship product | ~260 lines core**
270
+ **v6.37.1 | [Autonomi](https://www.autonomi.dev/) flagship product | ~260 lines core**
package/VERSION CHANGED
@@ -1 +1 @@
1
- 6.37.0
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
- { CODEX_MODEL_REASONING_EFFORT="$tier_param" \
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=$?
@@ -7,7 +7,7 @@ Modules:
7
7
  control: Session control API (start/stop/pause/resume)
8
8
  """
9
9
 
10
- __version__ = "6.37.0"
10
+ __version__ = "6.37.1"
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:** v6.37.0
5
+ **Version:** v6.37.1
6
6
 
7
7
  ---
8
8
 
package/mcp/__init__.py CHANGED
@@ -57,4 +57,4 @@ try:
57
57
  except ImportError:
58
58
  __all__ = ['mcp']
59
59
 
60
- __version__ = '6.37.0'
60
+ __version__ = '6.37.1'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "loki-mode",
3
- "version": "6.37.0",
3
+ "version": "6.37.1",
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",
@@ -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
- CODEX_MODEL_REASONING_EFFORT="$effort" codex exec --full-auto "$prompt" "$@"
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=True, # create new process group for clean kill
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
- try:
375
- pgid = os.getpgid(proc.pid)
376
- os.killpg(pgid, signal.SIGTERM)
377
- except (ProcessLookupError, PermissionError, OSError):
378
- # Fallback: kill the process directly
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.terminate()
386
+ subprocess.call(["taskkill", "/F", "/T", "/PID", str(proc.pid)])
381
387
  except Exception:
382
- pass
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
- try:
388
- pgid = os.getpgid(proc.pid)
389
- os.killpg(pgid, signal.SIGKILL)
390
- except (ProcessLookupError, PermissionError, OSError):
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
- if not str(target).startswith(str(home)):
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"})