loki-mode 11.3.0 → 11.3.2
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/README.md +68 -650
- package/SKILL.md +5 -5
- package/VERSION +1 -1
- package/autonomy/completion-council.sh +2 -2
- package/autonomy/context-tracker.py +4 -4
- package/autonomy/council-v2.sh +1 -1
- package/autonomy/grill.sh +1 -1
- package/autonomy/lib/done-recognition.sh +1 -1
- package/autonomy/lib/efficiency_cost.py +8 -0
- package/autonomy/lib/engine10-push.sh +22 -8
- package/autonomy/lib/prd-enrich.sh +1 -1
- package/autonomy/lib/voter-agents.sh +1 -1
- package/autonomy/loki +161 -105
- package/autonomy/run.sh +30 -18
- package/autonomy/sandbox.sh +1 -1
- package/autonomy/tui.sh +6 -5
- package/autonomy/verify.sh +1 -1
- package/bin/loki +195 -59
- package/completions/_loki +8 -0
- package/completions/loki.bash +3 -3
- package/dashboard/__init__.py +1 -1
- package/dashboard/server.py +47 -45
- package/docs/AGENT-CHANGE-RECEIPT.md +2 -2
- package/docs/ARCHITECTURE.md +337 -0
- package/docs/BRANDING.md +124 -0
- package/docs/CLI-REFERENCE.md +11 -1
- package/docs/COMPONENTS.md +447 -0
- package/docs/DEPLOYMENT.md +9 -9
- package/docs/DOCKER.md +469 -0
- package/docs/INSTALLATION.md +67 -1045
- package/docs/KNOWN-ISSUES.md +11 -35
- package/docs/OTEL-COLLECTOR.md +24 -0
- package/docs/ROUTING-EVIDENCE.md +32 -0
- package/docs/TESTING.md +161 -0
- package/docs/air-gapped.md +1 -2
- package/docs/alternative-installations.md +14 -24
- package/docs/architecture/DECISIONS.md +333 -0
- package/docs/audit-logging.md +7 -7
- package/docs/authentication.md +3 -3
- package/docs/authorization.md +1 -1
- package/docs/certification/04-production-deployment/lab.md +6 -6
- package/docs/certification/04-production-deployment/lesson.md +4 -4
- package/docs/certification/README.md +1 -1
- package/docs/control-plane-container.md +2 -2
- package/docs/dev/real-run.md +34 -0
- package/docs/dev/release-checklist.md +2 -2
- package/docs/environment-variables.md +1 -0
- package/docs/exit-codes.md +3 -3
- package/docs/git-workflow.md +3 -3
- package/docs/metrics.md +37 -55
- package/docs/network-security.md +1 -1
- package/docs/siem-integration.md +5 -5
- package/docs/spec-first-intent.md +28 -0
- package/docs/v10/CLI-MODERN.md +7 -3
- package/docs/v10/DECISIONS.md +59 -0
- package/docs/v10/DEPS.md +22 -22
- package/docs/v10/ENGINE.md +1 -1
- package/docs/v10/FAILURE-CLASSES.md +212 -1
- package/docs/v10/FOUNDER-QUEUE.md +1 -0
- package/docs/v10/GUARDS.md +31 -0
- package/docs/v10/GUIDE.md +7 -5
- package/docs/v10/LEGACY-REMOVAL.md +4 -6
- package/docs/v10/METRICS.md +14 -2
- package/docs/v10/MODERNIZE.md +1 -1
- package/docs/v10/OPERATING-MODEL.md +4 -3
- package/docs/v10/PROGRESS.md +35 -0
- package/docs/v11/COST-HALF.md +352 -0
- package/docs/v11/INTOTO-AGENT-CHANGE-PREDICATE.md +77 -0
- package/docs/v11/MARKET-SLICES.md +315 -0
- package/docs/v11/MCP-2026-07-28.md +55 -0
- package/docs/v11/REGISTRIES.md +730 -0
- package/docs/v11/VERIFY-PR-SANDBOX.md +41 -0
- package/loki-ts/data/model-pricing.json +52 -24
- package/loki-ts/dist/loki.js +1185 -945
- package/mcp/__init__.py +1 -1
- package/mcp/v10_tools.py +29 -0
- package/package.json +9 -11
- package/packages/control-plane/dist/ask-tools-server.js +8 -2
- package/packages/control-plane/dist/server.js +15832 -12361
- package/packages/control-plane/drizzle/0006_token_sessions.sql +1 -0
- package/packages/control-plane/drizzle/meta/0006_snapshot.json +807 -0
- package/packages/control-plane/drizzle/meta/_journal.json +7 -0
- package/packages/control-plane/src/db/schema.ts +1 -0
- package/packages/control-plane/src/server/routes/cost.ts +4 -3
- package/packages/control-plane/src/server/runs.ts +3 -3
- package/packages/control-plane/ui/dist/assets/index-DbLzr87u.js +190 -0
- package/packages/control-plane/ui/dist/index.html +1 -1
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/providers/opencode.sh +2 -3
- package/src/observability/genai-spans.js +104 -0
- package/src/observability/otel-bridge.js +49 -1
- package/src/observability/otel.js +2 -2
- package/src/protocols/mcp-client.js +6 -2
- package/src/protocols/mcp-server.js +191 -6
- package/src/protocols/transport/sse.js +23 -2
- package/tools/audit-docs.py +1 -1
- package/web-app/dist/assets/{AdminPage-D_e45uTw.js → AdminPage-DuRQZsF9.js} +1 -1
- package/web-app/dist/assets/{Avatar-T3nIpoaf.js → Avatar-7GtOQvsO.js} +1 -1
- package/web-app/dist/assets/{Badge-BKqb59pP.js → Badge-CYgTnIxj.js} +1 -1
- package/web-app/dist/assets/{Button-DjVlkh8_.js → Button-rYSyIu7X.js} +1 -1
- package/web-app/dist/assets/{CockpitPage-DXJgLGmh.js → CockpitPage-9adANY4o.js} +1 -1
- package/web-app/dist/assets/{ComparePage-BRP_eVc_.js → ComparePage-DEG2oA-R.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-CLjpGLjC.js → ErrorBoundary-CwtvY4xs.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-DX-vb4Xy.js → EvidenceReceiptPanel-DTT73pPB.js} +1 -1
- package/web-app/dist/assets/{GitHubIssuesPanel-214HVHtX.js → GitHubIssuesPanel-CpWZLz2x.js} +1 -1
- package/web-app/dist/assets/{GitHubPRsPanel-BEiZKc4t.js → GitHubPRsPanel-H293R7E2.js} +1 -1
- package/web-app/dist/assets/{HomePage-VvMHS5ga.js → HomePage-B11Imp9k.js} +2 -2
- package/web-app/dist/assets/{LoginPage-5WD-v7n3.js → LoginPage-BZBgx5Jr.js} +1 -1
- package/web-app/dist/assets/{MagicPage-DUQT_Jye.js → MagicPage-B27S4_X8.js} +1 -1
- package/web-app/dist/assets/{MetricsPage-lga-z79v.js → MetricsPage-CfbJWNDG.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-CGhBX3G1.js → NotFoundPage-Tp_4zMSm.js} +1 -1
- package/web-app/dist/assets/{ProjectPage-CdzF2GzZ.js → ProjectPage-CM4fgMsV.js} +3 -3
- package/web-app/dist/assets/{ProjectsPage-DRG64N8s.js → ProjectsPage-DP2Fvsrd.js} +1 -1
- package/web-app/dist/assets/{SettingsPage-5fzW9Frb.js → SettingsPage-C4G9-EAy.js} +1 -1
- package/web-app/dist/assets/{ShowcasePage-DrTdxO4y.js → ShowcasePage-Dj-n4dwu.js} +1 -1
- package/web-app/dist/assets/{SystemSettingsPage-C9Mqs6Rd.js → SystemSettingsPage-BqMLpuGt.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-CUGPdSWo.js → TeamsPage-mIH8H96m.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-CNraDY0F.js → TemplatesPage-BagW-v4n.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-BIu_6Pea.js → TerminalOutput-CTQRHhnK.js} +1 -1
- package/web-app/dist/assets/{activity-Bk-kgqaf.js → activity-DNQiBDDL.js} +1 -1
- package/web-app/dist/assets/{bell-BXmUdmo8.js → bell-Coiwdad1.js} +1 -1
- package/web-app/dist/assets/{bot-CiuzXxUR.js → bot-Cou-rTgR.js} +1 -1
- package/web-app/dist/assets/{check-BEzjXppd.js → check-CsF-XtQp.js} +1 -1
- package/web-app/dist/assets/{chevron-left-AYWCXHf8.js → chevron-left-BJiy55Ht.js} +1 -1
- package/web-app/dist/assets/{circle-alert-BNg2uSRq.js → circle-alert-D6-pQQWq.js} +1 -1
- package/web-app/dist/assets/{clock-DTj0kkGT.js → clock-BOGqwgt9.js} +1 -1
- package/web-app/dist/assets/{cloud-x4nTDBLT.js → cloud-DsxhTtf5.js} +1 -1
- package/web-app/dist/assets/{code-xml-BVh_MLrk.js → code-xml-CxJDHUlE.js} +1 -1
- package/web-app/dist/assets/{database-DdfBaowG.js → database-BJePscl_.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-XuYFmAOY.js → dollar-sign-6qWGAkZo.js} +1 -1
- package/web-app/dist/assets/{file-code-corner-D4cRnmeL.js → file-code-corner-DcOtYeDb.js} +1 -1
- package/web-app/dist/assets/{file-plus-CyoVlHc_.js → file-plus-WuRyLFo0.js} +1 -1
- package/web-app/dist/assets/{globe-Y6IK2RPW.js → globe-r-xCP4DE.js} +1 -1
- package/web-app/dist/assets/{hammer-BKzr9VZI.js → hammer-DTt0SsCB.js} +1 -1
- package/web-app/dist/assets/{index-B20cSx5G.js → index-BkbXyH8y.js} +3 -3
- package/web-app/dist/assets/{layers-DebNOhGS.js → layers-BvZhvSMY.js} +1 -1
- package/web-app/dist/assets/{loader-circle-DyGbrEgd.js → loader-circle-3gosTei9.js} +1 -1
- package/web-app/dist/assets/{lock-BKPpyt20.js → lock-CZZMxP0U.js} +1 -1
- package/web-app/dist/assets/{package-egF5Wi4y.js → package-C5A8CkJr.js} +1 -1
- package/web-app/dist/assets/{plus-OiEgKIc-.js → plus-Btv7tTIF.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-CzKvrONq.js → refresh-cw-DsWLXgs_.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-Bu2mII0p.js → rotate-ccw-DOVDjway.js} +1 -1
- package/web-app/dist/assets/{scroll-text-CSkiyax8.js → scroll-text-smySzlrX.js} +1 -1
- package/web-app/dist/assets/{server-DlPthJFw.js → server-b5PHsqAU.js} +1 -1
- package/web-app/dist/assets/{shield-alert-CbpHWQQX.js → shield-alert-BD7FDlh-.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-DgGpZe-Q.js → thumbs-up-CAsFzbyE.js} +1 -1
- package/web-app/dist/assets/{trash-2-BV3GlCB-.js → trash-2-BJ35qHgl.js} +1 -1
- package/web-app/dist/assets/{trending-down-Y4TJtXhD.js → trending-down-Ozrd26cZ.js} +1 -1
- package/web-app/dist/assets/{trending-up-DsDNoHZY.js → trending-up-BhnMcM32.js} +1 -1
- package/web-app/dist/assets/{upload-gkThrc_I.js → upload-JVHfdwoA.js} +1 -1
- package/web-app/dist/assets/{usePolling-jpNSeNAe.js → usePolling-CTzbDV-e.js} +1 -1
- package/web-app/dist/assets/{user-3Zez1WOK.js → user-Bks3-GYv.js} +1 -1
- package/web-app/dist/index.html +1 -1
- package/docs/ARCHITECTURE-OVERVIEW.md +0 -209
- package/docs/AUTONOMI-ECOSYSTEM.md +0 -107
- package/docs/COCKPIT-SPEC.md +0 -72
- package/docs/COCKPIT-UX-MANDATE.md +0 -53
- package/docs/COMPETITIVE-ANALYSIS.md +0 -303
- package/docs/COMPETITIVE-NEXT-10.md +0 -316
- package/docs/COMPETITIVE-RALPH-ZEROSHOT-2026-07-08.md +0 -81
- package/docs/DASHBOARD-9.12-EVIDENCE.md +0 -97
- package/docs/DASHBOARD-ARCHITECTURE.md +0 -425
- package/docs/DASHBOARD_V2_CHECKLIST.md +0 -243
- package/docs/DEMOS.md +0 -63
- package/docs/ENTERPRISE-IDENTITY-ROADMAP.md +0 -206
- package/docs/EVIDENCE-RECEIPT-BUILD-APPLICABILITY.md +0 -79
- package/docs/FEAT-PRDREUSE-DOCKER-PLAN.md +0 -144
- package/docs/GATE-FAILURE-TRIAGE.md +0 -254
- package/docs/HANDOFF-2026-08-03.md +0 -439
- package/docs/LOOP-CANDIDATE-PROPOSAL-v1.md +0 -167
- package/docs/LOOP-HARNESS-AUDIT.md +0 -684
- package/docs/MERGE-DEDUP-MAP.md +0 -420
- package/docs/MERGE-ROUTE-MAP.md +0 -139
- package/docs/MODEL-REGISTRY-PLAN.md +0 -155
- package/docs/OUTCOME-FRONTIER.md +0 -536
- package/docs/P2-SPEC-ROBUSTNESS-PLAN.md +0 -192
- package/docs/PLANS-INDEX.md +0 -32
- package/docs/PRD-REUSE-DONE-RECOGNITION-PLAN.md +0 -536
- package/docs/PROMPT-ABLATION-RESULT.md +0 -97
- package/docs/R4-TRUST-TRAJECTORY-DESIGN.md +0 -127
- package/docs/R5-AUTO-WIKI-DESIGN.md +0 -137
- package/docs/R6-ROLLBACK-CHECKPOINT-PLAN.md +0 -107
- package/docs/R7-ZERO-CONFIG-FIRST-RUN-PLAN.md +0 -137
- package/docs/R8-SHAREABLE-TEAM-ASSETS-PLAN.md +0 -129
- package/docs/R9-OPEN-CORE-HOOKS-PLAN.md +0 -113
- package/docs/RARV-C-100X-PLAN.md +0 -286
- package/docs/RARV-C-LOOP-EFFICIENCY-PLAN.md +0 -470
- package/docs/SHAREABLE-PROOF-PLAN.md +0 -194
- package/docs/SONNET5-DEFAULT-PLAN.md +0 -157
- package/docs/SPEED-AND-FIRST-PASS-PLAN.md +0 -281
- package/docs/STALE-STATE-AUDIT.md +0 -174
- package/docs/SYNERGY-TASKS.md +0 -143
- package/docs/TASKLIST-ACCURACY-PLAN.md +0 -355
- package/docs/TOP-100-BACKLOG.md +0 -159
- package/docs/V8-ACCEPTANCE-TRIAGE-2026-07-24.md +0 -114
- package/docs/V8-COMPLEXITY-AUDIT-2026-07-24.md +0 -45
- package/docs/V8-MAJOR-RELEASE-PLAN.md +0 -137
- package/docs/V8-OVERNIGHT-PLAN-2026-07-25.md +0 -82
- package/docs/V8-SDK-RESEARCH-RAW.md +0 -129
- package/docs/WELCOME-OPENER-PLAN.md +0 -106
- package/docs/adoption-baseline-2026-07-31.md +0 -84
- package/docs/architecture/bmad-integration-epic.md +0 -271
- package/docs/architecture/bmad-integration-review.md +0 -86
- package/docs/architecture/bmad-integration-validation.md +0 -249
- package/docs/architecture/bmad-loki-voice-agent-council-analysis.md +0 -61
- package/docs/auto-claude-comparison.md +0 -250
- package/docs/bug-fixes/agent-01-cli-fixes.md +0 -101
- package/docs/bug-fixes/agent-02-purplelab-fixes.md +0 -88
- package/docs/bug-fixes/agent-03-dashboard-fixes.md +0 -119
- package/docs/bug-fixes/agent-04-memory-fixes.md +0 -105
- package/docs/bug-fixes/agent-05-provider-fixes.md +0 -86
- package/docs/bug-fixes/agent-06-integration-fixes.md +0 -101
- package/docs/bug-fixes/agent-07-dash-run-fixes.md +0 -101
- package/docs/bug-fixes/agent-08-docker-fixes.md +0 -164
- package/docs/bug-fixes/agent-09-e2e-build-fixes.md +0 -69
- package/docs/bug-fixes/agent-10-e2e-fullstack-fixes.md +0 -102
- package/docs/bug-fixes/agent-11-e2e-session-fixes.md +0 -70
- package/docs/bug-fixes/agent-12-scenario-fixes.md +0 -120
- package/docs/bug-fixes/agent-13-enterprise-fixes.md +0 -143
- package/docs/bug-fixes/agent-14-uat-newuser-fixes.md +0 -88
- package/docs/bug-fixes/agent-15-uat-poweruser-fixes.md +0 -132
- package/docs/bug-fixes/agent-19-code-review.md +0 -316
- package/docs/bug-fixes/agent-20-architecture-review.md +0 -331
- package/docs/competitive/bolt-new-analysis.md +0 -579
- package/docs/competitive/emergence-others-analysis.md +0 -605
- package/docs/competitive/replit-lovable-analysis.md +0 -622
- package/docs/dashboard-guide.md +0 -487
- package/docs/enterprise/migration.md +0 -265
- package/docs/history/one-run-audit.md +0 -304
- package/docs/plans/FORGE-AUTONOMOUS-QUEUE.md +0 -312
- package/docs/plans/ULTRAPLAN-FORGE-BAAS.md +0 -612
- package/docs/plans/UT2-6-LSP-DIAGNOSTIC-BROADCAST.md +0 -394
- package/docs/prd-purple-lab-ide.md +0 -152
- package/docs/prd-purple-lab-platform-v2.md +0 -223
- package/docs/prd-purple-lab-platform.md +0 -319
- package/docs/retrospectives/v7.5.15-fleet-postmortem.md +0 -325
- package/docs/retrospectives/v7.5.15-honesty-audit.md +0 -136
- package/docs/retrospectives/v7.5.15-llm-failure-modes.md +0 -49
- package/docs/show-hn-post.md +0 -46
- package/docs/test-scenarios/enterprise-scenarios.md +0 -732
- package/docs/thick2thin.md +0 -173
- package/packages/control-plane/ui/dist/assets/index-DcBJXjCJ.js +0 -190
package/autonomy/loki
CHANGED
|
@@ -1691,6 +1691,22 @@ _help_answer() {
|
|
|
1691
1691
|
echo "and sets LOKI_NO_BROWSER=1."
|
|
1692
1692
|
}
|
|
1693
1693
|
|
|
1694
|
+
# `loki help verify-pr`: a Bun-only command (loki-ts), so its help lives here.
|
|
1695
|
+
_help_verify_pr() {
|
|
1696
|
+
echo -e "${BOLD}loki verify-pr${NC} - Verify a PR against its linked issue (experimental, LOKI_VERIFY_PR=1)"
|
|
1697
|
+
echo ""
|
|
1698
|
+
echo "Usage: loki verify-pr <https://github.com/o/r/pull/N | o/r#N> [--out DIR]"
|
|
1699
|
+
echo ""
|
|
1700
|
+
echo "Derives a check from the PR's linked issue (Check: \`cmd\` or a loki-check fence)."
|
|
1701
|
+
echo "VERIFIED only if the check fails on the PR base, passes on its head, and the"
|
|
1702
|
+
echo "touched packages' suites pass. A PR with no linked issue, no check, a removed"
|
|
1703
|
+
echo "test or a non-discriminating check is NOT PROVEN. Writes verify-pr-result.json."
|
|
1704
|
+
echo "PR code runs only in the container sandbox (scripts/verify-pr-sandbox.sh); set"
|
|
1705
|
+
echo "LOKI_VPR_IMAGE to a locally present image."
|
|
1706
|
+
echo ""
|
|
1707
|
+
echo "Exit codes: 0 verified, 2 usage or sandbox blocked, 4 not proven."
|
|
1708
|
+
}
|
|
1709
|
+
|
|
1694
1710
|
# Appended to `loki help verify`: the v10 DSSE export flag (docs/exit-codes.md).
|
|
1695
1711
|
_help_verify_dsse() {
|
|
1696
1712
|
echo ""
|
|
@@ -1763,6 +1779,7 @@ show_help() {
|
|
|
1763
1779
|
echo " review [opts] Standalone code review with quality gates"
|
|
1764
1780
|
echo " ultracode \"task\" Run a task as a native Claude Code Dynamic Workflow (opt-in, Claude-only)"
|
|
1765
1781
|
echo " trust [cmd] Visible trust trajectory; 'trust detail' for metrics"
|
|
1782
|
+
echo " undo <run> [--plan] Plan or apply (LOKI_UNDO=1) an undo of a run; verifies the receipt"
|
|
1766
1783
|
echo ""
|
|
1767
1784
|
echo "Observe:"
|
|
1768
1785
|
echo " dashboard [cmd] Operations UI server (start|stop|status|url|open)"
|
|
@@ -1798,13 +1815,9 @@ show_help() {
|
|
|
1798
1815
|
echo ""
|
|
1799
1816
|
echo "Options for 'start':"
|
|
1800
1817
|
echo " --provider NAME AI provider: claude (default), codex, cline, aider, opencode"
|
|
1801
|
-
echo " --parallel Enable parallel mode with git worktrees"
|
|
1802
|
-
echo " --bg, --background Run in background mode"
|
|
1803
1818
|
echo " --simple Force simple complexity tier (3 phases)"
|
|
1804
1819
|
echo " --complex Force complex complexity tier (8 phases)"
|
|
1805
|
-
echo " --github Enable GitHub issue import"
|
|
1806
1820
|
echo " --no-dashboard Disable web dashboard"
|
|
1807
|
-
echo " --sandbox Run in Docker sandbox for isolation (default: off; requires Docker)"
|
|
1808
1821
|
echo " --isolation LVL Per-run isolation dial: none (default) | worktree | docker"
|
|
1809
1822
|
echo " --skip-memory Skip loading memory context at startup"
|
|
1810
1823
|
echo " --fresh-prd Regenerate the PRD from the codebase (no-PRD runs; ignores the reusable generated PRD)"
|
|
@@ -1824,8 +1837,6 @@ show_help() {
|
|
|
1824
1837
|
echo " loki start ./prd.md # Start with PRD file"
|
|
1825
1838
|
echo " loki start owner/repo#123 # GitHub issue (auto-fetches)"
|
|
1826
1839
|
echo " loki start PROJ-456 # Jira issue"
|
|
1827
|
-
echo " loki start --bg ./prd.md # Start in background"
|
|
1828
|
-
echo " loki start --parallel ./prd.md # Parallel mode (git worktrees)"
|
|
1829
1840
|
echo " loki quick \"add dark mode\" # Single-task mode (Loki 10 engine)"
|
|
1830
1841
|
echo " loki tour # See a real sample result (no provider, no key, no spend)"
|
|
1831
1842
|
echo " loki demo # Build a sample todo app end to end"
|
|
@@ -1860,7 +1871,7 @@ show_help() {
|
|
|
1860
1871
|
echo " # only the OpenAI-shaped /v1/chat/completions. Use the aider or"
|
|
1861
1872
|
echo " # cline route above for OpenRouter."
|
|
1862
1873
|
echo ""
|
|
1863
|
-
echo " # Cross-project context (Phase F
|
|
1874
|
+
echo " # Cross-project context (Phase F)"
|
|
1864
1875
|
echo " # Drop .loki/app.json with {schema_version:1,app_id:myapp,members:[ui,api]}"
|
|
1865
1876
|
echo " # at the parent of related repos for shared CLAUDE.md + memory."
|
|
1866
1877
|
echo ""
|
|
@@ -1871,7 +1882,7 @@ show_help() {
|
|
|
1871
1882
|
echo ""
|
|
1872
1883
|
echo " # Config + dashboard"
|
|
1873
1884
|
echo " loki config set maxTier sonnet # Cap model cost"
|
|
1874
|
-
echo " loki dashboard start #
|
|
1885
|
+
echo " loki dashboard start # Open the Control Plane UI"
|
|
1875
1886
|
echo " loki watch # Auto-rerun on PRD changes"
|
|
1876
1887
|
echo " loki cockpit # Live multi-repo cockpit (terminal image)"
|
|
1877
1888
|
echo " loki remote # Remote session (phone/browser)"
|
|
@@ -1898,13 +1909,13 @@ show_help() {
|
|
|
1898
1909
|
echo " merge resume review rollback run sandbox secrets secure self-update sentrux"
|
|
1899
1910
|
echo " serve setup-skill share ship spec start state stats status steer stop"
|
|
1900
1911
|
echo " syslog telemetry template test tour trigger trust trust-metrics"
|
|
1901
|
-
echo " ultracode update verify version voice watch watchdog web welcome why"
|
|
1912
|
+
echo " ultracode undo update verify version voice watch watchdog web welcome why"
|
|
1902
1913
|
echo " wiki workspace worktree (wt)"
|
|
1903
1914
|
echo " control"
|
|
1904
1915
|
echo ""
|
|
1905
1916
|
echo "Any command: loki <command> --help"
|
|
1906
1917
|
echo ""
|
|
1907
|
-
echo "Phase A-J features
|
|
1918
|
+
echo "Phase A-J features are default-on. See CHANGELOG."
|
|
1908
1919
|
echo ""
|
|
1909
1920
|
echo "Environment variables an operator would set: docs/environment-variables.md"
|
|
1910
1921
|
echo "Cost controls (budget, iteration and wall-clock caps): docs/cost-controls.md"
|
|
@@ -2534,7 +2545,7 @@ cmd_start() {
|
|
|
2534
2545
|
while [[ $# -gt 0 ]]; do
|
|
2535
2546
|
case "$1" in
|
|
2536
2547
|
--help|-h)
|
|
2537
|
-
echo -e "${BOLD}loki start${NC} - Unified entry point for Loki Mode
|
|
2548
|
+
echo -e "${BOLD}loki start${NC} - Unified entry point for Loki Mode"
|
|
2538
2549
|
echo ""
|
|
2539
2550
|
echo "Usage: loki start [REPO|PRD|ISSUE-REF] [options]"
|
|
2540
2551
|
echo ""
|
|
@@ -2563,17 +2574,15 @@ cmd_start() {
|
|
|
2563
2574
|
echo " Token from LOKI_REMOTE_TOKEN / LOKI_REMOTE_TOKEN_FILE"
|
|
2564
2575
|
echo " (never an argument). Env: LOKI_REMOTE_URL."
|
|
2565
2576
|
echo " --provider NAME AI provider: claude (default), codex, cline, aider, opencode"
|
|
2566
|
-
echo " --parallel Enable parallel mode with git worktrees"
|
|
2567
2577
|
echo " --allow-haiku Enable Haiku model for the fast tier (default: disabled)"
|
|
2568
|
-
echo " --bg, --background Run in background mode"
|
|
2569
2578
|
echo " --simple Force simple complexity tier (3 phases)"
|
|
2570
2579
|
echo " --complex Force complex complexity tier (8 phases)"
|
|
2571
|
-
echo " --github Enable GitHub issue import"
|
|
2572
2580
|
echo " --no-dashboard Disable web dashboard"
|
|
2573
2581
|
echo " --api Start dashboard API server alongside the build"
|
|
2574
|
-
echo " --sandbox Run in Docker sandbox (default: off; requires Docker)"
|
|
2575
2582
|
echo " --isolation LEVEL Per-run isolation: none (default) | worktree | docker."
|
|
2576
|
-
echo " Unified dial
|
|
2583
|
+
echo " Unified dial."
|
|
2584
|
+
echo " --attempts N Run N (1-5, default 1) independent attempts in separate git worktrees;"
|
|
2585
|
+
echo " the most executed passing checks wins, losers are recorded on the receipt"
|
|
2577
2586
|
echo " --skip-memory Skip loading memory context at startup"
|
|
2578
2587
|
echo " --fresh-prd Regenerate the PRD from the codebase on a no-PRD run"
|
|
2579
2588
|
echo " (ignores the reusable generated PRD; aliases: --regen-prd,"
|
|
@@ -2606,7 +2615,6 @@ cmd_start() {
|
|
|
2606
2615
|
echo " --worktree, -w Git worktree isolation (separate branch)"
|
|
2607
2616
|
echo " --pr Worktree + auto-create PR"
|
|
2608
2617
|
echo " --ship Worktree + PR + auto-merge"
|
|
2609
|
-
echo " --detach, -d Run in background"
|
|
2610
2618
|
echo ""
|
|
2611
2619
|
echo "Preview without spending (any input mode):"
|
|
2612
2620
|
echo " loki plan <PRD> Analyze a spec WITHOUT executing: complexity,"
|
|
@@ -2635,7 +2643,6 @@ cmd_start() {
|
|
|
2635
2643
|
echo " loki start 123 # ISSUE mode (current repo GitHub issue)"
|
|
2636
2644
|
echo " loki start PROJ-456 # ISSUE mode (Jira)"
|
|
2637
2645
|
echo " loki start owner/repo#789 # ISSUE mode (GitHub specific repo)"
|
|
2638
|
-
echo " loki start --prd ./prd.md --parallel # Explicit PRD, parallel mode"
|
|
2639
2646
|
echo " loki start --issue 123 --ship # Explicit issue, full automation"
|
|
2640
2647
|
echo " loki start --provider codex # Use OpenAI Codex CLI"
|
|
2641
2648
|
echo " loki start --bmad-project ./my-project # Start from BMAD artifacts"
|
|
@@ -2728,6 +2735,17 @@ cmd_start() {
|
|
|
2728
2735
|
args+=("--parallel")
|
|
2729
2736
|
shift
|
|
2730
2737
|
;;
|
|
2738
|
+
--attempts)
|
|
2739
|
+
# 11.3.0 T5: N>=2 is routed to the Bun route by bin/loki; N=1 is today's behavior.
|
|
2740
|
+
if [[ "${2:-}" != "1" ]]; then
|
|
2741
|
+
echo -e "${RED}--attempts N (2-5) needs the Bun route: run via bin/loki${NC}"
|
|
2742
|
+
exit 1
|
|
2743
|
+
fi
|
|
2744
|
+
shift 2
|
|
2745
|
+
;;
|
|
2746
|
+
--attempts=1)
|
|
2747
|
+
shift
|
|
2748
|
+
;;
|
|
2731
2749
|
--allow-haiku)
|
|
2732
2750
|
# Enable Haiku for the fast tier. Mirrors the LOKI_ALLOW_HAIKU=true
|
|
2733
2751
|
# env var (consumed by providers/claude.sh and run.sh). Documented in
|
|
@@ -4232,7 +4250,7 @@ cmd_stop() {
|
|
|
4232
4250
|
while [[ $# -gt 0 ]]; do
|
|
4233
4251
|
case "$1" in
|
|
4234
4252
|
--help|-h)
|
|
4235
|
-
echo -e "${BOLD}loki stop${NC} - Stop running sessions
|
|
4253
|
+
echo -e "${BOLD}loki stop${NC} - Stop running sessions"
|
|
4236
4254
|
echo ""
|
|
4237
4255
|
echo "Usage: loki stop [session-id] [--all]"
|
|
4238
4256
|
echo ""
|
|
@@ -6411,22 +6429,35 @@ except Exception:
|
|
|
6411
6429
|
fi
|
|
6412
6430
|
fi
|
|
6413
6431
|
|
|
6414
|
-
#
|
|
6415
|
-
#
|
|
6416
|
-
# the
|
|
6417
|
-
|
|
6418
|
-
|
|
6419
|
-
|
|
6420
|
-
|
|
6432
|
+
# 133-F4: newest sealed receipt's verdict, read from the receipt field only
|
|
6433
|
+
# (never recomputed). Missing, empty or unparseable receipts never read as
|
|
6434
|
+
# VERIFIED. This replaces the old completion.json one-liner (Bun never had it).
|
|
6435
|
+
local receipt_line
|
|
6436
|
+
receipt_line=$(_LOKI_RUNS="$LOKI_DIR/runs" python3 -c "
|
|
6437
|
+
import json, os, re
|
|
6438
|
+
runs = os.environ['_LOKI_RUNS']
|
|
6421
6439
|
try:
|
|
6422
|
-
|
|
6423
|
-
print(d.get('outcome', '') or '')
|
|
6440
|
+
ids = sorted(d for d in os.listdir(runs) if os.path.isdir(os.path.join(runs, d)))
|
|
6424
6441
|
except Exception:
|
|
6425
|
-
|
|
6426
|
-
|
|
6427
|
-
|
|
6428
|
-
|
|
6429
|
-
|
|
6442
|
+
ids = []
|
|
6443
|
+
if not ids:
|
|
6444
|
+
print('Last run: no receipt (verdict NOT AVAILABLE)')
|
|
6445
|
+
else:
|
|
6446
|
+
try:
|
|
6447
|
+
d = json.load(open(os.path.join(runs, ids[-1], 'receipt.json')))
|
|
6448
|
+
v = d['verdict']
|
|
6449
|
+
h = d['receipt_sha256']
|
|
6450
|
+
if not (isinstance(v, str) and re.fullmatch(r'[A-Z_]+', v) and isinstance(h, str)):
|
|
6451
|
+
raise ValueError
|
|
6452
|
+
h = h[7:] if h.startswith('sha256:') else h
|
|
6453
|
+
if not re.fullmatch(r'[0-9a-f]{12,}', h):
|
|
6454
|
+
raise ValueError
|
|
6455
|
+
print('Last run: %s (receipt sha256:%s)' % (v, h[:12]))
|
|
6456
|
+
except Exception:
|
|
6457
|
+
print('Last run: receipt unreadable')
|
|
6458
|
+
" 2>/dev/null)
|
|
6459
|
+
[ -n "$receipt_line" ] || receipt_line="Last run: receipt unreadable"
|
|
6460
|
+
echo -e "${DIM}${receipt_line}${NC}"
|
|
6430
6461
|
|
|
6431
6462
|
echo ""
|
|
6432
6463
|
echo -e "${DIM} Tip: loki analyze context show - detailed token breakdown${NC}"
|
|
@@ -7085,7 +7116,7 @@ cmd_provider() {
|
|
|
7085
7116
|
echo " info Show provider details"
|
|
7086
7117
|
echo " models Show resolved model configuration for all providers"
|
|
7087
7118
|
echo ""
|
|
7088
|
-
echo "Precedence (
|
|
7119
|
+
echo "Precedence (highest wins):"
|
|
7089
7120
|
echo " 1. loki start --provider NAME CLI flag (per-invocation)"
|
|
7090
7121
|
echo " 2. .loki/state/provider saved value (per-project)"
|
|
7091
7122
|
echo " 3. LOKI_PROVIDER env var shell session default"
|
|
@@ -7591,13 +7622,14 @@ cmd_dashboard_help() {
|
|
|
7591
7622
|
echo ""
|
|
7592
7623
|
echo "Usage: loki dashboard <command> [options]"
|
|
7593
7624
|
echo ""
|
|
7594
|
-
echo "
|
|
7595
|
-
echo "
|
|
7596
|
-
echo "
|
|
7597
|
-
echo "
|
|
7625
|
+
echo "'loki dashboard', 'loki dashboard start' and 'loki dashboard open' open the Control Plane,"
|
|
7626
|
+
echo "the browser UI for runs, cost, receipts and events (default port 47821; override with"
|
|
7627
|
+
echo "LOKI_CONTROL_PORT). Needs bun; see 'loki control --help'."
|
|
7628
|
+
echo "The commands below manage the classic dashboard server, which serves the API only."
|
|
7629
|
+
echo "Setting LOKI_LEGACY_DASHBOARD=1, or passing --host, --tls-cert or --tls-key, selects it."
|
|
7598
7630
|
echo ""
|
|
7599
7631
|
echo "Commands:"
|
|
7600
|
-
echo " start
|
|
7632
|
+
echo " start Open the Control Plane (or start the classic API server with the flags below)"
|
|
7601
7633
|
echo " stop Stop the dashboard server"
|
|
7602
7634
|
echo " status Show server status and URL"
|
|
7603
7635
|
echo " url Get the dashboard URL"
|
|
@@ -7605,7 +7637,7 @@ cmd_dashboard_help() {
|
|
|
7605
7637
|
echo " help Show this help"
|
|
7606
7638
|
echo ""
|
|
7607
7639
|
echo "Options for 'start':"
|
|
7608
|
-
echo " --port PORT Port
|
|
7640
|
+
echo " --port PORT Port for the classic API server (default: see LOKI_DASHBOARD_PORT)"
|
|
7609
7641
|
echo " --host HOST Host to bind to (default: $DASHBOARD_DEFAULT_HOST)"
|
|
7610
7642
|
echo " --tls-cert PATH Path to PEM certificate (enables HTTPS)"
|
|
7611
7643
|
echo " --tls-key PATH Path to PEM private key (enables HTTPS)"
|
|
@@ -7614,7 +7646,7 @@ cmd_dashboard_help() {
|
|
|
7614
7646
|
echo " --format FMT Output format: text (default) or json"
|
|
7615
7647
|
echo ""
|
|
7616
7648
|
echo "Environment:"
|
|
7617
|
-
echo " LOKI_DASHBOARD_PORT
|
|
7649
|
+
echo " LOKI_DASHBOARD_PORT Port for the classic API server"
|
|
7618
7650
|
echo " LOKI_DASHBOARD_HOST Default host (overrides $DASHBOARD_DEFAULT_HOST)"
|
|
7619
7651
|
echo " LOKI_TLS_CERT Path to PEM certificate (enables HTTPS)"
|
|
7620
7652
|
echo " LOKI_TLS_KEY Path to PEM private key (enables HTTPS)"
|
|
@@ -7625,7 +7657,7 @@ cmd_dashboard_help() {
|
|
|
7625
7657
|
echo " loki dashboard start --tls-cert cert.pem --tls-key key.pem"
|
|
7626
7658
|
echo " loki dashboard status # Check if running"
|
|
7627
7659
|
echo " loki dashboard url --format json # Get URL as JSON"
|
|
7628
|
-
echo " loki dashboard open #
|
|
7660
|
+
echo " loki dashboard open # Open the Control Plane"
|
|
7629
7661
|
echo " loki dashboard stop # Stop server"
|
|
7630
7662
|
}
|
|
7631
7663
|
|
|
@@ -8409,39 +8441,29 @@ cmd_web_redirect_to_dashboard() {
|
|
|
8409
8441
|
}
|
|
8410
8442
|
|
|
8411
8443
|
cmd_web_help() {
|
|
8412
|
-
echo -e "${BOLD}
|
|
8444
|
+
echo -e "${BOLD}loki web${NC} - Deprecated alias for the Control Plane"
|
|
8413
8445
|
echo ""
|
|
8414
8446
|
echo "Usage: loki web [command] [options]"
|
|
8415
8447
|
echo ""
|
|
8416
|
-
echo "
|
|
8417
|
-
echo "
|
|
8418
|
-
echo "
|
|
8419
|
-
echo " Lab, so the obvious command lands you on the working UI. Use the embedded"
|
|
8420
|
-
echo " 'Lab' tab there to submit a PRD. For the hosted platform, see Autonomi Cloud."
|
|
8421
|
-
echo ""
|
|
8422
|
-
echo "Note: the canonical command is 'loki dashboard' (operations UI, port ${DASHBOARD_DEFAULT_PORT})."
|
|
8423
|
-
echo " Use it to monitor running agents, tasks, costs, council, escalations."
|
|
8448
|
+
echo "The standalone web UI was folded into the Control Plane. 'loki web' with no"
|
|
8449
|
+
echo "subcommand launches the Control Plane (default port 47821, override with"
|
|
8450
|
+
echo "LOKI_CONTROL_PORT). The canonical command is 'loki dashboard'."
|
|
8424
8451
|
echo ""
|
|
8425
8452
|
echo "Commands:"
|
|
8426
|
-
echo " start Launch the
|
|
8427
|
-
echo " stop Stop
|
|
8428
|
-
echo " status Show
|
|
8429
|
-
echo " logs Show
|
|
8453
|
+
echo " start Launch the Control Plane (default)"
|
|
8454
|
+
echo " stop Stop a standalone web server started the old way"
|
|
8455
|
+
echo " status Show standalone web server status"
|
|
8456
|
+
echo " logs Show standalone web server logs"
|
|
8430
8457
|
echo " help Show this help"
|
|
8431
8458
|
echo ""
|
|
8432
8459
|
echo "Options (for start):"
|
|
8433
|
-
echo " --port PORT Use custom port
|
|
8434
|
-
echo " --no-open Accepted for back-compat; ignored (no-op
|
|
8460
|
+
echo " --port PORT Use custom port"
|
|
8461
|
+
echo " --no-open Accepted for back-compat; ignored (no-op)"
|
|
8435
8462
|
echo ""
|
|
8436
8463
|
echo "Examples:"
|
|
8437
|
-
echo " loki web Launch the
|
|
8438
|
-
echo " loki web --no-open
|
|
8439
|
-
echo " loki web stop Stop a
|
|
8440
|
-
echo ""
|
|
8441
|
-
echo "Note (since v7.5.30):"
|
|
8442
|
-
echo " The same PRD-input UI is embedded in the dashboard as a 'Lab' sidebar entry."
|
|
8443
|
-
echo " 'loki web stop|status|logs' still operate on a standalone Purple Lab"
|
|
8444
|
-
echo " process so anyone who started one the old way is never stranded."
|
|
8464
|
+
echo " loki web Launch the Control Plane"
|
|
8465
|
+
echo " loki web --no-open Same (--no-open is a no-op)"
|
|
8466
|
+
echo " loki web stop Stop a standalone web server started the old way"
|
|
8445
8467
|
}
|
|
8446
8468
|
|
|
8447
8469
|
cmd_web_start() {
|
|
@@ -11836,7 +11858,7 @@ cmd_watch() {
|
|
|
11836
11858
|
while [[ $# -gt 0 ]]; do
|
|
11837
11859
|
case "$1" in
|
|
11838
11860
|
--help|-h)
|
|
11839
|
-
echo -e "${BOLD}loki watch${NC} - Auto-rerun on PRD file changes
|
|
11861
|
+
echo -e "${BOLD}loki watch${NC} - Auto-rerun on PRD file changes"
|
|
11840
11862
|
echo ""
|
|
11841
11863
|
echo "Usage: loki watch [prd-path] [options]"
|
|
11842
11864
|
echo ""
|
|
@@ -12134,7 +12156,7 @@ cmd_cockpit() {
|
|
|
12134
12156
|
while [[ $# -gt 0 ]]; do
|
|
12135
12157
|
case "$1" in
|
|
12136
12158
|
--help|-h)
|
|
12137
|
-
echo -e "${BOLD}loki cockpit${NC} - Live multi-repo status as a terminal inline image
|
|
12159
|
+
echo -e "${BOLD}loki cockpit${NC} - Live multi-repo status as a terminal inline image"
|
|
12138
12160
|
echo ""
|
|
12139
12161
|
echo "Usage: loki cockpit [options]"
|
|
12140
12162
|
echo ""
|
|
@@ -12380,7 +12402,7 @@ cmd_export() {
|
|
|
12380
12402
|
|
|
12381
12403
|
case "$format" in
|
|
12382
12404
|
--help|-h)
|
|
12383
|
-
echo -e "${BOLD}loki export${NC} - Export session data
|
|
12405
|
+
echo -e "${BOLD}loki export${NC} - Export session data"
|
|
12384
12406
|
echo ""
|
|
12385
12407
|
echo "Usage: loki export <format> [output-path]"
|
|
12386
12408
|
echo ""
|
|
@@ -12390,6 +12412,9 @@ cmd_export() {
|
|
|
12390
12412
|
echo " csv Task queue as CSV"
|
|
12391
12413
|
echo " timeline Iteration timeline as JSON"
|
|
12392
12414
|
echo ""
|
|
12415
|
+
echo "Flags:"
|
|
12416
|
+
echo " --sarif [run-id] Write .loki/runs/<id>/findings.sarif (SARIF 2.1.0; needs bun)"
|
|
12417
|
+
echo ""
|
|
12393
12418
|
echo "Examples:"
|
|
12394
12419
|
echo " loki export json # Print to stdout"
|
|
12395
12420
|
echo " loki export json session-export.json # Save to file"
|
|
@@ -12412,6 +12437,10 @@ cmd_export() {
|
|
|
12412
12437
|
require_jq || return 1
|
|
12413
12438
|
_export_timeline "$output_path"
|
|
12414
12439
|
;;
|
|
12440
|
+
--sarif)
|
|
12441
|
+
echo -e "${RED}loki export --sarif needs bun (https://bun.sh).${NC}" >&2
|
|
12442
|
+
return 1
|
|
12443
|
+
;;
|
|
12415
12444
|
*)
|
|
12416
12445
|
echo -e "${RED}Unknown format: $format${NC}"
|
|
12417
12446
|
echo "Supported: json, markdown, csv, timeline"
|
|
@@ -12936,7 +12965,7 @@ cmd_config() {
|
|
|
12936
12965
|
echo " schema Print the key -> env-var mapping table"
|
|
12937
12966
|
echo " validate [FILE] Validate loki.yaml (no FILE: repo root, then ~/.loki) or a --config file"
|
|
12938
12967
|
echo ""
|
|
12939
|
-
echo "Settable keys
|
|
12968
|
+
echo "Settable keys:"
|
|
12940
12969
|
echo " maxTier Cost ceiling: opus, sonnet, haiku (default: opus)"
|
|
12941
12970
|
echo " model.planning Model for planning tier"
|
|
12942
12971
|
echo " model.development Model for development tier"
|
|
@@ -13291,7 +13320,7 @@ cmd_config_show() {
|
|
|
13291
13320
|
echo " max_iterations: ${LOKI_MAX_ITERATIONS:-1000}"
|
|
13292
13321
|
echo " autonomy_mode: ${LOKI_AUTONOMY_MODE:-perpetual}"
|
|
13293
13322
|
echo ""
|
|
13294
|
-
echo "
|
|
13323
|
+
echo "Settings:"
|
|
13295
13324
|
echo " maxTier: ${LOKI_MAX_TIER:-(unlimited)}"
|
|
13296
13325
|
echo " blind_validation: ${LOKI_BLIND_VALIDATION:-true}"
|
|
13297
13326
|
echo " adversarial_testing: ${LOKI_ADVERSARIAL_TESTING:-true}"
|
|
@@ -14396,7 +14425,7 @@ cmd_logs() {
|
|
|
14396
14425
|
# Resolve the log the runner ACTUALLY writes.
|
|
14397
14426
|
#
|
|
14398
14427
|
# This read a logs/session.log path that nothing in the tree writes (other
|
|
14399
|
-
# readers of it exist in web-app/ and api
|
|
14428
|
+
# readers of it exist in web-app/ and examples/api/, all equally dead). So
|
|
14400
14429
|
# `loki logs`, the
|
|
14401
14430
|
# most natural "what is it doing?" command, reported "No log file found"
|
|
14402
14431
|
# while the real logs sat in that same directory. run.sh:22409 writes
|
|
@@ -14585,7 +14614,7 @@ cmd_api() {
|
|
|
14585
14614
|
echo " status Check if dashboard server is running"
|
|
14586
14615
|
echo ""
|
|
14587
14616
|
echo "Environment:"
|
|
14588
|
-
echo " LOKI_DASHBOARD_PORT Port
|
|
14617
|
+
echo " LOKI_DASHBOARD_PORT Port for the API server"
|
|
14589
14618
|
echo ""
|
|
14590
14619
|
echo "Endpoints:"
|
|
14591
14620
|
echo " GET /api/health - Health check"
|
|
@@ -17957,7 +17986,7 @@ cmd_mcp() {
|
|
|
17957
17986
|
}
|
|
17958
17987
|
|
|
17959
17988
|
cmd_heal_help() {
|
|
17960
|
-
echo -e "${BOLD}loki heal${NC} - Legacy system healing
|
|
17989
|
+
echo -e "${BOLD}loki heal${NC} - Legacy system healing"
|
|
17961
17990
|
echo ""
|
|
17962
17991
|
echo "Heal legacy codebases by understanding their real behaviors -- the quirks,"
|
|
17963
17992
|
echo "delays, error states, and invisible dependencies -- then modernizing"
|
|
@@ -18992,7 +19021,7 @@ cmd_cluster() {
|
|
|
18992
19021
|
|
|
18993
19022
|
case "$subcmd" in
|
|
18994
19023
|
--help|-h|help)
|
|
18995
|
-
echo -e "${BOLD}loki cluster${NC} - Custom workflow templates
|
|
19024
|
+
echo -e "${BOLD}loki cluster${NC} - Custom workflow templates"
|
|
18996
19025
|
echo ""
|
|
18997
19026
|
echo "Usage: loki cluster <command> [options]"
|
|
18998
19027
|
echo ""
|
|
@@ -19710,7 +19739,7 @@ with open(failover_file, 'w') as f: json.dump(d, f, indent=2)
|
|
|
19710
19739
|
shift
|
|
19711
19740
|
;;
|
|
19712
19741
|
--help|-h)
|
|
19713
|
-
echo -e "${BOLD}loki failover${NC} - Cross-provider auto-failover management
|
|
19742
|
+
echo -e "${BOLD}loki failover${NC} - Cross-provider auto-failover management"
|
|
19714
19743
|
echo ""
|
|
19715
19744
|
echo "Usage: loki failover [options]"
|
|
19716
19745
|
echo ""
|
|
@@ -19949,7 +19978,7 @@ def _resolve_session_pin(alias):
|
|
|
19949
19978
|
# fable unavailable, collapse to opus. Claude Fable 5 is not available at
|
|
19950
19979
|
# the Claude API (advises use Opus 4.8); the runner dispatches opus for a
|
|
19951
19980
|
# fable pin (claude.sh resolve_model_for_tier, run.sh dispatch backstop).
|
|
19952
|
-
# Quote opus pricing (\$
|
|
19981
|
+
# Quote opus pricing (\$4/\$20) so the estimator agrees with dispatch and
|
|
19953
19982
|
# the dashboard (v7.39.1).
|
|
19954
19983
|
_m = 'opus'
|
|
19955
19984
|
else: # development (and the '*' fallthrough)
|
|
@@ -20279,22 +20308,23 @@ tokens_per_tier = {
|
|
|
20279
20308
|
'fast': {'input': 30000, 'output': 5000, 'model': 'Haiku'},
|
|
20280
20309
|
}
|
|
20281
20310
|
|
|
20282
|
-
# Pricing per 1M tokens. Fable 5 is the top-tier advisory model at
|
|
20283
|
-
# Opus per token (published \$10/\$50 in/out vs Opus \$
|
|
20284
|
-
# corrected
|
|
20285
|
-
# row from a stale \$0.25/\$1.25 (Haiku 3.5) to the
|
|
20286
|
-
#
|
|
20311
|
+
# Pricing per 1M tokens. Fable 5 is the top-tier advisory model at 2.5x
|
|
20312
|
+
# Opus per token (published \$10/\$50 in/out vs Opus 5.5 \$4/\$20). The Opus row was
|
|
20313
|
+
# corrected to the published Opus 5.5 \$4/\$20 (platform.claude.com pricing, 2026-10-08), and the Haiku
|
|
20314
|
+
# row from a stale \$0.25/\$1.25 (Haiku 3.5) to Haiku 5.5 \$0.10/\$0.50 (the haiku alias target
|
|
20315
|
+
# in the model catalog, up to 100K prompt tokens), so all four rows now
|
|
20287
20316
|
# match the three canonical model-keyed tables (run.sh pricing.json, run.sh
|
|
20288
20317
|
# check_budget_limit, dashboard _DEFAULT_PRICING). The Fable row (\$10/\$50) is
|
|
20289
20318
|
# kept as the reference price, but since v7.39.1 fable is unavailable at the API
|
|
20290
20319
|
# and a fable pin RESOLVES to Opus everywhere -- so a fable-pinned run both
|
|
20291
|
-
# dispatches AND quotes Opus (\$
|
|
20320
|
+
# dispatches AND quotes Opus (\$4/\$20), matching the runner. The Fable price row
|
|
20292
20321
|
# is only reachable as an explicit advisory reference, not via a session pin.
|
|
20293
20322
|
pricing = {
|
|
20294
20323
|
'Fable': {'input': 10.00, 'output': 50.00},
|
|
20295
|
-
'Opus': {'input':
|
|
20324
|
+
'Opus': {'input': 4.00, 'output': 20.00},
|
|
20296
20325
|
'Sonnet': {'input': 2.00, 'output': 10.00},
|
|
20297
|
-
|
|
20326
|
+
# Haiku = Haiku 5.5 up to 100K prompt tokens (alias target in the model catalog)
|
|
20327
|
+
'Haiku': {'input': 0.10, 'output': 0.50},
|
|
20298
20328
|
}
|
|
20299
20329
|
|
|
20300
20330
|
# Build per-iteration plan
|
|
@@ -20888,6 +20918,23 @@ main() {
|
|
|
20888
20918
|
# (CLI > config). The pre-pass SCANS without consuming; the per-command
|
|
20889
20919
|
# loops carry consume-and-ignore arms for the three aliases. Gated to
|
|
20890
20920
|
# start/run/quick so status/config/stop never trigger a config load.
|
|
20921
|
+
# T5-D2 (FC-38 sweep): the bash entries have no attempts engine. --attempts (any value) is refused
|
|
20922
|
+
# here, before cmd_start / cmd_run / cmd_quick / cmd_demo can reach the legacy loop. bin/loki sends
|
|
20923
|
+
# `start --attempts N` to the Bun start command and never gets here with it.
|
|
20924
|
+
case "$command" in
|
|
20925
|
+
start|run|quick|demo|tour)
|
|
20926
|
+
local _att_a
|
|
20927
|
+
for _att_a in "$@"; do
|
|
20928
|
+
case "$_att_a" in
|
|
20929
|
+
--attempts|--attempts=*)
|
|
20930
|
+
echo -e "${RED}--attempts is only supported by 'loki start --attempts N --no-pr' (the Loki 10 engine); 'loki $command' would run the removed legacy loop.${NC}" >&2
|
|
20931
|
+
exit 2
|
|
20932
|
+
;;
|
|
20933
|
+
esac
|
|
20934
|
+
done
|
|
20935
|
+
;;
|
|
20936
|
+
esac
|
|
20937
|
+
|
|
20891
20938
|
case "$command" in
|
|
20892
20939
|
start|run|quick)
|
|
20893
20940
|
if declare -f loki_maybe_apply_config_file >/dev/null 2>&1; then
|
|
@@ -21017,13 +21064,13 @@ main() {
|
|
|
21017
21064
|
echo "Usage: loki serve [options]"
|
|
21018
21065
|
echo ""
|
|
21019
21066
|
echo "Alias for 'loki api start'. Starts the dashboard HTTP API"
|
|
21020
|
-
echo "server (FastAPI
|
|
21067
|
+
echo "server (FastAPI)."
|
|
21021
21068
|
echo ""
|
|
21022
21069
|
echo "For the UI, run 'loki' (opens the Control Plane) or 'loki control serve'."
|
|
21023
21070
|
echo ""
|
|
21024
21071
|
echo "Options:"
|
|
21025
21072
|
echo " --host HOST Bind host (default: 127.0.0.1)"
|
|
21026
|
-
echo " --port PORT Bind port (default:
|
|
21073
|
+
echo " --port PORT Bind port (default: LOKI_DASHBOARD_PORT)"
|
|
21027
21074
|
echo " --help, -h Show this help and exit"
|
|
21028
21075
|
echo ""
|
|
21029
21076
|
echo "Side effects: starts a long-running HTTP server bound to a TCP port."
|
|
@@ -21179,6 +21226,11 @@ main() {
|
|
|
21179
21226
|
mcp)
|
|
21180
21227
|
cmd_mcp "$@"
|
|
21181
21228
|
;;
|
|
21229
|
+
undo)
|
|
21230
|
+
# UNDO-1: Bun-only (verifies the receipt with the Bun verifier); bin/loki routes here only when bun is absent.
|
|
21231
|
+
echo "loki undo needs the Bun runtime (install bun, then re-run: loki undo <run-id> --plan)" >&2
|
|
21232
|
+
exit 2
|
|
21233
|
+
;;
|
|
21182
21234
|
acp)
|
|
21183
21235
|
# ACP agent over stdio; stdout is protocol-only. See docs/acp-editors.md.
|
|
21184
21236
|
LOKI_ACP_LOKI="${LOKI_ACP_LOKI:-$_LOKI_SCRIPT_DIR/loki}" exec python3 "$_LOKI_SCRIPT_DIR/acp-agent.py"
|
|
@@ -21391,6 +21443,8 @@ main() {
|
|
|
21391
21443
|
show_help
|
|
21392
21444
|
elif [ "$_help_target" = "answer" ]; then
|
|
21393
21445
|
_help_answer
|
|
21446
|
+
elif [ "$_help_target" = "verify-pr" ]; then
|
|
21447
|
+
_help_verify_pr
|
|
21394
21448
|
else
|
|
21395
21449
|
LOKI_HELP_ONLY=1 "$0" "$_help_target" --help "$@"
|
|
21396
21450
|
local _help_rc=$?
|
|
@@ -22449,7 +22503,7 @@ MERGE_VALIDATE_PY
|
|
|
22449
22503
|
;;
|
|
22450
22504
|
|
|
22451
22505
|
--help|-h|help)
|
|
22452
|
-
echo -e "${BOLD}loki worktree${NC} - Manage parallel worktrees
|
|
22506
|
+
echo -e "${BOLD}loki worktree${NC} - Manage parallel worktrees"
|
|
22453
22507
|
echo ""
|
|
22454
22508
|
echo "Usage: loki worktree <command>"
|
|
22455
22509
|
echo ""
|
|
@@ -22475,7 +22529,7 @@ cmd_state() {
|
|
|
22475
22529
|
|
|
22476
22530
|
case "$subcmd" in
|
|
22477
22531
|
--help|-h|help)
|
|
22478
|
-
echo -e "${BOLD}loki state${NC} - Query the SQLite state layer
|
|
22532
|
+
echo -e "${BOLD}loki state${NC} - Query the SQLite state layer"
|
|
22479
22533
|
echo ""
|
|
22480
22534
|
echo "Usage: loki state <command> [options]"
|
|
22481
22535
|
echo ""
|
|
@@ -24356,7 +24410,7 @@ except Exception as e:
|
|
|
24356
24410
|
echo " skill [name] Show skill by name or list all skills"
|
|
24357
24411
|
echo " vectors [rebuild] Show vector index stats or rebuild indices"
|
|
24358
24412
|
echo ""
|
|
24359
|
-
echo "Namespace Commands
|
|
24413
|
+
echo "Namespace Commands:"
|
|
24360
24414
|
echo " namespace detect Auto-detect namespace from current directory"
|
|
24361
24415
|
echo " namespace list List all available namespaces"
|
|
24362
24416
|
echo " namespace create NAME Create a new namespace"
|
|
@@ -24384,14 +24438,14 @@ except Exception as e:
|
|
|
24384
24438
|
echo " loki memory vectors"
|
|
24385
24439
|
echo " loki memory vectors rebuild"
|
|
24386
24440
|
echo ""
|
|
24387
|
-
echo " loki memory ingest --from-claude-transcript <path>
|
|
24388
|
-
echo " loki memory ingest --from-stdin
|
|
24389
|
-
echo " loki memory replay <episode-id> [--json]
|
|
24390
|
-
echo " loki memory crossproject --for 'build api'
|
|
24391
|
-
echo " loki memory graph --export graph.json
|
|
24392
|
-
echo " loki memory graph rebuild
|
|
24393
|
-
echo " loki memory enable-hook
|
|
24394
|
-
echo " loki memory disable-hook
|
|
24441
|
+
echo " loki memory ingest --from-claude-transcript <path>"
|
|
24442
|
+
echo " loki memory ingest --from-stdin"
|
|
24443
|
+
echo " loki memory replay <episode-id> [--json]"
|
|
24444
|
+
echo " loki memory crossproject --for 'build api'"
|
|
24445
|
+
echo " loki memory graph --export graph.json"
|
|
24446
|
+
echo " loki memory graph rebuild"
|
|
24447
|
+
echo " loki memory enable-hook"
|
|
24448
|
+
echo " loki memory disable-hook"
|
|
24395
24449
|
echo ""
|
|
24396
24450
|
echo " loki memory namespace detect"
|
|
24397
24451
|
echo " loki memory namespace list"
|
|
@@ -27166,15 +27220,17 @@ TELEM_DISABLE_PY
|
|
|
27166
27220
|
echo " status Show OTEL config + collection state + pending crash reports"
|
|
27167
27221
|
echo " enable [endpoint] Enable OTEL (default: http://localhost:4318)"
|
|
27168
27222
|
echo " disable Disable OTEL for current project"
|
|
27169
|
-
echo " on Opt in to anonymous diagnostics
|
|
27223
|
+
echo " on Opt in explicitly to anonymous diagnostics"
|
|
27170
27224
|
echo " off Opt out of all anonymous diagnostics (telemetry + crash)"
|
|
27171
27225
|
echo " start Alias for 'on' (persistent opt-in across all sessions)"
|
|
27172
27226
|
echo " stop Alias for 'off' (persistent opt-out across all sessions)"
|
|
27173
27227
|
echo " analytics on|off|status"
|
|
27174
27228
|
echo " Opt in/out of build-outcome analytics (off by default)"
|
|
27175
27229
|
echo ""
|
|
27176
|
-
echo "Anonymous diagnostics are
|
|
27177
|
-
echo "
|
|
27230
|
+
echo "Anonymous diagnostics are ON by default for individual interactive installs,"
|
|
27231
|
+
echo "and OFF in CI, enterprise, air-gapped and non-interactive contexts. An opt-out"
|
|
27232
|
+
echo "(loki telemetry off, LOKI_TELEMETRY=off or DO_NOT_TRACK=1) always wins."
|
|
27233
|
+
echo "See docs/PRIVACY.md for the full disclosure."
|
|
27178
27234
|
echo ""
|
|
27179
27235
|
;;
|
|
27180
27236
|
*)
|
|
@@ -29829,7 +29885,7 @@ PYEOF
|
|
|
29829
29885
|
;;
|
|
29830
29886
|
|
|
29831
29887
|
--help|-h|help)
|
|
29832
|
-
echo -e "${BOLD}loki agent${NC} - Agent type dispatch
|
|
29888
|
+
echo -e "${BOLD}loki agent${NC} - Agent type dispatch"
|
|
29833
29889
|
echo ""
|
|
29834
29890
|
echo "Usage: loki agent <command> [args]"
|
|
29835
29891
|
echo ""
|
|
@@ -30140,7 +30196,7 @@ except: pass
|
|
|
30140
30196
|
|
|
30141
30197
|
# Detect shell scripts
|
|
30142
30198
|
local shell_count=0
|
|
30143
|
-
shell_count=$(find "$target_path" -maxdepth 2 -name "*.sh" -type f 2>/dev/null | wc -l | tr -d ' ')
|
|
30199
|
+
shell_count=$(find "$target_path" -maxdepth 2 -name "*.sh" -type f 2>/dev/null | wc -l | tr -d ' ' || true)
|
|
30144
30200
|
if [ "$shell_count" -gt 0 ]; then
|
|
30145
30201
|
languages="$languages Bash"
|
|
30146
30202
|
fi
|
|
@@ -30578,7 +30634,7 @@ Files: $src_count source, $test_count test, $doc_count docs"
|
|
|
30578
30634
|
if [ -d "$target_path/$dir" ]; then
|
|
30579
30635
|
# Count files in directory
|
|
30580
30636
|
local dir_count
|
|
30581
|
-
dir_count=$(echo "$tree_output" | grep "^${dir}/" | wc -l | tr -d ' ')
|
|
30637
|
+
dir_count=$(echo "$tree_output" | grep "^${dir}/" | wc -l | tr -d ' ' || true)
|
|
30582
30638
|
output="$output
|
|
30583
30639
|
$dir/ ($dir_count files)"
|
|
30584
30640
|
else
|
|
@@ -31506,7 +31562,7 @@ _docs_invoke_provider() {
|
|
|
31506
31562
|
# not the workload that needs the top tier. Pinned to the same
|
|
31507
31563
|
# default the review subcall uses (run.sh:13762), and overridable
|
|
31508
31564
|
# for anyone who wants a different trade.
|
|
31509
|
-
result=$($t_prefix env CAVEMAN_DEFAULT_MODE=off claude -p --model "${LOKI_DOCS_MODEL:-
|
|
31565
|
+
result=$($t_prefix env CAVEMAN_DEFAULT_MODE=off claude -p --model "${LOKI_DOCS_MODEL:-sonnet}" "$prompt" 2>/dev/null) || exit_code=$?
|
|
31510
31566
|
;;
|
|
31511
31567
|
codex)
|
|
31512
31568
|
result=$($t_prefix codex exec --sandbox workspace-write "$prompt" 2>/dev/null) || exit_code=$?
|
|
@@ -35029,7 +35085,7 @@ cmd_report_legacy() {
|
|
|
35029
35085
|
while [[ $# -gt 0 ]]; do
|
|
35030
35086
|
case "$1" in
|
|
35031
35087
|
--help|-h)
|
|
35032
|
-
echo -e "${BOLD}loki report${NC} - Session report generator
|
|
35088
|
+
echo -e "${BOLD}loki report${NC} - Session report generator"
|
|
35033
35089
|
echo ""
|
|
35034
35090
|
echo "Usage: loki report [subcommand] [options]"
|
|
35035
35091
|
echo ""
|