loki-mode 11.60.16 → 11.60.17
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/dashboard/__init__.py +1 -1
- package/docs/CLI-REFERENCE.md +1 -1
- package/docs/INSTALLATION.md +1 -1
- package/docs/v10/ENGINE.md +1 -1
- package/docs/v10/FAILURE-CLASSES.md +11 -1
- package/loki-ts/dist/loki.js +1139 -1139
- package/mcp/__init__.py +1 -1
- package/package.json +2 -2
- package/packages/control-plane/dist/server.js +93 -66
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/web-app/dist/assets/{AdminPage-TvrgrZuw.js → AdminPage-BW8YrW2R.js} +1 -1
- package/web-app/dist/assets/{Avatar-Bb4nNhFM.js → Avatar-CCDSSzLt.js} +1 -1
- package/web-app/dist/assets/{Badge-HJfuedzY.js → Badge-BD5d92z2.js} +1 -1
- package/web-app/dist/assets/{Button-BFyEBTEH.js → Button-f63Oxy1n.js} +1 -1
- package/web-app/dist/assets/{CockpitPage-cRbFng0Y.js → CockpitPage-CsdBSsAj.js} +1 -1
- package/web-app/dist/assets/{ComparePage-BDWvRPJH.js → ComparePage-BP11ARlq.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-BFB3B6qS.js → ErrorBoundary-C00mkTuC.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-DfPpa99E.js → EvidenceReceiptPanel-BPl72tXy.js} +1 -1
- package/web-app/dist/assets/{GitHubIssuesPanel-Cgg-TamR.js → GitHubIssuesPanel-dCYFAAjl.js} +1 -1
- package/web-app/dist/assets/{GitHubPRsPanel-DXlznNaT.js → GitHubPRsPanel-wAvjuDVv.js} +1 -1
- package/web-app/dist/assets/{HomePage-RDqLk0LD.js → HomePage-Bfu3HCuS.js} +2 -2
- package/web-app/dist/assets/{LoginPage-Dxhe9oga.js → LoginPage-DOgJ0boz.js} +1 -1
- package/web-app/dist/assets/{MagicPage-HANTah--.js → MagicPage-DSe4H6rd.js} +1 -1
- package/web-app/dist/assets/{MetricsPage-BxjoBHhg.js → MetricsPage-SUZcqVZa.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-Bn3V3qWo.js → NotFoundPage-71HqvBpd.js} +1 -1
- package/web-app/dist/assets/{ProjectPage-D3KYFM_N.js → ProjectPage-6pM92L4H.js} +3 -3
- package/web-app/dist/assets/{ProjectsPage-DV6_tZIm.js → ProjectsPage-C31K8vK7.js} +1 -1
- package/web-app/dist/assets/{SettingsPage-JtbU2vOp.js → SettingsPage-CPYtV5p5.js} +1 -1
- package/web-app/dist/assets/{ShowcasePage-DuB5e7_g.js → ShowcasePage-DIrDa7WZ.js} +1 -1
- package/web-app/dist/assets/{SystemSettingsPage-BU3kLT-C.js → SystemSettingsPage-B_Lr8J2w.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-B5etAmaN.js → TeamsPage-CVpXnDrZ.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-sM2zXEt-.js → TemplatesPage-BUmcz9TZ.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-DO6_1_OF.js → TerminalOutput-DIKRGZky.js} +1 -1
- package/web-app/dist/assets/{activity-D_wZmvHi.js → activity-DQGYAnDo.js} +1 -1
- package/web-app/dist/assets/{bell-CVimd2CM.js → bell-CmH_uF75.js} +1 -1
- package/web-app/dist/assets/{bot-BKqzjwM8.js → bot-DKzc5Abb.js} +1 -1
- package/web-app/dist/assets/{check-Cn1hwqkh.js → check-N7f-OZcj.js} +1 -1
- package/web-app/dist/assets/{chevron-left-DB9zn9HI.js → chevron-left-BVF4vk0j.js} +1 -1
- package/web-app/dist/assets/{circle-alert-BzFzXBcE.js → circle-alert-BwfEcWFa.js} +1 -1
- package/web-app/dist/assets/{clock-CVVX5Ua9.js → clock-DxNOfHv8.js} +1 -1
- package/web-app/dist/assets/{cloud-DiI7PVHH.js → cloud-CAUegaX1.js} +1 -1
- package/web-app/dist/assets/{code-xml-BqlhbmzB.js → code-xml-BUxlP8E0.js} +1 -1
- package/web-app/dist/assets/{database-DgseRvlB.js → database-IUnWpRt1.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-BAT5CB0s.js → dollar-sign-DLcxkHGd.js} +1 -1
- package/web-app/dist/assets/{file-code-corner-C28U8mha.js → file-code-corner-Crt-zQTD.js} +1 -1
- package/web-app/dist/assets/{file-plus-BHpkgmZD.js → file-plus-CfW5zriD.js} +1 -1
- package/web-app/dist/assets/{globe-efHzOFvw.js → globe-CSge_JW3.js} +1 -1
- package/web-app/dist/assets/{hammer-BNj9Z8wQ.js → hammer-Cl2U11bR.js} +1 -1
- package/web-app/dist/assets/{index-DrlVp90a.js → index-DQ8ylLMg.js} +3 -3
- package/web-app/dist/assets/{layers-SnxbBdfu.js → layers-5sdMKBmv.js} +1 -1
- package/web-app/dist/assets/{loader-circle-CpbdyIIE.js → loader-circle-CIViNlk9.js} +1 -1
- package/web-app/dist/assets/{lock-B9Mcva56.js → lock-DbeIC2jA.js} +1 -1
- package/web-app/dist/assets/{package-BBjAd_UN.js → package-bfVjg0k1.js} +1 -1
- package/web-app/dist/assets/{plus-ej-ppzKQ.js → plus-1s7_sbc6.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-BXbsk51e.js → refresh-cw-Ch_wn5l7.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-Cb4X8EVi.js → rotate-ccw-BartSyn7.js} +1 -1
- package/web-app/dist/assets/{scroll-text-DCb61Xlz.js → scroll-text-YPRcU_Qk.js} +1 -1
- package/web-app/dist/assets/{server-BZhPvvap.js → server-BY-Tbej7.js} +1 -1
- package/web-app/dist/assets/{shield-alert-DbWTSwyQ.js → shield-alert-FM6n4l1C.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-D5g0RmUD.js → thumbs-up-CrX-0nPE.js} +1 -1
- package/web-app/dist/assets/{trash-2-BMXU1ub4.js → trash-2-C02sNQRG.js} +1 -1
- package/web-app/dist/assets/{trending-down-CIRdrfaH.js → trending-down-D7xSwH0o.js} +1 -1
- package/web-app/dist/assets/{trending-up-BSwU7Axb.js → trending-up-C5gGWwWf.js} +1 -1
- package/web-app/dist/assets/{upload-CwgdnNp1.js → upload-GjbBw0lN.js} +1 -1
- package/web-app/dist/assets/{usePolling-BciPnllz.js → usePolling-BYewznRd.js} +1 -1
- package/web-app/dist/assets/{user-umWJhl16.js → user-BQ4x5DPu.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.60.
|
|
6
|
+
# Loki Mode v11.60.17
|
|
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
|
|
|
@@ -476,4 +476,4 @@ Implemented, planned and deprecated items, with the version each landed in: `ski
|
|
|
476
476
|
|
|
477
477
|
---
|
|
478
478
|
|
|
479
|
-
**v11.60.
|
|
479
|
+
**v11.60.17 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
11.60.
|
|
1
|
+
11.60.17
|
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.60.
|
|
3
|
+
Generated from `loki-ts/src/cli/registry.ts` by `scripts/generate-stale-zero.sh` for v11.60.17. 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 |
|
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.60.
|
|
5
|
+
**Version:** v11.60.17
|
|
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/v10/ENGINE.md
CHANGED
|
@@ -447,7 +447,7 @@ Time: 4m12s (intake 11s, plan+wall 38s, implement 2m41s, verify 29s, seal+
|
|
|
447
447
|
|
|
448
448
|
**Cache (cache.ts):**
|
|
449
449
|
- Location: `~/.loki/cache/v10/<repo-key>/`, where repo-key is sha256 of the pinned origin, or of the absolute path when there is no origin.
|
|
450
|
-
- `repomap-<tree>.json` and `testmap-<tree>.json` are keyed by `HEAD^{tree}
|
|
450
|
+
- `repomap-<fp>-<tree>.json` and `testmap-<fp>-<tree>.json` are keyed by `HEAD^{tree}` and `<fp>`, the first 16 hex of the producer fingerprint (sha256 of every `loki-ts/src` .ts file; generated into the bundle by scripts/build.ts). The cache dir is 0700, files are 0600, written through a temp file plus rename.
|
|
451
451
|
- `flaky.json` and `failures.jsonl` (the top 3 past failure signatures go into the implementer brief) are per repo.
|
|
452
452
|
- Reads are optional and O(1). Writes happen after the PR, so nothing slows the first run.
|
|
453
453
|
|
|
@@ -1431,7 +1431,7 @@ L0 review rule (ENGINE-LAWS.md L0): a fix that adds an `if` or a regex about the
|
|
|
1431
1431
|
- Siblings swept (grep for cache files under .loki and ~/.loki in loki-ts/src, autonomy, mcp): engine10/cache.ts repomap/testmap cache lives under ~/.loki/cache/v10, outside the repo, keyed by tree hash, no MAC (same-user write is out of this row's threat model; it selects tests, it does not return findings); run.sh `.loki/cache/install` is in-repo and agent-writable but stores node_modules, not a verdict; router history and update_check feed estimates and notices, not a verdict. No other in-repo cache returns findings. Every MCP tool and resource is covered by the runtime-derived guard in tests/mcp/test_phase1_tools.py.
|
|
1432
1432
|
- Mechanism: two layers. (1) loki_verify_fast findings sit under untrusted_content via _UNTRUSTED_FIELDS. (2) fast_verify.Cache lives at ~/.loki/cache/fast-verify/<realpath hash>.json (LOKI_FAST_VERIFY_CACHE_DIR overrides), and each entry carries an HMAC under a per-user 0600 key beside it. The cache key and the MAC body are derived from everything the verdict depends on: a producer fingerprint (blake2b of fast_verify.py's own bytes, computed at import, so any rule edit orphans every old entry and there is no hand-bumped schema constant), the repo-relative path (is_test decides which rules run, so a file moved from a test path to a product path is rescanned), and the content. An entry whose MAC fails is a miss and the file is rescanned; with no readable key, no readable source or an unusable cache dir the cache is off. The key is created through a 0600 temp file and os.link (never clobbered, never partial), the cache dir is forced to 0700 even when it pre-exists loose, a key that is group or other accessible or not owned by the user is refused, and the cache json is written at 0600 through a temp file and os.replace. The old repo-local `.loki/cache/fast-verify.json` is never read. Closes #319.
|
|
1433
1433
|
- Trust boundary: closed for repo content and for any write the judged agent makes inside the repo. NOT closed against a same-user process that can read ~/.loki/cache/fast-verify/key: it can forge a valid MAC. A same-user agent that is allowed to read the home directory therefore defeats this cache; the only complete answer for that threat is --no-cache (the fast scan is milliseconds), which the exogenous gates should use.
|
|
1434
|
-
- Sibling
|
|
1434
|
+
- Sibling (engine10 cache): closed by #331, see FC-ENGINE10-CACHE-KEY-NOT-PRODUCER-BOUND.
|
|
1435
1435
|
- Fixture: tests/mcp/test_phase1_tools.py test_stored_text_appears_only_inside_untrusted_content (red with loki_verify_fast trusted: leaks ['loki_verify_fast']; green after) and tests/test-fast-verify.sh CACHE BINDING block (planted repo-local and forged-MAC empty-list entries; red when the MAC check is replaced by `if False:`, green with it), plus the CACHE KEY and CACHE FILES blocks there: a test-path file moved to a product path must FAIL (red when the path is dropped from cache_key), a copy of fast_verify.py with disabled rules must not poison the real rules' cache (red when PRODUCER is a fixed string), the key and cache json are 0600 and the dir 0700 (red when the key is written 0666), and no verify cache file appears in a repo (red when cache_path points at root/.loki/cache/fast-verify.json). Tests that run fast_verify set LOKI_FAST_VERIFY_CACHE_DIR to a run tmp or pass --no-cache, never the real ~/.loki.
|
|
1436
1436
|
|
|
1437
1437
|
## FC-CATALOG-CAPABILITY-DRIFT-UNCHECKED A catalog entry whose capabilities drifted from the API failed only at request time
|
|
@@ -1464,6 +1464,16 @@ L0 review rule (ENGINE-LAWS.md L0): a fix that adds an `if` or a regex about the
|
|
|
1464
1464
|
- Mechanism: one per-root cache in state/manager.ts keyed by the (st_dev, st_ino) of the .loki directory (symlinks and case spellings share a manager), capped by LOKI_STATE_MANAGER_MAX (default 8), least recently used evicted and stop()ped.
|
|
1465
1465
|
- Fixture: loki-ts/tests/state_manager.test.ts (under loki-ts so bun and CI discover it). Red on origin/main (2 fail), green after (5 pass or 4 pass and 1 skip on a case-sensitive volume); mutations: no eviction, eviction without stop, path-string key, constant key, no LRU touch each go red.
|
|
1466
1466
|
|
|
1467
|
+
## FC-ENGINE10-CACHE-KEY-NOT-PRODUCER-BOUND engine10 repomap and testmap cache keyed by tree hash plus a hand-bumped prefix, so a builder change kept serving old maps, and cache files were written with default modes
|
|
1468
|
+
- User-visible vs raw: user-visible. After a repomap or testmap builder change, test selection and repo context kept using the previous builder's output until someone bumped `repomap2-` by hand. Closed by #331.
|
|
1469
|
+
- Law: a cached result is derived from everything it depends on (producer, path, content), never from a name a person must remember to bump (EL exogenous gates).
|
|
1470
|
+
- Cause (measured, loki-ts/src/engine10/cache.ts): the file name was `repomap2-<tree>.json` / `testmap-<tree>.json`; `writeJson` used writeFileSync with default modes and did not set the dir mode.
|
|
1471
|
+
- Siblings swept: fast_verify.Cache (closed in #319, FC-TRUSTED-CACHE-VERDICT), run.sh `.loki/cache/install` (node_modules, not a verdict), router history and update_check (estimates and notices). The #283 slice journal shares writeJson and so is now private and atomic too.
|
|
1472
|
+
- Mechanism: one producer fingerprint, `producerFingerprint()` in cache.ts: sha256 over the path and bytes of every .ts file under loki-ts/src. scripts/build.ts generates it into the bundle (`globalThis.__LOKI_PRODUCER_FP__`, since the bundle has no source path to hash); a source run hashes src/ itself; if neither works it is a per-process random value so nothing stored can match (a cache that cannot name its producer misses). It sits in the file name next to the tree hash and the `repomap2-` prefix is gone. `writeJson` forces the dir to 0700 (also when it pre-existed loose), writes a 0600 temp file and renames it into place, removing the temp file on failure. Whole-tree hashing is deliberate: the builders import broadly, and an unrelated source edit costing one rebuild is cheaper than a hand-picked list that drifts. Old `repomap2-` and unfingerprinted files are never read and age out only if the same prefix is written; they are small and private.
|
|
1473
|
+
- Trust boundary: this cache selects tests and context; it does not return findings. A same-user process that can write ~/.loki/cache/v10 can still plant a map, and nothing here authenticates entries (no MAC). Out of scope; the only complete answer is not using a cache for a gate.
|
|
1474
|
+
- Fixture: loki-ts/tests/engine10/cache.test.ts describe "#331 producer-bound, private, atomic cache": one changed byte of a copied builder changes the fingerprint; a second build under a different fingerprint misses and the same one hits; the key carries the fingerprint with no hand-bumped prefix; dir 0700 and files 0600 including a pre-existing 0777 dir; temp file plus rename (inode replaced, no .tmp left after success or failure). Mutations each go red: key without the fingerprint (3 fail), files written 0666 (1 fail), dir chmod removed (1 fail), in-place write instead of rename (1 fail). Tests use an injected tmp cache root; tests/engine10/intake.test.ts runs under a fake HOME.
|
|
1475
|
+
- Review round 2 (rev-c M5, M6): `computeProducerFingerprint(root, injected)` is the testable core of `producerFingerprint()`. Tests in cache.test.ts "unbound fallback and injected value": separate processes get different 64-hex keys when the source cannot be hashed and a map written under one is a miss under the other (red when the fallback is a constant, M5); a malformed injected value ("", "x", wrong length, non-string) is ignored for the source hash (red when the 64-hex check is dropped, M6). Orphans: the old `repomap2-*.json` files are removed on the first repomap write (red when that prune is removed, M7); an old `repomap-<tree>.json` name from before binding is ignored and ages out under the 5-file prune.
|
|
1476
|
+
|
|
1467
1477
|
- Fixture: tests/mcp/test_phase1_tools.py test_stored_text_appears_only_inside_untrusted_content (red with loki_verify_fast trusted: leaks ['loki_verify_fast']; green after).
|
|
1468
1478
|
|
|
1469
1479
|
|