loki-mode 11.90.0 → 11.91.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 +51 -15
- package/completions/_loki +7 -4
- package/completions/loki.bash +3 -3
- package/dashboard/__init__.py +1 -1
- package/docs/CLI-REFERENCE.md +1 -1
- package/docs/INSTALLATION.md +1 -1
- package/docs/v11/VERIFY-PR-SANDBOX.md +1 -1
- package/loki-ts/dist/loki.js +1319 -1313
- package/mcp/__init__.py +1 -1
- package/package.json +2 -2
- package/packages/control-plane/dist/server.js +15244 -15211
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/web-app/dist/assets/{AdminPage-CZL0cONl.js → AdminPage-9ggwVri1.js} +1 -1
- package/web-app/dist/assets/{Avatar-tJZxSP21.js → Avatar-B8FkIL3q.js} +1 -1
- package/web-app/dist/assets/{Badge-B-uFJM_y.js → Badge-DUwOrMSE.js} +1 -1
- package/web-app/dist/assets/{Button-DfKU7ctr.js → Button-CfNOtUNu.js} +1 -1
- package/web-app/dist/assets/{CockpitPage-CRNp09jN.js → CockpitPage-Tp4zfLg3.js} +1 -1
- package/web-app/dist/assets/{ComparePage-Cdvjcs57.js → ComparePage-CazDogm2.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-C_benNK3.js → ErrorBoundary-CSOUEOuI.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-Ch_6YkUO.js → EvidenceReceiptPanel-BPny501Q.js} +1 -1
- package/web-app/dist/assets/{GitHubIssuesPanel-C_a7mAlw.js → GitHubIssuesPanel-BhtfBprx.js} +1 -1
- package/web-app/dist/assets/{GitHubPRsPanel-xMr7IKsr.js → GitHubPRsPanel-Bx2bqoiA.js} +1 -1
- package/web-app/dist/assets/{HomePage-BVe6s1kz.js → HomePage-Bgn9XzXY.js} +2 -2
- package/web-app/dist/assets/{LoginPage-DKlLaNw0.js → LoginPage-DEoEr8Qo.js} +1 -1
- package/web-app/dist/assets/{MagicPage-StmxQunX.js → MagicPage-qVEnzwnK.js} +1 -1
- package/web-app/dist/assets/{MetricsPage-C7e2CioT.js → MetricsPage-BCru8Vw7.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-B2IopV0V.js → NotFoundPage-BfyOjcyd.js} +1 -1
- package/web-app/dist/assets/{ProjectPage-CXs8d6Cx.js → ProjectPage-B6ofKWxG.js} +3 -3
- package/web-app/dist/assets/{ProjectsPage-BfgMJYYj.js → ProjectsPage-hEPpeCXF.js} +1 -1
- package/web-app/dist/assets/{SettingsPage-CZ8lwCF2.js → SettingsPage-xnOPbkyg.js} +1 -1
- package/web-app/dist/assets/{ShowcasePage-iNCfKZj0.js → ShowcasePage-lhQPmInF.js} +1 -1
- package/web-app/dist/assets/{SystemSettingsPage-FMV2pNNz.js → SystemSettingsPage-B5UxUTUH.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-D_SzTjuD.js → TeamsPage-D_BLZ_R6.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-BMF_6X7R.js → TemplatesPage-CylVy_1x.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-ClZtwhW8.js → TerminalOutput-Brs2zmhu.js} +1 -1
- package/web-app/dist/assets/{activity-DSOGDSlj.js → activity-CKKwgBww.js} +1 -1
- package/web-app/dist/assets/{bell-BQaMS_Ge.js → bell-Bg8nyAMu.js} +1 -1
- package/web-app/dist/assets/{bot-Iw0qLbSN.js → bot-BDbOv-DW.js} +1 -1
- package/web-app/dist/assets/{check-BNNpt5tE.js → check-Coz1WWGB.js} +1 -1
- package/web-app/dist/assets/{chevron-left-DDFdacve.js → chevron-left-CeLweRux.js} +1 -1
- package/web-app/dist/assets/{circle-alert-CiRTbi7c.js → circle-alert-Cey6q-cN.js} +1 -1
- package/web-app/dist/assets/{clock-hudCD7-Z.js → clock-XtA5Pfpw.js} +1 -1
- package/web-app/dist/assets/{cloud-Brn55LA3.js → cloud-FQ28jZRb.js} +1 -1
- package/web-app/dist/assets/{code-xml-kiS4rISP.js → code-xml-vDF0KSYX.js} +1 -1
- package/web-app/dist/assets/{database-BD1l1Tuw.js → database-D_3JabMZ.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-DT5e3PIo.js → dollar-sign-DuF13H12.js} +1 -1
- package/web-app/dist/assets/{file-code-corner-DmixJzQ5.js → file-code-corner-DGQ1fKi8.js} +1 -1
- package/web-app/dist/assets/{file-plus-CeQieVbR.js → file-plus-ClQjx4PE.js} +1 -1
- package/web-app/dist/assets/{globe-BayFHork.js → globe-D_3mXRWy.js} +1 -1
- package/web-app/dist/assets/{hammer-BzJ_7lDH.js → hammer-CuUomfVV.js} +1 -1
- package/web-app/dist/assets/{index-DgDlNUmy.js → index-D9-QtcQt.js} +3 -3
- package/web-app/dist/assets/{layers-CfWES4J2.js → layers-B5R8eQiI.js} +1 -1
- package/web-app/dist/assets/{loader-circle-CH0UbcAO.js → loader-circle-B6mERdsr.js} +1 -1
- package/web-app/dist/assets/{lock-BuKglb_x.js → lock-B4ySRbcK.js} +1 -1
- package/web-app/dist/assets/{package-BkpU_Qb_.js → package-MHaPM4mF.js} +1 -1
- package/web-app/dist/assets/{plus-BFMNyc0G.js → plus-Cj08kEEm.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-DQnQVKNC.js → refresh-cw-DThqwXZE.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-B_M9AdjB.js → rotate-ccw-D6FVAHZp.js} +1 -1
- package/web-app/dist/assets/{scroll-text-1P39rc_L.js → scroll-text-1tS_QOZn.js} +1 -1
- package/web-app/dist/assets/{server-BjGwVEsb.js → server-CtMpOUbw.js} +1 -1
- package/web-app/dist/assets/{shield-alert-CKcYjHu8.js → shield-alert-BlC4wmkJ.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-BC_5mpCw.js → thumbs-up-B_AuhFxq.js} +1 -1
- package/web-app/dist/assets/{trash-2-CjtQl9fg.js → trash-2-CBj_pRfh.js} +1 -1
- package/web-app/dist/assets/{trending-down-D9MnFNOD.js → trending-down-BZ9AZ6D0.js} +1 -1
- package/web-app/dist/assets/{trending-up-DrHz29bk.js → trending-up-BdO4ANqU.js} +1 -1
- package/web-app/dist/assets/{upload-D7jmahPb.js → upload-D1Cg5cAS.js} +1 -1
- package/web-app/dist/assets/{usePolling-C-zxuzqz.js → usePolling-IHqzRFVn.js} +1 -1
- package/web-app/dist/assets/{user-DE2Mkf9B.js → user-1UKh3VZH.js} +1 -1
- package/web-app/dist/index.html +1 -1
package/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: loki-mode
|
|
|
3
3
|
description: Runs an autonomous software factory that knows what it is supposed to deliver and proves it did, with a signed receipt. Use when the user says Loki Mode or asks to build, fix or verify software autonomously.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Loki Mode v11.
|
|
6
|
+
# Loki Mode v11.91.0
|
|
7
7
|
|
|
8
8
|
**Current entry points (Loki 10 engine):** `loki "<task>"`, `loki owner/repo#N` and `loki quick "<task>"` run the Loki 10 engine and end with a signed receipt (`loki verify`). `loki backlog owner/repo --all` runs many issues in parallel. Guide: `docs/v10/GUIDE.md`. The skill instructions below, and `loki start`, describe the previous bash loop. PRD-file starts (`loki start ./prd.md`) and the opencode provider still run on it until FC38-SWEEP ports them; the legacy-engine command and the LOKI_ENGINE switch remain removed. Prefer `loki owner/repo#N` for issues.
|
|
9
9
|
|
|
@@ -475,4 +475,4 @@ Implemented, planned and deprecated items, with the version each landed in: `ski
|
|
|
475
475
|
|
|
476
476
|
---
|
|
477
477
|
|
|
478
|
-
**v11.
|
|
478
|
+
**v11.91.0 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
11.
|
|
1
|
+
11.91.0
|
package/autonomy/loki
CHANGED
|
@@ -28178,13 +28178,14 @@ _pr_record_merge() {
|
|
|
28178
28178
|
# exactly 0 reverts in git history. A revert count of null (history
|
|
28179
28179
|
# unreadable), a missing record, an unreadable trust output or an unreadable or
|
|
28180
28180
|
# truncated file list or an unreadable diff all refuse, as does any PR whose
|
|
28181
|
-
# diff touches a symlink (120000) or submodule (160000) mode
|
|
28181
|
+
# diff touches a symlink (120000) or submodule (160000) mode, including a pure
|
|
28182
|
+
# rename of one (modes read from git on the base and head). Protected paths (.github/, .loki/, .env*,
|
|
28182
28183
|
# .envrc, CODEOWNERS, plus the space-separated globs in
|
|
28183
28184
|
# LOKI_EARNED_MERGE_PROTECTED), matched case-insensitively, always stay
|
|
28184
28185
|
# PR-only. The reason for a refusal goes to stdout; the return code is 1.
|
|
28185
28186
|
_pr_earned_merge_check() {
|
|
28186
28187
|
local pr="$1" min="${LOKI_EARNED_MERGE_MIN_VERIFIED:-20}" meta="" num="" want="" lines="" seals=""
|
|
28187
|
-
local kind p lp g row v r got=0 globs=() diff="" bad_mode=""
|
|
28188
|
+
local kind p lp g row v r got=0 globs=() diff="" bad_mode="" renames="" refs="" base="" head="" from to m_old m_new
|
|
28188
28189
|
case "$min" in ''|*[!0-9]*) min=20 ;; esac
|
|
28189
28190
|
[ "$min" -ge 1 ] || min=1
|
|
28190
28191
|
command -v jq >/dev/null 2>&1 || { echo "jq is required to read the Seal record"; return 1; }
|
|
@@ -28229,6 +28230,28 @@ EOF_FILES
|
|
|
28229
28230
|
[ -n "$diff" ] || { echo "the PR's file modes are unreadable"; return 1; }
|
|
28230
28231
|
bad_mode="$(printf '%s\n' "$diff" | awk '/^diff --git /{h=$0} /^(new file mode|deleted file mode|old mode|new mode) (120000|160000)$/{print h; exit} /^index [0-9a-f.]+ (120000|160000)$/{print h; exit}')"
|
|
28231
28232
|
[ -z "$bad_mode" ] || { echo "${bad_mode#diff --git } involves a symlink or submodule"; return 1; }
|
|
28233
|
+
# A pure rename (100% similarity) carries no mode or index line, so the scan
|
|
28234
|
+
# above cannot see a symlink moving. Read both sides' modes from git.
|
|
28235
|
+
renames="$(printf '%s\n' "$diff" | awk '/^rename from /{f=substr($0,13)} /^rename to /{print f "\t" substr($0,11); f=""}')"
|
|
28236
|
+
if [ -n "$renames" ]; then
|
|
28237
|
+
refs="$(gh pr view "$pr" --json baseRefOid,headRefOid -q '.baseRefOid + " " + .headRefOid' 2>/dev/null)" || refs=""
|
|
28238
|
+
base="${refs%% *}"; head="${refs#* }"
|
|
28239
|
+
case "$base$head" in ''|*[!0-9a-f]*) echo "the PR's rename modes are unreadable"; return 1 ;; esac
|
|
28240
|
+
if ! git cat-file -e "${base}^{commit}" 2>/dev/null || ! git cat-file -e "${head}^{commit}" 2>/dev/null; then
|
|
28241
|
+
GIT_TERMINAL_PROMPT=0 git fetch -q origin "pull/${num}/head" >/dev/null 2>&1 || true
|
|
28242
|
+
fi
|
|
28243
|
+
while IFS="$(printf '\t')" read -r from to; do
|
|
28244
|
+
[ -n "$to" ] || continue
|
|
28245
|
+
m_old="$(git ls-tree --full-tree "$base" -- "$from" 2>/dev/null | awk '{print $1; exit}')"
|
|
28246
|
+
m_new="$(git ls-tree --full-tree "$head" -- "$to" 2>/dev/null | awk '{print $1; exit}')"
|
|
28247
|
+
case "$m_old:$m_new" in
|
|
28248
|
+
120000:*|160000:*|*:120000|*:160000) echo "rename from $from to $to involves a symlink or submodule"; return 1 ;;
|
|
28249
|
+
'':*|*:'') echo "rename from $from to $to has unreadable file modes"; return 1 ;;
|
|
28250
|
+
esac
|
|
28251
|
+
done <<EOF_RENAMES
|
|
28252
|
+
$renames
|
|
28253
|
+
EOF_RENAMES
|
|
28254
|
+
fi
|
|
28232
28255
|
return 0
|
|
28233
28256
|
}
|
|
28234
28257
|
|
|
@@ -31250,6 +31273,7 @@ cmd_metrics() {
|
|
|
31250
31273
|
local last_n=0
|
|
31251
31274
|
local save_file=false
|
|
31252
31275
|
local share_flag=false
|
|
31276
|
+
local share_visibility=""
|
|
31253
31277
|
|
|
31254
31278
|
while [[ $# -gt 0 ]]; do
|
|
31255
31279
|
case "$1" in
|
|
@@ -31266,7 +31290,8 @@ cmd_metrics() {
|
|
|
31266
31290
|
echo " --json Machine-readable JSON output"
|
|
31267
31291
|
echo " --last N Analyze only the last N sessions (default: all)"
|
|
31268
31292
|
echo " --save Write report to METRICS.md in project root"
|
|
31269
|
-
echo " --share Upload report as GitHub Gist (via loki share)"
|
|
31293
|
+
echo " --share Upload report as a secret GitHub Gist (via loki share)"
|
|
31294
|
+
echo " --public With --share, create a PUBLIC gist instead"
|
|
31270
31295
|
echo " --help, -h Show this help"
|
|
31271
31296
|
echo ""
|
|
31272
31297
|
echo "Subcommands:"
|
|
@@ -31277,7 +31302,7 @@ cmd_metrics() {
|
|
|
31277
31302
|
echo " loki metrics --json # Machine-readable output"
|
|
31278
31303
|
echo " loki metrics --last 5 # Last 5 sessions only"
|
|
31279
31304
|
echo " loki metrics --save # Write METRICS.md"
|
|
31280
|
-
echo " loki metrics --share # Share as GitHub Gist"
|
|
31305
|
+
echo " loki metrics --share # Share as a secret GitHub Gist"
|
|
31281
31306
|
echo " loki metrics prometheus # Prometheus metrics from dashboard"
|
|
31282
31307
|
exit 0
|
|
31283
31308
|
;;
|
|
@@ -31286,6 +31311,7 @@ cmd_metrics() {
|
|
|
31286
31311
|
--last=*) last_n="${1#*=}"; shift ;;
|
|
31287
31312
|
--save) save_file=true; shift ;;
|
|
31288
31313
|
--share) share_flag=true; shift ;;
|
|
31314
|
+
--public) share_visibility="--public"; shift ;;
|
|
31289
31315
|
prometheus)
|
|
31290
31316
|
# Legacy Prometheus metrics subcommand
|
|
31291
31317
|
shift
|
|
@@ -31708,7 +31734,10 @@ METRICS_SCRIPT
|
|
|
31708
31734
|
project_name=$(basename "$(pwd)")
|
|
31709
31735
|
local gist_desc="Loki Mode productivity report - ${project_name:-project} ($(date +%Y-%m-%d))"
|
|
31710
31736
|
local gist_url
|
|
31711
|
-
|
|
31737
|
+
if [ "$share_visibility" = "--public" ]; then
|
|
31738
|
+
echo -e "${YELLOW}Warning: this gist is PUBLIC and visible to anyone with the URL.${NC}" >&2
|
|
31739
|
+
fi
|
|
31740
|
+
gist_url=$(gh gist create "$tmpfile" --desc "$gist_desc" $share_visibility 2>&1)
|
|
31712
31741
|
local gist_exit=$?
|
|
31713
31742
|
rm -f "$tmpfile"
|
|
31714
31743
|
|
|
@@ -38915,7 +38944,8 @@ REPORT_SCRIPT
|
|
|
38915
38944
|
|
|
38916
38945
|
cmd_share() {
|
|
38917
38946
|
local format="markdown"
|
|
38918
|
-
|
|
38947
|
+
# Secret by default: --public is passed to gh only on an explicit --public.
|
|
38948
|
+
local visibility=""
|
|
38919
38949
|
|
|
38920
38950
|
while [[ $# -gt 0 ]]; do
|
|
38921
38951
|
case "$1" in
|
|
@@ -38928,20 +38958,22 @@ cmd_share() {
|
|
|
38928
38958
|
echo "returning a shareable URL."
|
|
38929
38959
|
echo ""
|
|
38930
38960
|
echo "Options:"
|
|
38931
|
-
echo " --
|
|
38961
|
+
echo " --public Create a PUBLIC gist, visible to anyone with the URL"
|
|
38962
|
+
echo " --private Create a secret gist (default: secret; accepted for compatibility)"
|
|
38932
38963
|
echo " --format <fmt> Report format: text, markdown, html (default: markdown)"
|
|
38933
38964
|
echo " --help, -h Show this help"
|
|
38934
38965
|
echo ""
|
|
38935
38966
|
echo "Examples:"
|
|
38936
|
-
echo " loki share #
|
|
38937
|
-
echo " loki share --
|
|
38938
|
-
echo " loki share --format html #
|
|
38939
|
-
echo " loki share --
|
|
38967
|
+
echo " loki share # Secret markdown gist (default)"
|
|
38968
|
+
echo " loki share --public # Public gist"
|
|
38969
|
+
echo " loki share --format html # Secret HTML gist"
|
|
38970
|
+
echo " loki share --public --format text # Public text gist"
|
|
38940
38971
|
echo ""
|
|
38941
38972
|
echo "Requires: gh CLI (https://cli.github.com)"
|
|
38942
38973
|
exit 0
|
|
38943
38974
|
;;
|
|
38944
38975
|
--private) visibility=""; shift ;;
|
|
38976
|
+
--public) visibility="--public"; shift ;;
|
|
38945
38977
|
--format) format="${2:-markdown}"; shift 2 ;;
|
|
38946
38978
|
--format=*) format="${1#*=}"; shift ;;
|
|
38947
38979
|
*) echo -e "${RED}Unknown option: $1${NC}" >&2; echo "Run 'loki share --help' for usage." >&2; exit 1 ;;
|
|
@@ -39015,8 +39047,8 @@ cmd_share() {
|
|
|
39015
39047
|
}
|
|
39016
39048
|
|
|
39017
39049
|
# Internal helper: upload a single file as a GitHub Gist.
|
|
39018
|
-
# Args: $1=file path, $2=description, $3=visibility ("--public"
|
|
39019
|
-
# or "" for gh's default). NOTE: $3 is intentionally left unquoted at the
|
|
39050
|
+
# Args: $1=file path, $2=description, $3=visibility ("--public" for a public
|
|
39051
|
+
# gist, or "" for gh's default, which is a secret gist). NOTE: $3 is intentionally left unquoted at the
|
|
39020
39052
|
# gh call site so an empty value collapses (the --private case sets it to "").
|
|
39021
39053
|
# Removes the input file after the attempt. Prints "Shared: <url>" on success;
|
|
39022
39054
|
# on failure prints the gh error and exits 1.
|
|
@@ -39031,6 +39063,9 @@ _loki_gist_upload() {
|
|
|
39031
39063
|
# "Shared:" line and the ready-to-post hook with multi-line gh chatter.
|
|
39032
39064
|
local gist_out gist_err gist_exit
|
|
39033
39065
|
local errfile
|
|
39066
|
+
if [ "$visibility" = "--public" ]; then
|
|
39067
|
+
echo -e "${YELLOW}Warning: this gist is PUBLIC and visible to anyone with the URL.${NC}" >&2
|
|
39068
|
+
fi
|
|
39034
39069
|
# Fall back to /dev/null if mktemp fails (disk full / unwritable /tmp) so the
|
|
39035
39070
|
# redirect target is always a real path -- never an empty string (2>"" is a
|
|
39036
39071
|
# bash error). We lose the captured stderr text in that rare case, not the
|
|
@@ -39495,7 +39530,8 @@ cmd_proof() {
|
|
|
39495
39530
|
echo ""
|
|
39496
39531
|
echo "Options for 'share':"
|
|
39497
39532
|
echo " --yes Skip the redaction-preview confirmation prompt"
|
|
39498
|
-
echo " --
|
|
39533
|
+
echo " --public Create a PUBLIC gist, visible to anyone with the URL"
|
|
39534
|
+
echo " --private Create a secret gist (default: secret; accepted for compatibility)"
|
|
39499
39535
|
echo " --hosted Publish to LOKI_HOSTED_ENDPOINT (open-core seam; no official backend yet)"
|
|
39500
39536
|
echo ""
|
|
39501
39537
|
echo "Proofs are generated automatically at run completion (LOKI_PROOF=0 to opt out)."
|
|
@@ -40153,7 +40189,7 @@ print(json.dumps(doc, indent=2))
|
|
|
40153
40189
|
share)
|
|
40154
40190
|
local id=""
|
|
40155
40191
|
local skip_confirm=0
|
|
40156
|
-
local visibility="
|
|
40192
|
+
local visibility=""
|
|
40157
40193
|
local hosted=0
|
|
40158
40194
|
# every python3 invocation below reads proof.json from inside
|
|
40159
40195
|
# the checkout being shared. Resolve an absolute path once so an
|
package/completions/_loki
CHANGED
|
@@ -100,7 +100,7 @@ function _loki {
|
|
|
100
100
|
estimate)
|
|
101
101
|
_arguments \
|
|
102
102
|
'--json[Output machine-readable JSON]' \
|
|
103
|
-
'--model[Model whose
|
|
103
|
+
'--model[Model whose first-run prior to use]:model:' \
|
|
104
104
|
'--provider[Provider whose default model is used]:provider:' \
|
|
105
105
|
'--help[Show help]'
|
|
106
106
|
;;
|
|
@@ -185,7 +185,8 @@ function _loki {
|
|
|
185
185
|
'--json[Machine-readable JSON output]' \
|
|
186
186
|
'--last[Analyze last N sessions]:number:' \
|
|
187
187
|
'--save[Write report to METRICS.md]' \
|
|
188
|
-
'--share[Upload report as GitHub Gist]' \
|
|
188
|
+
'--share[Upload report as a secret GitHub Gist]' \
|
|
189
|
+
'--public[With --share, create a PUBLIC gist]' \
|
|
189
190
|
'--help[Show help]' \
|
|
190
191
|
'1:subcommand:(prometheus)'
|
|
191
192
|
;;
|
|
@@ -199,14 +200,16 @@ function _loki {
|
|
|
199
200
|
;;
|
|
200
201
|
share)
|
|
201
202
|
_arguments \
|
|
202
|
-
'--
|
|
203
|
+
'--public[Create a PUBLIC gist, visible to anyone with the URL]' \
|
|
204
|
+
'--private[Create a secret gist (default)]' \
|
|
203
205
|
'--format[Report format]:format:(text markdown html)' \
|
|
204
206
|
'--help[Show help]'
|
|
205
207
|
;;
|
|
206
208
|
proof)
|
|
207
209
|
_arguments \
|
|
208
210
|
'--yes[Skip redaction-preview confirmation]' \
|
|
209
|
-
'--
|
|
211
|
+
'--public[Create a PUBLIC gist when sharing]' \
|
|
212
|
+
'--private[Create a secret gist when sharing (default)]' \
|
|
210
213
|
'--hosted[Hosted publishing (coming in R9)]' \
|
|
211
214
|
'--dry-run[Scan and list what share would publish; publishes nothing]' \
|
|
212
215
|
'--help[Show help]' \
|
package/completions/loki.bash
CHANGED
|
@@ -355,7 +355,7 @@ _loki_completion() {
|
|
|
355
355
|
|
|
356
356
|
metrics)
|
|
357
357
|
if [[ "$cur" == -* ]]; then
|
|
358
|
-
COMPREPLY=( $(compgen -W "--json --last --save --share --help" -- "$cur") )
|
|
358
|
+
COMPREPLY=( $(compgen -W "--json --last --save --share --public --help" -- "$cur") )
|
|
359
359
|
return 0
|
|
360
360
|
fi
|
|
361
361
|
local metrics_cmds="prometheus"
|
|
@@ -373,7 +373,7 @@ _loki_completion() {
|
|
|
373
373
|
|
|
374
374
|
share)
|
|
375
375
|
if [[ "$cur" == -* ]]; then
|
|
376
|
-
COMPREPLY=( $(compgen -W "--private --format --help" -- "$cur") )
|
|
376
|
+
COMPREPLY=( $(compgen -W "--public --private --format --help" -- "$cur") )
|
|
377
377
|
return 0
|
|
378
378
|
fi
|
|
379
379
|
if [[ "$prev" == "--format" ]]; then
|
|
@@ -384,7 +384,7 @@ _loki_completion() {
|
|
|
384
384
|
|
|
385
385
|
proof)
|
|
386
386
|
if [[ "$cur" == -* ]]; then
|
|
387
|
-
COMPREPLY=( $(compgen -W "--yes --private --hosted --dry-run --out --help" -- "$cur") )
|
|
387
|
+
COMPREPLY=( $(compgen -W "--yes --public --private --hosted --dry-run --out --help" -- "$cur") )
|
|
388
388
|
return 0
|
|
389
389
|
fi
|
|
390
390
|
if [[ $cword -eq 2 ]]; then
|
package/dashboard/__init__.py
CHANGED
package/docs/CLI-REFERENCE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CLI reference
|
|
2
2
|
|
|
3
|
-
Generated from `loki-ts/src/cli/registry.ts` by `scripts/generate-stale-zero.sh` for v11.
|
|
3
|
+
Generated from `loki-ts/src/cli/registry.ts` by `scripts/generate-stale-zero.sh` for v11.91.0. Do not edit by hand.
|
|
4
4
|
Hidden and legacy-only commands are omitted; see `docs/CLI-INVENTORY.md` for the full inventory.
|
|
5
5
|
|
|
6
6
|
| Command | Description |
|
package/docs/INSTALLATION.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Loki Mode, by [Autonomi](https://www.autonomi.dev/), turns a spec or an issue into a verified pull request with a receipt you can check. This page covers installing it, a first run, and the options around it.
|
|
4
4
|
|
|
5
|
-
**Version:** v11.
|
|
5
|
+
**Version:** v11.91.0
|
|
6
6
|
|
|
7
7
|
**Engine note:** `loki start` is the primary command. `loki start`, `loki "<task>"`, `loki owner/repo#N` and `loki quick` all run the Loki 10 engine, whatever the flag order or input form (PRD file, issue ref, task or one-word brief). The previous loop runs only on `--engine legacy`, `LOKI_ENGINE=legacy`, or for one call when a flag Loki 10 cannot honor is present. See the [user guide](v10/GUIDE.md) and the [5-minute quickstart](QUICKSTART.md).
|
|
8
8
|
|
|
@@ -36,7 +36,7 @@ Deviation from the card: there is no mounted output dir. A writable host mount w
|
|
|
36
36
|
- Oversized output: capped by `--max-output`; `output_truncated` is set.
|
|
37
37
|
- Fork bomb: `--pids-limit 256`. Memory bomb: `--memory`. Disk fill: tmpfs size caps.
|
|
38
38
|
- Forged result: the checked code can print a fake `LOKI_VPR_END` line. A per-run 128-bit nonce is sent to the wrapper on stdin and the checked command runs with stdin from /dev/null; the host accepts only the last line carrying that nonce. Docker's default seccomp profile does NOT block ptrace or process_vm_readv on kernels >= 4.8, and the checked command runs as the same uid as the wrapper inside the container, so a hostile process can read the wrapper's memory and recover the nonce. The nonce therefore only stops accidental or naive forgery; it is not a security boundary. One cross-check is added: the wrapper exits with the check's code and the host rejects (status ERROR) a sentinel that disagrees with docker's own exit code. The PR code can still make its own check report success, which is why `result.json` is a signal about the check and not the final verdict (VPR-2 owns that, and it must not treat a bare COMPLETED exit 0 as proof). A custom seccomp profile denying ptrace is a possible hardening and is not shipped here.
|
|
39
|
-
- Forged report: the report path is a per-run random name given only on the runner's command line, so printed totals cannot forge it.
|
|
39
|
+
- Forged report: the report path is a per-run random name given only on the runner's command line, so printed totals cannot forge it. The checked tests run inside the runner's process or its worker processes, so a hostile test that reads the path from the process command line can register an exit hook that rewrites the file after the runner has written it, and can still forge a pass; the same ptrace-class residual applies.
|
|
40
40
|
- Docker pool exhaustion: reported as BLOCKED, never as a failing check.
|
|
41
41
|
|
|
42
42
|
## Not covered (residual, tracked for VPR-2 review)
|