loki-mode 11.3.4 → 11.3.5
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/run.sh +1 -1
- package/dashboard/__init__.py +1 -1
- package/docs/CLI-REFERENCE.md +1 -1
- package/docs/INSTALLATION.md +1 -1
- package/docs/environment-variables.md +1 -1
- package/docs/v10/FAILURE-CLASSES.md +8 -0
- 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-CKj0pDt0.js → AdminPage-CtMDQ7tq.js} +1 -1
- package/web-app/dist/assets/{Avatar-BOV__pMM.js → Avatar-BunEd-95.js} +1 -1
- package/web-app/dist/assets/{Badge-4a6mAYjU.js → Badge-BrAChY_L.js} +1 -1
- package/web-app/dist/assets/{Button-B3GM7oxm.js → Button-CUGJz-QD.js} +1 -1
- package/web-app/dist/assets/{CockpitPage-Cwge3_kH.js → CockpitPage-mS3B6nCY.js} +1 -1
- package/web-app/dist/assets/{ComparePage-CBQUGKsm.js → ComparePage-DOpjq2wB.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-TM7lDjUJ.js → ErrorBoundary-BPVaV2s1.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-DUOseTYA.js → EvidenceReceiptPanel-B1o2RKnU.js} +1 -1
- package/web-app/dist/assets/{GitHubIssuesPanel-hK_uML6T.js → GitHubIssuesPanel-07-Gi_tj.js} +1 -1
- package/web-app/dist/assets/{GitHubPRsPanel-Bt0mug-u.js → GitHubPRsPanel-DwpdHdD0.js} +1 -1
- package/web-app/dist/assets/{HomePage-DcOogAai.js → HomePage-5SYxWllM.js} +2 -2
- package/web-app/dist/assets/{LoginPage-D41pjjhF.js → LoginPage-DxKw4woS.js} +1 -1
- package/web-app/dist/assets/{MagicPage-iDcdAcL2.js → MagicPage-Cs1wKf5C.js} +1 -1
- package/web-app/dist/assets/{MetricsPage-Tt4sfFD1.js → MetricsPage-DViQGz-y.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-DPQMausn.js → NotFoundPage-DZ1rQcEH.js} +1 -1
- package/web-app/dist/assets/{ProjectPage-DdMz4frY.js → ProjectPage-qjTYnrCe.js} +3 -3
- package/web-app/dist/assets/{ProjectsPage-Be0v4ace.js → ProjectsPage-CrJzeJzg.js} +1 -1
- package/web-app/dist/assets/{SettingsPage-90yIh-mE.js → SettingsPage-DfWrefQZ.js} +1 -1
- package/web-app/dist/assets/{ShowcasePage-D5x5eczl.js → ShowcasePage-DBPrEBK-.js} +1 -1
- package/web-app/dist/assets/{SystemSettingsPage-UWeWT8KX.js → SystemSettingsPage-CN-27Yul.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-BtofFlme.js → TeamsPage-vXKC7Ctc.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-DwB8Va2Z.js → TemplatesPage-BvC4ftFD.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-CGIgTmby.js → TerminalOutput-pst4yhsm.js} +1 -1
- package/web-app/dist/assets/{activity-BZ77CO72.js → activity-B9Qo_kJN.js} +1 -1
- package/web-app/dist/assets/{bell-Bzpqv6un.js → bell-yXv87YzA.js} +1 -1
- package/web-app/dist/assets/{bot-yXo1B_-f.js → bot-UQlOwPgx.js} +1 -1
- package/web-app/dist/assets/{check-BSxGjsta.js → check-DYle8PJT.js} +1 -1
- package/web-app/dist/assets/{chevron-left-CqTRVUB5.js → chevron-left-BKGmCkxA.js} +1 -1
- package/web-app/dist/assets/{circle-alert-88gdjY71.js → circle-alert-Dc1XUGH3.js} +1 -1
- package/web-app/dist/assets/{clock-XdFXoaJi.js → clock-B0jfhwc2.js} +1 -1
- package/web-app/dist/assets/{cloud-Tx1sJrXz.js → cloud-IkyAY6Dw.js} +1 -1
- package/web-app/dist/assets/{code-xml-DaH9CKWy.js → code-xml-CPdTgKr9.js} +1 -1
- package/web-app/dist/assets/{database-BpvOmzij.js → database-E6L0Lwuc.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-VC2UX2UE.js → dollar-sign-alo3vpLg.js} +1 -1
- package/web-app/dist/assets/{file-code-corner--TF3VpoT.js → file-code-corner-DcstcagN.js} +1 -1
- package/web-app/dist/assets/{file-plus-DZpwU9pY.js → file-plus-DYrxUtNS.js} +1 -1
- package/web-app/dist/assets/{globe-tbpeHRPV.js → globe-D0ceSi6L.js} +1 -1
- package/web-app/dist/assets/{hammer-CKLXn4vL.js → hammer-Bix0hGg_.js} +1 -1
- package/web-app/dist/assets/{index-DnCsWpCh.js → index-Bq0IXorg.js} +3 -3
- package/web-app/dist/assets/{layers-B0fkGsk8.js → layers-ClEOJz-A.js} +1 -1
- package/web-app/dist/assets/{loader-circle-czscMzmQ.js → loader-circle-aPR8MCfq.js} +1 -1
- package/web-app/dist/assets/{lock-CTtO6vc8.js → lock-qWtNggvV.js} +1 -1
- package/web-app/dist/assets/{package-DZeSY0-g.js → package-Cf9OA6-r.js} +1 -1
- package/web-app/dist/assets/{plus-mE12CJVN.js → plus-BFwUepQN.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-9DSznasU.js → refresh-cw-DzmKZ3CW.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-DcHI0M43.js → rotate-ccw-DZMAdo4p.js} +1 -1
- package/web-app/dist/assets/{scroll-text-BWLthSw-.js → scroll-text-CLK1QhL-.js} +1 -1
- package/web-app/dist/assets/{server-_I247LrS.js → server-D2hE3MdR.js} +1 -1
- package/web-app/dist/assets/{shield-alert-XRJYD_6c.js → shield-alert-aK0eddg8.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-CxuTD3eO.js → thumbs-up-B_jbqHDP.js} +1 -1
- package/web-app/dist/assets/{trash-2-DuGxuVt8.js → trash-2-Dgo9A169.js} +1 -1
- package/web-app/dist/assets/{trending-down-Cg_zGt__.js → trending-down-DeRHmNFR.js} +1 -1
- package/web-app/dist/assets/{trending-up-DpUJzIrV.js → trending-up-BxPu0OUd.js} +1 -1
- package/web-app/dist/assets/{upload-Db7YZ4zR.js → upload-DaaWxRxF.js} +1 -1
- package/web-app/dist/assets/{usePolling-BGRYm-vq.js → usePolling-QplcA_Qc.js} +1 -1
- package/web-app/dist/assets/{user-CxHrowEP.js → user-B9a_CFg0.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.3.
|
|
6
|
+
# Loki Mode v11.3.5
|
|
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.3.
|
|
486
|
+
**v11.3.5 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
11.3.
|
|
1
|
+
11.3.5
|
package/autonomy/run.sh
CHANGED
|
@@ -5386,7 +5386,7 @@ except Exception:
|
|
|
5386
5386
|
}
|
|
5387
5387
|
|
|
5388
5388
|
#===============================================================================
|
|
5389
|
-
# Rule of Two (moat P9):
|
|
5389
|
+
# Rule of Two (moat P9): Loki never passes the GitHub token into the agent's environment via the
|
|
5390
5390
|
# IMPLICIT resolution paths this module withholds (env vars, gh config store,
|
|
5391
5391
|
# git credential.helper, SSH agent/ssh command). Not an absolute claim -- see
|
|
5392
5392
|
# the disclosed residuals at the end of this header (an explicit named-account
|
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.
|
|
3
|
+
Generated from `loki-ts/src/cli/registry.ts` by `scripts/generate-stale-zero.sh` for v11.3.5. 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.3.
|
|
5
|
+
**Version:** v11.3.5
|
|
6
6
|
|
|
7
7
|
**Engine note:** `loki "<task>"`, `loki owner/repo#N` and `loki quick` run the Loki 10 engine. `loki start` still routes to the older engine, which is being removed; prefer `loki owner/repo#N`. See the [user guide](v10/GUIDE.md).
|
|
8
8
|
|
|
@@ -134,7 +134,7 @@ banners you might expect. These variables control the remaining `[INFO]` and
|
|
|
134
134
|
|---|---|---|
|
|
135
135
|
| `LOKI_DURABLE_STATE` | `0` | `1` enables durable state **and** the richer process-exit contract that lets Kubernetes distinguish a deterministic failure from a crash. See [exit codes](./exit-codes.md). |
|
|
136
136
|
| `LOKI_SDK_LOOP` | unset | Routes the run through the Bun/TypeScript runner instead of bash. Both implement the same exit contract. |
|
|
137
|
-
| `LOKI_ALLOW_AGENT_GITHUB_TOKEN` | unset | By default `GH_TOKEN`, `GITHUB_TOKEN`, `GH_ENTERPRISE_TOKEN`, and `GITHUB_ENTERPRISE_TOKEN` are withheld from agent
|
|
137
|
+
| `LOKI_ALLOW_AGENT_GITHUB_TOKEN` | unset | By default `GH_TOKEN`, `GITHUB_TOKEN`, `GH_ENTERPRISE_TOKEN`, and `GITHUB_ENTERPRISE_TOKEN` are withheld from the agent's environment (the agent runs as the user, so OS keychain and credential files are not yet isolated; P9-ISOLATION is in design). The two routes differ: on the bash route (`autonomy/run.sh`) the withheld tokens are re-granted only for Loki's own trusted calls, namely the `gh()` CLI wrapper, the `_loki_net` helper used by the optional local-PR path in `on_run_complete()`, the session-end `create_session_pr` call, and `autonomy/lib/proof-check.sh`'s network probe. On the Bun route (`loki-ts/src/runner/github_token.ts`'s `withholdGithubTokens()`) the tokens are dropped from the process outright, with no re-grant and no push/PR step of its own. Exactly `1` lets the agent inherit the tokens as before, on either route; that is a Rule of Two exposure, and a one-line stderr warning is printed. |
|
|
138
138
|
| `LOKI_AI_MARKING` | unset (off) | `1` (exactly) adds machine-readable trailers to the Loki commit (`AI-Generated: true`, `AI-Provider`, `AI-Model`, `Loki-Receipt`, after `Loki-Run`) and one `AI-Generated: true (...)` marker line under the verdict in the PR body. Values are single-line and bounded. Off, the commit and PR body are byte-identical to before. |
|
|
139
139
|
|
|
140
140
|
`LOKI_DURABLE_STATE=1` is the one to set in a Job or task definition. Without
|
|
@@ -760,3 +760,11 @@ L0 review rule (ENGINE-LAWS.md L0): a fix that adds an `if` or a regex about the
|
|
|
760
760
|
- Mechanism: plainTestEnv (util/check_result.ts) now starts from tokenFreeEnv(base), so a test command never carries credentials; the guard treats plainTestEnv as token-free (SAFE) and a call window now ends at the next call line. Allowlist: verify.ts and wall.ts entries removed (0 violations), load_owner.ts@2 lowered to @1 (the pgrep call, still a real full-env spawn).
|
|
761
761
|
- Fixture: tests/util/plain_test_env_tokens.test.ts (planted token family in the parent; plainTestEnv, a child, and a real Wall base run see none; red when plainTestEnv is mutated back to a full copy) and planted cases in full_env_spawn_guard.test.ts (raw process.env spawns still flag 1, plainTestEnv flags 0).
|
|
762
762
|
- Sibling question (fast gate): the WALL-COLOR merge did not run this guard. scripts/select-tests.sh rule R4 maps a changed loki-ts/src file only to bun tests whose text contains that file's src-relative stem (for example engine10/stages/wall); full_env_spawn_guard.test.ts walks all of src and names none, so it is never selected, and the fast gate only runs bun typecheck for it. Not fixed here; a follow-up slice should make a loki-ts/src change select the walk-all-src guard tests.
|
|
763
|
+
|
|
764
|
+
## FC-89 A guard that walks all of loki-ts/src names no stem, so the fast gate never selected it (FASTGATE-GLOBAL-GUARDS)
|
|
765
|
+
- User saw: WALL-COLOR (FC-69) reached main red; the diff-selected fast gate ran only a typecheck. Third miss of the CTO rule that global guards always run.
|
|
766
|
+
- Law: a guard whose scope is the whole tree must be selected by what it is, not by which file changed; a selection keyed on a name in the test text cannot see a test that names nothing.
|
|
767
|
+
- Cause (measured): R4 selects a bun test only if its text contains the changed file's src-relative stem. Tests such as budget.test.ts and l2_destructive_registry.test.ts (and pr_body_golden, session, term_width, project_model) read every file under loki-ts/src and name none, so a diff to engine10/stages/wall.ts never selected them. The hard-coded scripts/global-guards.tsv rows covered some guards by hand and rotted for the rest.
|
|
768
|
+
- Siblings swept: every loki-ts/tests/**/*.test.ts that walks a src-rooted path (17 found, listed by the marker); three false positives that only walk tmp or tests dirs carry the audited opt-out.
|
|
769
|
+
- Mechanism: a test that walks the src tree carries the line "// select: walk-all-src". scripts/select-tests.sh emit_marked_walkers finds them by content and emits each as an R8 row on every diff (skipping any already covered by a global-guards.tsv row or directory row), so a new walker needs no list edit.
|
|
770
|
+
- Fixture: tests/test-select-tests.sh FC-89 (a diff touching only loki-ts/src/engine10/stages/wall.ts selects full_env_spawn_guard, fc25_raw_spawn_guard, l0_guard, spawn_env_guard, budget, l2_destructive_registry, never_below_raw; every marked file is selected; a completeness scan fails on any src-walking test with neither "select: walk-all-src" nor "select: not-src-walker (reason)"). Mutation: deleting the marker from l2_destructive_registry.test.ts turns it red on both the selection and the completeness check.
|
package/loki-ts/dist/loki.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var Aq0=Object.create;var{getPrototypeOf:Lq0,defineProperty:VL,getOwnPropertyNames:jq0}=Object;var Fq0=Object.prototype.hasOwnProperty;function Cq0(Z){return this[Z]}var Iq0,Tq0,Pq0=(Z,$,X)=>{var J=Z!=null&&typeof Z==="object";if(J){var Y=$?Iq0??=new WeakMap:Tq0??=new WeakMap,W=Y.get(Z);if(W)return W}X=Z!=null?Aq0(Lq0(Z)):{};let z=$||!Z||!Z.__esModule?VL(X,"default",{value:Z,enumerable:!0}):X;for(let Q of jq0(Z))if(!Fq0.call(z,Q))VL(z,Q,{get:Cq0.bind(Z,Q),enumerable:!0});if(J)Y.set(Z,z);return z};var TG=(Z,$)=>()=>($||Z(($={exports:{}}).exports,$),$.exports);var Eq0=(Z)=>Z;function Dq0(Z,$){this[Z]=Eq0.bind(null,$)}var O0=(Z,$)=>{for(var X in $)VL(Z,X,{get:$[X],enumerable:!0,configurable:!0,set:Dq0.bind($,X)})};var y=(Z,$)=>()=>(Z&&($=Z(Z=0)),$);var H5=import.meta.require;var Xb={};O0(Xb,{lokiDir:()=>_0,homeLokiDir:()=>x4,findRepoRootForVersion:()=>HL,REPO_ROOT:()=>x0});import{resolve as T2,dirname as GL}from"path";import{fileURLToPath as Rq0}from"url";import{existsSync as PG}from"fs";import{homedir as wq0}from"os";function kq0(){let Z=$b;for(let $=0;$<6;$++){if(PG(T2(Z,"VERSION"))&&PG(T2(Z,"autonomy/run.sh")))return Z;let X=GL(Z);if(X===Z)break;Z=X}return T2($b,"..","..","..")}function HL(Z){let $=Z;for(let X=0;X<6;X++){if(PG(T2($,"VERSION"))&&PG(T2($,"autonomy/run.sh")))return $;let J=GL($);if(J===$)break;$=J}return T2(Z,"..","..","..")}function _0(){return process.env.LOKI_DIR??T2(process.cwd(),".loki")}function x4(){return T2(wq0(),".loki")}var $b,x0;var Q8=y(()=>{$b=GL(Rq0(import.meta.url));x0=kq0()});import{readFileSync as xq0}from"fs";import{resolve as _q0,dirname as Sq0}from"path";import{fileURLToPath as yq0}from"url";function U7(){if(zZ!==null)return zZ;let Z="11.3.
|
|
2
|
+
var Aq0=Object.create;var{getPrototypeOf:Lq0,defineProperty:VL,getOwnPropertyNames:jq0}=Object;var Fq0=Object.prototype.hasOwnProperty;function Cq0(Z){return this[Z]}var Iq0,Tq0,Pq0=(Z,$,X)=>{var J=Z!=null&&typeof Z==="object";if(J){var Y=$?Iq0??=new WeakMap:Tq0??=new WeakMap,W=Y.get(Z);if(W)return W}X=Z!=null?Aq0(Lq0(Z)):{};let z=$||!Z||!Z.__esModule?VL(X,"default",{value:Z,enumerable:!0}):X;for(let Q of jq0(Z))if(!Fq0.call(z,Q))VL(z,Q,{get:Cq0.bind(Z,Q),enumerable:!0});if(J)Y.set(Z,z);return z};var TG=(Z,$)=>()=>($||Z(($={exports:{}}).exports,$),$.exports);var Eq0=(Z)=>Z;function Dq0(Z,$){this[Z]=Eq0.bind(null,$)}var O0=(Z,$)=>{for(var X in $)VL(Z,X,{get:$[X],enumerable:!0,configurable:!0,set:Dq0.bind($,X)})};var y=(Z,$)=>()=>(Z&&($=Z(Z=0)),$);var H5=import.meta.require;var Xb={};O0(Xb,{lokiDir:()=>_0,homeLokiDir:()=>x4,findRepoRootForVersion:()=>HL,REPO_ROOT:()=>x0});import{resolve as T2,dirname as GL}from"path";import{fileURLToPath as Rq0}from"url";import{existsSync as PG}from"fs";import{homedir as wq0}from"os";function kq0(){let Z=$b;for(let $=0;$<6;$++){if(PG(T2(Z,"VERSION"))&&PG(T2(Z,"autonomy/run.sh")))return Z;let X=GL(Z);if(X===Z)break;Z=X}return T2($b,"..","..","..")}function HL(Z){let $=Z;for(let X=0;X<6;X++){if(PG(T2($,"VERSION"))&&PG(T2($,"autonomy/run.sh")))return $;let J=GL($);if(J===$)break;$=J}return T2(Z,"..","..","..")}function _0(){return process.env.LOKI_DIR??T2(process.cwd(),".loki")}function x4(){return T2(wq0(),".loki")}var $b,x0;var Q8=y(()=>{$b=GL(Rq0(import.meta.url));x0=kq0()});import{readFileSync as xq0}from"fs";import{resolve as _q0,dirname as Sq0}from"path";import{fileURLToPath as yq0}from"url";function U7(){if(zZ!==null)return zZ;let Z="11.3.5";if(typeof Z==="string"&&Z.length>0)return zZ=Z,zZ;try{let $=Sq0(yq0(import.meta.url)),X=HL($);zZ=xq0(_q0(X,"VERSION"),"utf-8").trim()}catch{zZ="unknown"}return zZ}var zZ=null;var e$=y(()=>{Q8()});import{mkdirSync as bq0,readFileSync as Yb,realpathSync as vq0,statSync as fq0,writeFileSync as hq0}from"fs";import{dirname as UL,join as Jb,resolve as gq0}from"path";function dq0(){return gq0(x4(),"cache","update-check.json")}function Z1(Z){let $=/^(\d+)\.(\d+)\.(\d+)$/.exec(Z.trim());if(!$)return null;return[Number($[1]),Number($[2]),Number($[3])]}function EG(Z,$){let X=Z1(Z),J=Z1($);if(!X||!J)return!1;let[Y,W,z]=X,[Q,K,V]=J;if(Y!==Q)return Y>Q;if(W!==K)return W>K;return z>V}function cq0(){if(process.env.LOKI_NO_UPDATE_CHECK==="1")return!0;if(process.env.CI)return!0;if(!process.stdout.isTTY)return!0;return!1}function lq0(Z){try{let $=Yb(Z,"utf-8"),X=JSON.parse($);if(typeof X.checkedAt==="number"&&typeof X.latest==="string"&&Z1(X.latest)!==null)return{checkedAt:X.checkedAt,latest:X.latest}}catch{}return null}function iq0(Z,$){try{bq0(UL(Z),{recursive:!0}),hq0(Z,JSON.stringify($),"utf-8")}catch{}}async function aq0(){try{let Z=await fetch(mq0,{signal:AbortSignal.timeout(pq0),headers:{accept:"application/json"}});if(!Z.ok)return null;let $=await Z.json();if(typeof $.version==="string"&&Z1($.version)!==null)return $.version}catch{}return null}async function oq0(Z=Date.now(),$=aq0,X=dq0()){let J=lq0(X);if(J&&Z-J.checkedAt<uq0)return J.latest;let Y=await $();if(Y===null)return null;return iq0(X,{checkedAt:Z,latest:Y}),Y}function nq0(Z,$=process.env){if(Z1(Z)===null)return null;let J=$.PATH;if(!J)return null;let Y=new Set;for(let W of J.split(":")){if(!W)continue;let z=Jb(W,"loki"),Q;try{fq0(z),Q=vq0(z)}catch{continue}if(Y.has(Q))continue;Y.add(Q);try{let K=Jb(UL(UL(Q)),"package.json"),V=JSON.parse(Yb(K,"utf8")).version;if(typeof V!=="string")continue;if(EG(V,Z))return{path:z,version:V}}catch{continue}}return null}async function Wb(Z,$={}){try{if(cq0())return;if(Z1(Z)===null)return;let X=$.write??((W)=>process.stderr.write(W)),J=nq0(Z,$.env??process.env);if(J!==null){X(`Loki Mode ${J.version} is installed but not the one running (you are running ${Z}).
|
|
3
3
|
Another loki earlier on PATH is winning. Newer copy: ${J.path}
|
|
4
4
|
Run \`which -a loki\` to see the order, then remove or re-point the earlier entry.
|
|
5
5
|
`);return}let Y=await oq0($.now,$.fetcher,$.cacheFile);if(Y===null)return;if(!EG(Y,Z))return;X(`A newer Loki Mode is available: ${Y} (you have ${Z}). Update: bun install -g loki-mode (or npm i -g loki-mode)
|
|
@@ -2065,4 +2065,4 @@ Unknown commands exit 2 with a suggestion; run 'loki help' for the full list.
|
|
|
2065
2065
|
`);{let{suggestCommand:J}=await Promise.resolve().then(() => (vy(),mU0)),Y=$===void 0?void 0:J($);if(Y)process.stderr.write(`Did you mean 'loki ${Y}'?
|
|
2066
2066
|
`)}return process.stderr.write(Vq0),2}}GZ0();process.on("SIGINT",()=>process.exit(130));process.on("SIGTERM",()=>process.exit(143));var wd8=await Rd8(Bun.argv.slice(2));process.exit(wd8);
|
|
2067
2067
|
|
|
2068
|
-
//# debugId=
|
|
2068
|
+
//# debugId=80286AFE1EB454F5A51990AFC372ADDC
|
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.3.
|
|
4
|
+
"version": "11.3.5",
|
|
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": "b91130e50a64ad2a1dc7bfaf4a041f7416e47a6c"
|
|
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.3.
|
|
5
|
+
"version": "11.3.5",
|
|
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-Bq0IXorg.js";import{B as C}from"./Button-CUGJz-QD.js";import{T as $e}from"./trending-up-BxPu0OUd.js";import{C as z}from"./clock-B0jfhwc2.js";import{A as Be,U as ue,M as De}from"./Avatar-BunEd-95.js";import{A as J}from"./activity-B9Qo_kJN.js";import{R as pe}from"./refresh-cw-DzmKZ3CW.js";import{G as ze}from"./globe-D0ceSi6L.js";import{C as Le}from"./chevron-left-BKGmCkxA.js";import{C as je}from"./check-DYle8PJT.js";import{D as Y}from"./dollar-sign-alo3vpLg.js";import{U as Te}from"./user-B9a_CFg0.js";import{D as Me}from"./database-E6L0Lwuc.js";import{L as Ue}from"./lock-qWtNggvV.js";import{S as Re}from"./scroll-text-CLK1QhL-.js";import{S as Ie}from"./shield-alert-aK0eddg8.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-Bq0IXorg.js";import{C as r}from"./clock-B0jfhwc2.js";import{C as a}from"./circle-alert-Dc1XUGH3.js";import{C as l}from"./check-DYle8PJT.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-Bq0IXorg.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-Bq0IXorg.js";import{P as K,S as He,E as Be}from"./ErrorBoundary-BPVaV2s1.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-B_jbqHDP.js";import{C as oe}from"./check-DYle8PJT.js";import{C as Ye}from"./clock-B0jfhwc2.js";import{D as Xe}from"./dollar-sign-alo3vpLg.js";import{U as Ze}from"./upload-DaaWxRxF.js";import{L as V}from"./loader-circle-aPR8MCfq.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-DnCsWpCh.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-Bq0IXorg.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-DUOseTYA.js → EvidenceReceiptPanel-B1o2RKnU.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-Bq0IXorg.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-Bq0IXorg.js";import{B as N}from"./Button-CUGJz-QD.js";import{C as y}from"./thumbs-up-B_jbqHDP.js";import{R as S}from"./refresh-cw-DzmKZ3CW.js";import{C as z}from"./circle-alert-Dc1XUGH3.js";import{U as D}from"./user-B9a_CFg0.js";import{L as G}from"./loader-circle-aPR8MCfq.js";import{R as T}from"./rotate-ccw-DZMAdo4p.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-Bq0IXorg.js";import{B as y}from"./Button-CUGJz-QD.js";import{C as ge}from"./chevron-left-BKGmCkxA.js";import{G as P}from"./thumbs-up-B_jbqHDP.js";import{R as $}from"./refresh-cw-DzmKZ3CW.js";import{C as Ne}from"./circle-alert-Dc1XUGH3.js";import{L as Q,S as je}from"./ProjectPage-qjTYnrCe.js";import{S as se}from"./shield-alert-aK0eddg8.js";import{F as ye}from"./file-code-corner-DcstcagN.js";import{C as V}from"./clock-B0jfhwc2.js";import{C as re}from"./check-DYle8PJT.js";import"./ErrorBoundary-BPVaV2s1.js";import"./TerminalOutput-pst4yhsm.js";import"./lock-qWtNggvV.js";import"./package-Cf9OA6-r.js";import"./file-plus-DYrxUtNS.js";import"./activity-B9Qo_kJN.js";import"./scroll-text-CLK1QhL-.js";import"./bot-UQlOwPgx.js";import"./loader-circle-aPR8MCfq.js";import"./hammer-Bix0hGg_.js";import"./dollar-sign-alo3vpLg.js";import"./globe-D0ceSi6L.js";import"./trash-2-Dgo9A169.js";import"./upload-DaaWxRxF.js";import"./plus-BFwUepQN.js";import"./rotate-ccw-DZMAdo4p.js";import"./code-xml-CPdTgKr9.js";import"./trending-up-BxPu0OUd.js";import"./layers-ClEOJz-A.js";import"./trending-down-DeRHmNFR.js";import"./server-D2hE3MdR.js";/**
|
|
2
2
|
* @license lucide-react v0.577.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|