loki-mode 6.59.0 → 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.
- package/SKILL.md +2 -2
- package/VERSION +1 -1
- package/autonomy/loki +150 -0
- package/autonomy/mirofish-adapter.py +1530 -0
- package/autonomy/run.sh +162 -4
- package/dashboard/__init__.py +1 -1
- package/docs/INSTALLATION.md +1 -1
- package/mcp/__init__.py +1 -1
- package/package.json +1 -1
- package/skills/00-index.md +8 -0
- package/skills/mirofish-integration.md +100 -0
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.
|
|
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.
|
|
270
|
+
**v6.60.0 | [Autonomi](https://www.autonomi.dev/) flagship product | ~260 lines core**
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
6.
|
|
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"
|