loki-mode 11.71.0 → 11.71.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/dashboard/__init__.py +1 -1
- package/docs/CLI-REFERENCE.md +1 -1
- package/docs/INSTALLATION.md +1 -1
- package/docs/v10/roadmap-10/README.md +133 -7
- package/loki-ts/dist/loki.js +2 -2
- package/mcp/__init__.py +1 -1
- package/package.json +2 -2
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/web-app/dist/assets/{AdminPage-BiT0cLwQ.js → AdminPage-DrSsWukz.js} +1 -1
- package/web-app/dist/assets/{Avatar-DSxI4as6.js → Avatar-BLAMev1Z.js} +1 -1
- package/web-app/dist/assets/{Badge-CsNVRGwt.js → Badge-oj4QFAfo.js} +1 -1
- package/web-app/dist/assets/{Button-Danr8Id8.js → Button-swLM1Mkk.js} +1 -1
- package/web-app/dist/assets/{CockpitPage-BrH7eKw-.js → CockpitPage-_mIrg45l.js} +1 -1
- package/web-app/dist/assets/{ComparePage-I6o9EapR.js → ComparePage-xldxkIVR.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-CrHfaUmC.js → ErrorBoundary-Dck7MvSA.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-Bic-zXdJ.js → EvidenceReceiptPanel-B3J7WEFt.js} +1 -1
- package/web-app/dist/assets/{GitHubIssuesPanel-AsdMasyf.js → GitHubIssuesPanel-CQ1MOuEL.js} +1 -1
- package/web-app/dist/assets/{GitHubPRsPanel-BDRwwKEv.js → GitHubPRsPanel-BlP94LCI.js} +1 -1
- package/web-app/dist/assets/{HomePage-CJTtOioN.js → HomePage-PbMpYBnk.js} +2 -2
- package/web-app/dist/assets/{LoginPage-JIVkLQYa.js → LoginPage-hFC4u3Ew.js} +1 -1
- package/web-app/dist/assets/{MagicPage-BNOu4EI8.js → MagicPage-gETnhYtC.js} +1 -1
- package/web-app/dist/assets/{MetricsPage-B3zM1C1m.js → MetricsPage-xtFNIhHd.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-DBLh8qXC.js → NotFoundPage-C9RByYwT.js} +1 -1
- package/web-app/dist/assets/{ProjectPage-BDFdb9Fj.js → ProjectPage-7_WSX022.js} +3 -3
- package/web-app/dist/assets/{ProjectsPage-D94WjRFa.js → ProjectsPage-CP_v1dcv.js} +1 -1
- package/web-app/dist/assets/{SettingsPage-CvkMM5iT.js → SettingsPage-DJVijyYE.js} +1 -1
- package/web-app/dist/assets/{ShowcasePage-D6O2PqKs.js → ShowcasePage-C8VQHgh3.js} +1 -1
- package/web-app/dist/assets/{SystemSettingsPage-CcNh0RDf.js → SystemSettingsPage-BMndBa72.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-BTnlB9vQ.js → TeamsPage-L6_vCTrk.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-BDVNlobK.js → TemplatesPage-BcpvE6Bx.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-BbhmzMWZ.js → TerminalOutput-Bw0skoJu.js} +1 -1
- package/web-app/dist/assets/{activity-CzpvMfJh.js → activity-DESQcbjL.js} +1 -1
- package/web-app/dist/assets/{bell-CFe5uNCw.js → bell-Bz0bFJ7_.js} +1 -1
- package/web-app/dist/assets/{bot-Co9atvO1.js → bot-DIXiSpNv.js} +1 -1
- package/web-app/dist/assets/{check-D3zw6xf0.js → check-Ba5EfuAr.js} +1 -1
- package/web-app/dist/assets/{chevron-left-Crx6bo4v.js → chevron-left-CwCXOW1S.js} +1 -1
- package/web-app/dist/assets/{circle-alert--XExSKHo.js → circle-alert-DM6UIvoO.js} +1 -1
- package/web-app/dist/assets/{clock-COELjcX4.js → clock-q_FUpVhQ.js} +1 -1
- package/web-app/dist/assets/{cloud-C1YYttuv.js → cloud-DWq22H-f.js} +1 -1
- package/web-app/dist/assets/{code-xml-Bu_Gz2N-.js → code-xml-raCf02bQ.js} +1 -1
- package/web-app/dist/assets/{database-BtRK0egx.js → database-B3cUpv8T.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-CaDqc5Da.js → dollar-sign-hhhgF1oP.js} +1 -1
- package/web-app/dist/assets/{file-code-corner-CiDOLyIG.js → file-code-corner-B-7c5PSn.js} +1 -1
- package/web-app/dist/assets/{file-plus-BXY2rccH.js → file-plus-D0yO4Aso.js} +1 -1
- package/web-app/dist/assets/{globe-CgUnp7ir.js → globe-CgbMVh7-.js} +1 -1
- package/web-app/dist/assets/{hammer-C51wUR1B.js → hammer-BFhkxMs9.js} +1 -1
- package/web-app/dist/assets/{index-DkqOX7Z7.js → index-AbnEcRYc.js} +3 -3
- package/web-app/dist/assets/{layers-B5gYhrpd.js → layers-B3zPC7z4.js} +1 -1
- package/web-app/dist/assets/{loader-circle-BeigjxhD.js → loader-circle-CIR1Sma1.js} +1 -1
- package/web-app/dist/assets/{lock-BVUQu1ou.js → lock-B3vYtrTQ.js} +1 -1
- package/web-app/dist/assets/{package-C7y3L1uC.js → package-D6nMJfEH.js} +1 -1
- package/web-app/dist/assets/{plus-DFUI0m8Z.js → plus-BKKOL14n.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-Cc5RjW2p.js → refresh-cw-Ct8bAvZD.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-Bk-kLPsX.js → rotate-ccw-DiGIVCUA.js} +1 -1
- package/web-app/dist/assets/{scroll-text-4DceQ6It.js → scroll-text-CLEW9CU_.js} +1 -1
- package/web-app/dist/assets/{server-erFY-iD9.js → server-b0kgXbO8.js} +1 -1
- package/web-app/dist/assets/{shield-alert-Dh2woWQf.js → shield-alert-DlYXCwtz.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-DFgETaoZ.js → thumbs-up-CZe9zBO9.js} +1 -1
- package/web-app/dist/assets/{trash-2-eHsWQHfi.js → trash-2-C_qQr30K.js} +1 -1
- package/web-app/dist/assets/{trending-down-5DwF4BMm.js → trending-down-F7ALhKbc.js} +1 -1
- package/web-app/dist/assets/{trending-up-BkjfOvvM.js → trending-up-_TkFF6xq.js} +1 -1
- package/web-app/dist/assets/{upload-CSxnKVOV.js → upload-D-004cA8.js} +1 -1
- package/web-app/dist/assets/{usePolling-CYmWnlrJ.js → usePolling-B-6-M4Oi.js} +1 -1
- package/web-app/dist/assets/{user-CAbIEZrD.js → user-BQfOfFhx.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.71.
|
|
6
|
+
# Loki Mode v11.71.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
|
|
|
@@ -476,4 +476,4 @@ Implemented, planned and deprecated items, with the version each landed in: `ski
|
|
|
476
476
|
|
|
477
477
|
---
|
|
478
478
|
|
|
479
|
-
**v11.71.
|
|
479
|
+
**v11.71.1 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
11.71.
|
|
1
|
+
11.71.1
|
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.71.
|
|
3
|
+
Generated from `loki-ts/src/cli/registry.ts` by `scripts/generate-stale-zero.sh` for v11.71.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.71.
|
|
5
|
+
**Version:** v11.71.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
|
|
|
@@ -170,7 +170,7 @@ Tier follows docs/v10/OPERATING-MODEL.md: HIGH touches the moat, verifier, Seal,
|
|
|
170
170
|
| 41 | R100-041 | team | Team login for the shared Control Plane | L | HIGH | #188 (existing) |
|
|
171
171
|
| 42 | R100-042 | team | Bitbucket and Azure DevOps pull requests | M | MEDIUM | #390 |
|
|
172
172
|
| 43 | R100-043 | team | Release notes written from sealed receipts | S | LOW | #391 |
|
|
173
|
-
| 44 | R100-044 | ide | VS Code
|
|
173
|
+
| 44 | R100-044 | ide | VS Code access through the shipped MCP server: config doc and tool-list smoke test | S | LOW | #392 |
|
|
174
174
|
| 45 | R100-045 | ide | Ready-made ACP configs for Zed and JetBrains | S | LOW | #393 |
|
|
175
175
|
| 46 | R100-046 | ide | Start, status and seal commands in the Claude Code plugin | S | LOW | #394 |
|
|
176
176
|
| 47 | R100-047 | ide | Full-screen terminal UI with approve, steer and pause keys | M | LOW | #395 |
|
|
@@ -255,6 +255,7 @@ Items that reuse an existing issue carry their acceptance criteria in that issue
|
|
|
255
255
|
#### R100-003 In-place resume after a human answers a blocked question
|
|
256
256
|
|
|
257
257
|
- Issue: #358. Area: autonomy. Size: L. Tier: MEDIUM. Deps: #278, #353, journal (#283, closed).
|
|
258
|
+
- Already exists (corrected 2026-10-23): `loki answer [<run-id>]` already ships in `loki-ts/src/features/blocked_answer.ts` (D63-C4), but the answer starts a new run. This item is the in-place resume under the same run id.
|
|
258
259
|
- Problem: Today a BLOCKED engine10 run is terminal; a Slack reply starts a new follow-up run (`loki-ts/src/contrib/slack_inbound.ts` lines 2-4), so completed work is re-done and users abandon blocked runs.
|
|
259
260
|
- Feature: A blocked run parks with its journal intact. `loki answer <run> "<text>"`, a Slack thread reply, or a PR comment resumes the same run id and skips completed slices.
|
|
260
261
|
- Acceptance:
|
|
@@ -301,6 +302,7 @@ Items that reuse an existing issue carry their acceptance criteria in that issue
|
|
|
301
302
|
#### R100-007 Live run view: `loki status --follow` streams stages, edits, tests and cost
|
|
302
303
|
|
|
303
304
|
- Issue: #361. Area: speed. Size: S. Tier: LOW. Deps: event log.
|
|
305
|
+
- Already exists (corrected 2026-10-23): `loki cockpit --follow` already exists as an inline-image multi-repo view. This item is the text and JSONL stream for one run in `loki-ts/src/commands/status.ts`.
|
|
304
306
|
- Problem: During a long run users see little; they cancel runs that were progressing.
|
|
305
307
|
- Feature: `loki status --follow [--json]` prints one line per event (stage, file edited, test result, cost) and Ctrl-C detaches without stopping the run (extends `status.ts` and the event log).
|
|
306
308
|
- Acceptance:
|
|
@@ -314,6 +316,7 @@ Items that reuse an existing issue carry their acceptance criteria in that issue
|
|
|
314
316
|
#### R100-008 Background runs and one run list across repos
|
|
315
317
|
|
|
316
318
|
- Issue: #362. Area: autonomy. Size: M. Tier: MEDIUM. Deps: #232.
|
|
319
|
+
- Already exists (corrected 2026-10-23): `loki start --bg` and `--detach` already exist in `autonomy/loki`, and `loki projects` lists registered repos. This item is `loki runs`, `loki attach` and `loki runs stop` only.
|
|
317
320
|
- Problem: A run ties up the terminal; users with several repos cannot see every running build in one place.
|
|
318
321
|
- Feature: `loki start --bg` returns a run id, `loki runs` lists every run across registered projects (`loki projects`) with state, cost and verdict, and `loki attach <id>` re-joins one.
|
|
319
322
|
- Acceptance:
|
|
@@ -416,6 +419,7 @@ Items that reuse an existing issue carry their acceptance criteria in that issue
|
|
|
416
419
|
#### R100-017 Single-binary install with no node or python3 required
|
|
417
420
|
|
|
418
421
|
- Issue: #369. Area: onboarding. Size: M. Tier: MEDIUM. Deps: FR-B.
|
|
422
|
+
- Already exists (corrected 2026-10-23): `build:binary` (`bun build --compile`) already exists in `loki-ts/package.json`. This item is building and attaching the 5 targets in `.github/workflows/release.yml`.
|
|
419
423
|
- Problem: Install needs node, python3, jq, git and curl plus a provider; each missing tool is a dead end.
|
|
420
424
|
- Feature: Release attaches compiled binaries (Bun compile) so the v10 path needs only git and a provider CLI (extends FR-B).
|
|
421
425
|
- Acceptance:
|
|
@@ -428,6 +432,7 @@ Items that reuse an existing issue carry their acceptance criteria in that issue
|
|
|
428
432
|
#### R100-018 Automatic rollback on all four deploy providers
|
|
429
433
|
|
|
430
434
|
- Issue: #370. Area: deploy. Size: M. Tier: MEDIUM. Deps: DEP-B, DEP-D.
|
|
435
|
+
- Already exists (corrected 2026-10-23): `--auto-rollback` already exists on `loki start` and `loki deploy`, for Vercel and Fly only. This item adds Netlify, Cloudflare and a timed health watch.
|
|
431
436
|
- Problem: `loki rollback deploy` prints the rollback command but never runs it; a bad deploy stays live until a human acts.
|
|
432
437
|
- Feature: With `--auto-rollback`, a failed health watch after deploy runs the provider rollback, records it in the receipt, and notifies (DEP-B, DEP-D).
|
|
433
438
|
- Acceptance:
|
|
@@ -527,6 +532,7 @@ Items that reuse an existing issue carry their acceptance criteria in that issue
|
|
|
527
532
|
#### R100-027 Desktop and phone push notifications when a run needs you or finishes
|
|
528
533
|
|
|
529
534
|
- Issue: #377. Area: speed. Size: S. Tier: LOW. Deps: notify.
|
|
535
|
+
- Already exists (corrected 2026-10-23): Desktop notifications already exist on the legacy route (`send_notification` in `autonomy/run.sh`), and `loki notify` sends to slack, discord and webhook. This item adds a desktop channel and ntfy to `loki notify` and engine10.
|
|
530
536
|
- Problem: Users miss a blocked question for hours because notify only covers Slack, Discord and webhooks.
|
|
531
537
|
- Feature: Add `desktop` (macOS and Linux) and `ntfy` channels to `loki notify`, fired on blocked, done and failed.
|
|
532
538
|
- Acceptance:
|
|
@@ -539,6 +545,7 @@ Items that reuse an existing issue carry their acceptance criteria in that issue
|
|
|
539
545
|
#### R100-028 Best-of-N implement for small tasks
|
|
540
546
|
|
|
541
547
|
- Issue: #378. Area: speed. Size: M. Tier: MEDIUM. Deps: M-17 scheduler.
|
|
548
|
+
- Already exists (corrected 2026-10-23): Two parallel attempts already exist behind `LOKI_E10_ATTEMPTS=2` (default off) in `loki-ts/src/features/attempts.ts`. This item makes that the default for small tasks and records the arms in the receipt.
|
|
542
549
|
- Problem: One unlucky attempt costs a whole retry round.
|
|
543
550
|
- Feature: `LOKI_BEST_OF=2` runs 2 implementations in parallel worktrees on the cheap tier and keeps the first that seals (extends the modernize best-of-2 scheduler to start).
|
|
544
551
|
- Acceptance:
|
|
@@ -551,6 +558,7 @@ Items that reuse an existing issue carry their acceptance criteria in that issue
|
|
|
551
558
|
#### R100-029 Warm engine daemon for sub-second start
|
|
552
559
|
|
|
553
560
|
- Issue: #379. Area: speed. Size: M. Tier: MEDIUM. Deps: SPD-B.
|
|
561
|
+
- Already exists (corrected 2026-10-23): The warm engine already ships (D61): `loki-ts/src/features/warm.ts` and `warm_client.ts`, on by default. This item is limited to measuring startup overhead and a read-only `loki daemon status`; if warm p50 is already at or under 1 s, #379 closes as a duplicate of D61.
|
|
554
562
|
- Problem: Each `loki start` pays engine boot, repo map and test map cost.
|
|
555
563
|
- Feature: `loki daemon` keeps the Bun engine, repo map and test map warm per repo; `loki start` attaches when it is running.
|
|
556
564
|
- Acceptance:
|
|
@@ -718,15 +726,15 @@ Items that reuse an existing issue carry their acceptance criteria in that issue
|
|
|
718
726
|
- Metric and target: Teams using it per release; week-4 retention.
|
|
719
727
|
- Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
|
|
720
728
|
|
|
721
|
-
#### R100-044 VS Code
|
|
729
|
+
#### R100-044 VS Code access through the shipped MCP server: config doc and tool-list smoke test
|
|
722
730
|
|
|
723
|
-
- Issue: #392. Area: ide. Size:
|
|
731
|
+
- Issue: #392. Area: ide. Size: S. Tier: LOW. Deps: none.
|
|
724
732
|
- Problem: VS Code users must switch to a terminal to start, steer and read receipts.
|
|
725
|
-
- Feature:
|
|
733
|
+
- Feature: Rescoped 2026-10-23 by team-lead ruling. The deprecated `vscode-extension/` is not revived. VS Code users reach Loki through the MCP server that already ships (`mcp/server.py`), registered by `loki mcp install --client vscode`. The work is a documented VS Code MCP config and one smoke test that lists the tools over that config.
|
|
726
734
|
- Acceptance:
|
|
727
|
-
-
|
|
728
|
-
-
|
|
729
|
-
-
|
|
735
|
+
- docs/INSTALLATION.md shows the `.vscode/mcp.json` that `loki mcp install --client vscode --project` writes, and names `loki_v10_run`, `loki_v10_status` and `loki_v10_verify`.
|
|
736
|
+
- A smoke test launches the server from the written config and finds those 3 tools by name in `tools/list`.
|
|
737
|
+
- No file under `vscode-extension/` or `scripts/release.sh` changes.
|
|
730
738
|
- Metric and target: Runs per user per week for VS Code users; week-2 return rate.
|
|
731
739
|
- Competitor baseline: Claude Code: `--ide` connects to an IDE on startup (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: Codex IDE extension (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: Embedded editor in Devin Session Tools; no VS Code page in the index (https://docs.devin.ai/work-with-devin/devin-session-tools.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: IDE integrations page (https://docs.factory.com/cli/getting-started/overview (fetched 2026-10-23)).
|
|
732
740
|
|
|
@@ -1336,3 +1344,121 @@ Items that reuse an existing issue carry their acceptance criteria in that issue
|
|
|
1336
1344
|
- Problem: Clauses from documents cannot point back to their source.
|
|
1337
1345
|
- Metric and target: Clauses traced to source.
|
|
1338
1346
|
- Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
|
|
1347
|
+
|
|
1348
|
+
## Lanes and waves
|
|
1349
|
+
|
|
1350
|
+
This section is the dispatch source for Feature 100 (accepted by team-lead on 2026-10-23). It was built from the file set in every one of the 100 issue cards: the issue body for the 79 new issues, and the issue body plus comments for the 21 reused issues, all read on 2026-10-23. Test files are not counted as shared files.
|
|
1351
|
+
|
|
1352
|
+
Where the "Parallel safety" line inside an issue card disagrees with this section, this section wins. Several of those lines were written before the file sets were narrowed. For example, #357, #339 and #396 name #359 and #362 as start.ts sharers, but neither #359 nor #362 edits start.ts.
|
|
1353
|
+
|
|
1354
|
+
### Hot-spot lanes
|
|
1355
|
+
|
|
1356
|
+
Rule: each hot-spot file has exactly one live writer. The next issue in a lane starts only after the previous one has merged to main, and it rebases on main before it starts. An issue that sits in two lanes waits until both lanes reach it.
|
|
1357
|
+
|
|
1358
|
+
- `loki-ts/src/commands/start.ts`: #357, then #339, then #396, then #372.
|
|
1359
|
+
- `loki-ts/src/commands/status.ts`: #361, then #359, then #370, then #372, then #395, then #406.
|
|
1360
|
+
- `loki-ts/src/engine10/machine.ts`: #345, then #358, then #235. #345 waits for live branches pd/cw12 and pd/cw12-r2, which edit `machine.ts`, `cli.ts` and `mcp/server.py`. #358 also waits for branch pd/cw04d, which edits `blocked_answer.ts`.
|
|
1361
|
+
- `autonomy/loki` function `cmd_deploy`: #359, then #370, then #382, then #383, then #384, then #385, then #386.
|
|
1362
|
+
- `.github/actions/issue-to-pr/action.yml`: #360, then #365.
|
|
1363
|
+
|
|
1364
|
+
19 issues edit at least one hot-spot file: #235, #339, #345, #357, #358, #359, #360, #361, #365, #370, #372, #382, #383, #384, #385, #386, #395, #396, #406.
|
|
1365
|
+
|
|
1366
|
+
Three cards name a hot-spot file without editing it, so they are not in a lane. #351 says "do not touch machine.ts". #370 cites `start.ts` only as existing behavior; it is still in the status.ts and cmd_deploy lanes. #398 names `packages/control-plane/src/server/routes/start.ts`, which is a different file.
|
|
1367
|
+
|
|
1368
|
+
### Parallel-safe with respect to the hot-spot files
|
|
1369
|
+
|
|
1370
|
+
These 81 issues edit none of the five hot-spot files, in rank order: #342, #362, #363, #364, #249, #366, #367, #368, #369, #371, #351, #231, #373, #374, #375, #376, #377, #378, #379, #380, #279, #381, #387, #388, #389, #188, #390, #391, #392, #393, #394, #397, #398, #399, #248, #400, #401, #402, #403, #404, #405, #407, #408, #409, #410, #290, #411, #412, #413, #414, #267, #346, #347, #415, #416, #417, #418, #277, #278, #232, #419, #420, #421, #422, #423, #424, #425, #426, #427, #428, #429, #430, #431, #343, #432, #433, #434, #341, #340, #263, #435.
|
|
1371
|
+
|
|
1372
|
+
Parallel-safe here means safe against the hot-spot lanes only. Two of these issues can still share another file. Before two of them run at the same time, check the other shared-file lanes below.
|
|
1373
|
+
|
|
1374
|
+
### Other shared-file lanes
|
|
1375
|
+
|
|
1376
|
+
One live writer per file, in the order given.
|
|
1377
|
+
|
|
1378
|
+
- `loki-ts/src/commands/doctor.ts`: #357, #366, #290, #347, #390, #413, #414, #432.
|
|
1379
|
+
- `loki-ts/src/cli/registry.ts`: #362, #375, #379, #395, #400, #401, #430.
|
|
1380
|
+
- `loki-ts/src/engine10/events.ts`: #361, #358, #431.
|
|
1381
|
+
- `loki-ts/src/engine10/session.ts`: #358, #351, #406, #415. If pd/cw04d holds #358 up, #351 goes first.
|
|
1382
|
+
- `loki-ts/src/engine10/pr_body.ts`: #342, #359, #381, #387, #388.
|
|
1383
|
+
- `loki-ts/src/engine10/stages/pr.ts`: #231, #387, #390.
|
|
1384
|
+
- `loki-ts/src/engine10/verify_cmd.ts`: #380, #372, #434.
|
|
1385
|
+
- `loki-ts/src/engine10/supervisor.ts` and `loki-ts/src/util/slack_events.ts`: #427, #411, #406.
|
|
1386
|
+
- `loki-ts/src/runner/build_prompt.ts`: #366, #402, #432. New always-on text goes in the cache-stable prefix.
|
|
1387
|
+
- `.github/workflows/release.yml`: #369, #372.
|
|
1388
|
+
- `blocked_answer.ts`: branch pd/cw04d, #358, #363, #399, #412.
|
|
1389
|
+
- `loki-ts/src/commands/memory.ts`: #364, #389, #400, #401, #402.
|
|
1390
|
+
- `loki-ts/src/util/pr_lessons.ts`: #364, #389, #405.
|
|
1391
|
+
- `loki-ts/src/runner/router/cost_preview.ts`: #367, #374, #407, #412.
|
|
1392
|
+
- `loki-ts/src/commands/proof.ts`: #368, #434, #435.
|
|
1393
|
+
- `loki-ts/src/commands/kpis.ts` and `metrics/kpis.ts`: #371, #411, #424.
|
|
1394
|
+
- `loki-ts/src/features/visual_evidence.ts`: #249, #263, #383.
|
|
1395
|
+
- `loki-ts/src/util/redact.ts`: #384, #389, #421.
|
|
1396
|
+
- `loki-ts/src/runner/budget.ts`: #408, #411, #412.
|
|
1397
|
+
- `loki-ts/src/runner/providers.ts`: #279, #346, #277, #278.
|
|
1398
|
+
- `providers/model_routes.ts`: #267, #346, #414, #415.
|
|
1399
|
+
- `providers/model_catalog.json`: #267, #346, #416.
|
|
1400
|
+
- `providers/model_routes.sh`: #414, #415, #416.
|
|
1401
|
+
- `providers/price_table.ts`: #279, #411, #417.
|
|
1402
|
+
- `mcp/server.py`: #345, #290, #339.
|
|
1403
|
+
- Control Plane `App.tsx`: #363, #403, #423.
|
|
1404
|
+
- Control Plane `pages/run/index.tsx`: #422, #423, #425.
|
|
1405
|
+
- `autonomy/loki` dispatch rows: #367, #232, #379, #418, #419.
|
|
1406
|
+
- `autonomy/loki` `cmd_cost`: #407, #408, #409, #410.
|
|
1407
|
+
- `autonomy/loki` `cmd_next`: #374, #375.
|
|
1408
|
+
- `autonomy/loki` `cmd_template`: #404, #428.
|
|
1409
|
+
- `autonomy/loki` `cmd_notify`: #377, #424.
|
|
1410
|
+
- `autonomy/loki` `cmd_verify` and `fast_verify.py`: #380, #430.
|
|
1411
|
+
- `autonomy/notify.sh`: #377, #427, #406, #399, #424, #431.
|
|
1412
|
+
- Pairs, first one merges first: `decompose.ts` (#235, #419), `unit_mode.ts` (#235, #421), `slack_inbound.ts` (#358, #381), Control Plane `answer.ts` (#363, #399), `schemas/run-event.schema.json` (#431, #433).
|
|
1413
|
+
|
|
1414
|
+
Different functions in `autonomy/loki` can be edited in parallel, because each lane above names its own function.
|
|
1415
|
+
|
|
1416
|
+
### Waves
|
|
1417
|
+
|
|
1418
|
+
Wave 1 can start now. Each issue heads every lane it is in, and no two share a file. Each one was checked against every live branch (remote pd/* and local branches with a commit in the last 48 hours) with `git cherry origin/main <branch>` and `git log origin/main..<branch> --name-only`, on 2026-10-23. Dispatch in this order as seats free up:
|
|
1419
|
+
|
|
1420
|
+
- #357: already dispatched (pd/r100-001). `doctor_fix.ts` is touched only by its own branch. `doctor.ts` is also touched by 14 live branches (pd/286, pd/315, pd/316, pd/316-rb, pd/329, pd/330, pd/bunentry, pd/bunentry-rb, pd/bunsib, pd/mcpchain, pd/mcpchain-r2, pd/mcpchain-r3, pd/rq04, pd/w2-33), so rebase before review.
|
|
1421
|
+
- #342, #360, #364, #368, #231, #422: no live branch touches any of their files.
|
|
1422
|
+
- #361: no file overlap. Its card names `autonomy/loki` only as existing behavior (`cmd_cockpit`); its edits are in `status.ts` and `events.ts`.
|
|
1423
|
+
- #362: the only overlap is `autonomy/loki`. The live branches there edit `_loki_airgap_audit`, `cmd_bench` and `_loki_start_optval_consumes`. #362 adds dispatch rows and reads `cmd_projects`, so the hunks do not overlap.
|
|
1424
|
+
|
|
1425
|
+
Wave 2. Each issue starts after the merges named:
|
|
1426
|
+
|
|
1427
|
+
- #345: after pd/cw12 and pd/cw12-r2 (`machine.ts`, `cli.ts`, `mcp/server.py`), pd/328 (`cli.ts`), and pd/257p2, pd/257rb, pd/319e, pd/319fix (`mcp/server.py`).
|
|
1428
|
+
- #249: after the live `stages/verify.ts` branches: pd/237r10, pd/237r9, pd/partial-harness, pd/wallfile, pd/wallfile-r2, pd/wallgo, pd/wallgo-r2, pd/wallnorunner, pd/wallrust, pd/wallrust-r2, pd/weaktest.
|
|
1429
|
+
- #367: after the live `benchmarks/bench/run.sh` and `runner.py` branches: pd/246fix2, pd/claim, pd/claim-100x, pd/cw15, pd/fd1b, pd/resumecost, pd/resumecost2, pd/resumecost3, pd/traptasks2, pd/trusttime, pd/trusttime-r2, pd/verifyh2h.
|
|
1430
|
+
- #369: after pd/cw01b and pd/cw01c (`release.yml`).
|
|
1431
|
+
- #371: after pd/252b and pd/252b-r (`metrics/kpis.ts`).
|
|
1432
|
+
- #358: after #345, #361 and branch pd/cw04d.
|
|
1433
|
+
- #359: after #361 and #342.
|
|
1434
|
+
- #365: after #360.
|
|
1435
|
+
- #366: after #357.
|
|
1436
|
+
- #370: after #359.
|
|
1437
|
+
- #235: after #358.
|
|
1438
|
+
- #363: after #358.
|
|
1439
|
+
- #372: after #369, #357 and #370.
|
|
1440
|
+
|
|
1441
|
+
Held: #398 depends on open issue #188 (dashboard authn/authz), so it is not a wave-1 head.
|
|
1442
|
+
|
|
1443
|
+
Before dispatching any wave-2 issue, re-run the live-branch check for its files; branches named above may have merged or new ones may have started.
|
|
1444
|
+
|
|
1445
|
+
After wave 2, pull any issue whose lanes are free, following the lane orders above.
|
|
1446
|
+
|
|
1447
|
+
### Wave-1 assignments
|
|
1448
|
+
|
|
1449
|
+
Checked on 2026-10-23 at 06:50Z against `gh issue view` comments and origin branches. None of these issues has a GitHub assignee, so claims come from issue comments or team-lead dispatch. "Behind" counts commits on origin/main that the branch lacks.
|
|
1450
|
+
|
|
1451
|
+
| Issue | Item | Engineer | Branch | Reviewer | Tier | State |
|
|
1452
|
+
|---|---|---|---|---|---|---|
|
|
1453
|
+
| #357 | R100-001 | eng-mcpchain | pd/r100-001 9feace648 (1 ahead, 16 behind) | unset | MEDIUM | Needs rebase. Criterion 3 NOT MET on both the branch and its base 3f6e07547 (issue comment 06:39Z); the PARTIAL predates the change. |
|
|
1454
|
+
| #342 | R100-006 | eng-r237 | none | unset | HIGH | Waiting on CW-04 (#337), which is OPEN with no commit on main. Ruling comment 06:39Z. |
|
|
1455
|
+
| #360 | R100-005 | unowned | none | unset | HIGH | No claim comment, no branch. Free to assign. |
|
|
1456
|
+
| #364 | R100-011 | eng-tmo | pd/364a fee344a42 (1 ahead, 8 behind); pd/364b 808c40cab stacked on (a) | tl-324 | MEDIUM | In review. Criteria tally comment 06:45Z; merge-tree rc=0 against origin/main 0a6ae7cb6. |
|
|
1457
|
+
| #368 | R100-016 | eng-318r | none | rev-b | HIGH | Dispatched by team-lead. No claim comment or branch yet. |
|
|
1458
|
+
| #231 | R100-022 | eng-tmo | none | tl-324 | MEDIUM | Dispatched by team-lead. Only the slice card comment (06:14Z); no claim comment or branch yet. |
|
|
1459
|
+
| #422 | R100-082 | eng-351 | none | unset | LOW | Starts after the loadaware fix. No claim comment or branch yet. |
|
|
1460
|
+
| #361 | R100-007 | eng-cw01 | pd/361 ece154741 (1 ahead, 11 behind) | tl-324 | LOW | In review. No claim comment on the issue. |
|
|
1461
|
+
| #362 | R100-008 slice (a) | eng-mcpchain | pd/r100-008a 861656d44 (1 ahead, 8 behind) | unset | MEDIUM | Claimed in comment 06:46Z after eng-r237 released it. Slice (b) unowned. |
|
|
1462
|
+
| #249 | R100-013 slice (a) | eng-r237 | pd/249a 721db86f3 (1 ahead, 0 behind) | rev-c | HIGH | In review. Slice (a) edits only `visual_evidence.ts`, which team-lead cleared out of wave 2. Slice (b) stays in wave 2 behind the `stages/verify.ts` branches. |
|
|
1463
|
+
|
|
1464
|
+
Unowned: #360, #362 slice (b) and #249 slice (b). No reviewer yet: #357, #342, #360, #362 and #422.
|
package/loki-ts/dist/loki.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var dh0=Object.create;var{getPrototypeOf:lh0,defineProperty:pK,getOwnPropertyNames:Mn,getOwnPropertyDescriptor:ah0}=Object,On=Object.prototype.hasOwnProperty;function An(Z){return this[Z]}var ih0,oh0,nh0=(Z,$,J)=>{var X=Z!=null&&typeof Z==="object";if(X){var Y=$?ih0??=new WeakMap:oh0??=new WeakMap,Q=Y.get(Z);if(Q)return Q}J=Z!=null?dh0(lh0(Z)):{};let z=$||!Z||!Z.__esModule?pK(J,"default",{value:Z,enumerable:!0}):J;for(let W of Mn(Z))if(!On.call(z,W))pK(z,W,{get:An.bind(Z,W),enumerable:!0});if(X)Y.set(Z,z);return z},sh0=(Z)=>{var $=(Nn??=new WeakMap).get(Z),J;if($)return $;if($=pK({},"__esModule",{value:!0}),Z&&typeof Z==="object"||typeof Z==="function"){for(var X of Mn(Z))if(!On.call($,X))pK($,X,{get:An.bind(Z,X),enumerable:!(J=ah0(Z,X))||J.enumerable})}return Nn.set(Z,$),$},Nn,UM=(Z,$)=>()=>($||Z(($={exports:{}}).exports,$),$.exports);var rh0=(Z)=>Z;function th0(Z,$){this[Z]=rh0.bind(null,$)}var j0=(Z,$)=>{for(var J in $)pK(Z,J,{get:$[J],enumerable:!0,configurable:!0,set:th0.bind($,J)})};var S=(Z,$)=>()=>(Z&&($=Z(Z=0)),$);var e9=import.meta.require;var jn={};j0(jn,{lokiDirFor:()=>NM,lokiDir:()=>D0,homeLokiDir:()=>T2,findRepoRootForVersion:()=>cK,REPO_ROOT:()=>F0});import{resolve as wZ,dirname as iE}from"path";import{fileURLToPath as eh0}from"url";import{existsSync as BM}from"fs";import{homedir as Zf0}from"os";function $f0(){let Z=Ln;for(let $=0;$<6;$++){if(BM(wZ(Z,"VERSION"))&&BM(wZ(Z,"autonomy/run.sh")))return Z;let J=iE(Z);if(J===Z)break;Z=J}return wZ(Ln,"..","..","..")}function cK(Z){let $=Z;for(let J=0;J<6;J++){if(BM(wZ($,"VERSION"))&&BM(wZ($,"autonomy/run.sh")))return $;let X=iE($);if(X===$)break;$=X}return wZ(Z,"..","..","..")}function NM(Z){return process.env.LOKI_DIR??wZ(Z,".loki")}function D0(){return NM(process.cwd())}function T2(){return wZ(Zf0(),".loki")}var Ln,F0;var s0=S(()=>{Ln=iE(eh0(import.meta.url));F0=$f0()});import{readFileSync as Jf0}from"fs";import{resolve as Xf0,dirname as Yf0}from"path";import{fileURLToPath as Qf0}from"url";function O6(){if(g1!==null)return g1;let Z="11.71.
|
|
2
|
+
var dh0=Object.create;var{getPrototypeOf:lh0,defineProperty:pK,getOwnPropertyNames:Mn,getOwnPropertyDescriptor:ah0}=Object,On=Object.prototype.hasOwnProperty;function An(Z){return this[Z]}var ih0,oh0,nh0=(Z,$,J)=>{var X=Z!=null&&typeof Z==="object";if(X){var Y=$?ih0??=new WeakMap:oh0??=new WeakMap,Q=Y.get(Z);if(Q)return Q}J=Z!=null?dh0(lh0(Z)):{};let z=$||!Z||!Z.__esModule?pK(J,"default",{value:Z,enumerable:!0}):J;for(let W of Mn(Z))if(!On.call(z,W))pK(z,W,{get:An.bind(Z,W),enumerable:!0});if(X)Y.set(Z,z);return z},sh0=(Z)=>{var $=(Nn??=new WeakMap).get(Z),J;if($)return $;if($=pK({},"__esModule",{value:!0}),Z&&typeof Z==="object"||typeof Z==="function"){for(var X of Mn(Z))if(!On.call($,X))pK($,X,{get:An.bind(Z,X),enumerable:!(J=ah0(Z,X))||J.enumerable})}return Nn.set(Z,$),$},Nn,UM=(Z,$)=>()=>($||Z(($={exports:{}}).exports,$),$.exports);var rh0=(Z)=>Z;function th0(Z,$){this[Z]=rh0.bind(null,$)}var j0=(Z,$)=>{for(var J in $)pK(Z,J,{get:$[J],enumerable:!0,configurable:!0,set:th0.bind($,J)})};var S=(Z,$)=>()=>(Z&&($=Z(Z=0)),$);var e9=import.meta.require;var jn={};j0(jn,{lokiDirFor:()=>NM,lokiDir:()=>D0,homeLokiDir:()=>T2,findRepoRootForVersion:()=>cK,REPO_ROOT:()=>F0});import{resolve as wZ,dirname as iE}from"path";import{fileURLToPath as eh0}from"url";import{existsSync as BM}from"fs";import{homedir as Zf0}from"os";function $f0(){let Z=Ln;for(let $=0;$<6;$++){if(BM(wZ(Z,"VERSION"))&&BM(wZ(Z,"autonomy/run.sh")))return Z;let J=iE(Z);if(J===Z)break;Z=J}return wZ(Ln,"..","..","..")}function cK(Z){let $=Z;for(let J=0;J<6;J++){if(BM(wZ($,"VERSION"))&&BM(wZ($,"autonomy/run.sh")))return $;let X=iE($);if(X===$)break;$=X}return wZ(Z,"..","..","..")}function NM(Z){return process.env.LOKI_DIR??wZ(Z,".loki")}function D0(){return NM(process.cwd())}function T2(){return wZ(Zf0(),".loki")}var Ln,F0;var s0=S(()=>{Ln=iE(eh0(import.meta.url));F0=$f0()});import{readFileSync as Jf0}from"fs";import{resolve as Xf0,dirname as Yf0}from"path";import{fileURLToPath as Qf0}from"url";function O6(){if(g1!==null)return g1;let Z="11.71.1";if(typeof Z==="string"&&Z.length>0)return g1=Z,g1;try{let $=Yf0(Qf0(import.meta.url)),J=cK($);g1=Jf0(Xf0(J,"VERSION"),"utf-8").trim()}catch{g1="unknown"}return g1}var g1=null;var _Z=S(()=>{s0()});import{mkdirSync as nE,readFileSync as MM,realpathSync as zf0,statSync as Wf0,writeFileSync as sE}from"fs";import{dirname as MY,join as oE,resolve as Cn}from"path";function qf0(){return Cn(T2(),"cache","update-check.json")}function xZ(Z){let $=/^(\d+)\.(\d+)\.(\d+)$/.exec(Z.trim());if(!$)return null;return[Number($[1]),Number($[2]),Number($[3])]}function dK(Z,$){let J=xZ(Z),X=xZ($);if(!J||!X)return!1;let[Y,Q,z]=J,[W,K,V]=X;if(Y!==W)return Y>W;if(Q!==K)return Q>K;return z>V}function Fn(){let Z=(process.env.LOKI_NO_UPDATE_CHECK??"").trim().toLowerCase();if(Z==="1"||Z==="true"||Z==="yes")return!0;if(process.env.CI)return!0;if(!process.stdout.isTTY)return!0;return!1}function In(Z){try{let $=MM(Z,"utf-8"),J=JSON.parse($);if(typeof J.checkedAt==="number"&&typeof J.latest==="string"&&xZ(J.latest)!==null)return{checkedAt:J.checkedAt,latest:J.latest}}catch{}return null}function Uf0(Z){try{let $=JSON.parse(MM(Z,"utf-8")).failedAt;if(typeof $==="number")return $}catch{}return null}function Bf0(Z,$){let J=In(Z);try{nE(MY(Z),{recursive:!0}),sE(Z,JSON.stringify({...J??{},failedAt:$}),"utf-8")}catch{}}function Nf0(Z,$){try{nE(MY(Z),{recursive:!0}),sE(Z,JSON.stringify($),"utf-8")}catch{}}async function Mf0(){try{let Z=await fetch(Kf0,{signal:AbortSignal.timeout(Gf0),headers:{accept:"application/json"}});if(!Z.ok)return null;let $=await Z.json();if(typeof $.version==="string"&&xZ($.version)!==null)return $.version}catch{}return null}async function Of0(Z=Date.now(),$=Mf0,J=qf0()){let X=In(J);if(X&&Z-X.checkedAt<Vf0)return X.latest;let Y=Uf0(J);if(Y!==null&&Z-Y>=0&&Z-Y<Hf0)return null;let Q=await $();if(Q===null)return Bf0(J,Z),null;return Nf0(J,{checkedAt:Z,latest:Q}),Q}function Af0(Z,$=process.env){if(xZ(Z)===null)return null;let X=$.PATH;if(!X)return null;let Y=new Set;for(let Q of X.split(":")){if(!Q)continue;let z=oE(Q,"loki"),W;try{Wf0(z),W=zf0(z)}catch{continue}if(Y.has(W))continue;Y.add(W);try{let K=oE(MY(MY(W)),"package.json"),V=JSON.parse(MM(K,"utf8")).version;if(typeof V!=="string")continue;if(dK(V,Z))return{path:z,version:V}}catch{continue}}return null}function Lf0(){return Cn(T2(),"cache","last-seen-version.json")}function jf0(Z,$={}){try{if(Fn())return!1;if(xZ(Z)===null)return!1;let J=$.seenFile??Lf0(),X=null;try{let Q=JSON.parse(MM(J,"utf-8")).version;if(typeof Q==="string"&&xZ(Q)!==null)X=Q}catch{}if(X!==null&&!dK(Z,X))return!1;try{nE(MY(J),{recursive:!0}),sE(J,JSON.stringify({version:Z}),"utf-8")}catch{return!1}if(X===null)return!1;return($.write??((Q)=>process.stderr.write(Q)))(`Loki Mode upgraded ${X} -> ${Z}. What is new: https://github.com/asklokesh/loki-mode/releases/tag/v${Z}
|
|
3
3
|
`),!0}catch{return!1}}function Cf0(Z){let $=Z.replace(/\\/g,"/");if($.includes("/Cellar/"))return"brew upgrade loki-mode";if(/\/pnpm\//.test($)||$.includes("/.pnpm/"))return"pnpm add -g loki-mode (or npm i -g loki-mode)";if($.includes("/yarn/global/")||$.includes("/.yarn/"))return"yarn global add loki-mode (or npm i -g loki-mode)";if($.includes("/.bun/"))return"bun install -g loki-mode (or npm i -g loki-mode)";if($.includes("/lib/node_modules/"))return"npm i -g loki-mode (or bun install -g loki-mode)";if($.includes("/homebrew/"))return"brew upgrade loki-mode";return"bun install -g loki-mode (or npm i -g loki-mode)"}async function Tn(Z,$={}){try{if(Fn())return;if(xZ(Z)===null)return;let J=$.write??((Q)=>process.stderr.write(Q));jf0(Z,{write:J,...$.cacheFile?{seenFile:oE(MY($.cacheFile),"last-seen-version.json")}:{}});let X=Af0(Z,$.env??process.env);if(X!==null){J(`Loki Mode ${X.version} is installed but not the one running (you are running ${Z}).
|
|
4
4
|
Another loki earlier on PATH is winning. Newer copy: ${X.path}
|
|
5
5
|
Run \`which -a loki\` to see the order, then remove or re-point the earlier entry.
|
|
@@ -3307,4 +3307,4 @@ Unknown commands exit 2 with a suggestion; run 'loki help' for the full list.
|
|
|
3307
3307
|
`);{let{suggestCommand:X}=await Promise.resolve().then(() => (W7(),Ys)),Y=$===void 0?void 0:X($);if(Y)process.stderr.write(`Did you mean 'loki ${Y}'?
|
|
3308
3308
|
`)}return process.stderr.write(hh0),2}}LT0();var fh0=()=>globalThis[Symbol.for("loki.ownsStopSignals")]===!0;process.on("SIGINT",()=>{if(!fh0())process.exit(130)});process.on("SIGTERM",()=>{if(!fh0())process.exit(143)});var PM9=await TM9(Bun.argv.slice(2));process.exit(PM9);
|
|
3309
3309
|
|
|
3310
|
-
//# debugId=
|
|
3310
|
+
//# debugId=D11F43A1455860520B797A12A18D12A6
|
package/mcp/__init__.py
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "loki-mode",
|
|
3
3
|
"mcpName": "io.github.asklokesh/loki-mode",
|
|
4
|
-
"version": "11.71.
|
|
4
|
+
"version": "11.71.1",
|
|
5
5
|
"description": "An autonomous software factory that knows what it is supposed to deliver, and proves it did.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"agent",
|
|
@@ -160,5 +160,5 @@
|
|
|
160
160
|
"dependencies": {
|
|
161
161
|
"@resvg/resvg-wasm": "^2.6.2"
|
|
162
162
|
},
|
|
163
|
-
"gitHead": "
|
|
163
|
+
"gitHead": "c9f17860a70613edc14143269dcd8a1cda0ef910"
|
|
164
164
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
3
3
|
"name": "loki-mode",
|
|
4
4
|
"displayName": "Loki Mode",
|
|
5
|
-
"version": "11.71.
|
|
5
|
+
"version": "11.71.1",
|
|
6
6
|
"description": "Autonomous spec-to-product build system with a built-in trust layer (RARV-C closure loop, 8 quality gates, completion council). Ships Loki's spec-hardening, drift-detection, and deterministic PR verification commands plus the Loki MCP server.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Autonomi",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as L,r as x,j as e,w as re,Z as ne,m as le,h as ie,p as P,F as ye,U as I,X as ce,L as de,x as oe,M as Ae,T as Z,S as we,l as xe,k as me,y as Ce,E as Fe,a0 as Se,a as U,a2 as he}from"./index-
|
|
1
|
+
import{c as L,r as x,j as e,w as re,Z as ne,m as le,h as ie,p as P,F as ye,U as I,X as ce,L as de,x as oe,M as Ae,T as Z,S as we,l as xe,k as me,y as Ce,E as Fe,a0 as Se,a as U,a2 as he}from"./index-AbnEcRYc.js";import{B as C}from"./Button-swLM1Mkk.js";import{T as $e}from"./trending-up-_TkFF6xq.js";import{C as z}from"./clock-q_FUpVhQ.js";import{A as Be,U as ue,M as De}from"./Avatar-BLAMev1Z.js";import{A as J}from"./activity-DESQcbjL.js";import{R as pe}from"./refresh-cw-Ct8bAvZD.js";import{G as ze}from"./globe-CgbMVh7-.js";import{C as Le}from"./chevron-left-CwCXOW1S.js";import{C as je}from"./check-Ba5EfuAr.js";import{D as Y}from"./dollar-sign-hhhgF1oP.js";import{U as Te}from"./user-BQfOfFhx.js";import{D as Me}from"./database-B3cUpv8T.js";import{L as Ue}from"./lock-B3vYtrTQ.js";import{S as Re}from"./scroll-text-CLEW9CU_.js";import{S as Ie}from"./shield-alert-DlYXCwtz.js";/**
|
|
2
2
|
* @license lucide-react v0.577.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as e}from"./index-
|
|
1
|
+
import{j as e}from"./index-AbnEcRYc.js";import{C as r}from"./clock-q_FUpVhQ.js";import{C as a}from"./circle-alert-DM6UIvoO.js";import{C as l}from"./check-Ba5EfuAr.js";const i={completed:"bg-[#1FC5A8]/10 text-[#1FC5A8]",running:"bg-[#553DE9]/10 text-[#553DE9]",failed:"bg-[#C45B5B]/10 text-[#C45B5B]",started:"bg-[#D4A03C]/10 text-[#D4A03C]",empty:"bg-[#F8F4F0] text-[#6B6960]",version:"bg-[#553DE9]/10 text-[#553DE9]"};function o({status:t}){switch(t){case"completed":return e.jsx(l,{size:12});case"running":return e.jsxs("span",{className:"relative flex h-2 w-2",children:[e.jsx("span",{className:"animate-ping motion-reduce:animate-none absolute inline-flex h-full w-full rounded-full bg-current opacity-75"}),e.jsx("span",{className:"relative inline-flex rounded-full h-2 w-2 bg-current"})]});case"failed":return e.jsx(a,{size:12});case"started":return e.jsx(r,{size:12});default:return null}}function f({status:t,children:n,className:s=""}){return e.jsxs("span",{className:["inline-flex items-center gap-1 rounded-btn px-2.5 py-0.5 text-xs font-semibold",i[t],s].filter(Boolean).join(" "),children:[e.jsx(o,{status:t}),n]})}export{f as B};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as p,j as t}from"./index-
|
|
1
|
+
import{r as p,j as t}from"./index-AbnEcRYc.js";const m={primary:"bg-[#553DE9] text-white hover:bg-[#4432c4] shadow-button rounded-btn",secondary:"border border-[#553DE9] text-[#553DE9] hover:bg-[#E8E4FD] bg-transparent rounded-btn",ghost:"text-[#36342E] hover:bg-[#F8F4F0] rounded-btn",danger:"bg-[#C45B5B]/10 text-[#C45B5B] border border-[#C45B5B]/20 hover:bg-[#C45B5B]/20 rounded-btn"},b={sm:"px-3 py-1.5 text-xs",md:"px-4 py-2 text-sm",lg:"px-6 py-3 text-base"},u={sm:14,md:16,lg:18};function h({size:e}){return t.jsxs("svg",{className:"animate-spin",width:e,height:e,viewBox:"0 0 24 24",fill:"none",children:[t.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),t.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"})]})}const B=p.forwardRef(({variant:e="primary",size:o="md",icon:n,iconRight:i,loading:r=!1,disabled:a,className:c="",children:l,...x},d)=>{const s=u[o];return t.jsxs("button",{ref:d,disabled:a||r,className:["inline-flex items-center justify-center gap-2 font-medium transition-colors",m[e],b[o],(a||r)&&"opacity-60 cursor-not-allowed",c].filter(Boolean).join(" "),...x,children:[r?t.jsx(h,{size:s}):n?t.jsx(n,{size:s}):null,l,i&&!r&&t.jsx(i,{size:s})]})});B.displayName="Button";export{B};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as $,r as l,j as e,G as we,Q as Se,F as Ce,h as Re,T as U,Z as Ee,a as S,V as Me,S as $e,Y as Te,X as Pe,P as ie,i as Ae,g as ze,C as Ie,l as Le,N as I,J as _e,K as De,O as Fe,u as Oe}from"./index-
|
|
1
|
+
import{c as $,r as l,j as e,G as we,Q as Se,F as Ce,h as Re,T as U,Z as Ee,a as S,V as Me,S as $e,Y as Te,X as Pe,P as ie,i as Ae,g as ze,C as Ie,l as Le,N as I,J as _e,K as De,O as Fe,u as Oe}from"./index-AbnEcRYc.js";import{P as K,S as He,E as Be}from"./ErrorBoundary-Dck7MvSA.js";import{C as qe,F as Ge,M as Ue,H as Ke,a as We,G as Ve,T as Qe}from"./thumbs-up-CZe9zBO9.js";import{C as oe}from"./check-Ba5EfuAr.js";import{C as Ye}from"./clock-q_FUpVhQ.js";import{D as Xe}from"./dollar-sign-hhhgF1oP.js";import{U as Ze}from"./upload-D-004cA8.js";import{L as V}from"./loader-circle-CIR1Sma1.js";/**
|
|
2
2
|
* @license lucide-react v0.577.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as o,j as e}from"./index-DkqOX7Z7.js";function f({value:r,prefix:t="",suffix:s=""}){const[u,n]=o.useState(0),c=o.useRef(0);return o.useEffect(()=>{const a=c.current,h=r-a;if(h===0)return;const i=600,d=performance.now();function l(b){const v=b-d,m=Math.min(v/i,1),N=1-Math.pow(1-m,3),p=Math.round(a+h*N);n(p),c.current=p,m<1&&requestAnimationFrame(l)}requestAnimationFrame(l)},[r]),e.jsxs("span",{className:"tabular-nums",children:[t,u.toLocaleString(),s]})}function g(){const[r,t]=o.useState(5),[s,u]=o.useState(30),[n,c]=o.useState(75),a=.4,i=Math.round(r*s*a*4.33),d=Math.round(i*n);return e.jsxs("div",{className:"bg-white border border-[#ECEAE3] rounded-xl p-6 shadow-sm",children:[e.jsx("h3",{className:"text-lg font-bold text-[#36342E] mb-1",children:"ROI Calculator"}),e.jsx("p",{className:"text-sm text-[#6B6960] mb-6",children:"Estimate how much your team could save with autonomous development."}),e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("label",{className:"text-sm font-medium text-[#36342E]",children:"Team size"}),e.jsxs("span",{className:"text-sm font-semibold text-[#553DE9] tabular-nums",children:[r," developers"]})]}),e.jsx("input",{type:"range",min:1,max:50,value:r,onChange:l=>t(Number(l.target.value)),className:"w-full h-2 bg-[#ECEAE3] rounded-full appearance-none cursor-pointer accent-[#553DE9]"}),e.jsxs("div",{className:"flex justify-between text-xs text-[#939084] mt-1",children:[e.jsx("span",{children:"1"}),e.jsx("span",{children:"50"})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("label",{className:"text-sm font-medium text-[#36342E]",children:"Hours coding per week"}),e.jsxs("span",{className:"text-sm font-semibold text-[#553DE9] tabular-nums",children:[s,"h"]})]}),e.jsx("input",{type:"range",min:5,max:60,value:s,onChange:l=>u(Number(l.target.value)),className:"w-full h-2 bg-[#ECEAE3] rounded-full appearance-none cursor-pointer accent-[#553DE9]"}),e.jsxs("div",{className:"flex justify-between text-xs text-[#939084] mt-1",children:[e.jsx("span",{children:"5h"}),e.jsx("span",{children:"60h"})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("label",{className:"text-sm font-medium text-[#36342E]",children:"Average hourly rate"}),e.jsxs("span",{className:"text-sm font-semibold text-[#553DE9] tabular-nums",children:["$",n,"/hr"]})]}),e.jsx("input",{type:"range",min:25,max:250,step:5,value:n,onChange:l=>c(Number(l.target.value)),className:"w-full h-2 bg-[#ECEAE3] rounded-full appearance-none cursor-pointer accent-[#553DE9]"}),e.jsxs("div",{className:"flex justify-between text-xs text-[#939084] mt-1",children:[e.jsx("span",{children:"$25"}),e.jsx("span",{children:"$250"})]})]})]}),e.jsxs("div",{className:"mt-6 pt-6 border-t border-[#ECEAE3]",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4 text-center",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-2xl font-bold text-[#553DE9]",children:e.jsx(f,{value:i,suffix:"h"})}),e.jsx("div",{className:"text-xs text-[#6B6960] mt-1",children:"Est. hours saved / month"})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-2xl font-bold text-[#1FC5A8]",children:e.jsx(f,{value:d,prefix:"$"})}),e.jsx("div",{className:"text-xs text-[#6B6960] mt-1",children:"Est. cost saved / month"})]})]}),e.jsxs("div",{className:"mt-4 p-3 rounded-lg bg-[#553DE9]/5 border border-[#553DE9]/10",children:[e.jsxs("p",{className:"text-sm text-[#36342E] text-center",children:["If Loki Mode saved ",Math.round(a*100),"% of coding time, your team could save"," ",e.jsxs("span",{className:"font-bold text-[#553DE9]",children:[i.toLocaleString()," hours"]})," ","and"," ",e.jsxs("span",{className:"font-bold text-[#1FC5A8]",children:["$",d.toLocaleString()]})," ","per month."]}),e.jsxs("p",{className:"mt-2 text-xs text-[#6B6960] text-center",children:["The ",Math.round(a*100),"% is an assumption, not a measurement. Model and API spend is not included."]})]})]})]})}const j=[{feature:"Claude (Opus/Sonnet/Haiku)",category:"AI Models",lokiMode:!0,boltNew:!1,replit:!1,lovable:!0},{feature:"GPT-4o / Codex",category:"AI Models",lokiMode:!0,boltNew:!0,replit:!0,lovable:!1},{feature:"5-provider auto-failover",category:"AI Models",lokiMode:!0,boltNew:!1,replit:!1,lovable:!1},{feature:"8 automated quality gates",category:"Quality",lokiMode:!0,boltNew:!1,replit:!1,lovable:!1},{feature:"Blind 3-reviewer code review",category:"Quality",lokiMode:!0,boltNew:!1,replit:!1,lovable:!1},{feature:"Anti-sycophancy checks",category:"Quality",lokiMode:!0,boltNew:!1,replit:!1,lovable:!1},{feature:"Automated test generation",category:"Quality",lokiMode:!0,boltNew:!1,replit:"Partial",lovable:!1},{feature:"Docker container generation",category:"Deployment",lokiMode:!0,boltNew:!1,replit:!0,lovable:!1},{feature:"CI/CD pipeline generation",category:"Deployment",lokiMode:!0,boltNew:!1,replit:!1,lovable:!1},{feature:"One-click cloud deploy",category:"Deployment",lokiMode:"Planned",boltNew:!0,replit:!0,lovable:!0},{feature:"Self-hosted (your keys)",category:"Cost",lokiMode:!0,boltNew:!1,replit:!1,lovable:!1},{feature:"Free tier available",category:"Cost",lokiMode:"Source-available (BUSL-1.1)",boltNew:!0,replit:!0,lovable:!0},{feature:"No vendor lock-in",category:"Cost",lokiMode:!0,boltNew:!1,replit:!1,lovable:!1},{feature:"SSO / OIDC authentication",category:"Enterprise",lokiMode:!0,boltNew:!1,replit:!0,lovable:!1},{feature:"RBAC access control",category:"Enterprise",lokiMode:!0,boltNew:!1,replit:!0,lovable:!1},{feature:"Audit logging",category:"Enterprise",lokiMode:!0,boltNew:!1,replit:!0,lovable:!1},{feature:"Air-gapped deployment",category:"Enterprise",lokiMode:!0,boltNew:!1,replit:!1,lovable:!1}];function y(){return e.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",className:"text-[#1FC5A8]",children:e.jsx("path",{d:"M20 6L9 17l-5-5",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function w(){return e.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",className:"text-[#C45B5B]/40",children:e.jsx("path",{d:"M18 6L6 18M6 6l12 12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function x({value:r}){return typeof r=="string"?e.jsx("span",{className:"text-xs text-[#6B6960] font-medium",children:r}):r?e.jsx(y,{}):e.jsx(w,{})}const k=[{title:"Full Autonomy",description:"Describe what you want. Loki Mode handles planning, coding, testing, and verification automatically.",icon:e.jsx("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",className:"text-[#553DE9]",children:e.jsx("path",{d:"M13 2L3 14h9l-1 8 10-12h-9l1-8z",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})},{title:"Production Quality",description:"8 quality gates, blind code review, and anti-sycophancy checks ensure code that actually works.",icon:e.jsx("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",className:"text-[#1FC5A8]",children:e.jsx("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})},{title:"Your Infrastructure",description:"Self-hosted, source-available (BUSL-1.1), no data leaves your network. Use your own API keys across 5 providers.",icon:e.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",className:"text-[#2F71E3]",children:[e.jsx("rect",{x:"2",y:"2",width:"20",height:"8",rx:"2",stroke:"currentColor",strokeWidth:"2"}),e.jsx("rect",{x:"2",y:"14",width:"20",height:"8",rx:"2",stroke:"currentColor",strokeWidth:"2"}),e.jsx("circle",{cx:"6",cy:"6",r:"1",fill:"currentColor"}),e.jsx("circle",{cx:"6",cy:"18",r:"1",fill:"currentColor"})]})},{title:"Built for Teams",description:"Enterprise auth, RBAC, audit logs, and parallel workflows for teams of any size.",icon:e.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",className:"text-[#E93D82]",children:[e.jsx("path",{d:"M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}),e.jsx("circle",{cx:"9",cy:"7",r:"4",stroke:"currentColor",strokeWidth:"2"}),e.jsx("path",{d:"M23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]})}];function C(){const r=[...new Set(j.map(t=>t.category))];return e.jsx("div",{className:"min-h-screen bg-[#FAF9F6]",children:e.jsxs("div",{className:"max-w-6xl mx-auto px-6 py-8",children:[e.jsxs("div",{className:"mb-8",children:[e.jsx("h1",{className:"text-2xl font-bold text-[#36342E]",children:"Compare"}),e.jsx("p",{className:"text-[#6B6960] mt-1",children:"See how Loki Mode stacks up against other AI development platforms."})]}),e.jsx("div",{className:"bg-white border border-[#ECEAE3] rounded-xl overflow-hidden shadow-sm",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-[#ECEAE3]",children:[e.jsx("th",{className:"text-left px-4 py-3 font-medium text-[#6B6960] w-[240px]",children:"Feature"}),e.jsx("th",{className:"text-center px-4 py-3 font-bold text-[#553DE9] bg-[#553DE9]/5 w-[130px]",children:"Loki Mode"}),e.jsx("th",{className:"text-center px-4 py-3 font-medium text-[#6B6960] w-[130px]",children:"bolt.new"}),e.jsx("th",{className:"text-center px-4 py-3 font-medium text-[#6B6960] w-[130px]",children:"Replit"}),e.jsx("th",{className:"text-center px-4 py-3 font-medium text-[#6B6960] w-[130px]",children:"Lovable"})]})}),e.jsx("tbody",{children:r.map(t=>e.jsxs(e.Fragment,{children:[e.jsx("tr",{className:"bg-[#FAF9F6]",children:e.jsx("td",{colSpan:5,className:"px-4 py-2 text-xs font-bold text-[#939084] uppercase tracking-wider",children:t})},`cat-${t}`),j.filter(s=>s.category===t).map(s=>e.jsxs("tr",{className:"border-b border-[#ECEAE3] last:border-b-0",children:[e.jsx("td",{className:"px-4 py-2.5 text-[#36342E]",children:s.feature}),e.jsx("td",{className:"px-4 py-2.5 text-center bg-[#553DE9]/5",children:e.jsx("div",{className:"flex justify-center",children:e.jsx(x,{value:s.lokiMode})})}),e.jsx("td",{className:"px-4 py-2.5 text-center",children:e.jsx("div",{className:"flex justify-center",children:e.jsx(x,{value:s.boltNew})})}),e.jsx("td",{className:"px-4 py-2.5 text-center",children:e.jsx("div",{className:"flex justify-center",children:e.jsx(x,{value:s.replit})})}),e.jsx("td",{className:"px-4 py-2.5 text-center",children:e.jsx("div",{className:"flex justify-center",children:e.jsx(x,{value:s.lovable})})})]},s.feature))]}))})]})})}),e.jsxs("div",{className:"mt-12",children:[e.jsx("h2",{className:"text-xl font-bold text-[#36342E] mb-6",children:"Why developers choose Loki Mode"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-5",children:k.map(t=>e.jsxs("div",{className:"bg-white border border-[#ECEAE3] rounded-xl p-5 shadow-sm hover:shadow-md transition-shadow",children:[e.jsx("div",{className:"mb-3",children:t.icon}),e.jsx("h3",{className:"text-base font-bold text-[#36342E] mb-1",children:t.title}),e.jsx("p",{className:"text-sm text-[#6B6960]",children:t.description})]},t.title))})]}),e.jsx("div",{className:"mt-12 max-w-xl mx-auto",children:e.jsx(g,{})})]})})}export{C as default};
|
|
1
|
+
import{r as o,j as e}from"./index-AbnEcRYc.js";function f({value:r,prefix:t="",suffix:s=""}){const[u,n]=o.useState(0),c=o.useRef(0);return o.useEffect(()=>{const a=c.current,h=r-a;if(h===0)return;const i=600,d=performance.now();function l(b){const v=b-d,m=Math.min(v/i,1),N=1-Math.pow(1-m,3),p=Math.round(a+h*N);n(p),c.current=p,m<1&&requestAnimationFrame(l)}requestAnimationFrame(l)},[r]),e.jsxs("span",{className:"tabular-nums",children:[t,u.toLocaleString(),s]})}function g(){const[r,t]=o.useState(5),[s,u]=o.useState(30),[n,c]=o.useState(75),a=.4,i=Math.round(r*s*a*4.33),d=Math.round(i*n);return e.jsxs("div",{className:"bg-white border border-[#ECEAE3] rounded-xl p-6 shadow-sm",children:[e.jsx("h3",{className:"text-lg font-bold text-[#36342E] mb-1",children:"ROI Calculator"}),e.jsx("p",{className:"text-sm text-[#6B6960] mb-6",children:"Estimate how much your team could save with autonomous development."}),e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("label",{className:"text-sm font-medium text-[#36342E]",children:"Team size"}),e.jsxs("span",{className:"text-sm font-semibold text-[#553DE9] tabular-nums",children:[r," developers"]})]}),e.jsx("input",{type:"range",min:1,max:50,value:r,onChange:l=>t(Number(l.target.value)),className:"w-full h-2 bg-[#ECEAE3] rounded-full appearance-none cursor-pointer accent-[#553DE9]"}),e.jsxs("div",{className:"flex justify-between text-xs text-[#939084] mt-1",children:[e.jsx("span",{children:"1"}),e.jsx("span",{children:"50"})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("label",{className:"text-sm font-medium text-[#36342E]",children:"Hours coding per week"}),e.jsxs("span",{className:"text-sm font-semibold text-[#553DE9] tabular-nums",children:[s,"h"]})]}),e.jsx("input",{type:"range",min:5,max:60,value:s,onChange:l=>u(Number(l.target.value)),className:"w-full h-2 bg-[#ECEAE3] rounded-full appearance-none cursor-pointer accent-[#553DE9]"}),e.jsxs("div",{className:"flex justify-between text-xs text-[#939084] mt-1",children:[e.jsx("span",{children:"5h"}),e.jsx("span",{children:"60h"})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("label",{className:"text-sm font-medium text-[#36342E]",children:"Average hourly rate"}),e.jsxs("span",{className:"text-sm font-semibold text-[#553DE9] tabular-nums",children:["$",n,"/hr"]})]}),e.jsx("input",{type:"range",min:25,max:250,step:5,value:n,onChange:l=>c(Number(l.target.value)),className:"w-full h-2 bg-[#ECEAE3] rounded-full appearance-none cursor-pointer accent-[#553DE9]"}),e.jsxs("div",{className:"flex justify-between text-xs text-[#939084] mt-1",children:[e.jsx("span",{children:"$25"}),e.jsx("span",{children:"$250"})]})]})]}),e.jsxs("div",{className:"mt-6 pt-6 border-t border-[#ECEAE3]",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4 text-center",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-2xl font-bold text-[#553DE9]",children:e.jsx(f,{value:i,suffix:"h"})}),e.jsx("div",{className:"text-xs text-[#6B6960] mt-1",children:"Est. hours saved / month"})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-2xl font-bold text-[#1FC5A8]",children:e.jsx(f,{value:d,prefix:"$"})}),e.jsx("div",{className:"text-xs text-[#6B6960] mt-1",children:"Est. cost saved / month"})]})]}),e.jsxs("div",{className:"mt-4 p-3 rounded-lg bg-[#553DE9]/5 border border-[#553DE9]/10",children:[e.jsxs("p",{className:"text-sm text-[#36342E] text-center",children:["If Loki Mode saved ",Math.round(a*100),"% of coding time, your team could save"," ",e.jsxs("span",{className:"font-bold text-[#553DE9]",children:[i.toLocaleString()," hours"]})," ","and"," ",e.jsxs("span",{className:"font-bold text-[#1FC5A8]",children:["$",d.toLocaleString()]})," ","per month."]}),e.jsxs("p",{className:"mt-2 text-xs text-[#6B6960] text-center",children:["The ",Math.round(a*100),"% is an assumption, not a measurement. Model and API spend is not included."]})]})]})]})}const j=[{feature:"Claude (Opus/Sonnet/Haiku)",category:"AI Models",lokiMode:!0,boltNew:!1,replit:!1,lovable:!0},{feature:"GPT-4o / Codex",category:"AI Models",lokiMode:!0,boltNew:!0,replit:!0,lovable:!1},{feature:"5-provider auto-failover",category:"AI Models",lokiMode:!0,boltNew:!1,replit:!1,lovable:!1},{feature:"8 automated quality gates",category:"Quality",lokiMode:!0,boltNew:!1,replit:!1,lovable:!1},{feature:"Blind 3-reviewer code review",category:"Quality",lokiMode:!0,boltNew:!1,replit:!1,lovable:!1},{feature:"Anti-sycophancy checks",category:"Quality",lokiMode:!0,boltNew:!1,replit:!1,lovable:!1},{feature:"Automated test generation",category:"Quality",lokiMode:!0,boltNew:!1,replit:"Partial",lovable:!1},{feature:"Docker container generation",category:"Deployment",lokiMode:!0,boltNew:!1,replit:!0,lovable:!1},{feature:"CI/CD pipeline generation",category:"Deployment",lokiMode:!0,boltNew:!1,replit:!1,lovable:!1},{feature:"One-click cloud deploy",category:"Deployment",lokiMode:"Planned",boltNew:!0,replit:!0,lovable:!0},{feature:"Self-hosted (your keys)",category:"Cost",lokiMode:!0,boltNew:!1,replit:!1,lovable:!1},{feature:"Free tier available",category:"Cost",lokiMode:"Source-available (BUSL-1.1)",boltNew:!0,replit:!0,lovable:!0},{feature:"No vendor lock-in",category:"Cost",lokiMode:!0,boltNew:!1,replit:!1,lovable:!1},{feature:"SSO / OIDC authentication",category:"Enterprise",lokiMode:!0,boltNew:!1,replit:!0,lovable:!1},{feature:"RBAC access control",category:"Enterprise",lokiMode:!0,boltNew:!1,replit:!0,lovable:!1},{feature:"Audit logging",category:"Enterprise",lokiMode:!0,boltNew:!1,replit:!0,lovable:!1},{feature:"Air-gapped deployment",category:"Enterprise",lokiMode:!0,boltNew:!1,replit:!1,lovable:!1}];function y(){return e.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",className:"text-[#1FC5A8]",children:e.jsx("path",{d:"M20 6L9 17l-5-5",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function w(){return e.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",className:"text-[#C45B5B]/40",children:e.jsx("path",{d:"M18 6L6 18M6 6l12 12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function x({value:r}){return typeof r=="string"?e.jsx("span",{className:"text-xs text-[#6B6960] font-medium",children:r}):r?e.jsx(y,{}):e.jsx(w,{})}const k=[{title:"Full Autonomy",description:"Describe what you want. Loki Mode handles planning, coding, testing, and verification automatically.",icon:e.jsx("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",className:"text-[#553DE9]",children:e.jsx("path",{d:"M13 2L3 14h9l-1 8 10-12h-9l1-8z",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})},{title:"Production Quality",description:"8 quality gates, blind code review, and anti-sycophancy checks ensure code that actually works.",icon:e.jsx("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",className:"text-[#1FC5A8]",children:e.jsx("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})},{title:"Your Infrastructure",description:"Self-hosted, source-available (BUSL-1.1), no data leaves your network. Use your own API keys across 5 providers.",icon:e.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",className:"text-[#2F71E3]",children:[e.jsx("rect",{x:"2",y:"2",width:"20",height:"8",rx:"2",stroke:"currentColor",strokeWidth:"2"}),e.jsx("rect",{x:"2",y:"14",width:"20",height:"8",rx:"2",stroke:"currentColor",strokeWidth:"2"}),e.jsx("circle",{cx:"6",cy:"6",r:"1",fill:"currentColor"}),e.jsx("circle",{cx:"6",cy:"18",r:"1",fill:"currentColor"})]})},{title:"Built for Teams",description:"Enterprise auth, RBAC, audit logs, and parallel workflows for teams of any size.",icon:e.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",className:"text-[#E93D82]",children:[e.jsx("path",{d:"M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}),e.jsx("circle",{cx:"9",cy:"7",r:"4",stroke:"currentColor",strokeWidth:"2"}),e.jsx("path",{d:"M23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]})}];function C(){const r=[...new Set(j.map(t=>t.category))];return e.jsx("div",{className:"min-h-screen bg-[#FAF9F6]",children:e.jsxs("div",{className:"max-w-6xl mx-auto px-6 py-8",children:[e.jsxs("div",{className:"mb-8",children:[e.jsx("h1",{className:"text-2xl font-bold text-[#36342E]",children:"Compare"}),e.jsx("p",{className:"text-[#6B6960] mt-1",children:"See how Loki Mode stacks up against other AI development platforms."})]}),e.jsx("div",{className:"bg-white border border-[#ECEAE3] rounded-xl overflow-hidden shadow-sm",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-[#ECEAE3]",children:[e.jsx("th",{className:"text-left px-4 py-3 font-medium text-[#6B6960] w-[240px]",children:"Feature"}),e.jsx("th",{className:"text-center px-4 py-3 font-bold text-[#553DE9] bg-[#553DE9]/5 w-[130px]",children:"Loki Mode"}),e.jsx("th",{className:"text-center px-4 py-3 font-medium text-[#6B6960] w-[130px]",children:"bolt.new"}),e.jsx("th",{className:"text-center px-4 py-3 font-medium text-[#6B6960] w-[130px]",children:"Replit"}),e.jsx("th",{className:"text-center px-4 py-3 font-medium text-[#6B6960] w-[130px]",children:"Lovable"})]})}),e.jsx("tbody",{children:r.map(t=>e.jsxs(e.Fragment,{children:[e.jsx("tr",{className:"bg-[#FAF9F6]",children:e.jsx("td",{colSpan:5,className:"px-4 py-2 text-xs font-bold text-[#939084] uppercase tracking-wider",children:t})},`cat-${t}`),j.filter(s=>s.category===t).map(s=>e.jsxs("tr",{className:"border-b border-[#ECEAE3] last:border-b-0",children:[e.jsx("td",{className:"px-4 py-2.5 text-[#36342E]",children:s.feature}),e.jsx("td",{className:"px-4 py-2.5 text-center bg-[#553DE9]/5",children:e.jsx("div",{className:"flex justify-center",children:e.jsx(x,{value:s.lokiMode})})}),e.jsx("td",{className:"px-4 py-2.5 text-center",children:e.jsx("div",{className:"flex justify-center",children:e.jsx(x,{value:s.boltNew})})}),e.jsx("td",{className:"px-4 py-2.5 text-center",children:e.jsx("div",{className:"flex justify-center",children:e.jsx(x,{value:s.replit})})}),e.jsx("td",{className:"px-4 py-2.5 text-center",children:e.jsx("div",{className:"flex justify-center",children:e.jsx(x,{value:s.lovable})})})]},s.feature))]}))})]})})}),e.jsxs("div",{className:"mt-12",children:[e.jsx("h2",{className:"text-xl font-bold text-[#36342E] mb-6",children:"Why developers choose Loki Mode"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-5",children:k.map(t=>e.jsxs("div",{className:"bg-white border border-[#ECEAE3] rounded-xl p-5 shadow-sm hover:shadow-md transition-shadow",children:[e.jsx("div",{className:"mb-3",children:t.icon}),e.jsx("h3",{className:"text-base font-bold text-[#36342E] mb-1",children:t.title}),e.jsx("p",{className:"text-sm text-[#6B6960]",children:t.description})]},t.title))})]}),e.jsx("div",{className:"mt-12 max-w-xl mx-auto",children:e.jsx(g,{})})]})})}export{C as default};
|
package/web-app/dist/assets/{EvidenceReceiptPanel-Bic-zXdJ.js → EvidenceReceiptPanel-B3J7WEFt.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as l,a as x,j as e}from"./index-
|
|
1
|
+
import{r as l,a as x,j as e}from"./index-AbnEcRYc.js";const N={verified:{badge:"bg-success/10 text-success border-success/20",dot:"bg-success",label:"Verified",proven:"The server recomputed the integrity hash and it matches, and the gpg signature verified against its keyring.",notProven:"That the code is correct, or that the recorded diff still matches your repo. A receipt records which checks ran, not that the result is right."},unsigned:{badge:"bg-warning/10 text-warning border-warning/20",dot:"bg-warning",label:"Unsigned",proven:"The server recomputed the integrity hash and it matches these receipt bytes.",notProven:"Who produced it. An unsigned receipt is forgeable: whoever controls the builder can rewrite the facts and recompute the hash."},unchecked:{badge:"bg-warning/10 text-warning border-warning/20",dot:"bg-warning",label:"Not checked",proven:"The server recomputed the integrity hash and it matches.",notProven:"Provenance. A signature is present but was not evaluated here, which is not the same as a bad signature."},tampered:{badge:"bg-danger/10 text-danger border-danger/20",dot:"bg-danger",label:"Tampered",proven:"Nothing. The server recomputed the integrity hash and it does not match the contents.",notProven:"Anything at all. This receipt was edited after it was written. Do not trust this build."},failed:{badge:"bg-danger/10 text-danger border-danger/20",dot:"bg-danger",label:"Failed verification",proven:"Nothing. A verification check ran on the server and said no.",notProven:"Anything the receipt claims. Read the reason below."},not_verified:{badge:"border-muted/20 text-muted",dot:"bg-muted/40",label:"Not verified here",proven:"Nothing. No verification result was computed for this receipt here.",notProven:"Integrity or provenance. Run the command below to check it yourself."}};function w(t){const n=t==null?void 0:t.integrity_check,r=t==null?void 0:t.verification;return n?n.status==="tampered"?"tampered":n.status==="failed"?"failed":n.status!=="verified"?"not_verified":n.gpg_ok===!0?"verified":r!=null&&r.attestation||r!=null&&r.gpg_signature?"unchecked":"unsigned":"not_verified"}const v=[{key:"verified",label:"Verified",bar:"bg-success",text:"text-success"},{key:"with_gaps",label:"With gaps",bar:"bg-warning",text:"text-warning"},{key:"not_verified",label:"Not verified",bar:"bg-danger",text:"text-danger"},{key:"unknown",label:"Unknown",bar:"bg-muted/40",text:"text-muted"}];function y({summary:t}){const n=t.total_receipts;return n?e.jsxs("div",{className:"space-y-2",children:[e.jsx("div",{className:"flex h-1.5 rounded-full overflow-hidden bg-muted/10",children:v.map(({key:r,bar:s})=>{const i=t[r];return i?e.jsx("div",{className:s,style:{width:`${i/n*100}%`},title:`${i} ${r}`},r):null})}),e.jsx("div",{className:"flex flex-wrap gap-x-4 gap-y-1 text-xs",children:v.map(({key:r,label:s,text:i})=>{const c=t[r];return c?e.jsxs("span",{className:i,children:[e.jsx("span",{className:"font-semibold",children:c})," ",s.toLowerCase()]},r):null})}),e.jsxs("p",{className:"text-muted text-xs",children:["Recorded verdicts across ",n," receipt",n===1?"":"s",", not re-verified here."]})]}):null}function u({label:t,value:n}){return e.jsxs("div",{className:"flex items-baseline gap-2 text-xs",children:[e.jsx("span",{className:"text-muted w-28 flex-shrink-0",children:t}),e.jsx("span",{className:"font-mono truncate",title:n,children:n})]})}function k({proof:t}){var m,p,g,f,b;const[n,r]=l.useState(!1),[s,i]=l.useState(null),[c,d]=l.useState(null);l.useEffect(()=>{if(!n||s||c)return;let o=!1;return x.getProof(t.run_id).then(h=>{o||i(h)}).catch(h=>{o||d((h==null?void 0:h.message)||"could not load this receipt")}),()=>{o=!0}},[n,t.run_id,s,c]);const a=N[w(s)],j=t.generated_at?new Date(t.generated_at).toLocaleString():"unknown";return e.jsxs("div",{className:`border rounded-card overflow-hidden ${s?a.badge:"border-muted/20"}`,children:[e.jsxs("button",{type:"button",className:"w-full flex items-center gap-3 px-3 py-2.5 text-left",onClick:()=>r(!n),"aria-expanded":n,children:[e.jsx("span",{className:`w-2 h-2 rounded-full flex-shrink-0 ${s?a.dot:"bg-muted/40"}`}),e.jsx("span",{className:"text-sm font-medium flex-1 truncate",children:t.headline?`Recorded: ${t.headline}`:t.run_id}),t.final_verdict&&e.jsxs("span",{className:"text-xs font-mono uppercase tracking-wider flex-shrink-0 text-muted",children:["council ",t.final_verdict]}),e.jsx("span",{className:"text-muted text-xs flex-shrink-0",children:n?"−":"+"})]}),n&&e.jsxs("div",{className:"px-3 pb-3 space-y-3 border-t border-current/10 pt-3",children:[c&&e.jsxs("p",{className:"text-xs text-danger",children:["Could not load this receipt: ",c]}),!c&&!s&&e.jsx("p",{className:"text-xs text-muted",children:"Loading receipt…"}),s&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(u,{label:"Run",value:s.run_id}),e.jsx(u,{label:"Generated",value:j}),e.jsx(u,{label:"Loki version",value:s.loki_version||"unknown"}),e.jsx(u,{label:"Cost",value:typeof((m=s.cost)==null?void 0:m.usd)=="number"?`${s.cost.cost_partial===!0?"at least ":""}$${s.cost.usd.toFixed(2)}`:"unknown"}),e.jsx(u,{label:"Files changed",value:typeof((p=s.files_changed)==null?void 0:p.count)=="number"?String(s.files_changed.count):"unknown"}),((g=s.verification)==null?void 0:g.hash)&&e.jsx(u,{label:"Recorded hash",value:s.verification.hash})]}),e.jsxs("div",{className:`rounded-card border px-3 py-2 ${a.badge}`,children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-wider mb-1",children:a.label}),e.jsxs("p",{className:"text-xs mb-1",children:[e.jsx("span",{className:"font-semibold",children:"Proven: "}),a.proven]}),e.jsxs("p",{className:"text-xs opacity-80",children:[e.jsx("span",{className:"font-semibold",children:"Not proven: "}),a.notProven]}),(((f=s.integrity_check)==null?void 0:f.reasons)||[]).slice(0,2).map(o=>e.jsx("p",{className:"text-xs opacity-80 mt-1",children:o},o))]}),e.jsxs("p",{className:"text-xs text-muted",children:["Verify it yourself (also re-derives the diff against your repo):"," ",e.jsxs("code",{className:"font-mono",children:["loki proof verify ",s.run_id,(b=s.verification)!=null&&b.attestation?" --jwks <url|file>":""]})]}),t.pr_url&&e.jsx("a",{href:t.pr_url,target:"_blank",rel:"noreferrer noopener",className:"text-xs text-primary underline",children:"View the pull request"})]})]})]})}function P(){const[t,n]=l.useState(null),[r,s]=l.useState(null),[i,c]=l.useState(null);return l.useEffect(()=>{let d=!1;return x.listProofs().then(a=>{d||n(a.proofs||[])}).catch(a=>{d||c((a==null?void 0:a.message)||"could not load receipts")}),x.proofsSummary().then(a=>{d||s(a)}).catch(()=>{}),()=>{d=!0}},[]),e.jsxs("section",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-sm font-semibold",children:"Evidence Receipts"}),e.jsx("p",{className:"text-muted text-xs mt-1",children:"What each build actually checked, recorded so you can verify it yourself."})]}),i&&e.jsxs("p",{className:"text-xs text-danger",children:["Could not load receipts: ",i]}),!i&&t===null&&e.jsx("p",{className:"text-xs text-muted",children:"Loading…"}),r&&e.jsx(y,{summary:r}),t!==null&&t.length===0&&e.jsxs("p",{className:"text-xs text-muted",children:["No receipts yet. One is written at the end of each run (set ",e.jsx("code",{className:"font-mono",children:"LOKI_PROOF=0"})," to opt out)."]}),e.jsx("div",{className:"space-y-2",children:t==null?void 0:t.map(d=>e.jsx(k,{proof:d},d.run_id))})]})}export{P as E};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as _,r as o,a as k,j as e,m as B,J as v,N as h,a5 as H,M as L,l as q}from"./index-
|
|
1
|
+
import{c as _,r as o,a as k,j as e,m as B,J as v,N as h,a5 as H,M as L,l as q}from"./index-AbnEcRYc.js";import{B as N}from"./Button-swLM1Mkk.js";import{C as y}from"./thumbs-up-CZe9zBO9.js";import{R as S}from"./refresh-cw-Ct8bAvZD.js";import{C as z}from"./circle-alert-DM6UIvoO.js";import{U as D}from"./user-BQfOfFhx.js";import{L as G}from"./loader-circle-CIR1Sma1.js";import{R as T}from"./rotate-ccw-DiGIVCUA.js";/**
|
|
2
2
|
* @license lucide-react v0.577.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as I,r as c,a as b,j as e,G as me,A as ue,S as Z,k as ee,m as pe,h as he,p as fe,X as te,M as be}from"./index-
|
|
1
|
+
import{c as I,r as c,a as b,j as e,G as me,A as ue,S as Z,k as ee,m as pe,h as he,p as fe,X as te,M as be}from"./index-AbnEcRYc.js";import{B as y}from"./Button-swLM1Mkk.js";import{C as ge}from"./chevron-left-CwCXOW1S.js";import{G as P}from"./thumbs-up-CZe9zBO9.js";import{R as $}from"./refresh-cw-Ct8bAvZD.js";import{C as Ne}from"./circle-alert-DM6UIvoO.js";import{L as Q,S as je}from"./ProjectPage-7_WSX022.js";import{S as se}from"./shield-alert-DlYXCwtz.js";import{F as ye}from"./file-code-corner-B-7c5PSn.js";import{C as V}from"./clock-q_FUpVhQ.js";import{C as re}from"./check-Ba5EfuAr.js";import"./ErrorBoundary-Dck7MvSA.js";import"./TerminalOutput-Bw0skoJu.js";import"./lock-B3vYtrTQ.js";import"./package-D6nMJfEH.js";import"./file-plus-D0yO4Aso.js";import"./activity-DESQcbjL.js";import"./scroll-text-CLEW9CU_.js";import"./bot-DIXiSpNv.js";import"./loader-circle-CIR1Sma1.js";import"./hammer-BFhkxMs9.js";import"./dollar-sign-hhhgF1oP.js";import"./globe-CgbMVh7-.js";import"./trash-2-C_qQr30K.js";import"./upload-D-004cA8.js";import"./plus-BKKOL14n.js";import"./rotate-ccw-DiGIVCUA.js";import"./code-xml-raCf02bQ.js";import"./trending-up-_TkFF6xq.js";import"./layers-B3zPC7z4.js";import"./trending-down-F7ALhKbc.js";import"./server-b0kgXbO8.js";/**
|
|
2
2
|
* @license lucide-react v0.577.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|