loki-mode 11.17.24 → 11.17.26
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/lib/secure-scan.py +16 -8
- package/autonomy/loki +15 -2
- package/completions/_loki +4 -0
- package/completions/loki.bash +2 -2
- package/dashboard/__init__.py +1 -1
- package/docs/CLI-REFERENCE.md +4 -1
- package/docs/INSTALLATION.md +1 -1
- package/docs/SIGNED-RECEIPTS.md +12 -0
- package/docs/v10/BOARD.md +28 -25
- package/docs/v10/CLI-MODERN.md +2 -2
- package/docs/v10/DECISIONS.md +7 -0
- package/docs/v10/OPERATING-MODEL.md +1 -1
- package/docs/v10/PROGRESS.md +10 -0
- package/loki-ts/dist/loki.js +1050 -1012
- package/mcp/__init__.py +1 -1
- package/package.json +2 -2
- package/packages/control-plane/dist/server.js +2 -0
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/web-app/dist/assets/{AdminPage-BgsFCb6G.js → AdminPage-CHSP5e6k.js} +1 -1
- package/web-app/dist/assets/{Avatar-Dpws1ZeN.js → Avatar-CsGnA2OX.js} +1 -1
- package/web-app/dist/assets/{Badge-aqx8OHFn.js → Badge-FfL_dQe4.js} +1 -1
- package/web-app/dist/assets/{Button-DHfxUlbT.js → Button-Cx5mzyrb.js} +1 -1
- package/web-app/dist/assets/{CockpitPage-DCR5vesV.js → CockpitPage-j5pWIHUI.js} +1 -1
- package/web-app/dist/assets/{ComparePage-cuKXR1uv.js → ComparePage-BXu0LG_k.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-DtpmT0jG.js → ErrorBoundary-CKIaI0bV.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-BfWo4wKv.js → EvidenceReceiptPanel-DGlJkfzs.js} +1 -1
- package/web-app/dist/assets/{GitHubIssuesPanel-mEVOX_OU.js → GitHubIssuesPanel-Df6Remvh.js} +1 -1
- package/web-app/dist/assets/{GitHubPRsPanel-BZ5r-aEj.js → GitHubPRsPanel-CQQ9bdM1.js} +1 -1
- package/web-app/dist/assets/{HomePage-BDd9Oo2F.js → HomePage-Dk11xfaT.js} +2 -2
- package/web-app/dist/assets/{LoginPage-DkIZhiHl.js → LoginPage-DBAIxcUw.js} +1 -1
- package/web-app/dist/assets/{MagicPage-B-f0j2nJ.js → MagicPage-CyqSkrsY.js} +1 -1
- package/web-app/dist/assets/{MetricsPage-DA8Ay0wl.js → MetricsPage-DQegpg-N.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-Gc285tth.js → NotFoundPage-C0yp5Ap2.js} +1 -1
- package/web-app/dist/assets/{ProjectPage-m8eq3wb_.js → ProjectPage-rKmZwOBO.js} +3 -3
- package/web-app/dist/assets/{ProjectsPage-Bi3hT-dz.js → ProjectsPage-czX-J8lH.js} +1 -1
- package/web-app/dist/assets/{SettingsPage-DTS-0DeC.js → SettingsPage-DkzxPz7F.js} +1 -1
- package/web-app/dist/assets/{ShowcasePage-pU3PBH5u.js → ShowcasePage-BVsDC830.js} +1 -1
- package/web-app/dist/assets/{SystemSettingsPage-kgLmx5RH.js → SystemSettingsPage-B5Pwye_5.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-hq3QcIwm.js → TeamsPage-Bbc8FBY1.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-DGuCo3l9.js → TemplatesPage-D4a3eoRk.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-BvQTYDkD.js → TerminalOutput-BXtC2fVL.js} +1 -1
- package/web-app/dist/assets/{activity-BSIMSL11.js → activity-DKZYAOnO.js} +1 -1
- package/web-app/dist/assets/{bell-Dz_p4zBz.js → bell-D3RE9q-q.js} +1 -1
- package/web-app/dist/assets/{bot-BPiqCx4b.js → bot-CADc3jXB.js} +1 -1
- package/web-app/dist/assets/{check-BdnIDQH_.js → check-DCvNMPBE.js} +1 -1
- package/web-app/dist/assets/{chevron-left-DZyjqI6t.js → chevron-left-DsM_tWPh.js} +1 -1
- package/web-app/dist/assets/{circle-alert-T-48TXlr.js → circle-alert-Bs7D9c0i.js} +1 -1
- package/web-app/dist/assets/{clock-DWovJ36o.js → clock-BQLKdG7i.js} +1 -1
- package/web-app/dist/assets/{cloud-BeXd75T1.js → cloud-BZwL7Ky0.js} +1 -1
- package/web-app/dist/assets/{code-xml-v6JHJEIo.js → code-xml-CIuVlN6J.js} +1 -1
- package/web-app/dist/assets/{database-CKh1wyGO.js → database-DTBmbHqP.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-ekCljB4r.js → dollar-sign-mBQ_Luuc.js} +1 -1
- package/web-app/dist/assets/{file-code-corner-DPTJW6lV.js → file-code-corner-0PVCLO3g.js} +1 -1
- package/web-app/dist/assets/{file-plus-Bi1YBI-i.js → file-plus-C2h48ROI.js} +1 -1
- package/web-app/dist/assets/{globe-WXH8JrHX.js → globe-B8TLXWN-.js} +1 -1
- package/web-app/dist/assets/{hammer-BB52bYCL.js → hammer-DtAQHc4m.js} +1 -1
- package/web-app/dist/assets/{index-DC_ZXrfR.js → index-BPInZb4P.js} +3 -3
- package/web-app/dist/assets/{layers-eEDzUJ5I.js → layers-7I0qnFXb.js} +1 -1
- package/web-app/dist/assets/{loader-circle-B-ckgTV0.js → loader-circle-W2hai54C.js} +1 -1
- package/web-app/dist/assets/{lock-IaSvqOBP.js → lock-DuqlYTjH.js} +1 -1
- package/web-app/dist/assets/{package-DD_Mc6zc.js → package-DxdG-2j0.js} +1 -1
- package/web-app/dist/assets/{plus-B-J2c-0L.js → plus-CMfBxmmK.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-B-mxeBhu.js → refresh-cw-CEB_GF0L.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-ljx8J7Uj.js → rotate-ccw-CKuogxUb.js} +1 -1
- package/web-app/dist/assets/{scroll-text-C0qhTlMn.js → scroll-text-DvYmWjxR.js} +1 -1
- package/web-app/dist/assets/{server-DPbYOIRj.js → server-BmUZpWGN.js} +1 -1
- package/web-app/dist/assets/{shield-alert-DcWEcsQ3.js → shield-alert-DCuPE-1R.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-BDGNW6yX.js → thumbs-up-DlcnIo-K.js} +1 -1
- package/web-app/dist/assets/{trash-2-PQmjTryj.js → trash-2-D1IxWSMc.js} +1 -1
- package/web-app/dist/assets/{trending-down-Bagz3Udn.js → trending-down-Bg42QlcY.js} +1 -1
- package/web-app/dist/assets/{trending-up-kybNkF4Q.js → trending-up-BwxRm4qz.js} +1 -1
- package/web-app/dist/assets/{upload-ZZfo6VWe.js → upload-BFDwqKwL.js} +1 -1
- package/web-app/dist/assets/{usePolling-ClRU7-fC.js → usePolling-BTCAbzRU.js} +1 -1
- package/web-app/dist/assets/{user-KwLcwppK.js → user-DmkYa44R.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: An autonomous software factory that knows what it is supposed to deliver, and proves it did. Use when the user says Loki Mode or asks to build, fix or verify software autonomously.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Loki Mode v11.17.
|
|
6
|
+
# Loki Mode v11.17.26
|
|
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
|
|
|
@@ -483,4 +483,4 @@ See `CHANGELOG.md` entries [7.5.7], [7.5.8], [7.5.13] for the per-fix list and r
|
|
|
483
483
|
|
|
484
484
|
---
|
|
485
485
|
|
|
486
|
-
**v11.17.
|
|
486
|
+
**v11.17.26 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
11.17.
|
|
1
|
+
11.17.26
|
|
@@ -114,10 +114,14 @@ _SECRET_PATTERNS = [
|
|
|
114
114
|
("openai-key", re.compile(r"\bsk-[A-Za-z0-9_-]{20,}\b")),
|
|
115
115
|
# GitHub personal access token (classic): ghp_ + 36 chars
|
|
116
116
|
("github-pat", re.compile(r"\bghp_[A-Za-z0-9]{36}\b")),
|
|
117
|
+
# GitHub OAuth / server / user-to-server tokens and fine-grained PATs
|
|
118
|
+
("github-token", re.compile(r"\b(?:gh[osu]_[A-Za-z0-9]{36}|github_pat_[A-Za-z0-9_]{22,})\b")),
|
|
119
|
+
# Anthropic API key
|
|
120
|
+
("anthropic-key", re.compile(r"\bsk-ant-[A-Za-z0-9_-]{16,}")),
|
|
117
121
|
# Google API key: AIza + 35 url-safe chars
|
|
118
122
|
("google-api-key", re.compile(r"\bAIza[0-9A-Za-z_-]{35}\b")),
|
|
119
123
|
# Slack bot token: xoxb- + token body
|
|
120
|
-
("slack-
|
|
124
|
+
("slack-token", re.compile(r"\bxox[baprs]-[0-9A-Za-z-]{10,}\b")),
|
|
121
125
|
]
|
|
122
126
|
|
|
123
127
|
# Placeholder / example markers. If the matched secret (or its surrounding
|
|
@@ -427,7 +431,7 @@ def _finding(rule, rel_path, line, severity, message, fix):
|
|
|
427
431
|
}
|
|
428
432
|
|
|
429
433
|
|
|
430
|
-
def _scan_file(rel_path, lines):
|
|
434
|
+
def _scan_file(rel_path, lines, secrets_everywhere=False):
|
|
431
435
|
"""Return a list of findings for one file. `lines` is [(lineno, text), ...]."""
|
|
432
436
|
findings = []
|
|
433
437
|
browser_served = _is_browser_served(rel_path)
|
|
@@ -457,7 +461,10 @@ def _scan_file(rel_path, lines):
|
|
|
457
461
|
))
|
|
458
462
|
|
|
459
463
|
# --- rule 2: secret literal in a browser-served file -------------
|
|
460
|
-
|
|
464
|
+
# secrets_everywhere (opt-in, used by the proof-share redaction scan)
|
|
465
|
+
# applies the same token rule to every text file: a share bundle has no
|
|
466
|
+
# browser/server split, so any token in it is a leak.
|
|
467
|
+
if browser_served or secrets_everywhere:
|
|
461
468
|
for kind, pat in _SECRET_PATTERNS:
|
|
462
469
|
for m in pat.finditer(text):
|
|
463
470
|
secret = m.group(0)
|
|
@@ -590,7 +597,7 @@ def _scan_file(rel_path, lines):
|
|
|
590
597
|
# scan driver
|
|
591
598
|
# ---------------------------------------------------------------------------
|
|
592
599
|
|
|
593
|
-
def scan(target_dir):
|
|
600
|
+
def scan(target_dir, secrets_everywhere=False):
|
|
594
601
|
"""Scan target_dir and return the result dict.
|
|
595
602
|
|
|
596
603
|
Raises ValueError if target_dir is not a readable directory (the CLI maps
|
|
@@ -603,7 +610,7 @@ def scan(target_dir):
|
|
|
603
610
|
lines = _read_lines(abs_path)
|
|
604
611
|
if lines is None:
|
|
605
612
|
continue
|
|
606
|
-
findings.extend(_scan_file(rel_path, lines))
|
|
613
|
+
findings.extend(_scan_file(rel_path, lines, secrets_everywhere))
|
|
607
614
|
|
|
608
615
|
# deterministic ordering: by file, then line, then rule
|
|
609
616
|
findings.sort(key=lambda f: (f["file"], f["line"], f["rule"]))
|
|
@@ -630,14 +637,15 @@ def _cli(argv=None):
|
|
|
630
637
|
argv = list(sys.argv[1:] if argv is None else argv)
|
|
631
638
|
# --json is accepted for symmetry with the other shims; output is always
|
|
632
639
|
# JSON, so the flag is a no-op kept for a stable, predictable interface.
|
|
633
|
-
|
|
640
|
+
everywhere = "--secrets-everywhere" in argv
|
|
641
|
+
args = [a for a in argv if a not in ("--json", "--secrets-everywhere")]
|
|
634
642
|
if not args or argv[0] in ("-h", "--help"):
|
|
635
643
|
print(json.dumps(
|
|
636
|
-
{"error": "usage: secure-scan.py <target_dir> [--json]"}))
|
|
644
|
+
{"error": "usage: secure-scan.py <target_dir> [--json] [--secrets-everywhere]"}))
|
|
637
645
|
return 2
|
|
638
646
|
target_dir = args[0]
|
|
639
647
|
try:
|
|
640
|
-
result = scan(target_dir)
|
|
648
|
+
result = scan(target_dir, everywhere)
|
|
641
649
|
except ValueError as exc:
|
|
642
650
|
print(json.dumps({"error": str(exc)}))
|
|
643
651
|
return 2
|
package/autonomy/loki
CHANGED
|
@@ -1895,6 +1895,7 @@ show_help_all() {
|
|
|
1895
1895
|
echo " --no-dashboard Disable web dashboard"
|
|
1896
1896
|
echo " --isolation LVL Per-run isolation dial: none (default) | worktree | docker"
|
|
1897
1897
|
echo " --skip-memory Skip loading memory context at startup"
|
|
1898
|
+
echo " --cost PROFILE Opt-in cost profile: lean sets LOKI_ROUTER=1 and LOKI_E10_TRIM=1 unless already set (also LOKI_COST_PROFILE)"
|
|
1898
1899
|
echo " --spec FILE Run against an edited spec (written by 'loki plan <task> --spec'; see also --spec-first)"
|
|
1899
1900
|
echo " --fresh-prd Regenerate the PRD from the codebase (no-PRD runs; ignores the reusable generated PRD)"
|
|
1900
1901
|
echo " --compliance PRESET Enable compliance mode (default|healthcare|fintech|government)"
|
|
@@ -2577,7 +2578,7 @@ _loki_start_handoff() {
|
|
|
2577
2578
|
_loki_start_flag_kind() {
|
|
2578
2579
|
_LOKI_START_FLAG_KIND=""
|
|
2579
2580
|
case "${1%%=*}" in
|
|
2580
|
-
--provider|--brief|--budget|--prd|--issue|--isolation|--aider-model|--aider-flags|--cline-model|--compliance|--max-duration|--log-level|--bmad-project|--openspec|--mirofish-rounds|--mirofish-timeout|--output|--config|--vars|--env-file|--remote|--attempts|--mirofish-docker) _LOKI_START_FLAG_KIND=value ;;
|
|
2581
|
+
--provider|--brief|--budget|--cost|--prd|--issue|--isolation|--aider-model|--aider-flags|--cline-model|--compliance|--max-duration|--log-level|--bmad-project|--openspec|--mirofish-rounds|--mirofish-timeout|--output|--config|--vars|--env-file|--remote|--attempts|--mirofish-docker) _LOKI_START_FLAG_KIND=value ;;
|
|
2581
2582
|
--mirofish) _LOKI_START_FLAG_KIND=optional ;;
|
|
2582
2583
|
--parallel|--allow-haiku|--regen-prd|--regenerate-prd|--regen|--fresh-prd|--bg|--background|--simple|--complex|--github|--no-dashboard|--api|--sandbox|--skip-memory|--yes|-y|--quiet|--mirofish-bg|--no-mirofish|--no-plan|--fast|--repo-fast|--full|--repo-full|--dry-run|--no-start|--worktree|-w|--pr|--prepare-pr|--ship|--detach|-d|--help|-h|--resume|--) _LOKI_START_FLAG_KIND=bool ;;
|
|
2583
2584
|
*) return 1 ;;
|
|
@@ -2819,6 +2820,7 @@ cmd_start() {
|
|
|
2819
2820
|
echo " --regenerate-prd, --regen, or LOKI_PRD_REGEN=1)"
|
|
2820
2821
|
echo " --compliance PRESET Enable compliance mode (default|healthcare|fintech|government)"
|
|
2821
2822
|
echo " --budget USD Per-run cost cap (default $(loki_budget_default_usd); auto-pause when exceeded)"
|
|
2823
|
+
echo " --cost PROFILE Opt-in cost profile: lean (LOKI_ROUTER=1, LOKI_E10_TRIM=1 unless already set) or off"
|
|
2822
2824
|
echo " --bmad-project PATH Use BMAD Method project artifacts as input"
|
|
2823
2825
|
echo " --openspec PATH Use OpenSpec change directory as input"
|
|
2824
2826
|
echo " --mirofish [URL] Enable MiroFish market validation (default: localhost:5001)"
|
|
@@ -3282,6 +3284,17 @@ cmd_start() {
|
|
|
3282
3284
|
export LOKI_BUDGET_LIMIT="$budget_val" LOKI_BUDGET_SOURCE=flag
|
|
3283
3285
|
shift
|
|
3284
3286
|
;;
|
|
3287
|
+
# TEN-COST-01: opt-in cost profile; fills only unset levers (explicit env wins).
|
|
3288
|
+
--cost|--cost=*)
|
|
3289
|
+
if [[ "$1" == --cost=* ]]; then _cost_val="${1#*=}"; _cost_n=1; else _cost_val="${2:-}"; _cost_n=2; fi
|
|
3290
|
+
case "$_cost_val" in
|
|
3291
|
+
lean) : "${LOKI_ROUTER:=1}" "${LOKI_E10_TRIM:=1}"; export LOKI_ROUTER LOKI_E10_TRIM LOKI_COST_PROFILE=lean
|
|
3292
|
+
echo "cost profile lean: LOKI_ROUTER=$LOKI_ROUTER LOKI_E10_TRIM=$LOKI_E10_TRIM" ;;
|
|
3293
|
+
off) ;;
|
|
3294
|
+
*) echo -e "${RED}--cost must be lean or off${NC}" >&2; exit 2 ;;
|
|
3295
|
+
esac
|
|
3296
|
+
shift "$_cost_n"
|
|
3297
|
+
;;
|
|
3285
3298
|
# v6.84.0: explicit mode flags (override auto-detection)
|
|
3286
3299
|
--prd)
|
|
3287
3300
|
if [[ -n "${2:-}" ]] && [[ "${2:-}" != --* ]]; then
|
|
@@ -18707,7 +18720,7 @@ cmd_verify() {
|
|
|
18707
18720
|
# verified by the engine10 verifier directly; bin/loki sends a bare verify back here.
|
|
18708
18721
|
for _pk_arg in "$@"; do
|
|
18709
18722
|
case "$_pk_arg" in
|
|
18710
|
-
--sign-deploy|--receipt|composite.json|*/composite.json|--seal-composite|--seal-composite=*|--max-age|--max-age=*|.loki/groups/*/receipt.json|*/.loki/groups/*/receipt.json)
|
|
18723
|
+
--sign-deploy|--sign-provenance|--url|--receipt|composite.json|*/composite.json|--seal-composite|--seal-composite=*|--max-age|--max-age=*|.loki/groups/*/receipt.json|*/.loki/groups/*/receipt.json)
|
|
18711
18724
|
_loki_bun_delegate engine10 verify "$@"
|
|
18712
18725
|
return $? ;;
|
|
18713
18726
|
# A signed deploy record (.loki/deploys/*.json, schema loki.deploy/1) is re-checked by the same verifier.
|
package/completions/_loki
CHANGED
|
@@ -185,6 +185,9 @@ function _loki {
|
|
|
185
185
|
_arguments \
|
|
186
186
|
'--pubkey[Check against this public key only]:key file:_files' \
|
|
187
187
|
'--sign-deploy[Sign a loki.deploy/1 deploy record in place]:record:_files' \
|
|
188
|
+
'--sign-provenance[Sign a loki.provenance/1 doc in place]:doc:_files' \
|
|
189
|
+
'--url[Verify the live provenance doc served at URL]:url:' \
|
|
190
|
+
'--expect-sha[Require the provenance head_sha to equal SHA]:sha:' \
|
|
188
191
|
'--receipt[Cited receipt file for a deploy record]:receipt:_files' \
|
|
189
192
|
'--max-age[Reject a receipt older than DUR]:duration:' \
|
|
190
193
|
'--require-exogenous[Exit 4 when a VERIFIED receipt has no agent-independent passing check]' \
|
|
@@ -369,6 +372,7 @@ function _loki_start {
|
|
|
369
372
|
'--yes[Skip confirmation prompts]' \
|
|
370
373
|
'-y[Skip confirmation prompts]' \
|
|
371
374
|
'--budget[Cost budget limit in USD]:amount:' \
|
|
375
|
+
'--cost[Opt-in cost profile]:profile:(lean off)' \
|
|
372
376
|
'--model[Model or route override]:model:' \
|
|
373
377
|
'--max-cost[Spend cap in USD]:amount:' \
|
|
374
378
|
'--no-pr[Build and verify without opening a pull request]' \
|
package/completions/loki.bash
CHANGED
|
@@ -28,7 +28,7 @@ _loki_completion() {
|
|
|
28
28
|
# If the word starts with a dash, show flags
|
|
29
29
|
# Rule: list every flag bin/loki routes (Bun/engine10 ones such as --model, --max-cost, --spec, --no-pr too), not only cmd_start's own.
|
|
30
30
|
if [[ "$cur" == -* ]]; then
|
|
31
|
-
local flags="--provider --max-iterations --parallel --background --bg --simple --complex --github --no-dashboard --sandbox --skip-memory --spec --spec-first --yes --budget --attempts --model --isolation --max-cost --no-pr --explain-route --brief --worktree --pr --ship --detach --workspace --deploy --health-url --auto-rollback --resume --help"
|
|
31
|
+
local flags="--provider --max-iterations --parallel --background --bg --simple --complex --github --no-dashboard --sandbox --skip-memory --cost --spec --spec-first --yes --budget --attempts --model --isolation --max-cost --no-pr --explain-route --brief --worktree --pr --ship --detach --workspace --deploy --health-url --auto-rollback --resume --help"
|
|
32
32
|
COMPREPLY=( $(compgen -W "${flags}" -- "$cur") )
|
|
33
33
|
return 0
|
|
34
34
|
fi
|
|
@@ -157,7 +157,7 @@ _loki_completion() {
|
|
|
157
157
|
|
|
158
158
|
verify)
|
|
159
159
|
if [[ "$cur" == -* ]]; then
|
|
160
|
-
COMPREPLY=( $(compgen -W "--base --out --block-on --no-llm --json --explain --check-fresh --max-age --hosted --seal-composite --sign-deploy --receipt --pubkey --require-exogenous --help" -- "$cur") )
|
|
160
|
+
COMPREPLY=( $(compgen -W "--base --out --block-on --no-llm --json --explain --check-fresh --max-age --hosted --seal-composite --sign-deploy --sign-provenance --url --expect-sha --receipt --pubkey --require-exogenous --help" -- "$cur") )
|
|
161
161
|
return 0
|
|
162
162
|
fi
|
|
163
163
|
;;
|
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.17.
|
|
3
|
+
Generated from `loki-ts/src/cli/registry.ts` by `scripts/generate-stale-zero.sh` for v11.17.26. Do not edit by hand.
|
|
4
4
|
Hidden and legacy-only commands are omitted; see `docs/v10/CLI-MODERN.md` for the full inventory.
|
|
5
5
|
|
|
6
6
|
| Command | Description |
|
|
@@ -37,6 +37,9 @@ Hidden and legacy-only commands are omitted; see `docs/v10/CLI-MODERN.md` for th
|
|
|
37
37
|
| `loki proof show` | Show a receipt |
|
|
38
38
|
| `loki proof open` | Open a receipt |
|
|
39
39
|
| `loki proof share` | Share a receipt |
|
|
40
|
+
| `loki proof badge` | Print the Verified by Loki badge |
|
|
41
|
+
| `loki proof md` | Print badge markdown for a README |
|
|
42
|
+
| `loki proof bundle` | Write a self-verifying receipt bundle |
|
|
40
43
|
| `loki wiki` | Cited codebase wiki and Q&A |
|
|
41
44
|
| `loki wiki generate` | Generate the wiki |
|
|
42
45
|
| `loki wiki show` | Show a section |
|
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.17.
|
|
5
|
+
**Version:** v11.17.26
|
|
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
|
|
package/docs/SIGNED-RECEIPTS.md
CHANGED
|
@@ -46,6 +46,18 @@ rolled-back service answered again (`post_rollback_health`: `healthy`,
|
|
|
46
46
|
With `--health-match STR` the probe body must contain STR, and the record stores
|
|
47
47
|
`health_match` and the deployed `tree_sha`.
|
|
48
48
|
|
|
49
|
+
## Live provenance doc (loki.provenance/1)
|
|
50
|
+
|
|
51
|
+
`loki verify --sign-provenance FILE` signs a JSON file holding `head_sha`,
|
|
52
|
+
`tree_sha`, `receipt_sha256`, `run_id` and `built_at` in place, with the same
|
|
53
|
+
Ed25519 key as a deploy record. Serve the result at
|
|
54
|
+
`/.well-known/loki-provenance.json`. `loki verify --url https://host
|
|
55
|
+
[--pubkey FILE] [--receipt FILE] [--expect-sha SHA]` fetches it (5s timeout,
|
|
56
|
+
64KB cap, no redirects) and exits 0 VERIFIED only when the signature verifies
|
|
57
|
+
and any cited receipt found locally or via `--receipt` is VERIFIED. An edited
|
|
58
|
+
doc or a wrong `--expect-sha` is TAMPERED (1). A fetch failure, a non-200, a
|
|
59
|
+
non-JSON or oversize body, or an unknown kid is UNCHECKED (2), never VERIFIED.
|
|
60
|
+
|
|
49
61
|
## Honest limits
|
|
50
62
|
|
|
51
63
|
- A signature proves **provenance and integrity**, not correctness. The
|