loki-mode 9.73.0 → 9.75.0
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/council-v2.sh +60 -13
- package/autonomy/lib/done-recognition.sh +73 -21
- package/autonomy/lib/proof-generator.py +7 -0
- package/autonomy/loki +18 -7
- package/autonomy/run.sh +14 -1
- package/dashboard/__init__.py +1 -1
- package/dashboard/server.py +22 -13
- package/dashboard/static/index.html +5 -5
- package/docs/INSTALLATION.md +1 -1
- package/docs/R3-COST-OBSERVABILITY-DESIGN.md +7 -1
- package/docs/exit-codes.md +21 -0
- package/docs/v10/ARCHITECT-CUTS.md +386 -317
- package/docs/v10/BOARD.md +64 -24
- package/docs/v10/GUARDS.md +13 -7
- package/loki-ts/dist/loki.js +251 -250
- package/mcp/__init__.py +1 -1
- package/package.json +1 -1
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/web-app/dist/assets/{AdminPage-B11jqriL.js → AdminPage-CMGkmNnt.js} +1 -1
- package/web-app/dist/assets/{Avatar-vmIEiL2U.js → Avatar-9mn8sJ-2.js} +1 -1
- package/web-app/dist/assets/{Badge-DxtrDGcl.js → Badge-mSFLvvRX.js} +1 -1
- package/web-app/dist/assets/{Button-BiPlRkkg.js → Button-B1v4CSkD.js} +1 -1
- package/web-app/dist/assets/CockpitPage-BW0hYuzC.js +47 -0
- package/web-app/dist/assets/{ComparePage-B4ddvt9J.js → ComparePage-C1BXuolM.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-BIJy59N_.js → ErrorBoundary-C2sJyBhb.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-C4-Phh1f.js → EvidenceReceiptPanel-a1irlBPD.js} +1 -1
- package/web-app/dist/assets/GitHubIssuesPanel-zM-WRxYB.js +7 -0
- package/web-app/dist/assets/{GitHubPRsPanel-B_VHTB-t.js → GitHubPRsPanel-DvRa5Rxq.js} +1 -1
- package/web-app/dist/assets/{HomePage-cxONjTSm.js → HomePage-CNwRexp5.js} +2 -2
- package/web-app/dist/assets/{LoginPage-D49p6aVy.js → LoginPage-HKogNiEX.js} +1 -1
- package/web-app/dist/assets/{MagicPage-C5GUEIuM.js → MagicPage-u1mvdkUd.js} +1 -1
- package/web-app/dist/assets/{MetricsPage-I-OXi9kG.js → MetricsPage-CThdMJb5.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-Do19cbOP.js → NotFoundPage-B1v3lELS.js} +1 -1
- package/web-app/dist/assets/{ProjectPage-TRyzTIFH.js → ProjectPage-hDvSsdLF.js} +63 -63
- package/web-app/dist/assets/{ProjectsPage-BLSDhtVb.js → ProjectsPage-CRAegSM6.js} +1 -1
- package/web-app/dist/assets/{SettingsPage-BvixtAw7.js → SettingsPage-Dt90bFxo.js} +1 -1
- package/web-app/dist/assets/{ShowcasePage-By96BMJz.js → ShowcasePage-C5a9l8u_.js} +1 -1
- package/web-app/dist/assets/{SystemSettingsPage-AvVujpIo.js → SystemSettingsPage-DtqsDXbx.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-BiT3N4px.js → TeamsPage-CooeoWxR.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-Y_m-dzfd.js → TemplatesPage-CJhTxWrw.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-oPTCcEGy.js → TerminalOutput-DvjfbDxb.js} +1 -1
- package/web-app/dist/assets/{activity-DCa9Pi7k.js → activity-DK6KBQKA.js} +1 -1
- package/web-app/dist/assets/{bell-Br7Xsjam.js → bell-Cd8tQpN6.js} +1 -1
- package/web-app/dist/assets/{bot-BsQKlSP5.js → bot-Y30w8rML.js} +1 -1
- package/web-app/dist/assets/{check-Cb49hCzQ.js → check-B5eUl1j9.js} +1 -1
- package/web-app/dist/assets/{chevron-left-Cs63FOmY.js → chevron-left-qyvpFqze.js} +1 -1
- package/web-app/dist/assets/{circle-alert-C8A636Wl.js → circle-alert-DXtjVPDB.js} +1 -1
- package/web-app/dist/assets/{clock-DhlnHjQI.js → clock-dqQis2Q6.js} +1 -1
- package/web-app/dist/assets/{cloud-uOYQxGRY.js → cloud-CzTURYO9.js} +1 -1
- package/web-app/dist/assets/{code-xml-9O9XlVo9.js → code-xml-DLbw1HTk.js} +1 -1
- package/web-app/dist/assets/{database-D9Oek2JS.js → database-BIj38v85.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-CHetUBPR.js → dollar-sign-9bVcHIkD.js} +1 -1
- package/web-app/dist/assets/{file-code-corner-oTJV_ce4.js → file-code-corner-D57x6xD1.js} +1 -1
- package/web-app/dist/assets/{file-plus-vuloOqQB.js → file-plus-BXOrz3T5.js} +1 -1
- package/web-app/dist/assets/{globe-DMVdf8bk.js → globe-Cnq8h4Gt.js} +1 -1
- package/web-app/dist/assets/{hammer-15WRQJ1o.js → hammer-iiLGlF28.js} +1 -1
- package/web-app/dist/assets/{index-SRKz3Imw.js → index-uGGZ1Ij3.js} +2 -2
- package/web-app/dist/assets/{layers-C-QQQP9K.js → layers-gcGxxNEN.js} +1 -1
- package/web-app/dist/assets/{loader-circle-DqoJevCK.js → loader-circle-B4Ad11xq.js} +1 -1
- package/web-app/dist/assets/{lock-B68yfqau.js → lock-DvQNG5RI.js} +1 -1
- package/web-app/dist/assets/{package-DAxTtm-S.js → package-BtQBNbq2.js} +1 -1
- package/web-app/dist/assets/{plus-BSbdI5QI.js → plus-DKLiMXBZ.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-DlvFuI3J.js → refresh-cw-B4Gu8e2m.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-BF03pKE0.js → rotate-ccw-DATSPLYS.js} +1 -1
- package/web-app/dist/assets/{scroll-text-QFZ1JdTD.js → scroll-text-GA8EtlY4.js} +1 -1
- package/web-app/dist/assets/{server-tyIvmSke.js → server-DT_3kM4V.js} +1 -1
- package/web-app/dist/assets/{shield-alert-DHeqbtBK.js → shield-alert-BEaqZEhO.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-CRag1Tn5.js → thumbs-up-DVvA-Fas.js} +1 -1
- package/web-app/dist/assets/{trash-2-B0n4x-Ds.js → trash-2-BCyT5A9N.js} +1 -1
- package/web-app/dist/assets/{trending-down-DC4Aqzso.js → trending-down-BLcNt39o.js} +1 -1
- package/web-app/dist/assets/{trending-up-DFG157ke.js → trending-up-BqfBp13A.js} +1 -1
- package/web-app/dist/assets/{upload-BdWQ4cWx.js → upload-BxH0rjQU.js} +1 -1
- package/web-app/dist/assets/{usePolling-DMgD-dJ5.js → usePolling-CokbBZIQ.js} +1 -1
- package/web-app/dist/assets/{user-DXaZeAe4.js → user-C_u9mNZM.js} +1 -1
- package/web-app/dist/index.html +1 -1
- package/web-app/dist/assets/CockpitPage-DXKAc0jc.js +0 -47
- package/web-app/dist/assets/GitHubIssuesPanel-CVIG0uwi.js +0 -7
|
@@ -5406,7 +5406,7 @@ var LokiDashboard=(()=>{var Le=Object.defineProperty;var kt=Object.getOwnPropert
|
|
|
5406
5406
|
${t}
|
|
5407
5407
|
</div>
|
|
5408
5408
|
</div>
|
|
5409
|
-
`,this._attachEventListeners()}_attachEventListeners(){let e=this.shadowRoot.querySelectorAll(".tab");e.forEach((n,l)=>{n.addEventListener("click",()=>this._setTab(n.dataset.tab)),n.addEventListener("keydown",c=>{if(c.key==="ArrowRight"||c.key==="ArrowLeft"){c.preventDefault();let p=Array.from(e),u=c.key==="ArrowRight"?(l+1)%p.length:(l-1+p.length)%p.length;p[u].focus(),this._setTab(p[u].dataset.tab)}})}),this.shadowRoot.querySelectorAll(".item-card").forEach(n=>{n.addEventListener("click",()=>this._handleItemClick(n)),n.addEventListener("keydown",l=>{l.key==="Enter"||l.key===" "?(l.preventDefault(),this._handleItemClick(n)):(l.key==="ArrowDown"||l.key==="ArrowUp")&&(l.preventDefault(),this._navigateItemCards(n,l.key==="ArrowDown"?"next":"prev"))})});let t=this.shadowRoot.getElementById("close-detail");t&&t.addEventListener("click",()=>this._closeDetail());let i=this.shadowRoot.getElementById("consolidate-btn");i&&i.addEventListener("click",()=>this._triggerConsolidation());let a=this.shadowRoot.getElementById("refresh-btn");a&&a.addEventListener("click",()=>this._loadData());let s=this.shadowRoot.getElementById("memory-search-input"),r=this.shadowRoot.getElementById("search-btn"),o=this.shadowRoot.getElementById("memory-search-collection");s&&(s.addEventListener("keydown",n=>{n.key==="Enter"&&(n.preventDefault(),this._searchQuery=s.value,this._executeSearch())}),s.addEventListener("input",n=>{this._searchQuery=n.target.value})),r&&r.addEventListener("click",()=>{let n=this.shadowRoot.getElementById("memory-search-input");n&&(this._searchQuery=n.value),this._executeSearch()}),o&&o.addEventListener("change",n=>{this._searchCollection=n.target.value})}_handleItemClick(e){let t=e.dataset.id;switch(e.dataset.type){case"episode":this._selectEpisode(t);break;case"pattern":this._selectPattern(t);break;case"skill":this._selectSkill(t);break}}_navigateItemCards(e,t){let i=Array.from(this.shadowRoot.querySelectorAll(".item-card")),a=i.indexOf(e);if(a===-1)return;let s=t==="next"?a+1:a-1;s>=0&&s<i.length&&i[s].focus()}};customElements.get("loki-memory-browser")||customElements.define("loki-memory-browser",te);var Lt=[{id:"1h",label:"1 Hour",hours:1},{id:"24h",label:"24 Hours",hours:24},{id:"7d",label:"7 Days",hours:168},{id:"30d",label:"30 Days",hours:720}],zt=[{id:"all",label:"All Signals"},{id:"user_preference",label:"User Preferences"},{id:"error_pattern",label:"Error Patterns"},{id:"success_pattern",label:"Success Patterns"},{id:"tool_efficiency",label:"Tool Efficiency"},{id:"context_relevance",label:"Context Relevance"}],Ht=[{id:"all",label:"All Sources"},{id:"cli",label:"CLI"},{id:"api",label:"API"},{id:"vscode",label:"VS Code"},{id:"mcp",label:"MCP"},{id:"dashboard",label:"Dashboard"}],ie=class extends v{static get observedAttributes(){return["api-url","theme","time-range","signal-type","source"]}constructor(){super(),this._loading=!1,this._error=null,this._api=null,this._timeRange="7d",this._signalType="all",this._source="all",this._metrics=null,this._trends=null,this._signals=[],this._selectedMetric=null}connectedCallback(){super.connectedCallback(),this._timeRange=this.getAttribute("time-range")||"7d",this._signalType=this.getAttribute("signal-type")||"all",this._source=this.getAttribute("source")||"all",this._setupApi(),this._loadData()}attributeChangedCallback(e,t,i){if(t!==i)switch(e){case"api-url":this._api&&(this._api=g({baseUrl:i}),this._loadData());break;case"theme":this._applyTheme();break;case"time-range":this._timeRange=i,this._loadData();break;case"signal-type":this._signalType=i,this._loadData();break;case"source":this._source=i,this._loadData();break}}_setupApi(){let e=this.getAttribute("api-url")||window.location.origin;this._api=g({baseUrl:e})}async _loadData(){this._loading=!0,this._error=null,this.render();let e=this._api;try{let t={timeRange:this._timeRange,signalType:this._signalType!=="all"?this._signalType:void 0,source:this._source!=="all"?this._source:void 0},
|
|
5409
|
+
`,this._attachEventListeners()}_attachEventListeners(){let e=this.shadowRoot.querySelectorAll(".tab");e.forEach((n,l)=>{n.addEventListener("click",()=>this._setTab(n.dataset.tab)),n.addEventListener("keydown",c=>{if(c.key==="ArrowRight"||c.key==="ArrowLeft"){c.preventDefault();let p=Array.from(e),u=c.key==="ArrowRight"?(l+1)%p.length:(l-1+p.length)%p.length;p[u].focus(),this._setTab(p[u].dataset.tab)}})}),this.shadowRoot.querySelectorAll(".item-card").forEach(n=>{n.addEventListener("click",()=>this._handleItemClick(n)),n.addEventListener("keydown",l=>{l.key==="Enter"||l.key===" "?(l.preventDefault(),this._handleItemClick(n)):(l.key==="ArrowDown"||l.key==="ArrowUp")&&(l.preventDefault(),this._navigateItemCards(n,l.key==="ArrowDown"?"next":"prev"))})});let t=this.shadowRoot.getElementById("close-detail");t&&t.addEventListener("click",()=>this._closeDetail());let i=this.shadowRoot.getElementById("consolidate-btn");i&&i.addEventListener("click",()=>this._triggerConsolidation());let a=this.shadowRoot.getElementById("refresh-btn");a&&a.addEventListener("click",()=>this._loadData());let s=this.shadowRoot.getElementById("memory-search-input"),r=this.shadowRoot.getElementById("search-btn"),o=this.shadowRoot.getElementById("memory-search-collection");s&&(s.addEventListener("keydown",n=>{n.key==="Enter"&&(n.preventDefault(),this._searchQuery=s.value,this._executeSearch())}),s.addEventListener("input",n=>{this._searchQuery=n.target.value})),r&&r.addEventListener("click",()=>{let n=this.shadowRoot.getElementById("memory-search-input");n&&(this._searchQuery=n.value),this._executeSearch()}),o&&o.addEventListener("change",n=>{this._searchCollection=n.target.value})}_handleItemClick(e){let t=e.dataset.id;switch(e.dataset.type){case"episode":this._selectEpisode(t);break;case"pattern":this._selectPattern(t);break;case"skill":this._selectSkill(t);break}}_navigateItemCards(e,t){let i=Array.from(this.shadowRoot.querySelectorAll(".item-card")),a=i.indexOf(e);if(a===-1)return;let s=t==="next"?a+1:a-1;s>=0&&s<i.length&&i[s].focus()}};customElements.get("loki-memory-browser")||customElements.define("loki-memory-browser",te);var Lt=[{id:"1h",label:"1 Hour",hours:1},{id:"24h",label:"24 Hours",hours:24},{id:"7d",label:"7 Days",hours:168},{id:"30d",label:"30 Days",hours:720}],zt=[{id:"all",label:"All Signals"},{id:"user_preference",label:"User Preferences"},{id:"error_pattern",label:"Error Patterns"},{id:"success_pattern",label:"Success Patterns"},{id:"tool_efficiency",label:"Tool Efficiency"},{id:"context_relevance",label:"Context Relevance"}],Ht=[{id:"all",label:"All Sources"},{id:"cli",label:"CLI"},{id:"api",label:"API"},{id:"vscode",label:"VS Code"},{id:"mcp",label:"MCP"},{id:"dashboard",label:"Dashboard"}],ie=class extends v{static get observedAttributes(){return["api-url","theme","time-range","signal-type","source"]}constructor(){super(),this._loading=!1,this._error=null,this._api=null,this._timeRange="7d",this._signalType="all",this._source="all",this._metrics=null,this._trends=null,this._signals=[],this._selectedMetric=null}connectedCallback(){super.connectedCallback(),this._timeRange=this.getAttribute("time-range")||"7d",this._signalType=this.getAttribute("signal-type")||"all",this._source=this.getAttribute("source")||"all",this._setupApi(),this._loadData()}attributeChangedCallback(e,t,i){if(t!==i)switch(e){case"api-url":this._api&&(this._api=g({baseUrl:i}),this._loadData());break;case"theme":this._applyTheme();break;case"time-range":this._timeRange=i,this._loadData();break;case"signal-type":this._signalType=i,this._loadData();break;case"source":this._source=i,this._loadData();break}}_setupApi(){let e=this.getAttribute("api-url")||window.location.origin;this._api=g({baseUrl:e})}async _loadData(){this._loading=!0,this._error=null,this.render();let e=this._api;try{let t={timeRange:this._timeRange,signalType:this._signalType!=="all"?this._signalType:void 0,source:this._source!=="all"?this._source:void 0},i=!1,a=!1,[s,r,o]=await Promise.all([e.getLearningMetrics(t).catch(()=>(i=!0,null)),e.getLearningTrends(t).catch(()=>(a=!0,null)),e.getLearningSignals({...t,limit:50}).catch(()=>null)]);if(e!==this._api)return;this._metrics=s,this._trends=r,this._metricsFailed=i,this._trendsFailed=a,this._signals=o}catch(t){if(e!==this._api)return;this._error=t.message||"Failed to load learning data"}this._loading=!1,this.render()}_setFilter(e,t){switch(e){case"timeRange":this._timeRange=t,this.setAttribute("time-range",t);break;case"signalType":this._signalType=t,this.setAttribute("signal-type",t);break;case"source":this._source=t,this.setAttribute("source",t);break}this.dispatchEvent(new CustomEvent("filter-change",{detail:{timeRange:this._timeRange,signalType:this._signalType,source:this._source}})),this._loadData()}_selectMetric(e,t){this._selectedMetric={type:e,item:t},this.dispatchEvent(new CustomEvent("metric-select",{detail:{type:e,item:t}})),this.render()}_closeDetail(){this._selectedMetric=null,this.render()}_num(e){let t=e==null?NaN:Number(e);return Number.isFinite(t)?t:null}_formatNumber(e){let t=this._num(e);return t==null?"--":t>=1e6?(t/1e6).toFixed(1)+"M":t>=1e3?(t/1e3).toFixed(1)+"K":String(t)}_formatPercent(e){let t=this._num(e);return t==null?"--":(t*100).toFixed(1)+"%"}_formatDuration(e){let t=this._num(e);return t==null?"--":t<60?t.toFixed(0)+"s":t<3600?(t/60).toFixed(1)+"m":(t/3600).toFixed(1)+"h"}_escapeHtml(e){return e==null?"":String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}_renderFilters(){return`
|
|
5410
5410
|
<div class="filters">
|
|
5411
5411
|
<div class="filter-group">
|
|
5412
5412
|
<label>Time Range</label>
|
|
@@ -5440,7 +5440,7 @@ var LokiDashboard=(()=>{var Le=Object.defineProperty;var kt=Object.getOwnPropert
|
|
|
5440
5440
|
Refresh
|
|
5441
5441
|
</button>
|
|
5442
5442
|
</div>
|
|
5443
|
-
`}_renderSummaryCards(){if(!this._metrics)return'<div class="empty-state">No metrics available</div>';let{totalSignals:e,signalsByType:t,signalsBySource:i,aggregation:a}=this._metrics,s=e>0?this._num(this._metrics.avgConfidence):null;return`
|
|
5443
|
+
`}_renderSummaryCards(){if(this._metricsFailed)return'<div class="empty-state">Could not load metrics</div>';if(!this._metrics)return'<div class="empty-state">No metrics available</div>';let{totalSignals:e,signalsByType:t,signalsBySource:i,aggregation:a}=this._metrics,s=e>0?this._num(this._metrics.avgConfidence):null;return`
|
|
5444
5444
|
<div class="summary-cards">
|
|
5445
5445
|
<div class="summary-card">
|
|
5446
5446
|
<div class="summary-card-header">
|
|
@@ -5509,7 +5509,7 @@ var LokiDashboard=(()=>{var Le=Object.defineProperty;var kt=Object.getOwnPropert
|
|
|
5509
5509
|
</div>
|
|
5510
5510
|
</div>
|
|
5511
5511
|
</div>
|
|
5512
|
-
`}_renderTrendChart(){if(!this._trends||!this._trends.dataPoints||this._trends.dataPoints.length===0)return'<div class="chart-empty">No trend data available</div>';let{dataPoints:e,maxValue:t}=this._trends,i=120,a=400,s=20,r=e.map((n,l)=>{let c=s+l/(e.length-1||1)*(a-s*2),p=i-s-n.count/(t||1)*(i-s*2);return`${c},${p}`}).join(" "),o=`${s},${i-s} ${r} ${a-s},${i-s}`;return`
|
|
5512
|
+
`}_renderTrendChart(){if(this._trendsFailed)return'<div class="chart-empty">Could not load trend data</div>';if(!this._trends||!this._trends.dataPoints||this._trends.dataPoints.length===0)return'<div class="chart-empty">No trend data available</div>';let{dataPoints:e,maxValue:t}=this._trends,i=120,a=400,s=20,r=e.map((n,l)=>{let c=s+l/(e.length-1||1)*(a-s*2),p=i-s-n.count/(t||1)*(i-s*2);return`${c},${p}`}).join(" "),o=`${s},${i-s} ${r} ${a-s},${i-s}`;return`
|
|
5513
5513
|
<div class="trend-chart">
|
|
5514
5514
|
<div class="chart-header">
|
|
5515
5515
|
<span class="chart-title">Signal Volume Over Time</span>
|
|
@@ -10823,7 +10823,7 @@ var LokiDashboard=(()=>{var Le=Object.defineProperty;var kt=Object.getOwnPropert
|
|
|
10823
10823
|
${t}
|
|
10824
10824
|
<span class="migration-title">Migration Dashboard</span>
|
|
10825
10825
|
</div>
|
|
10826
|
-
<div class="empty-state">
|
|
10826
|
+
<div class="empty-state status-failed">Could not load migrations: ${this._escapeHtml(this._error)}</div>
|
|
10827
10827
|
</div>
|
|
10828
10828
|
`;return}if(this._migration){let i=this._migration,a=this._escapeHtml(i.migration_id||i.id||"--"),s=this._escapeHtml(i.source||"--"),r=this._escapeHtml(i.target||"--"),o=i.current_phase||i.phase||"unknown",n=i.completed_phases||[];this.shadowRoot.innerHTML=`
|
|
10829
10829
|
<style>${e}</style>
|
|
@@ -13706,7 +13706,7 @@ var LokiDashboard=(()=>{var Le=Object.defineProperty;var kt=Object.getOwnPropert
|
|
|
13706
13706
|
</div>
|
|
13707
13707
|
</div>
|
|
13708
13708
|
</div>
|
|
13709
|
-
`,this._bindEvents()}};customElements.get("loki-cost-waterfall")||customElements.define("loki-cost-waterfall",we);var vt=50,$e=class extends v{static get observedAttributes(){return["api-url","theme"]}constructor(){super(),this._api=null,this._statusLoading=!1,this._statusError=null,this._status=null,this._eventsLoading=!1,this._eventsError=null,this._events=[],this._eventsSource=null,this._eventsCount=0,this._lookupId="",this._lookupLoading=!1,this._lookupError=null,this._lookupResult=null}connectedCallback(){super.connectedCallback(),this._setupApi(),this._loadStatus()}disconnectedCallback(){super.disconnectedCallback(),this._stopPolling()}attributeChangedCallback(e,t,i){if(t!==i)switch(e){case"api-url":this._api&&(this._api=g({baseUrl:i}),this._loadStatus());break;case"theme":this._applyTheme(),this.render();break}}_setupApi(){let e=this.getAttribute("api-url")||window.location.origin;this._api=g({baseUrl:e})}_stopPolling(){}async _loadStatus(){let e=this._api;this._statusLoading=!0,this._statusError=null,this.render();try{let t=await e.get("/api/managed/status");if(e!==this._api)return;this._status=t}catch(t){if(e!==this._api)return;this._statusError=t&&t.message?t.message:"Failed to load managed status",this._status=null}finally{this._statusLoading=!1}this._status&&this._status.enabled?await this._loadEvents():this.render()}async _loadEvents(e=vt){let t=this._api;this._eventsLoading=!0,this._eventsError=null,this.render();try{let i=await t.get("/api/managed/events?limit="+encodeURIComponent(e));if(t!==this._api)return;Array.isArray(i)?(this._events=i,this._eventsCount=i.length,this._eventsSource=null):i&&typeof i=="object"?(this._events=Array.isArray(i.events)?i.events:[],this._eventsCount=typeof i.count=="number"?i.count:this._events.length,this._eventsSource=i.source||null):(this._events=[],this._eventsCount=0,this._eventsSource=null)}catch(i){if(t!==this._api)return;this._eventsError=i&&i.message?i.message:"Failed to load managed events",this._events=[],this._eventsCount=0,this._eventsSource=null}finally{this._eventsLoading=!1,this.render()}}async _lookupMemoryVersion(){let e=(this._lookupId||"").trim();if(!e){this._lookupError="Enter a memory ID to look up",this._lookupResult=null,this.render();return}let t=this._api;this._lookupLoading=!0,this._lookupError=null,this._lookupResult=null,this.render();try{let i="/api/managed/memory_versions/"+encodeURIComponent(e),a=await t.get(i);if(t!==this._api)return;this._lookupResult=a}catch(i){if(t!==this._api)return;this._lookupError=i&&i.message?i.message:"Failed to load memory versions",this._lookupResult=null}finally{this._lookupLoading=!1,this.render()}}_onLookupInput(e){this._lookupId=e&&e.target?e.target.value:""}_onLookupKeyDown(e){e&&e.key==="Enter"&&(e.preventDefault(),this._lookupMemoryVersion())}_attachEventHandlers(){let e=this.shadowRoot;if(!e)return;let t=e.querySelector("#refresh-status-btn");t&&t.addEventListener("click",()=>this._loadStatus());let i=e.querySelector("#refresh-events-btn");i&&i.addEventListener("click",()=>this._loadEvents());let a=e.querySelector("#lookup-input");a&&(a.addEventListener("input",r=>this._onLookupInput(r)),a.addEventListener("keydown",r=>this._onLookupKeyDown(r)));let s=e.querySelector("#lookup-btn");s&&s.addEventListener("click",()=>this._lookupMemoryVersion())}_escapeHtml(e){return e==null?"":String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}_formatTimestamp(e){if(!e)return"";let t;return typeof e=="number"?t=new Date(e>1e12?e:e*1e3):t=new Date(e),Number.isNaN(t.getTime())?String(e):t.toISOString().replace("T"," ").replace(/\.\d+Z$/,"Z")}_renderStatusSection(){if(this._statusLoading)return'<div class="status-row muted">Loading managed memory status...</div>';if(this._statusError)return`
|
|
13709
|
+
`,this._bindEvents()}};customElements.get("loki-cost-waterfall")||customElements.define("loki-cost-waterfall",we);var vt=50,$e=class extends v{static get observedAttributes(){return["api-url","theme"]}constructor(){super(),this._api=null,this._statusLoading=!1,this._statusError=null,this._status=null,this._eventsLoading=!1,this._eventsError=null,this._events=[],this._eventsSource=null,this._eventsCount=0,this._lookupId="",this._lookupLoading=!1,this._lookupError=null,this._lookupResult=null}connectedCallback(){super.connectedCallback(),this._setupApi(),this._loadStatus()}disconnectedCallback(){super.disconnectedCallback(),this._stopPolling()}attributeChangedCallback(e,t,i){if(t!==i)switch(e){case"api-url":this._api&&(this._api=g({baseUrl:i}),this._loadStatus());break;case"theme":this._applyTheme(),this.render();break}}_setupApi(){let e=this.getAttribute("api-url")||window.location.origin;this._api=g({baseUrl:e})}_stopPolling(){}async _loadStatus(){let e=this._api;this._statusLoading=!0,this._statusError=null,this.render();try{let t=await e.get("/api/managed/status");if(e!==this._api)return;this._status=t}catch(t){if(e!==this._api)return;this._statusError=t&&t.message?t.message:"Failed to load managed status",this._status=null}finally{this._statusLoading=!1}this._status&&this._status.enabled?await this._loadEvents():this.render()}async _loadEvents(e=vt){let t=this._api;this._eventsLoading=!0,this._eventsError=null,this.render();try{let i=await t.get("/api/managed/events?limit="+encodeURIComponent(e));if(t!==this._api)return;Array.isArray(i)?(this._events=i,this._eventsCount=i.length,this._eventsSource=null):i&&typeof i=="object"?(this._events=Array.isArray(i.events)?i.events:[],this._eventsCount=typeof i.count=="number"?i.count:this._events.length,this._eventsSource=i.source||null,i.error&&(this._eventsError=String(i.error))):(this._events=[],this._eventsCount=0,this._eventsSource=null)}catch(i){if(t!==this._api)return;this._eventsError=i&&i.message?i.message:"Failed to load managed events",this._events=[],this._eventsCount=0,this._eventsSource=null}finally{this._eventsLoading=!1,this.render()}}async _lookupMemoryVersion(){let e=(this._lookupId||"").trim();if(!e){this._lookupError="Enter a memory ID to look up",this._lookupResult=null,this.render();return}let t=this._api;this._lookupLoading=!0,this._lookupError=null,this._lookupResult=null,this.render();try{let i="/api/managed/memory_versions/"+encodeURIComponent(e),a=await t.get(i);if(t!==this._api)return;this._lookupResult=a}catch(i){if(t!==this._api)return;this._lookupError=i&&i.message?i.message:"Failed to load memory versions",this._lookupResult=null}finally{this._lookupLoading=!1,this.render()}}_onLookupInput(e){this._lookupId=e&&e.target?e.target.value:""}_onLookupKeyDown(e){e&&e.key==="Enter"&&(e.preventDefault(),this._lookupMemoryVersion())}_attachEventHandlers(){let e=this.shadowRoot;if(!e)return;let t=e.querySelector("#refresh-status-btn");t&&t.addEventListener("click",()=>this._loadStatus());let i=e.querySelector("#refresh-events-btn");i&&i.addEventListener("click",()=>this._loadEvents());let a=e.querySelector("#lookup-input");a&&(a.addEventListener("input",r=>this._onLookupInput(r)),a.addEventListener("keydown",r=>this._onLookupKeyDown(r)));let s=e.querySelector("#lookup-btn");s&&s.addEventListener("click",()=>this._lookupMemoryVersion())}_escapeHtml(e){return e==null?"":String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}_formatTimestamp(e){if(!e)return"";let t;return typeof e=="number"?t=new Date(e>1e12?e:e*1e3):t=new Date(e),Number.isNaN(t.getTime())?String(e):t.toISOString().replace("T"," ").replace(/\.\d+Z$/,"Z")}_renderStatusSection(){if(this._statusLoading)return'<div class="status-row muted">Loading managed memory status...</div>';if(this._statusError)return`
|
|
13710
13710
|
<div class="error-banner" role="alert">
|
|
13711
13711
|
<strong>Status error:</strong>
|
|
13712
13712
|
<span>${this._escapeHtml(this._statusError)}</span>
|
package/docs/INSTALLATION.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
The flagship product of [Autonomi](https://www.autonomi.dev/). Loki Mode is a spec-driven autonomous builder with a built-in trust layer that takes any spec to a deployed product and verifies completion with evidence (quality gates plus a completion council), not just a "done" claim. Complete installation instructions for all platforms and use cases.
|
|
4
4
|
|
|
5
|
-
**Version:** v9.
|
|
5
|
+
**Version:** v9.75.0
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -60,6 +60,7 @@ Read-only. Returns two honest series plus a budget block:
|
|
|
60
60
|
"cost_usd": 1.84, "files_changed": 3, "final_verdict": "APPROVE"}
|
|
61
61
|
],
|
|
62
62
|
"project_total_usd": 1.89,
|
|
63
|
+
"project_total_partial": false,
|
|
63
64
|
"runs_count": 1,
|
|
64
65
|
"budget": {
|
|
65
66
|
"limit": 50.0, "used": 1.89, "remaining": 48.11,
|
|
@@ -74,7 +75,12 @@ Read-only. Returns two honest series plus a budget block:
|
|
|
74
75
|
prefer `cost_usd`; if null, price from tokens via the EXISTING
|
|
75
76
|
`_calculate_model_cost` helper (do not add a new pricer).
|
|
76
77
|
- `runs` from `.loki/proofs/*/proof.json` (reuse `_proofs_dir` + `_safe_json_read`).
|
|
77
|
-
- `project_total_usd`
|
|
78
|
+
- `project_total_usd` totals only the runs whose proof recorded a cost
|
|
79
|
+
(the persistent history). It is null when no run recorded a cost, since
|
|
80
|
+
runs that each read "not recorded" do not add up to a $0.00 project; a
|
|
81
|
+
measured $0.00 run still makes it 0.0.
|
|
82
|
+
- `project_total_partial` is true when only some runs recorded a cost. The
|
|
83
|
+
total is then a lower bound, not the project's full spend.
|
|
78
84
|
- `budget.status`: "ok" (<80%), "warn" (>=80% and <100%), "exceeded" (>=100%).
|
|
79
85
|
Computed at read time. No budget.json schema change (avoids the
|
|
80
86
|
byte-identical-JSON parity trap with run.sh heredoc / budget.ts).
|
package/docs/exit-codes.md
CHANGED
|
@@ -67,6 +67,27 @@ An early draft spec listed `1=BLOCKED, 2=CONCERNS`. That ordering was rejected:
|
|
|
67
67
|
it is not used anywhere, it has no consumers, and it inverts the
|
|
68
68
|
severity-rises-with-the-code rule that every other command follows.
|
|
69
69
|
|
|
70
|
+
### Known gaps until v10.0.0
|
|
71
|
+
|
|
72
|
+
The table above is the target. On the current release, four inputs do not
|
|
73
|
+
return what it implies. Measured on this checkout:
|
|
74
|
+
|
|
75
|
+
| Input | Command | Exit today | Target |
|
|
76
|
+
|---|---|---|---|
|
|
77
|
+
| Empty diff (a git repo with no changes vs base) | `loki verify` | 1 (CONCERNS) | 3 |
|
|
78
|
+
| Not a git directory | `loki verify` | 1 (CONCERNS) | 2 |
|
|
79
|
+
| Unknown flag | `loki verify --no-such-flag` | 3 | 64 |
|
|
80
|
+
| `--fast` with nothing scanned (0 files) | `loki verify --fast <empty-dir> --no-cache` | 0 | nonzero |
|
|
81
|
+
|
|
82
|
+
`loki verify --fast` (`autonomy/lib/fast_verify.py`) also exits 0 for a
|
|
83
|
+
nonexistent root and silently ignores unknown flags. Until v10.0.0, do not
|
|
84
|
+
trust exit 0 from `--fast` alone: check stdout for `INCONCLUSIVE`, which it
|
|
85
|
+
prints when nothing was scanned.
|
|
86
|
+
|
|
87
|
+
Both gaps are tracked as pending moat cases, milestone v10.0.0, in
|
|
88
|
+
`tests/moat/pending.txt`: P2.verify-exit-contract (the first three rows)
|
|
89
|
+
and P2.fast-verify-inconclusive-not-zero (the `--fast` row).
|
|
90
|
+
|
|
70
91
|
## `loki proof verify <id>`
|
|
71
92
|
|
|
72
93
|
Re-checks one Evidence Receipt against the repo (tamper and drift). The same
|