loki-mode 6.58.1 → 6.60.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.
Files changed (30) hide show
  1. package/SKILL.md +2 -2
  2. package/VERSION +1 -1
  3. package/autonomy/loki +150 -0
  4. package/autonomy/mirofish-adapter.py +1530 -0
  5. package/autonomy/run.sh +162 -4
  6. package/dashboard/__init__.py +1 -1
  7. package/docs/INSTALLATION.md +1 -1
  8. package/mcp/__init__.py +1 -1
  9. package/package.json +1 -1
  10. package/skills/00-index.md +8 -0
  11. package/skills/mirofish-integration.md +100 -0
  12. package/web-app/dist/assets/{Badge-Du7cB2RM.js → Badge-Daan3gu4.js} +1 -1
  13. package/web-app/dist/assets/{Button-Th2YSXGo.js → Button-BfeQWtXn.js} +1 -1
  14. package/web-app/dist/assets/{Card-YfP91wdH.js → Card-JqwSaE0I.js} +1 -1
  15. package/web-app/dist/assets/{HomePage-CuDst3Y8.js → HomePage-ZrDPLDGe.js} +1 -1
  16. package/web-app/dist/assets/{LoginPage-DxRE7wNO.js → LoginPage-lJUDQIlI.js} +1 -1
  17. package/web-app/dist/assets/{NotFoundPage-BinrmmBm.js → NotFoundPage-kZTYx4v_.js} +1 -1
  18. package/web-app/dist/assets/{ProjectPage-B7YRw-mo.js → ProjectPage-DayJk_FX.js} +52 -45
  19. package/web-app/dist/assets/{ProjectsPage-B0GeA_HR.js → ProjectsPage-4_PqKgaD.js} +1 -1
  20. package/web-app/dist/assets/{SettingsPage-B6972a1I.js → SettingsPage-DmjFCI0F.js} +1 -1
  21. package/web-app/dist/assets/{TemplatesPage-BZok4YT0.js → TemplatesPage-BOX60wWf.js} +1 -1
  22. package/web-app/dist/assets/{TerminalOutput-BOi2yyxe.js → TerminalOutput-B9rfXUCC.js} +1 -1
  23. package/web-app/dist/assets/{arrow-left-DvLJxk5b.js → arrow-left-Rh7PJrlD.js} +1 -1
  24. package/web-app/dist/assets/{clock-CBaX9zgi.js → clock-CDe-IBc9.js} +1 -1
  25. package/web-app/dist/assets/{external-link-C5_IrIRr.js → external-link-BviPLjiY.js} +1 -1
  26. package/web-app/dist/assets/{index-EezsFZv2.js → index--VmvfdEx.js} +2 -2
  27. package/web-app/dist/assets/index-DzYIpBt0.css +1 -0
  28. package/web-app/dist/index.html +2 -2
  29. package/web-app/server.py +215 -5
  30. package/web-app/dist/assets/index-CcHKSz7z.css +0 -1
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.58.1
6
+ # Loki Mode v6.60.0
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.58.1 | [Autonomi](https://www.autonomi.dev/) flagship product | ~260 lines core**
270
+ **v6.60.0 | [Autonomi](https://www.autonomi.dev/) flagship product | ~260 lines core**
package/VERSION CHANGED
@@ -1 +1 @@
1
- 6.58.1
1
+ 6.60.0
package/autonomy/loki CHANGED
@@ -504,6 +504,10 @@ cmd_start() {
504
504
  local provider=""
505
505
  local bmad_project_path=""
506
506
  local openspec_change_path=""
507
+ local mirofish_url=""
508
+ local mirofish_docker_image=""
509
+ local mirofish_bg=false
510
+ local mirofish_disabled=false
507
511
 
508
512
  while [[ $# -gt 0 ]]; do
509
513
  case "$1" in
@@ -529,6 +533,12 @@ cmd_start() {
529
533
  echo " --budget USD Cost budget limit (auto-pause when exceeded)"
530
534
  echo " --bmad-project PATH Use BMAD Method project artifacts as input"
531
535
  echo " --openspec PATH Use OpenSpec change directory as input"
536
+ echo " --mirofish [URL] Enable MiroFish market validation (default: localhost:5001)"
537
+ echo " --mirofish-docker IMG Auto-start MiroFish from Docker image"
538
+ echo " --mirofish-rounds N Simulation rounds (default: 100)"
539
+ echo " --mirofish-timeout S Max pipeline wait in seconds (default: 3600)"
540
+ echo " --mirofish-bg Run MiroFish pipeline in background"
541
+ echo " --no-mirofish Disable MiroFish even if env var is set"
532
542
  echo " --yes, -y Skip confirmation prompts (auto-confirm)"
533
543
  echo ""
534
544
  echo "Environment Variables:"
@@ -685,6 +695,68 @@ cmd_start() {
685
695
  openspec_change_path="${1#*=}"
686
696
  shift
687
697
  ;;
698
+ --mirofish)
699
+ mirofish_url="${2:-http://localhost:5001}"
700
+ if [[ "${mirofish_url}" == --* ]] || [[ -z "${2:-}" ]]; then
701
+ mirofish_url="http://localhost:5001"
702
+ else
703
+ shift
704
+ fi
705
+ shift
706
+ ;;
707
+ --mirofish=*)
708
+ mirofish_url="${1#*=}"
709
+ shift
710
+ ;;
711
+ --mirofish-docker)
712
+ if [[ -n "${2:-}" ]]; then
713
+ mirofish_docker_image="$2"
714
+ mirofish_url="${mirofish_url:-http://localhost:5001}"
715
+ shift 2
716
+ else
717
+ echo -e "${RED}--mirofish-docker requires a Docker image name${NC}"
718
+ exit 1
719
+ fi
720
+ ;;
721
+ --mirofish-docker=*)
722
+ mirofish_docker_image="${1#*=}"
723
+ mirofish_url="${mirofish_url:-http://localhost:5001}"
724
+ shift
725
+ ;;
726
+ --mirofish-rounds)
727
+ if [[ -n "${2:-}" ]]; then
728
+ export LOKI_MIROFISH_ROUNDS="$2"
729
+ shift 2
730
+ else
731
+ echo -e "${RED}--mirofish-rounds requires a number${NC}"
732
+ exit 1
733
+ fi
734
+ ;;
735
+ --mirofish-rounds=*)
736
+ export LOKI_MIROFISH_ROUNDS="${1#*=}"
737
+ shift
738
+ ;;
739
+ --mirofish-timeout)
740
+ if [[ -n "${2:-}" ]]; then
741
+ export LOKI_MIROFISH_TIMEOUT="$2"
742
+ shift 2
743
+ else
744
+ echo -e "${RED}--mirofish-timeout requires seconds${NC}"
745
+ exit 1
746
+ fi
747
+ ;;
748
+ --mirofish-timeout=*)
749
+ export LOKI_MIROFISH_TIMEOUT="${1#*=}"
750
+ shift
751
+ ;;
752
+ --mirofish-bg)
753
+ mirofish_bg=true
754
+ shift
755
+ ;;
756
+ --no-mirofish)
757
+ mirofish_disabled=true
758
+ shift
759
+ ;;
688
760
  --budget)
689
761
  if [[ -n "${2:-}" ]]; then
690
762
  if ! echo "$2" | grep -qE '^[0-9]+(\.[0-9]+)?$'; then
@@ -850,6 +922,73 @@ cmd_start() {
850
922
  fi
851
923
  fi
852
924
 
925
+ # MiroFish market validation (optional, non-blocking)
926
+ if [[ -z "$mirofish_url" ]] && [[ -n "${LOKI_MIROFISH_URL:-}" ]] && [[ "$mirofish_disabled" != "true" ]]; then
927
+ mirofish_url="$LOKI_MIROFISH_URL"
928
+ fi
929
+
930
+ if [[ -n "$mirofish_url" ]] && [[ "$mirofish_disabled" != "true" ]]; then
931
+ export MIROFISH_URL="$mirofish_url"
932
+ mkdir -p "$LOKI_DIR"
933
+
934
+ local mf_adapter="$(dirname "$(resolve_script_path "$0")")/mirofish-adapter.py"
935
+ if [[ ! -f "$mf_adapter" ]]; then
936
+ echo -e "${RED}Error: MiroFish adapter not found at $mf_adapter${NC}"
937
+ exit 1
938
+ fi
939
+
940
+ # Docker auto-start if requested
941
+ if [[ -n "$mirofish_docker_image" ]]; then
942
+ echo -e "${CYAN}Starting MiroFish container...${NC}"
943
+ if ! python3 "$mf_adapter" --docker-start --docker-image "$mirofish_docker_image" \
944
+ ${LOKI_MIROFISH_PORT:+--port "$LOKI_MIROFISH_PORT"}; then
945
+ echo -e "${RED}Error: Failed to start MiroFish container${NC}"
946
+ exit 1
947
+ fi
948
+ fi
949
+
950
+ # Health check
951
+ if ! python3 "$mf_adapter" --health --url "$mirofish_url" 2>/dev/null; then
952
+ echo -e "${YELLOW}Warning: MiroFish not reachable at $mirofish_url${NC}"
953
+ echo "Start MiroFish with: loki start --mirofish-docker <image>"
954
+ echo -e "Continue without market validation? [y/N] \\c"
955
+ local _auto="${LOKI_AUTO_CONFIRM:-${CI:-false}}"
956
+ if [[ "$_auto" == "true" ]]; then
957
+ echo "y (auto-confirmed)"
958
+ else
959
+ read -r _mf_confirm
960
+ if [[ ! "$_mf_confirm" =~ ^[Yy] ]]; then
961
+ exit 0
962
+ fi
963
+ fi
964
+ unset MIROFISH_URL
965
+ else
966
+ echo -e "${GREEN}MiroFish reachable at $mirofish_url${NC}"
967
+
968
+ # Need a PRD to run MiroFish
969
+ local _mf_prd="${prd_file:-}"
970
+ if [[ -z "$_mf_prd" ]]; then
971
+ echo -e "${YELLOW}Warning: No PRD file -- skipping MiroFish (needs PRD for simulation seed)${NC}"
972
+ unset MIROFISH_URL
973
+ else
974
+ # Validate PRD can be parsed for MiroFish
975
+ if python3 "$mf_adapter" "$_mf_prd" --validate --url "$mirofish_url" 2>/dev/null; then
976
+ echo -e "${GREEN}PRD validated for MiroFish simulation${NC}"
977
+ # Run with --background (adapter forks internally, returns immediately)
978
+ python3 "$mf_adapter" "$_mf_prd" --output-dir "$LOKI_DIR" \
979
+ --url "$mirofish_url" --background \
980
+ ${LOKI_MIROFISH_ROUNDS:+--max-rounds "$LOKI_MIROFISH_ROUNDS"} \
981
+ ${LOKI_MIROFISH_TIMEOUT:+--timeout "$LOKI_MIROFISH_TIMEOUT"}
982
+ # PID is tracked in .loki/mirofish/pipeline-state.json by the adapter
983
+ echo -e "${CYAN}MiroFish pipeline started in background. Check status: loki mirofish status${NC}"
984
+ else
985
+ echo -e "${YELLOW}Warning: PRD validation for MiroFish failed. Continuing without.${NC}"
986
+ unset MIROFISH_URL
987
+ fi
988
+ fi
989
+ fi
990
+ fi
991
+
853
992
  if [ -n "$prd_file" ]; then
854
993
  args+=("$prd_file")
855
994
  else
@@ -5650,6 +5789,17 @@ cmd_doctor() {
5650
5789
  echo -e " ${YELLOW}WARN${NC} ChromaDB - not running (docker start loki-chroma)"
5651
5790
  warn_count=$((warn_count + 1))
5652
5791
  fi
5792
+ # MiroFish check (optional service)
5793
+ local _mf_url="${LOKI_MIROFISH_URL:-http://localhost:5001}"
5794
+ if docker inspect loki-mirofish &>/dev/null 2>&1 || [[ -n "${LOKI_MIROFISH_URL:-}" ]]; then
5795
+ if curl -sf "$_mf_url/health" >/dev/null 2>&1; then
5796
+ echo -e " ${GREEN}PASS${NC} MiroFish server ($_mf_url)"
5797
+ pass_count=$((pass_count + 1))
5798
+ else
5799
+ echo -e " ${YELLOW}WARN${NC} MiroFish - not running (loki start --mirofish-docker <image>)"
5800
+ warn_count=$((warn_count + 1))
5801
+ fi
5802
+ fi
5653
5803
  # OTEL status
5654
5804
  if [ -n "${LOKI_OTEL_ENDPOINT:-}" ]; then
5655
5805
  echo -e " ${GREEN}PASS${NC} OTEL endpoint: $LOKI_OTEL_ENDPOINT"