loki-mode 11.9.1 → 11.10.1
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/backlog.py +12 -1
- package/autonomy/loki +4 -2
- package/autonomy/trigger-server.py +22 -2
- package/dashboard/__init__.py +1 -1
- package/docs/CLI-REFERENCE.md +1 -1
- package/docs/INSTALLATION.md +1 -1
- package/docs/v10/PROGRESS.md +12 -0
- package/loki-ts/dist/loki.js +890 -886
- package/mcp/__init__.py +1 -1
- package/package.json +2 -2
- package/packages/control-plane/dist/server.js +29 -3
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/web-app/dist/assets/{AdminPage-BdH9iL2I.js → AdminPage-D3PgG7SH.js} +1 -1
- package/web-app/dist/assets/{Avatar-C-WixxR6.js → Avatar-Ct77hvlG.js} +1 -1
- package/web-app/dist/assets/{Badge-BFWpRd_L.js → Badge-Cg_gZaJF.js} +1 -1
- package/web-app/dist/assets/{Button-CE5vG66Y.js → Button-i9r2G84n.js} +1 -1
- package/web-app/dist/assets/{CockpitPage-BAVn10bY.js → CockpitPage-C3UyLXyp.js} +1 -1
- package/web-app/dist/assets/{ComparePage-DOecIGfM.js → ComparePage-B1dXHga_.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-1rNA5v7f.js → ErrorBoundary-CQ_xREw0.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-DjOaWfdH.js → EvidenceReceiptPanel-DwUxd_Xi.js} +1 -1
- package/web-app/dist/assets/{GitHubIssuesPanel-NNPBuRPD.js → GitHubIssuesPanel-C0jAnuAd.js} +1 -1
- package/web-app/dist/assets/{GitHubPRsPanel-CL1b--tV.js → GitHubPRsPanel-B4pNXJMz.js} +1 -1
- package/web-app/dist/assets/{HomePage-BsLDN6MW.js → HomePage-BC9UTS1l.js} +2 -2
- package/web-app/dist/assets/{LoginPage-CVIv5bCS.js → LoginPage-CnpdwK8F.js} +1 -1
- package/web-app/dist/assets/{MagicPage-BgMBB9lK.js → MagicPage-Bj0lZuNp.js} +1 -1
- package/web-app/dist/assets/{MetricsPage-BHeJlqPC.js → MetricsPage-yyw3VnfX.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-DDzwfyDK.js → NotFoundPage-LMxkJP15.js} +1 -1
- package/web-app/dist/assets/{ProjectPage-CuQWEYBF.js → ProjectPage-2x0MRkNu.js} +3 -3
- package/web-app/dist/assets/{ProjectsPage-OoD0RFDZ.js → ProjectsPage-A8J8o1gj.js} +1 -1
- package/web-app/dist/assets/{SettingsPage-tMFMKkK5.js → SettingsPage-fwvOVcRb.js} +1 -1
- package/web-app/dist/assets/{ShowcasePage-DVfLoWdz.js → ShowcasePage-DqI4sUwk.js} +1 -1
- package/web-app/dist/assets/{SystemSettingsPage-CThV9N4l.js → SystemSettingsPage-CyytfNo_.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-CV0nvXI8.js → TeamsPage-BTTe76W1.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-D81EI1L8.js → TemplatesPage-CIp3OTlL.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-Bj7uKRIe.js → TerminalOutput-dX5L4ky-.js} +1 -1
- package/web-app/dist/assets/{activity-DoNfNkOL.js → activity-uHXr2AaF.js} +1 -1
- package/web-app/dist/assets/{bell-BWO3OU50.js → bell-D6RbxRMo.js} +1 -1
- package/web-app/dist/assets/{bot-DcvWv_zD.js → bot-D31w2Mu6.js} +1 -1
- package/web-app/dist/assets/{check-CfG09Z18.js → check-CoKJksbr.js} +1 -1
- package/web-app/dist/assets/{chevron-left-z0fh4x2h.js → chevron-left-Bjx7oX7s.js} +1 -1
- package/web-app/dist/assets/{circle-alert-C_7GlYul.js → circle-alert-DOAh8Jmi.js} +1 -1
- package/web-app/dist/assets/{clock-BsYUp070.js → clock-DgEXPNWH.js} +1 -1
- package/web-app/dist/assets/{cloud-BVWAJ7Rv.js → cloud-0dXJFzBv.js} +1 -1
- package/web-app/dist/assets/{code-xml-CdZT-6zu.js → code-xml-DytQ_bq7.js} +1 -1
- package/web-app/dist/assets/{database-Dbkm9t2D.js → database-Qyjryb72.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-CfIUM5Pd.js → dollar-sign-BzhTVy1e.js} +1 -1
- package/web-app/dist/assets/{file-code-corner-CrUKhnj-.js → file-code-corner-DTdSOALw.js} +1 -1
- package/web-app/dist/assets/{file-plus-Cf6u0xHY.js → file-plus-VdjOG1RK.js} +1 -1
- package/web-app/dist/assets/{globe-DsIqaI7w.js → globe-BhxNOfyM.js} +1 -1
- package/web-app/dist/assets/{hammer-CA14BeMp.js → hammer-MQzrw8ee.js} +1 -1
- package/web-app/dist/assets/{index-DpJ_GJuZ.js → index-DaxrMbHf.js} +3 -3
- package/web-app/dist/assets/{layers-Dh5Oqhrj.js → layers-C7nusTP-.js} +1 -1
- package/web-app/dist/assets/{loader-circle-B0WHIGqt.js → loader-circle-B1qBkgOY.js} +1 -1
- package/web-app/dist/assets/{lock-DkgfEGYF.js → lock-BdkOxK2O.js} +1 -1
- package/web-app/dist/assets/{package-LzjmwD1S.js → package-RVyK96Zn.js} +1 -1
- package/web-app/dist/assets/{plus-BNjA0KSV.js → plus-ntmwFRrp.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-k3IacuDX.js → refresh-cw-BJ39b_PP.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-BFON_xv-.js → rotate-ccw-uPx_-3vz.js} +1 -1
- package/web-app/dist/assets/{scroll-text-CaIlSPZB.js → scroll-text-D9qvXkj-.js} +1 -1
- package/web-app/dist/assets/{server-CKFUccCG.js → server-gs4xmD8Y.js} +1 -1
- package/web-app/dist/assets/{shield-alert-Q4-rPo5r.js → shield-alert-O2_YffGI.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-BYMeh8oV.js → thumbs-up-B3RVBhQx.js} +1 -1
- package/web-app/dist/assets/{trash-2-BHSUEIHw.js → trash-2-DEUt7qhq.js} +1 -1
- package/web-app/dist/assets/{trending-down-BC_FR2VT.js → trending-down-oyTns4UZ.js} +1 -1
- package/web-app/dist/assets/{trending-up-CmA-WmLW.js → trending-up-CdpZK0Oc.js} +1 -1
- package/web-app/dist/assets/{upload-BxLgBa1B.js → upload-D9sbjjC8.js} +1 -1
- package/web-app/dist/assets/{usePolling-DKNgwt5n.js → usePolling-6ognrnyV.js} +1 -1
- package/web-app/dist/assets/{user-CA2DlmLc.js → user-CBKc8QoI.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.
|
|
6
|
+
# Loki Mode v11.10.1
|
|
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.
|
|
486
|
+
**v11.10.1 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
11.
|
|
1
|
+
11.10.1
|
package/autonomy/lib/backlog.py
CHANGED
|
@@ -196,7 +196,7 @@ def load_dag(path, group):
|
|
|
196
196
|
raise ValueError("unit %s task text starts with '-' and would be read as an option" % uid)
|
|
197
197
|
units.append({"n": n, "id": uid, "deps": deps[uid], "write_set": list(u.get("writeSet") or []),
|
|
198
198
|
"task": task, "done": u.get("done") is True,
|
|
199
|
-
"base": str(u
|
|
199
|
+
"base": str(u.get("base") or ""),
|
|
200
200
|
"spec": u["spec"] if isinstance(u.get("spec"), str) and os.path.isabs(u["spec"]) else ""})
|
|
201
201
|
return group, units
|
|
202
202
|
|
|
@@ -266,6 +266,17 @@ def main(argv):
|
|
|
266
266
|
return die("this checkout's origin is %r, not %s; cd into a checkout of %s"
|
|
267
267
|
% (origin_slug(top) or "unknown", a.repo, a.repo))
|
|
268
268
|
|
|
269
|
+
for u in dag_units:
|
|
270
|
+
b = u["base"]
|
|
271
|
+
if not b or re.match(r"^[0-9a-f]{7,64}$", b):
|
|
272
|
+
continue
|
|
273
|
+
# A ref-name base is resolved to a SHA; an unresolvable one fails loudly, never falls back to origin/HEAD.
|
|
274
|
+
r = git("rev-parse", "--verify", "-q", "--end-of-options", b + "^{commit}", cwd=top) if not b.startswith("-") else None
|
|
275
|
+
sha = r.stdout.strip() if r is not None and r.returncode == 0 else ""
|
|
276
|
+
if not re.match(r"^[0-9a-f]{40,64}$", sha):
|
|
277
|
+
return die("unit %s base %r is not a commit SHA or a resolvable ref" % (u["id"], b))
|
|
278
|
+
u["base"] = sha
|
|
279
|
+
|
|
269
280
|
try:
|
|
270
281
|
issues = ([{"number": n, "title": ""} for n in numbers] if numbers
|
|
271
282
|
else list_issues(a.repo, a.label, env) if (a.all or a.label) else [])
|
package/autonomy/loki
CHANGED
|
@@ -11075,6 +11075,7 @@ cmd_run() {
|
|
|
11075
11075
|
echo " --sandbox Run in Docker sandbox (default: off; requires Docker)"
|
|
11076
11076
|
echo " --no-plan Skip auto-shown PRD analysis at startup"
|
|
11077
11077
|
echo " --budget USD Per-run cost cap (default $(loki_budget_default_usd))"
|
|
11078
|
+
echo " --brief-text TEXT (internal) set by 'loki start --brief'; not for direct use"
|
|
11078
11079
|
echo ""
|
|
11079
11080
|
echo "Progressive Isolation:"
|
|
11080
11081
|
echo " --worktree, -w Git worktree isolation (separate branch)"
|
|
@@ -11491,7 +11492,8 @@ fi
|
|
|
11491
11492
|
if [[ "$LOKI_AUTO_MERGE" == "true" ]]; then
|
|
11492
11493
|
branch_current=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "")
|
|
11493
11494
|
if gh pr merge "$branch_current" --squash --delete-branch 2>/dev/null; then
|
|
11494
|
-
|
|
11495
|
+
# A brief run carries a synthetic ref (b<epoch>), not a real issue: close only numeric refs.
|
|
11496
|
+
if [[ "${LOKI_ISSUE_NUMBER:-}" =~ ^[0-9]+$ ]]; then
|
|
11495
11497
|
gh issue close "$LOKI_ISSUE_NUMBER" --comment "Resolved by Loki Mode" 2>/dev/null || true
|
|
11496
11498
|
fi
|
|
11497
11499
|
fi
|
|
@@ -11738,7 +11740,7 @@ ${_gh_receipt}"
|
|
|
11738
11740
|
if $auto_merge; then
|
|
11739
11741
|
echo -e "${GREEN}Auto-merging...${NC}"
|
|
11740
11742
|
case "${issue_provider:-github}" in
|
|
11741
|
-
github)
|
|
11743
|
+
github|brief)
|
|
11742
11744
|
local branch_current
|
|
11743
11745
|
branch_current=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "")
|
|
11744
11746
|
if gh pr merge "$branch_current" --squash --delete-branch 2>/dev/null; then
|
|
@@ -748,6 +748,27 @@ def verify_teams_signature(token, body, authorization):
|
|
|
748
748
|
return constant_time_equals(expected, value.strip())
|
|
749
749
|
|
|
750
750
|
|
|
751
|
+
def teams_dedup_key(activity):
|
|
752
|
+
"""Dedup key for a Teams activity: activity ids are unique only within a
|
|
753
|
+
conversation, so scope by conversation id plus serviceUrl and tenant when
|
|
754
|
+
present. Empty string (never deduplicated) when the activity id is absent."""
|
|
755
|
+
act_id = activity.get("id")
|
|
756
|
+
if not isinstance(act_id, str) or not act_id:
|
|
757
|
+
return ""
|
|
758
|
+
|
|
759
|
+
def _s(v):
|
|
760
|
+
return v if isinstance(v, str) else ""
|
|
761
|
+
|
|
762
|
+
conv = activity.get("conversation")
|
|
763
|
+
conv = conv if isinstance(conv, dict) else {}
|
|
764
|
+
cdata = activity.get("channelData")
|
|
765
|
+
tenant = cdata.get("tenant") if isinstance(cdata, dict) else None
|
|
766
|
+
tenant_id = _s(tenant.get("id")) if isinstance(tenant, dict) else ""
|
|
767
|
+
tenant_id = tenant_id or _s(conv.get("tenantId"))
|
|
768
|
+
return "teams:" + json.dumps(
|
|
769
|
+
[_s(conv.get("id")), _s(activity.get("serviceUrl")), tenant_id, act_id])
|
|
770
|
+
|
|
771
|
+
|
|
751
772
|
def teams_fresh(activity, now=None):
|
|
752
773
|
"""The activity's ISO-8601 `timestamp` must be within the skew window."""
|
|
753
774
|
raw = activity.get("timestamp")
|
|
@@ -1794,8 +1815,7 @@ class WebhookHandler(http.server.BaseHTTPRequestHandler):
|
|
|
1794
1815
|
"text": "Usage: @loki <brief>. One-line brief, "
|
|
1795
1816
|
"not starting with '-'."})
|
|
1796
1817
|
return
|
|
1797
|
-
|
|
1798
|
-
if self.dispatcher.seen_delivery(act_id if isinstance(act_id, str) else ""):
|
|
1818
|
+
if self.dispatcher.seen_delivery(teams_dedup_key(activity)):
|
|
1799
1819
|
self._send_json(200, {"type": "message", "text": "Duplicate, already queued."})
|
|
1800
1820
|
return
|
|
1801
1821
|
job_id = self._enqueue_job(brief, pr=True)
|
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.10.1. 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.
|
|
5
|
+
**Version:** v11.10.1
|
|
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/PROGRESS.md
CHANGED
|
@@ -2359,3 +2359,15 @@ The swarm is stopped: .loki/V10-STOP exists, the loop has no wake-ups, and the c
|
|
|
2359
2359
|
- v11.9.0 (b46960893): Tests run 38811268755 and Release 38811268450 failed: python test_trigger_server_hardening BriefPr test assumed a host provider CLI; bun static shape (engine10 outside the cli.ts arm, from ESTIMATE-ONE) and its E-12 shell twin; bun L0 guard (runner_config probes unlisted, two stale verify.ts rows); DOC-02 (docs/sentry-intake.md:56 named `loki job`). Not published; npm next stays 11.8.1.
|
|
2360
2360
|
- Fix c42d7fd22 (TL review APPROVE: 140 pass 0 fail plus 26 pass 0 fail on a git-archive copy), merged 9da6e2772.
|
|
2361
2361
|
- Guards on 9da6e2772 after dist rebuild (build rc=0): help-changelog-drift, sigpipe-guard, help-and-log-cap, ci-only-divergence, platform-infra, engine10-dispatch, docs-cli-drift, structural-checks all rc=0; pytest test_trigger_server_hardening 70 passed; bun budget, l2_destructive_registry, fc25, spawn_env, start_flag_parity, l0_guard, cli static shape 57 pass 0 fail.
|
|
2362
|
+
|
|
2363
|
+
## 2026-10-15T22:17Z (CoS) v11.10.0 train merged, release pending
|
|
2364
|
+
- 11.9.1 (9d64d1461): Release and Tests completed/success; npm next=11.9.1, latest=11.8.1; GitHub release body set.
|
|
2365
|
+
- Merged into main with --no-ff (workflow wf_2c49533d-407, all reviews APPROVE): BRIEF-SHIP-FIX fb08048ef (a5f19f4c9), TEAMS-DEDUP ae7c8a7e5 (81d06e674), BASE-AND-SUBDIR 21f7d2581 (f02699857), A-112b bfd6b98d8 (b4e63c1ff), S41-13 e3607718c after rework (eb6c8d762; dist conflict resolved by rebuild, build rc=0).
|
|
2366
|
+
- Not shipped: M-15 (Opus BLOCK at unit.ts:164, symlinked conftest.py reaches PROVEN); round 3 rework in workflow wf_1d55d32c-a65. M-17..M-29 and G-05 stay blocked on it.
|
|
2367
|
+
- Advisory to card: TEAMS-DEDUP collision test is toothless; use conv='a|b',svc='c' against conv='a',svc='b|c'.
|
|
2368
|
+
- Guards on eb6c8d762: structural-checks and bun budget failed (core engine10 5000 >= 5000; A-112b split the verify.ts git helper over three lines). Folded it back to one line, no behaviour change. After dist rebuild (build rc=0): help-changelog-drift, sigpipe-guard, help-and-log-cap, ci-only-divergence, platform-infra, engine10-dispatch, docs-cli-drift, structural-checks all rc=0; pytest test_trigger_server_hardening 74 passed; bun budget, l2_destructive_registry, l0_guard, fc25, spawn_env, start_flag_parity, cli static shape, attempts, implement, verify 131 pass 0 fail.
|
|
2369
|
+
|
|
2370
|
+
## 2026-10-15T22:37Z (CoS) v11.10.0 failed CI, v11.10.1 fix-forward
|
|
2371
|
+
- v11.10.0 (58344ed27): Tests run 38816323342 and Release failed: bun route_matrix_mutation B3 and B6 (anchor "let session = await ctx.sessions.run(first);" no longer exists after S41-13, so the mutations were not applied). Not published; npm next stays 11.9.1.
|
|
2372
|
+
- Fix: anchor updated to the S41-13 line in loki-ts/tests/engine10/route_matrix_mutation.test.ts (33 pass 0 fail); bun test tests/engine10 2037 pass 0 fail 1 skip.
|
|
2373
|
+
- M-15 round 4 (1c9a5e56a) Opus BLOCK: case-insensitive Conftest.py and symlinks under SKIP_DIRS; round 5 (class fixes) in flight.
|