loki-mode 11.17.55 → 11.17.57

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.
Files changed (80) hide show
  1. package/SKILL.md +2 -2
  2. package/VERSION +1 -1
  3. package/dashboard/__init__.py +1 -1
  4. package/docs/CLI-REFERENCE.md +1 -1
  5. package/docs/INSTALLATION.md +1 -1
  6. package/docs/v10/BOARD.md +1 -1
  7. package/docs/v10/PROGRESS.md +6 -0
  8. package/docs/v10/roadmap-10/01-measurement.md +113 -0
  9. package/docs/v10/roadmap-10/02-cost.md +76 -0
  10. package/docs/v10/roadmap-10/03-speed.md +65 -0
  11. package/docs/v10/roadmap-10/04-first-run.md +61 -0
  12. package/docs/v10/roadmap-10/05-deploy.md +61 -0
  13. package/docs/v10/roadmap-10/06-stability.md +64 -0
  14. package/docs/v10/roadmap-10/07-quality.md +57 -0
  15. package/docs/v10/roadmap-10/08-proof.md +48 -0
  16. package/docs/v10/roadmap-10/09-safety.md +74 -0
  17. package/docs/v10/roadmap-10/README.md +114 -0
  18. package/loki-ts/dist/cockpit.js +11 -11
  19. package/loki-ts/dist/loki.js +1135 -1135
  20. package/mcp/__init__.py +1 -1
  21. package/package.json +2 -2
  22. package/packages/control-plane/dist/server.js +124 -123
  23. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  24. package/web-app/dist/assets/{AdminPage-CEzsx-2B.js → AdminPage-D9vxsKmh.js} +1 -1
  25. package/web-app/dist/assets/{Avatar-CsAVQ-0g.js → Avatar-DfxBpPUo.js} +1 -1
  26. package/web-app/dist/assets/{Badge-BT5F2jnq.js → Badge-Jtp0w19_.js} +1 -1
  27. package/web-app/dist/assets/{Button-CQjmQOkX.js → Button-Cfl_Ygum.js} +1 -1
  28. package/web-app/dist/assets/{CockpitPage-Cuo0FMGe.js → CockpitPage-t_xLPM1y.js} +1 -1
  29. package/web-app/dist/assets/{ComparePage-BcLSrBTG.js → ComparePage-00e9eUgR.js} +1 -1
  30. package/web-app/dist/assets/{ErrorBoundary-DzSPrICj.js → ErrorBoundary-DfoBT_kK.js} +1 -1
  31. package/web-app/dist/assets/{EvidenceReceiptPanel-DV5kdGO5.js → EvidenceReceiptPanel-Cm--Zldw.js} +1 -1
  32. package/web-app/dist/assets/{GitHubIssuesPanel-DWhH8uwF.js → GitHubIssuesPanel-CmZoYExK.js} +1 -1
  33. package/web-app/dist/assets/{GitHubPRsPanel-DPZJL0Ad.js → GitHubPRsPanel-rehTMC_P.js} +1 -1
  34. package/web-app/dist/assets/{HomePage-CLVmK1C4.js → HomePage-CKgOAUqm.js} +2 -2
  35. package/web-app/dist/assets/{LoginPage-0qRTmghT.js → LoginPage-DWMk7D-V.js} +1 -1
  36. package/web-app/dist/assets/{MagicPage-jUDOyd8m.js → MagicPage-BdIzYkjN.js} +1 -1
  37. package/web-app/dist/assets/{MetricsPage-Dm3PyXt8.js → MetricsPage-DdjN5LJL.js} +1 -1
  38. package/web-app/dist/assets/{NotFoundPage-Dyr5Iv-6.js → NotFoundPage-Cf4GHp9Z.js} +1 -1
  39. package/web-app/dist/assets/{ProjectPage-CoX7FGHN.js → ProjectPage-BP8u2iFN.js} +3 -3
  40. package/web-app/dist/assets/{ProjectsPage-CQh9mPvU.js → ProjectsPage-CK7R-DIh.js} +1 -1
  41. package/web-app/dist/assets/{SettingsPage-C1bbN9RT.js → SettingsPage-DNMqOUrM.js} +1 -1
  42. package/web-app/dist/assets/{ShowcasePage-P3Hw9Noe.js → ShowcasePage-RkPgacU3.js} +1 -1
  43. package/web-app/dist/assets/{SystemSettingsPage-DuClc6j2.js → SystemSettingsPage-COqYOPAP.js} +1 -1
  44. package/web-app/dist/assets/{TeamsPage-DYWppMXo.js → TeamsPage-CyBIuYhv.js} +1 -1
  45. package/web-app/dist/assets/{TemplatesPage-D2cQ8z97.js → TemplatesPage-5cMJ3uaP.js} +1 -1
  46. package/web-app/dist/assets/{TerminalOutput-7SoZNJnN.js → TerminalOutput-D2as8CHU.js} +1 -1
  47. package/web-app/dist/assets/{activity-Btrwrman.js → activity-B0HWAVsH.js} +1 -1
  48. package/web-app/dist/assets/{bell-DyKvtIyq.js → bell-CeapvdDm.js} +1 -1
  49. package/web-app/dist/assets/{bot-CMCluK2w.js → bot-C9_qiFCl.js} +1 -1
  50. package/web-app/dist/assets/{check-6Ps0J2A0.js → check-ZLkbkjP8.js} +1 -1
  51. package/web-app/dist/assets/{chevron-left-UFVem1_Q.js → chevron-left-DzAOofqV.js} +1 -1
  52. package/web-app/dist/assets/{circle-alert-DN06PnoW.js → circle-alert-C_P6Sbnq.js} +1 -1
  53. package/web-app/dist/assets/{clock-ZDdNRPqc.js → clock-hlFBiyvc.js} +1 -1
  54. package/web-app/dist/assets/{cloud-BBQ_4PAO.js → cloud-gpl8_jQe.js} +1 -1
  55. package/web-app/dist/assets/{code-xml-CeMIOys1.js → code-xml-CJ7WRPDY.js} +1 -1
  56. package/web-app/dist/assets/{database-RPRkkycE.js → database-C0waxSTC.js} +1 -1
  57. package/web-app/dist/assets/{dollar-sign-CzMhGRnY.js → dollar-sign-TFqYdT4P.js} +1 -1
  58. package/web-app/dist/assets/{file-code-corner-Bjvy_1-6.js → file-code-corner-Cklb7xuW.js} +1 -1
  59. package/web-app/dist/assets/{file-plus-qfMa2QbU.js → file-plus-vY6Bgsjz.js} +1 -1
  60. package/web-app/dist/assets/{globe-TpJ3ospb.js → globe-4A2JXvUS.js} +1 -1
  61. package/web-app/dist/assets/{hammer-D_nw758T.js → hammer-ZHnY2Erh.js} +1 -1
  62. package/web-app/dist/assets/{index-CtQLnUKu.js → index-CgCOQR3S.js} +3 -3
  63. package/web-app/dist/assets/{layers-qtTx1or7.js → layers-By5ECd5H.js} +1 -1
  64. package/web-app/dist/assets/{loader-circle-B4ijaGyV.js → loader-circle-yM_E0C2Q.js} +1 -1
  65. package/web-app/dist/assets/{lock-_HeSCV0H.js → lock-lSNyrxDR.js} +1 -1
  66. package/web-app/dist/assets/{package-Dg6Qt1JC.js → package-BKFtRuCB.js} +1 -1
  67. package/web-app/dist/assets/{plus-D5fVALHH.js → plus-CjV1F6qp.js} +1 -1
  68. package/web-app/dist/assets/{refresh-cw-CZHZmoHM.js → refresh-cw-DTSM4-_Q.js} +1 -1
  69. package/web-app/dist/assets/{rotate-ccw-BRNlH9dS.js → rotate-ccw-CiCkyt92.js} +1 -1
  70. package/web-app/dist/assets/{scroll-text-DylHv8rG.js → scroll-text-D1Ruxchx.js} +1 -1
  71. package/web-app/dist/assets/{server-C3UnfUWG.js → server-DhT2dH_l.js} +1 -1
  72. package/web-app/dist/assets/{shield-alert-B16YK1L7.js → shield-alert-CFFYVEiJ.js} +1 -1
  73. package/web-app/dist/assets/{thumbs-up-9vfN_rsT.js → thumbs-up-Dl4lQ_rS.js} +1 -1
  74. package/web-app/dist/assets/{trash-2-BQ-nbCvC.js → trash-2-DMJUQZ_M.js} +1 -1
  75. package/web-app/dist/assets/{trending-down-BML7JtUD.js → trending-down-C4mhp6Ua.js} +1 -1
  76. package/web-app/dist/assets/{trending-up-CfYZeeTt.js → trending-up-D534cAuW.js} +1 -1
  77. package/web-app/dist/assets/{upload-Bx2AigKp.js → upload-nhP5uhIQ.js} +1 -1
  78. package/web-app/dist/assets/{usePolling-C3xP585q.js → usePolling-CWFsCezc.js} +1 -1
  79. package/web-app/dist/assets/{user-BAGG-wCv.js → user-5TMGZ6m7.js} +1 -1
  80. package/web-app/dist/index.html +1 -1
@@ -0,0 +1,74 @@
1
+ # 09 Safety and security
2
+
3
+ Now 8.5. Bar set by: Codex (offline agent phase, secrets stripped before the agent runs, domain allowlist), Claude Code (OS sandbox: Seatbelt on macOS, bubblewrap on Linux), Copilot (default security scans, restricted push branches).
4
+
5
+ Why we are not 10:
6
+ - `loki share` uploads a PUBLIC gist by default from `loki report` output with no redact call (`autonomy/loki` cmd_report / share). Live leak risk.
7
+ - `redact.ts` misses secret words mid-name: `AWS_SECRET_ACCESS_KEY`, `PGPASSWORD`, `MYSQL_PWD`, `DB_PASS`, `PRIVATE_KEY`, `SECRET_KEY_BASE`, `client_secret_value`; unterminated `password="...`; the `=>` form. Python `proof_redact.py` catches them (parity gap).
8
+ - URL userinfo ReDoS (2.8s on 100KB). SECURITY-26 fix `fb2408cfc` was BLOCKED: the added `\b` lets hash-glued URLs leak userinfo.
9
+ - Default agent mode is bypassPermissions; engine10 has no sandbox; the bash denylist is literal (`rm -r -f /`, `find / -delete`, `shutil.rmtree` pass).
10
+ - `policyGate` covers only the PR action and allows when no policy file exists.
11
+ - npm publish has no `--provenance`, uses a long-lived `NPM_TOKEN`; actions mostly tag-pinned.
12
+ - SARIF and `redact.ts` keep separate pattern lists; SARIF never gates.
13
+
14
+ Owns `loki-ts/src/util/redact.ts` for this program. All tests build secrets by string concatenation so gitleaks does not flag them. HIGH tier: opus adversarial reviewer on every item.
15
+
16
+ ## SAFE-1 Share is private and redacted
17
+
18
+ Acceptance: `loki share` defaults to a secret gist, requires `--public` explicitly, and runs output through redaction; test with seeded secrets shows none uploaded.
19
+
20
+ Todo:
21
+ - [ ] Flip default, add redact call
22
+ - [ ] Test
23
+
24
+ ## SAFE-2 Redaction parity and ReDoS
25
+
26
+ Todo:
27
+ - [ ] Rework SECURITY-26 on main: URL userinfo scheme `/([a-z][a-z0-9+.-]{0,63}:\/\/)[^\s/?#@]+@/gi` (no `\b`), regression tests for `"sha256:"+h+"https://admin:...@db"`, `h+"postgres://u:...@db"`, `"x".repeat(80)+"://u:p@h"`; ReDoS test limit 250ms
28
+ - [ ] N2: unterminated quoted values redacted
29
+ - [ ] N3: mid-name keywords (AWS_SECRET_ACCESS_KEY, PGPASSWORD, MYSQL_PWD, DB_PASS, PRIVATE_KEY, SECRET_KEY_BASE)
30
+ - [ ] N4: `=>` assignment form
31
+ - [ ] Parity test: the same corpus through `redact.ts` and `proof_redact.py` gives the same masked set
32
+
33
+ Acceptance: parity test green; adversarial 100KB and 1MB inputs linear; opus HIGH reviewer APPROVE.
34
+
35
+ ## SAFE-3 Sandbox by default on engine10
36
+
37
+ Acceptance: engine10 agent runs inside the OS sandbox (Seatbelt / bubblewrap, or the provider's own sandbox) with write access limited to the worktree; `bypassPermissions` only inside the sandbox; denylist tests cover `rm -r -f /`, `find / -delete`, `python -c shutil.rmtree`.
38
+
39
+ Todo:
40
+ - [ ] Sandbox wrapper in runner
41
+ - [ ] Shape-based denylist (not literal strings)
42
+ - [ ] Escape tests
43
+
44
+ ## SAFE-4 Egress allowlist and offline phase
45
+
46
+ Acceptance: optional offline agent phase after dependency install; domain allowlist enforced; secrets stripped from the agent env before the agent runs (spawn env guard extended).
47
+
48
+ Todo:
49
+ - [ ] Allowlist config plus enforcement
50
+ - [ ] Offline phase flag
51
+ - [ ] Env strip test
52
+
53
+ ## SAFE-5 Policy gate everywhere
54
+
55
+ Acceptance: `policyGate` runs for commit, push, deploy and network actions; missing check.js fails closed; tests per action.
56
+
57
+ Todo:
58
+ - [ ] Extend `util/run_outputs.ts` call sites
59
+
60
+ ## SAFE-6 Supply chain
61
+
62
+ Acceptance: `npm publish --provenance` via OIDC (`id-token: write`), no long-lived NPM_TOKEN; all actions SHA-pinned; SLSA provenance for the tarball; `npm view loki-mode` shows provenance.
63
+
64
+ Todo:
65
+ - [ ] release.yml publish job
66
+ - [ ] Pin actions by SHA (script plus guard)
67
+
68
+ ## SAFE-7 One pattern list
69
+
70
+ Acceptance: SARIF export and `redact.ts` read one shared pattern source; SARIF can gate with `--fail-on`; drift test.
71
+
72
+ Todo:
73
+ - [ ] Shared module, delete the duplicate list
74
+ - [ ] Gate flag
@@ -0,0 +1,114 @@
1
+ # Roadmap to 10/10 in every category
2
+
3
+ Owner: Chief of Staff. Written 2026-10-17 at v11.17.56. No dates: every item ships as soon as it is green and reviewed (D96, D102).
4
+
5
+ Why this folder exists: no existing doc owns the 10/10-versus-all-competitors program. PLAN-V12.md is the P12 plan, ROADMAP-D63.md covers the D63 pillars, SCORECARD-PLAN.md covers D41 measurement. This folder is the one index; slices still go to BOARD.md and bugs still need a FAILURE-CLASSES.md row first (D86).
6
+
7
+ Trigger: when the founder says "work on roadmap", execute every unchecked item here autonomously with parallel agent teams, release each approved slice, and tick the box in the same release commit.
8
+
9
+ ## Scoreboard
10
+
11
+ | Category | Loki now | Best competitor today | Why we are not 10 | Bar to beat (10/10) | File |
12
+ |---|---|---|---|---|---|
13
+ | Measurement (enabler) | 3 | SWE-bench / Terminal-Bench publishers | No PROVEN cost run, no catch rate, no public benchmark since 2026-01 | Every other score below is backed by a dated, reproducible number | [01-measurement.md](01-measurement.md) |
14
+ | Cost | 6 | Aider; Cursor Composer about $0.07/task | Run4: Loki 1.41x MORE than lean raw on 6 tasks; NOT PROVEN | PROVEN_AT(0.5) vs all 3 floors, n>=3, ledger-checked | [02-cost.md](02-cost.md) |
15
+ | Speed | 7 | Cursor Composer Fast (6.7 min avg), Codex | Medium p50 2.5-4x raw; small 1.31x raw; Wall killed at 90s in half of runs | Small paired time ratio CI lower bound >= 1.0; medium p50 <= raw | [03-speed.md](03-speed.md) |
16
+ | First run / adoption | 8 | Lovable (2-3 min, zero install), Cursor, Claude Code | Time to first sealed PR never measured; 5 host tools; MCP deeplink likely exits 2 | Clean machine to first sealed PR p50 <= 120s, measured nightly with a real provider | [04-first-run.md](04-first-run.md) |
17
+ | Deploy | 7.5 | Replit (code + DB rollback), Vercel + Neon (DB branch per preview) | No DB setup, no per-PR preview URL, no auto rollback on Netlify/Cloudflare, bash only | Preview URL in every PR, auto rollback on all 4 providers, DB hook, Bun route | [05-deploy.md](05-deploy.md) |
18
+ | Stability | 7.5 | No clear leader; bar is a public status page | Main Tests red about 10h; longest green streak 23; caps break after merge (FC-60) | 24h green streak, red-to-green under 1h, merged-train guards on every push | [06-stability.md](06-stability.md) |
19
+ | Delivered quality / autonomy | 7.5 | Claude Code, Codex (Terminal-Bench 2.0 about 82%) | No arm beats raw on medium; D50 sonnet loss; moat P3/P4 pending, P9 regressed | Medium completion >= 85.7% at <= $0.5085; moat 9 of 9; public Terminal-Bench and SWE-bench Pro | [07-quality.md](07-quality.md) |
20
+ | Proof / trust | 9 | Nobody signs spec + tests + result (Loki's opening) | Self-generated trust root, no transparency log, no published catch rate, closed verifier bundle | Third-party verifiable receipts (Rekor), published catch rate, independent audit | [08-proof.md](08-proof.md) |
21
+ | Safety / security | 8.5 | Codex (offline agent phase, secret strip, domain allowlist), Claude Code (Seatbelt/bubblewrap), Copilot (default scans, branch limits) | Default bypassPermissions, no sandbox on engine10, PUBLIC gist share, redact TS/Python parity gaps, no npm provenance | Sandboxed by default, egress allowlist, redaction parity, npm provenance, SHA-pinned actions | [09-safety.md](09-safety.md) |
22
+
23
+ Overall now: 7.5. Target: 10 in every row, each backed by a command plus its output.
24
+
25
+ ## Execution order
26
+
27
+ 1. Measurement first (01). Nothing in cost, speed or quality can be claimed without it. Run in parallel with step 2.
28
+ 2. Stability P0s (06 epics STAB-1..STAB-3). Main must be green before the swarm scales up again; red main hides regressions.
29
+ 3. Safety P0s (09 epics SAFE-1, SAFE-2): public gist default and redaction parity are live leak risks.
30
+ 4. Cost and speed levers (02, 03), each gated by a measured arm from step 1.
31
+ 5. First-run and deploy (04, 05) in parallel with step 4; different file sets.
32
+ 6. Quality and moat (07), then proof trust root (08).
33
+ 7. Re-score every row with evidence; publish the scoreboard.
34
+
35
+ Parallelism: categories own non-overlapping file sets except `loki-ts/src/util/redact.ts` (09 only) and `loki-ts/src/engine10/stages/wall.ts` (03 owns; 02 and 07 consume). Architects split each epic into slices per PLAN-V12 ground rules: engine10 core cap 5000, e10ext 1500, features 3000, contrib 1200; new logic goes in util/ or runner/; hot files are edited by the Captain only.
36
+
37
+ ## Master checklist
38
+
39
+ Each line is an epic. Stories, acceptance criteria and todo boxes live in the category file.
40
+
41
+ ### 01 Measurement
42
+ - [ ] MEAS-1 Bench rows carry loki_version, cost_profile and one cost truth
43
+ - [ ] MEAS-2 Bench Wall uses the task interpreter; Loki rows can reach VERIFIED
44
+ - [ ] MEAS-3 C-F1 run5: 5 arms, 3 floors, n=3, 20 tasks
45
+ - [ ] MEAS-4 Medium A/B on all 14 tasks, n=3, cost never null
46
+ - [ ] MEAS-5 Seeded-defect catch rate on real runs (wrong-pass.json)
47
+ - [ ] MEAS-6 Terminal-Bench 2.0 and SWE-bench Pro runs, side by side with raw
48
+ - [ ] MEAS-7 Real-provider time-to-first-sealed-PR, nightly
49
+ - [ ] MEAS-8 Public scoreboard page generated from result files
50
+
51
+ ### 02 Cost
52
+ - [ ] COST-A Small-task lean path actually triggers (sizing)
53
+ - [ ] COST-B Focused implement brief (files + exact test command)
54
+ - [ ] COST-C Flip measured-OFF knobs (cost lean profile, TRIM, judge batch)
55
+ - [ ] COST-D Cost correctness followups (alias flags, run.sh .5 cap, negative price, TEN-COST-59 sibling)
56
+ - [ ] COST-E Publish PROVEN_AT(0.5)
57
+
58
+ ### 03 Speed
59
+ - [ ] SPD-A Wall off the critical path (concurrent default, limit fix)
60
+ - [ ] SPD-B Pre-model overhead measured and under 2s warm
61
+ - [ ] SPD-C Parallel verify/base jobs default after A/B
62
+ - [ ] SPD-D Speed tier tasks and LOKI_SPEED A/B
63
+ - [ ] SPD-E Equal-parallelism scorecard rule
64
+
65
+ ### 04 First run / adoption
66
+ - [ ] FR-A One command from clean machine to first sealed PR
67
+ - [ ] FR-B Fewer host requirements on the v10 path
68
+ - [ ] FR-C Every preflight fatal is telemetered and has a named fix
69
+ - [ ] FR-D IDE / MCP one-click actually works
70
+ - [ ] FR-E Zero-install web entry (hosted try)
71
+
72
+ ### 05 Deploy
73
+ - [ ] DEP-A Per-PR preview URL with health in the PR body
74
+ - [ ] DEP-B Auto rollback on all 4 providers
75
+ - [ ] DEP-C Database provisioning hook
76
+ - [ ] DEP-D Continuous health watch with rollback suggestion
77
+ - [ ] DEP-E Deploy on the Bun route
78
+ - [ ] DEP-F Secrets never on argv
79
+
80
+ ### 06 Stability
81
+ - [ ] STAB-1 Main green now and kept green (core budget, P9, FC-01, L2)
82
+ - [ ] STAB-2 Merged-train guard job on every main push
83
+ - [ ] STAB-3 Nightly cannot read green when it ran nothing
84
+ - [ ] STAB-4 Green-streak and time-to-fix metrics in pulse
85
+ - [ ] STAB-5 Public status page
86
+ - [ ] STAB-6 Repo hygiene (295 unmerged branches, BOARD unparsed rows, stale metrics)
87
+
88
+ ### 07 Delivered quality / autonomy
89
+ - [ ] QUAL-A Beat raw on medium tier
90
+ - [ ] QUAL-B Close the D50 sonnet loss
91
+ - [ ] QUAL-C Moat 9 of 9 (P3 Wall, P4 model freedom, P9)
92
+ - [ ] QUAL-D Close A-119b weakening holes
93
+ - [ ] QUAL-E Public benchmark numbers
94
+
95
+ ### 08 Proof / trust
96
+ - [ ] PRF-A Third-party verifiable trust root (transparency log, key directory)
97
+ - [ ] PRF-B Browser verifier and open verifier source
98
+ - [ ] PRF-C Receipts record every proof opt-out
99
+ - [ ] PRF-D Published catch rate and independent audit
100
+
101
+ ### 09 Safety / security
102
+ - [ ] SAFE-1 `loki share` private by default and redacted
103
+ - [ ] SAFE-2 Redaction parity and ReDoS fix (SECURITY-26 rework, N2/N3/N4)
104
+ - [ ] SAFE-3 Sandbox by default on engine10
105
+ - [ ] SAFE-4 Network egress allowlist and offline agent phase
106
+ - [ ] SAFE-5 Policy gate covers commit, push, deploy and network
107
+ - [ ] SAFE-6 Supply chain: npm provenance, OIDC publish, SHA-pinned actions
108
+ - [ ] SAFE-7 One shared secret pattern list; SARIF can gate
109
+
110
+ ## Done definition for the program
111
+
112
+ - Every row in the scoreboard reads 10 with a cited command, exit code and result file.
113
+ - METRICS.md, the public scoreboard and this README agree.
114
+ - No open P0 in FAILURE-CLASSES.md for any category.
@@ -1,19 +1,19 @@
1
1
  // @bun
2
- var zD=Object.defineProperty;var FD=(D)=>D;function HD(D,J){this[D]=FD.bind(null,J)}var BD=(D,J)=>{for(var Q in J)zD(D,Q,{get:J[Q],enumerable:!0,configurable:!0,set:HD.bind(J,Q)})};var ID=(D,J)=>()=>(D&&(J=D(D=0)),J);var F=import.meta.require;var qD={};BD(qD,{initWasm:()=>pD,Resvg:()=>nD});function A(D){if(_===W.length)W.push(W.length+1);let J=_;return _=W[J],W[J]=D,J}function U(D){return W[D]}function xD(D){if(D<132)return;W[D]=_,_=D}function z(D){let J=U(D);return xD(D),J}function b(){if(j===null||j.byteLength===0)j=new Uint8Array(G.memory.buffer);return j}function n(D,J,Q){if(Q===void 0){let K=y.encode(D),N=J(K.length,1)>>>0;return b().subarray(N,N+K.length).set(K),h=K.length,N}let X=D.length,Z=J(X,1)>>>0,$=b(),q=0;for(;q<X;q++){let K=D.charCodeAt(q);if(K>127)break;$[Z+q]=K}if(q!==X){if(q!==0)D=D.slice(q);Z=Q(Z,X,X=q+D.length*3,1)>>>0;let K=b().subarray(Z+q,Z+X),N=_D(D,K);q+=N.written,Z=Q(Z,X,q,1)>>>0}return h=q,Z}function i(D){return D===void 0||D===null}function P(){if(x===null||x.byteLength===0)x=new Int32Array(G.memory.buffer);return x}function w(D,J){return D=D>>>0,GD.decode(b().subarray(D,D+J))}function hD(D,J){if(!(D instanceof J))throw Error(`expected instance of ${J.name}`);return D.ptr}function uD(D,J){try{return D.apply(this,J)}catch(Q){G.__wbindgen_exn_store(A(Q))}}async function yD(D,J){if(typeof Response==="function"&&D instanceof Response){if(typeof WebAssembly.instantiateStreaming==="function")try{return await WebAssembly.instantiateStreaming(D,J)}catch(X){if(D.headers.get("Content-Type")!="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",X);else throw X}let Q=await D.arrayBuffer();return await WebAssembly.instantiate(Q,J)}else{let Q=await WebAssembly.instantiate(D,J);if(Q instanceof WebAssembly.Instance)return{instance:Q,module:D};else return Q}}function wD(){let D={};return D.wbg={},D.wbg.__wbg_new_28c511d9baebfa89=function(J,Q){let X=Error(w(J,Q));return A(X)},D.wbg.__wbindgen_memory=function(){let J=G.memory;return A(J)},D.wbg.__wbg_buffer_12d079cc21e14bdb=function(J){let Q=U(J).buffer;return A(Q)},D.wbg.__wbg_newwithbyteoffsetandlength_aa4a17c33a06e5cb=function(J,Q,X){let Z=new Uint8Array(U(J),Q>>>0,X>>>0);return A(Z)},D.wbg.__wbindgen_object_drop_ref=function(J){z(J)},D.wbg.__wbg_new_63b92bc8671ed464=function(J){let Q=new Uint8Array(U(J));return A(Q)},D.wbg.__wbg_values_839f3396d5aac002=function(J){let Q=U(J).values();return A(Q)},D.wbg.__wbg_next_196c84450b364254=function(){return uD(function(J){let Q=U(J).next();return A(Q)},arguments)},D.wbg.__wbg_done_298b57d23c0fc80c=function(J){return U(J).done},D.wbg.__wbg_value_d93c65011f51a456=function(J){let Q=U(J).value;return A(Q)},D.wbg.__wbg_instanceof_Uint8Array_2b3bbecd033d19f6=function(J){let Q;try{Q=U(J)instanceof Uint8Array}catch(Z){Q=!1}return Q},D.wbg.__wbindgen_string_get=function(J,Q){let X=U(Q),Z=typeof X==="string"?X:void 0;var $=i(Z)?0:n(Z,G.__wbindgen_malloc,G.__wbindgen_realloc),q=h;P()[J/4+1]=q,P()[J/4+0]=$},D.wbg.__wbg_new_16b304a2cfa7ff4a=function(){return A([])},D.wbg.__wbindgen_string_new=function(J,Q){let X=w(J,Q);return A(X)},D.wbg.__wbg_push_a5b05aedc7234f9f=function(J,Q){return U(J).push(U(Q))},D.wbg.__wbg_length_c20a40f15020d68a=function(J){return U(J).length},D.wbg.__wbg_set_a47bac70306a19a7=function(J,Q,X){U(J).set(U(Q),X>>>0)},D.wbg.__wbindgen_throw=function(J,Q){throw Error(w(J,Q))},D}function lD(D,J){}function mD(D,J){return G=D.exports,KD.__wbindgen_wasm_module=J,x=null,j=null,G}async function KD(D){if(G!==void 0)return G;if(typeof D>"u")D=new URL("index_bg.wasm",void 0);let J=wD();if(typeof D==="string"||typeof Request==="function"&&D instanceof Request||typeof URL==="function"&&D instanceof URL)D=fetch(D);lD(J);let{instance:Q,module:X}=await yD(await D,J);return mD(Q,X)}function iD(D){return Object.prototype.hasOwnProperty.call(D,"fontBuffers")}var G,W,_,h=0,j=null,y,_D,x=null,GD,ZD,p=class D{static __wrap(J){J=J>>>0;let Q=Object.create(D.prototype);return Q.__wbg_ptr=J,ZD.register(Q,Q.__wbg_ptr,Q),Q}__destroy_into_raw(){let J=this.__wbg_ptr;return this.__wbg_ptr=0,ZD.unregister(this),J}free(){let J=this.__destroy_into_raw();G.__wbg_bbox_free(J)}get x(){return G.__wbg_get_bbox_x(this.__wbg_ptr)}set x(J){G.__wbg_set_bbox_x(this.__wbg_ptr,J)}get y(){return G.__wbg_get_bbox_y(this.__wbg_ptr)}set y(J){G.__wbg_set_bbox_y(this.__wbg_ptr,J)}get width(){return G.__wbg_get_bbox_width(this.__wbg_ptr)}set width(J){G.__wbg_set_bbox_width(this.__wbg_ptr,J)}get height(){return G.__wbg_get_bbox_height(this.__wbg_ptr)}set height(J){G.__wbg_set_bbox_height(this.__wbg_ptr,J)}},$D,fD=class D{static __wrap(J){J=J>>>0;let Q=Object.create(D.prototype);return Q.__wbg_ptr=J,$D.register(Q,Q.__wbg_ptr,Q),Q}__destroy_into_raw(){let J=this.__wbg_ptr;return this.__wbg_ptr=0,$D.unregister(this),J}free(){let J=this.__destroy_into_raw();G.__wbg_renderedimage_free(J)}get width(){return G.renderedimage_width(this.__wbg_ptr)>>>0}get height(){return G.renderedimage_height(this.__wbg_ptr)>>>0}asPng(){try{let Z=G.__wbindgen_add_to_stack_pointer(-16);G.renderedimage_asPng(Z,this.__wbg_ptr);var J=P()[Z/4+0],Q=P()[Z/4+1],X=P()[Z/4+2];if(X)throw z(Q);return z(J)}finally{G.__wbindgen_add_to_stack_pointer(16)}}get pixels(){let J=G.renderedimage_pixels(this.__wbg_ptr);return z(J)}},vD,bD=class{__destroy_into_raw(){let D=this.__wbg_ptr;return this.__wbg_ptr=0,vD.unregister(this),D}free(){let D=this.__destroy_into_raw();G.__wbg_resvg_free(D)}constructor(D,J,Q){try{let N=G.__wbindgen_add_to_stack_pointer(-16);var X=i(J)?0:n(J,G.__wbindgen_malloc,G.__wbindgen_realloc),Z=h;G.resvg_new(N,A(D),X,Z,i(Q)?0:A(Q));var $=P()[N/4+0],q=P()[N/4+1],K=P()[N/4+2];if(K)throw z(q);return this.__wbg_ptr=$>>>0,this}finally{G.__wbindgen_add_to_stack_pointer(16)}}get width(){return G.resvg_width(this.__wbg_ptr)}get height(){return G.resvg_height(this.__wbg_ptr)}render(){try{let X=G.__wbindgen_add_to_stack_pointer(-16);G.resvg_render(X,this.__wbg_ptr);var D=P()[X/4+0],J=P()[X/4+1],Q=P()[X/4+2];if(Q)throw z(J);return fD.__wrap(D)}finally{G.__wbindgen_add_to_stack_pointer(16)}}toString(){let D,J;try{let Z=G.__wbindgen_add_to_stack_pointer(-16);G.resvg_toString(Z,this.__wbg_ptr);var Q=P()[Z/4+0],X=P()[Z/4+1];return D=Q,J=X,w(Q,X)}finally{G.__wbindgen_add_to_stack_pointer(16),G.__wbindgen_free(D,J,1)}}innerBBox(){let D=G.resvg_innerBBox(this.__wbg_ptr);return D===0?void 0:p.__wrap(D)}getBBox(){let D=G.resvg_getBBox(this.__wbg_ptr);return D===0?void 0:p.__wrap(D)}cropByBBox(D){hD(D,p),G.resvg_cropByBBox(this.__wbg_ptr,D.__wbg_ptr)}imagesToResolve(){try{let X=G.__wbindgen_add_to_stack_pointer(-16);G.resvg_imagesToResolve(X,this.__wbg_ptr);var D=P()[X/4+0],J=P()[X/4+1],Q=P()[X/4+2];if(Q)throw z(J);return z(D)}finally{G.__wbindgen_add_to_stack_pointer(16)}}resolveImage(D,J){try{let Z=G.__wbindgen_add_to_stack_pointer(-16),$=n(D,G.__wbindgen_malloc,G.__wbindgen_realloc),q=h;G.resvg_resolveImage(Z,this.__wbg_ptr,$,q,A(J));var Q=P()[Z/4+0],X=P()[Z/4+1];if(X)throw z(Q)}finally{G.__wbindgen_add_to_stack_pointer(16)}}},dD,g=!1,pD=async(D)=>{if(g)throw Error("Already initialized. The `initWasm()` function can be used only once.");await dD(await D),g=!0},nD;var LD=ID(()=>{W=Array(128).fill(void 0);W.push(void 0,null,!0,!1);_=W.length;y=typeof TextEncoder<"u"?new TextEncoder("utf-8"):{encode:()=>{throw Error("TextEncoder not available")}},_D=typeof y.encodeInto==="function"?function(D,J){return y.encodeInto(D,J)}:function(D,J){let Q=y.encode(D);return J.set(Q),{read:D.length,written:Q.length}};GD=typeof TextDecoder<"u"?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};if(typeof TextDecoder<"u")GD.decode();ZD=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((D)=>G.__wbg_bbox_free(D>>>0)),$D=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((D)=>G.__wbg_renderedimage_free(D>>>0)),vD=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((D)=>G.__wbg_resvg_free(D>>>0));dD=KD,nD=class extends bD{constructor(D,J){if(!g)throw Error("Wasm has not been initialized. Call `initWasm()` function.");let Q=J?.font;if(!!Q&&iD(Q)){let X={...J,font:{...Q,fontBuffers:void 0}};super(D,JSON.stringify(X),Q.fontBuffers)}else super(D,JSON.stringify(J))}}});function T(D){return String(D??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function RD(D,J,Q){let X=Q/512;return`<g transform="translate(${D},${J}) scale(${X})">
2
+ var WJ=Object.defineProperty;var FJ=(J)=>J;function BJ(J,Q){this[J]=FJ.bind(null,Q)}var HJ=(J,Q)=>{for(var X in Q)WJ(J,X,{get:Q[X],enumerable:!0,configurable:!0,set:BJ.bind(Q,X)})};var RJ=(J,Q)=>()=>(J&&(Q=J(J=0)),Q);var F=import.meta.require;var qJ={};HJ(qJ,{initWasm:()=>pJ,Resvg:()=>gJ});function C(J){if(_===T.length)T.push(T.length+1);let Q=_;return _=T[Q],T[Q]=J,Q}function A(J){return T[J]}function xJ(J){if(J<132)return;T[J]=_,_=J}function W(J){let Q=A(J);return xJ(J),Q}function y(){if(j===null||j.byteLength===0)j=new Uint8Array(D.memory.buffer);return j}function g(J,Q,X){if(X===void 0){let K=b.encode(J),P=Q(K.length,1)>>>0;return y().subarray(P,P+K.length).set(K),h=K.length,P}let Z=J.length,$=Q(Z,1)>>>0,G=y(),q=0;for(;q<Z;q++){let K=J.charCodeAt(q);if(K>127)break;G[$+q]=K}if(q!==Z){if(q!==0)J=J.slice(q);$=X($,Z,Z=q+J.length*3,1)>>>0;let K=y().subarray($+q,$+Z),P=_J(J,K);q+=P.written,$=X($,Z,q,1)>>>0}return h=q,$}function i(J){return J===void 0||J===null}function N(){if(x===null||x.byteLength===0)x=new Int32Array(D.memory.buffer);return x}function w(J,Q){return J=J>>>0,DJ.decode(y().subarray(J,J+Q))}function hJ(J,Q){if(!(J instanceof Q))throw Error(`expected instance of ${Q.name}`);return J.ptr}function fJ(J,Q){try{return J.apply(this,Q)}catch(X){D.__wbindgen_exn_store(C(X))}}async function bJ(J,Q){if(typeof Response==="function"&&J instanceof Response){if(typeof WebAssembly.instantiateStreaming==="function")try{return await WebAssembly.instantiateStreaming(J,Q)}catch(Z){if(J.headers.get("Content-Type")!="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",Z);else throw Z}let X=await J.arrayBuffer();return await WebAssembly.instantiate(X,Q)}else{let X=await WebAssembly.instantiate(J,Q);if(X instanceof WebAssembly.Instance)return{instance:X,module:J};else return X}}function wJ(){let J={};return J.wbg={},J.wbg.__wbg_new_28c511d9baebfa89=function(Q,X){let Z=Error(w(Q,X));return C(Z)},J.wbg.__wbindgen_memory=function(){let Q=D.memory;return C(Q)},J.wbg.__wbg_buffer_12d079cc21e14bdb=function(Q){let X=A(Q).buffer;return C(X)},J.wbg.__wbg_newwithbyteoffsetandlength_aa4a17c33a06e5cb=function(Q,X,Z){let $=new Uint8Array(A(Q),X>>>0,Z>>>0);return C($)},J.wbg.__wbindgen_object_drop_ref=function(Q){W(Q)},J.wbg.__wbg_new_63b92bc8671ed464=function(Q){let X=new Uint8Array(A(Q));return C(X)},J.wbg.__wbg_values_839f3396d5aac002=function(Q){let X=A(Q).values();return C(X)},J.wbg.__wbg_next_196c84450b364254=function(){return fJ(function(Q){let X=A(Q).next();return C(X)},arguments)},J.wbg.__wbg_done_298b57d23c0fc80c=function(Q){return A(Q).done},J.wbg.__wbg_value_d93c65011f51a456=function(Q){let X=A(Q).value;return C(X)},J.wbg.__wbg_instanceof_Uint8Array_2b3bbecd033d19f6=function(Q){let X;try{X=A(Q)instanceof Uint8Array}catch($){X=!1}return X},J.wbg.__wbindgen_string_get=function(Q,X){let Z=A(X),$=typeof Z==="string"?Z:void 0;var G=i($)?0:g($,D.__wbindgen_malloc,D.__wbindgen_realloc),q=h;N()[Q/4+1]=q,N()[Q/4+0]=G},J.wbg.__wbg_new_16b304a2cfa7ff4a=function(){return C([])},J.wbg.__wbindgen_string_new=function(Q,X){let Z=w(Q,X);return C(Z)},J.wbg.__wbg_push_a5b05aedc7234f9f=function(Q,X){return A(Q).push(A(X))},J.wbg.__wbg_length_c20a40f15020d68a=function(Q){return A(Q).length},J.wbg.__wbg_set_a47bac70306a19a7=function(Q,X,Z){A(Q).set(A(X),Z>>>0)},J.wbg.__wbindgen_throw=function(Q,X){throw Error(w(Q,X))},J}function lJ(J,Q){}function mJ(J,Q){return D=J.exports,KJ.__wbindgen_wasm_module=Q,x=null,j=null,D}async function KJ(J){if(D!==void 0)return D;if(typeof J>"u")J=new URL("index_bg.wasm",void 0);let Q=wJ();if(typeof J==="string"||typeof Request==="function"&&J instanceof Request||typeof URL==="function"&&J instanceof URL)J=fetch(J);lJ(Q);let{instance:X,module:Z}=await bJ(await J,Q);return mJ(X,Z)}function iJ(J){return Object.prototype.hasOwnProperty.call(J,"fontBuffers")}var D,T,_,h=0,j=null,b,_J,x=null,DJ,$J,p=class J{static __wrap(Q){Q=Q>>>0;let X=Object.create(J.prototype);return X.__wbg_ptr=Q,$J.register(X,X.__wbg_ptr,X),X}__destroy_into_raw(){let Q=this.__wbg_ptr;return this.__wbg_ptr=0,$J.unregister(this),Q}free(){let Q=this.__destroy_into_raw();D.__wbg_bbox_free(Q)}get x(){return D.__wbg_get_bbox_x(this.__wbg_ptr)}set x(Q){D.__wbg_set_bbox_x(this.__wbg_ptr,Q)}get y(){return D.__wbg_get_bbox_y(this.__wbg_ptr)}set y(Q){D.__wbg_set_bbox_y(this.__wbg_ptr,Q)}get width(){return D.__wbg_get_bbox_width(this.__wbg_ptr)}set width(Q){D.__wbg_set_bbox_width(this.__wbg_ptr,Q)}get height(){return D.__wbg_get_bbox_height(this.__wbg_ptr)}set height(Q){D.__wbg_set_bbox_height(this.__wbg_ptr,Q)}},GJ,uJ=class J{static __wrap(Q){Q=Q>>>0;let X=Object.create(J.prototype);return X.__wbg_ptr=Q,GJ.register(X,X.__wbg_ptr,X),X}__destroy_into_raw(){let Q=this.__wbg_ptr;return this.__wbg_ptr=0,GJ.unregister(this),Q}free(){let Q=this.__destroy_into_raw();D.__wbg_renderedimage_free(Q)}get width(){return D.renderedimage_width(this.__wbg_ptr)>>>0}get height(){return D.renderedimage_height(this.__wbg_ptr)>>>0}asPng(){try{let $=D.__wbindgen_add_to_stack_pointer(-16);D.renderedimage_asPng($,this.__wbg_ptr);var Q=N()[$/4+0],X=N()[$/4+1],Z=N()[$/4+2];if(Z)throw W(X);return W(Q)}finally{D.__wbindgen_add_to_stack_pointer(16)}}get pixels(){let Q=D.renderedimage_pixels(this.__wbg_ptr);return W(Q)}},vJ,yJ=class{__destroy_into_raw(){let J=this.__wbg_ptr;return this.__wbg_ptr=0,vJ.unregister(this),J}free(){let J=this.__destroy_into_raw();D.__wbg_resvg_free(J)}constructor(J,Q,X){try{let P=D.__wbindgen_add_to_stack_pointer(-16);var Z=i(Q)?0:g(Q,D.__wbindgen_malloc,D.__wbindgen_realloc),$=h;D.resvg_new(P,C(J),Z,$,i(X)?0:C(X));var G=N()[P/4+0],q=N()[P/4+1],K=N()[P/4+2];if(K)throw W(q);return this.__wbg_ptr=G>>>0,this}finally{D.__wbindgen_add_to_stack_pointer(16)}}get width(){return D.resvg_width(this.__wbg_ptr)}get height(){return D.resvg_height(this.__wbg_ptr)}render(){try{let Z=D.__wbindgen_add_to_stack_pointer(-16);D.resvg_render(Z,this.__wbg_ptr);var J=N()[Z/4+0],Q=N()[Z/4+1],X=N()[Z/4+2];if(X)throw W(Q);return uJ.__wrap(J)}finally{D.__wbindgen_add_to_stack_pointer(16)}}toString(){let J,Q;try{let $=D.__wbindgen_add_to_stack_pointer(-16);D.resvg_toString($,this.__wbg_ptr);var X=N()[$/4+0],Z=N()[$/4+1];return J=X,Q=Z,w(X,Z)}finally{D.__wbindgen_add_to_stack_pointer(16),D.__wbindgen_free(J,Q,1)}}innerBBox(){let J=D.resvg_innerBBox(this.__wbg_ptr);return J===0?void 0:p.__wrap(J)}getBBox(){let J=D.resvg_getBBox(this.__wbg_ptr);return J===0?void 0:p.__wrap(J)}cropByBBox(J){hJ(J,p),D.resvg_cropByBBox(this.__wbg_ptr,J.__wbg_ptr)}imagesToResolve(){try{let Z=D.__wbindgen_add_to_stack_pointer(-16);D.resvg_imagesToResolve(Z,this.__wbg_ptr);var J=N()[Z/4+0],Q=N()[Z/4+1],X=N()[Z/4+2];if(X)throw W(Q);return W(J)}finally{D.__wbindgen_add_to_stack_pointer(16)}}resolveImage(J,Q){try{let $=D.__wbindgen_add_to_stack_pointer(-16),G=g(J,D.__wbindgen_malloc,D.__wbindgen_realloc),q=h;D.resvg_resolveImage($,this.__wbg_ptr,G,q,C(Q));var X=N()[$/4+0],Z=N()[$/4+1];if(Z)throw W(X)}finally{D.__wbindgen_add_to_stack_pointer(16)}}},dJ,c=!1,pJ=async(J)=>{if(c)throw Error("Already initialized. The `initWasm()` function can be used only once.");await dJ(await J),c=!0},gJ;var VJ=RJ(()=>{T=Array(128).fill(void 0);T.push(void 0,null,!0,!1);_=T.length;b=typeof TextEncoder<"u"?new TextEncoder("utf-8"):{encode:()=>{throw Error("TextEncoder not available")}},_J=typeof b.encodeInto==="function"?function(J,Q){return b.encodeInto(J,Q)}:function(J,Q){let X=b.encode(J);return Q.set(X),{read:J.length,written:X.length}};DJ=typeof TextDecoder<"u"?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};if(typeof TextDecoder<"u")DJ.decode();$J=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((J)=>D.__wbg_bbox_free(J>>>0)),GJ=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((J)=>D.__wbg_renderedimage_free(J>>>0)),vJ=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((J)=>D.__wbg_resvg_free(J>>>0));dJ=KJ,gJ=class extends yJ{constructor(J,Q){if(!c)throw Error("Wasm has not been initialized. Call `initWasm()` function.");let X=Q?.font;if(!!X&&iJ(X)){let Z={...Q,font:{...X,fontBuffers:void 0}};super(J,JSON.stringify(Z),X.fontBuffers)}else super(J,JSON.stringify(Q))}}});function U(J){return String(J??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function IJ(J,Q,X){let Z=X/512;return`<g transform="translate(${J},${Q}) scale(${Z})">
3
3
  <rect x="0" y="0" width="512" height="512" rx="118" fill="#553de9"/>
4
4
  <path d="M152 405 L242 120" stroke="#FFFEFB" stroke-width="28" stroke-linecap="round" fill="none"/>
5
5
  <path d="M360 405 L270 120" stroke="#FFFEFB" stroke-width="28" stroke-linecap="round" fill="none"/>
6
6
  <path d="M242 120 Q256 86 270 120" stroke="#FFFEFB" stroke-width="28" stroke-linecap="round" fill="none"/>
7
7
  <circle cx="256" cy="295" r="20" fill="#1FC5A8"/>
8
- </g>`}function SD(D){switch(D){case"verified":return"#1f8a52";case"failed":return"#b23a3a";case"working":case"pending":return"#9a6a12";default:return"#6b6675"}}function MD(D){switch(D){case"pass":return"#1f8a52";case"fail":return"#b23a3a";case"pending":return"#9a6a12";default:return"#6b6675"}}function kD(D){switch(D){case"approve":return"#1f8a52";case"reject":return"#b23a3a";case"concern":return"#9a6a12";default:return"#6b6675"}}function v(D,J,Q,X,Z="#201515"){return`<text x="${D}" y="${J}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="12" fill="#6b6675" letter-spacing="0.5">${T(Q.toUpperCase())}</text>
9
- <text x="${D}" y="${J+24}" font-family="'JetBrains Mono','SF Mono',ui-monospace,monospace" font-size="20" font-weight="600" fill="${Z}">${T(X)}</text>`}var OD=["Reason","Act","Reflect","Verify"];function jD(D){let J=(D||"").toLowerCase();if(/verif|complet|done|ship|deploy/.test(J))return 3;if(/reflect|review|council|critique|assess/.test(J))return 2;if(/reason|plan|design|architect|spec|analy/.test(J))return 0;return 1}function XD(D){let X={run:D?.run||"cockpit",iteration:typeof D?.iteration==="number"?D.iteration:0,phase:D?.phase||"idle",tier:D?.tier||"",provider:D?.provider||"",verdict:D?.verdict||"unknown",budgetUsd:typeof D?.budgetUsd==="number"?D.budgetUsd:0,budgetLimitUsd:D?.budgetLimitUsd,freshness:D?.freshness,gates:Array.isArray(D?.gates)?D.gates:[],council:Array.isArray(D?.council)?D.council:[],fleet:Array.isArray(D?.fleet)?D.fleet:[]},Z=X.budgetLimitUsd&&X.budgetLimitUsd>0?`$${X.budgetUsd.toFixed(2)} / $${X.budgetLimitUsd.toFixed(2)}`:`$${X.budgetUsd.toFixed(2)}`,$="";$+=RD(32,32,44),$+=`<text x="92" y="54" font-family="'Fraunces','Georgia',serif" font-size="24" font-weight="600" fill="#201515">Autonomi</text>`,$+=`<text x="92" y="74" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="13" fill="#6b6675">Loki Cockpit</text>`;let q=X.freshness?`updated ${X.freshness}`:"live";$+=`<text x="868" y="54" text-anchor="end" font-family="'JetBrains Mono','SF Mono',ui-monospace,monospace" font-size="12" fill="#6b6675">${T(q)}</text>`,$+=`<text x="868" y="74" text-anchor="end" font-family="'JetBrains Mono','SF Mono',ui-monospace,monospace" font-size="13" fill="${SD(X.verdict)}" font-weight="600">${T(X.verdict.toUpperCase())}</text>`;let K=96,N=168;$+=`<rect x="32" y="${K}" width="836" height="${N}" rx="16" fill="#ffffff" stroke="#e2e0e8"/>`,$+=`<text x="56" y="${K+34}" font-family="'Fraunces','Georgia',serif" font-size="20" font-weight="600" fill="#201515">${T(X.run)}</text>`,$+=`<text x="56" y="${K+54}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="13" fill="#6b6675">phase ${T(X.phase)}</text>`;let E=K+96,Y=(L)=>56+L*168;$+=v(Y(0),E,"iteration",String(X.iteration)),$+=v(Y(1),E,"tier",X.tier),$+=v(Y(2),E,"provider",X.provider),$+=v(Y(3),E,"budget",Z);let c=K+N+40;$+=`<text x="32" y="${c}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="13" font-weight="600" fill="#6b6675" letter-spacing="0.5">RARV LOOP</text>`;let s=jD(X.phase),R=c+14,o=200;OD.forEach((L,C)=>{let V=32+C*(o+12),O=C<s,B=C===s;$+=`<rect x="${V}" y="${R}" width="${o}" height="40" rx="10" fill="${B?"#553de9":"#ffffff"}" fill-opacity="${B?"0.10":"1"}" stroke="${B?"#553de9":O?"#1f8a52":"#6b6675"}" stroke-width="${B?2:1}"/>`;let QD=O?"check":B?"dot":"wait";if(QD==="check")$+=`<path d="M${V+16} ${R+20} l6 6 l10 -12" stroke="#1f8a52" stroke-width="2.5" fill="none" stroke-linecap="round" stroke-linejoin="round"/>`;else if(QD==="dot")$+=`<circle cx="${V+22}" cy="${R+20}" r="5" fill="#553de9"/>`;else $+=`<circle cx="${V+22}" cy="${R+20}" r="5" fill="none" stroke="#6b6675" stroke-width="1.5"/>`;$+=`<text x="${V+40}" y="${R+25}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="14" font-weight="${B?600:500}" fill="${B?"#553de9":O?"#201515":"#6b6675"}">${L}</text>`});let a=R+40+40;$+=`<text x="32" y="${a}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="13" font-weight="600" fill="#6b6675" letter-spacing="0.5">QUALITY GATES</text>`;let r=X.gates.length?X.gates:[{name:"no gates yet",status:"pending"}],S=30,M=a+12;$+=`<rect x="32" y="${M}" width="836" height="${r.slice(0,8).length*S+8}" rx="12" fill="#ffffff" stroke="#e2e0e8"/>`,M+=8;for(let L of r.slice(0,8)){let C=MD(L.status),V=M+S/2;if($+=`<circle cx="50" cy="${V}" r="4" fill="${C}"/>`,$+=`<text x="66" y="${V+4}" font-family="'JetBrains Mono','SF Mono',ui-monospace,monospace" font-size="12" fill="#201515">${T(L.name)}</text>`,L.runner)$+=`<text x="242" y="${V+4}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="11" fill="#6b6675">${T(L.runner)}</text>`;if(L.evidence){let O=L.evidence.length>52?`${L.evidence.slice(0,49)}...`:L.evidence;$+=`<text x="332" y="${V+4}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="11" fill="#6b6675">${T(O)}</text>`}$+=`<text x="852" y="${V+4}" text-anchor="end" font-family="'JetBrains Mono','SF Mono',ui-monospace,monospace" font-size="11" font-weight="700" fill="${C}">${T(L.status.toUpperCase())}</text>`,M+=S}let e=M+40;$+=`<text x="32" y="${e}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="13" font-weight="600" fill="#6b6675" letter-spacing="0.5">COMPLETION COUNCIL</text>`;let t=X.council.length?X.council:[{reviewer:"pending",vote:"pending"}],k=e+12;$+=`<rect x="32" y="${k}" width="836" height="${t.slice(0,6).length*S+8}" rx="12" fill="#ffffff" stroke="#e2e0e8"/>`,k+=8;for(let L of t.slice(0,6)){let C=kD(L.vote),V=k+S/2;if($+=`<circle cx="50" cy="${V}" r="4" fill="${C}"/>`,$+=`<text x="66" y="${V+4}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="12.5" font-weight="500" fill="#201515">${T(L.reviewer)}</text>`,L.tier)$+=`<text x="292" y="${V+4}" font-family="'JetBrains Mono','SF Mono',ui-monospace,monospace" font-size="11" fill="#6b6675">${T(L.tier)}</text>`;$+=`<text x="852" y="${V+4}" text-anchor="end" font-family="'JetBrains Mono','SF Mono',ui-monospace,monospace" font-size="11" font-weight="700" fill="${C}">${T(L.vote.toUpperCase())}</text>`,k+=S}let DD=k+46,JD=X.fleet.filter((L)=>L.running).length,WD=JD>0?`FLEET (${JD} active / ${X.fleet.length})`:`FLEET (${X.fleet.length}, none active)`;$+=`<text x="32" y="${DD}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="13" font-weight="600" fill="#6b6675" letter-spacing="0.5">${WD}</text>`;let H=DD+20,m=X.fleet.slice(0,4);for(let L of m){let C=L.running?"#1f8a52":"#6b6675";$+=`<circle cx="38" cy="${H-4}" r="5" fill="${C}"/>`,$+=`<text x="52" y="${H}" font-family="'JetBrains Mono','SF Mono',ui-monospace,monospace" font-size="13" fill="#201515">${T(L.name)}</text>`;let V=`iter ${L.iteration??0} ${T(L.phase||L.status||"")}`;$+=`<text x="868" y="${H}" text-anchor="end" font-family="'JetBrains Mono','SF Mono',ui-monospace,monospace" font-size="12" fill="#6b6675">${V}</text>`,H+=26}if(X.fleet.length>m.length)$+=`<text x="52" y="${H}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="12" fill="#6b6675">+ ${X.fleet.length-m.length} more</text>`,H+=26;let d=Math.round(H+32);return`<svg xmlns="http://www.w3.org/2000/svg" width="900" height="${d}" viewBox="0 0 900 ${d}">
8
+ </g>`}function SJ(J){switch(J){case"verified":return"#1f8a52";case"failed":return"#b23a3a";case"working":case"pending":return"#9a6a12";default:return"#6b6675"}}function kJ(J){switch(J){case"pass":return"#1f8a52";case"fail":return"#b23a3a";case"pending":return"#9a6a12";default:return"#6b6675"}}function MJ(J){switch(J){case"approve":return"#1f8a52";case"reject":return"#b23a3a";case"concern":return"#9a6a12";default:return"#6b6675"}}function v(J,Q,X,Z,$="#201515"){return`<text x="${J}" y="${Q}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="12" fill="#6b6675" letter-spacing="0.5">${U(X.toUpperCase())}</text>
9
+ <text x="${J}" y="${Q+24}" font-family="'JetBrains Mono','SF Mono',ui-monospace,monospace" font-size="20" font-weight="600" fill="${$}">${U(Z)}</text>`}var OJ=["Reason","Act","Reflect","Verify"];function jJ(J){let Q=(J||"").toLowerCase();if(/verif|complet|done|ship|deploy/.test(Q))return 3;if(/reflect|review|council|critique|assess/.test(Q))return 2;if(/reason|plan|design|architect|spec|analy/.test(Q))return 0;return 1}function ZJ(J){let Z={run:J?.run||"cockpit",iteration:typeof J?.iteration==="number"?J.iteration:0,phase:J?.phase||"idle",tier:J?.tier||"",provider:J?.provider||"",verdict:J?.verdict||"unknown",budgetUsd:typeof J?.budgetUsd==="number"?J.budgetUsd:0,budgetLimitUsd:J?.budgetLimitUsd,freshness:J?.freshness,gates:Array.isArray(J?.gates)?J.gates:[],council:Array.isArray(J?.council)?J.council:[],fleet:Array.isArray(J?.fleet)?J.fleet:[]},$=Z.budgetLimitUsd&&Z.budgetLimitUsd>0?`$${Z.budgetUsd.toFixed(2)} / $${Z.budgetLimitUsd.toFixed(2)}`:`$${Z.budgetUsd.toFixed(2)}`,G="";G+=IJ(32,32,44),G+=`<text x="92" y="54" font-family="'Fraunces','Georgia',serif" font-size="24" font-weight="600" fill="#201515">Autonomi</text>`,G+=`<text x="92" y="74" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="13" fill="#6b6675">Loki Cockpit</text>`;let q=Z.freshness?`updated ${Z.freshness}`:"live";G+=`<text x="868" y="54" text-anchor="end" font-family="'JetBrains Mono','SF Mono',ui-monospace,monospace" font-size="12" fill="#6b6675">${U(q)}</text>`,G+=`<text x="868" y="74" text-anchor="end" font-family="'JetBrains Mono','SF Mono',ui-monospace,monospace" font-size="13" fill="${SJ(Z.verdict)}" font-weight="600">${U(Z.verdict.toUpperCase())}</text>`;let K=96,P=168;G+=`<rect x="32" y="${K}" width="836" height="${P}" rx="16" fill="#ffffff" stroke="#e2e0e8"/>`,G+=`<text x="56" y="${K+34}" font-family="'Fraunces','Georgia',serif" font-size="20" font-weight="600" fill="#201515">${U(Z.run)}</text>`,G+=`<text x="56" y="${K+54}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="13" fill="#6b6675">phase ${U(Z.phase)}</text>`;let z=K+96,E=(V)=>56+V*168;G+=v(E(0),z,"iteration",String(Z.iteration)),G+=v(E(1),z,"tier",Z.tier),G+=v(E(2),z,"provider",Z.provider),G+=v(E(3),z,"budget",$);let n=K+P+40;G+=`<text x="32" y="${n}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="13" font-weight="600" fill="#6b6675" letter-spacing="0.5">RARV LOOP</text>`;let s=jJ(Z.phase),I=n+14,o=200;OJ.forEach((V,Y)=>{let L=32+Y*(o+12),O=Y<s,H=Y===s;G+=`<rect x="${L}" y="${I}" width="${o}" height="40" rx="10" fill="${H?"#553de9":"#ffffff"}" fill-opacity="${H?"0.10":"1"}" stroke="${H?"#553de9":O?"#1f8a52":"#6b6675"}" stroke-width="${H?2:1}"/>`;let XJ=O?"check":H?"dot":"wait";if(XJ==="check")G+=`<path d="M${L+16} ${I+20} l6 6 l10 -12" stroke="#1f8a52" stroke-width="2.5" fill="none" stroke-linecap="round" stroke-linejoin="round"/>`;else if(XJ==="dot")G+=`<circle cx="${L+22}" cy="${I+20}" r="5" fill="#553de9"/>`;else G+=`<circle cx="${L+22}" cy="${I+20}" r="5" fill="none" stroke="#6b6675" stroke-width="1.5"/>`;G+=`<text x="${L+40}" y="${I+25}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="14" font-weight="${H?600:500}" fill="${H?"#553de9":O?"#201515":"#6b6675"}">${V}</text>`});let a=I+40+40;G+=`<text x="32" y="${a}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="13" font-weight="600" fill="#6b6675" letter-spacing="0.5">QUALITY GATES</text>`;let r=Z.gates.length?Z.gates:[{name:"no gates yet",status:"pending"}],S=30,k=a+12;G+=`<rect x="32" y="${k}" width="836" height="${r.slice(0,8).length*S+8}" rx="12" fill="#ffffff" stroke="#e2e0e8"/>`,k+=8;for(let V of r.slice(0,8)){let Y=kJ(V.status),L=k+S/2;if(G+=`<circle cx="50" cy="${L}" r="4" fill="${Y}"/>`,G+=`<text x="66" y="${L+4}" font-family="'JetBrains Mono','SF Mono',ui-monospace,monospace" font-size="12" fill="#201515">${U(V.name)}</text>`,V.runner)G+=`<text x="242" y="${L+4}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="11" fill="#6b6675">${U(V.runner)}</text>`;if(V.evidence){let O=V.evidence.length>52?`${V.evidence.slice(0,49)}...`:V.evidence;G+=`<text x="332" y="${L+4}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="11" fill="#6b6675">${U(O)}</text>`}G+=`<text x="852" y="${L+4}" text-anchor="end" font-family="'JetBrains Mono','SF Mono',ui-monospace,monospace" font-size="11" font-weight="700" fill="${Y}">${U(V.status.toUpperCase())}</text>`,k+=S}let t=k+40;G+=`<text x="32" y="${t}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="13" font-weight="600" fill="#6b6675" letter-spacing="0.5">COMPLETION COUNCIL</text>`;let e=Z.council.length?Z.council:[{reviewer:"pending",vote:"pending"}],M=t+12;G+=`<rect x="32" y="${M}" width="836" height="${e.slice(0,6).length*S+8}" rx="12" fill="#ffffff" stroke="#e2e0e8"/>`,M+=8;for(let V of e.slice(0,6)){let Y=MJ(V.vote),L=M+S/2;if(G+=`<circle cx="50" cy="${L}" r="4" fill="${Y}"/>`,G+=`<text x="66" y="${L+4}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="12.5" font-weight="500" fill="#201515">${U(V.reviewer)}</text>`,V.tier)G+=`<text x="292" y="${L+4}" font-family="'JetBrains Mono','SF Mono',ui-monospace,monospace" font-size="11" fill="#6b6675">${U(V.tier)}</text>`;G+=`<text x="852" y="${L+4}" text-anchor="end" font-family="'JetBrains Mono','SF Mono',ui-monospace,monospace" font-size="11" font-weight="700" fill="${Y}">${U(V.vote.toUpperCase())}</text>`,M+=S}let JJ=M+46,QJ=Z.fleet.filter((V)=>V.running).length,TJ=QJ>0?`FLEET (${QJ} active / ${Z.fleet.length})`:`FLEET (${Z.fleet.length}, none active)`;G+=`<text x="32" y="${JJ}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="13" font-weight="600" fill="#6b6675" letter-spacing="0.5">${TJ}</text>`;let B=JJ+20,m=Z.fleet.slice(0,4);for(let V of m){let Y=V.running?"#1f8a52":"#6b6675";G+=`<circle cx="38" cy="${B-4}" r="5" fill="${Y}"/>`,G+=`<text x="52" y="${B}" font-family="'JetBrains Mono','SF Mono',ui-monospace,monospace" font-size="13" fill="#201515">${U(V.name)}</text>`;let L=`iter ${V.iteration??0} ${U(V.phase||V.status||"")}`;G+=`<text x="868" y="${B}" text-anchor="end" font-family="'JetBrains Mono','SF Mono',ui-monospace,monospace" font-size="12" fill="#6b6675">${L}</text>`,B+=26}if(Z.fleet.length>m.length)G+=`<text x="52" y="${B}" font-family="'Inter','Helvetica Neue',Arial,sans-serif" font-size="12" fill="#6b6675">+ ${Z.fleet.length-m.length} more</text>`,B+=26;let d=Math.round(B+32);return`<svg xmlns="http://www.w3.org/2000/svg" width="900" height="${d}" viewBox="0 0 900 ${d}">
10
10
  <rect x="0" y="0" width="900" height="${d}" fill="#f1f2f6"/>
11
- ${$}
12
- </svg>`}var u,f;function ND(){if(u!==void 0)return u;try{let D=globalThis.require??F;D.resolve("@resvg/resvg-js"),u=D("@resvg/resvg-js")}catch{u=null}return u}async function VD(){if(f!==void 0)return f;try{let D=await Promise.resolve().then(() => (LD(),qD)),J=globalThis.require??F,{readFileSync:Q,existsSync:X}=await import("fs"),{resolve:Z,dirname:$}=await import("path"),{fileURLToPath:q}=await import("url"),K=null;try{let N=$(q(import.meta.url));for(let E of["../data/resvg.wasm","../../data/resvg.wasm"]){let Y=Z(N,E);if(X(Y)){K=Q(Y);break}}}catch{}if(!K){let N=J.resolve("@resvg/resvg-wasm/index_bg.wasm");K=Q(N)}await D.initWasm(K),f={Resvg:D.Resvg}}catch{f=null}return f}async function PD(){if(ND()?.Resvg)return!0;return(await VD())?.Resvg!=null}var I;async function gD(){if(I!==void 0)return I;try{let{readFileSync:D,existsSync:J}=await import("fs"),Q=["/System/Library/Fonts/Supplemental/Arial.ttf","/System/Library/Fonts/Helvetica.ttc","/Library/Fonts/Arial.ttf","/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf","/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf","/usr/share/fonts/dejavu/DejaVuSans.ttf","/usr/share/fonts/TTF/DejaVuSans.ttf","C:\\Windows\\Fonts\\arial.ttf","C:\\Windows\\Fonts\\segoeui.ttf"];for(let X of Q)if(J(X))return I=new Uint8Array(D(X)),I;I=null}catch{I=null}return I}async function TD(D,J=900){let Q=ND();if(Q?.Resvg)try{let Z=new Q.Resvg(D,{fitTo:{mode:"width",value:J}});return{png:Uint8Array.from(Z.render().asPng()),available:!0}}catch{}let X=await VD();if(X?.Resvg)try{let Z=await gD(),$={fitTo:{mode:"width",value:J}};if(Z)$.font={fontBuffers:[Z],defaultFontFamily:"Arial",loadSystemFonts:!1};else $.font={loadSystemFonts:!0};let q=new X.Resvg(D,$);return{png:Uint8Array.from(q.render().asPng()),available:!0}}catch(Z){return{png:null,available:!1,reason:`raster failed: ${Z.message}`}}return{png:null,available:!1,reason:"rasterizer unavailable (no resvg native or wasm)"}}function UD(D){return Buffer.from(D).toString("base64")}function cD(D,J){let Q=UD(D),X=J&&J>0?`${J}`:"auto";return`\x1B]1337;File=${`inline=1;size=${D.length};width=${X};height=auto;preserveAspectRatio=1`}:${Q}\x07`}function sD(D,J=4096,Q){let X=UD(D);if(X.length===0)return"\x1B_Ga=T,f=100,m=0;\x1B\\";let Z=[];for(let K=0;K<X.length;K+=J)Z.push(X.slice(K,K+J));let $=Q&&Q>0?`,c=${Q}`:"",q="";for(let K=0;K<Z.length;K++){let E=K===Z.length-1?0:1,Y=K===0?`a=T,f=100${$},m=${E}`:`m=${E}`;q+=`\x1B_G${Y};${Z[K]}\x1B\\`}return q}function AD(D,J,Q){return D==="kitty"?sD(J,4096,Q):cD(J,Q)}var oD=new Set(["iterm.app","wezterm","ghostty"]);function l(D=process.env){let J=(D.LOKI_COCKPIT_PROTOCOL||"").trim().toLowerCase();if(J==="iterm2"||J==="kitty"||J==="none")return J;let Q=(D.KITTY_WINDOW_ID||"").trim(),X=(D.TERM||"").trim().toLowerCase();if(Q.length>0||X==="xterm-kitty")return"kitty";let Z=(D.TERM_PROGRAM||"").trim().toLowerCase();if(oD.has(Z))return"iterm2";return"none"}async function CD(D,J={}){let Q=XD(D);if(J.forceText)return{kind:"fallback",protocol:"none",reason:"--no-image (text/browser fallback)",svg:Q};let X;if(J.protocol&&J.protocol!=="auto")X=J.protocol;else X=l(J.env);if(X==="none")return{kind:"fallback",protocol:X,reason:"no inline-image terminal detected",svg:Q};let Z=await TD(Q);if(!Z.available||!Z.png)return{kind:"fallback",protocol:X,reason:Z.reason||"rasterization unavailable",svg:Q};let $=AD(X,Z.png,J.cols);return{kind:"image",protocol:X,data:$,svg:Q}}var ED=(D)=>typeof D==="number"&&Number.isFinite(D)&&D>=40;function YD(D=process.stdout,J=process.env){let Q=D?.columns;if(ED(Q))return Math.floor(Q);let X=Number(J.COLUMNS);if(ED(X))return Math.floor(X);return 80}async function aD(){let D=[];for await(let J of process.stdin)D.push(J);return Buffer.concat(D).toString("utf-8")}function rD(D){let J="auto",Q=!1,X;for(let Z=0;Z<D.length;Z++){let $=D[Z];if($==="--protocol"){let q=(D[++Z]||"auto").toLowerCase();J=q==="iterm2"||q==="kitty"||q==="none"?q:"auto"}else if($==="--no-image")Q=!0;else if($==="--svg-out")X=D[++Z]}return{protocol:J,noImage:Q,svgOut:X}}async function eD(){let D=l(),J=await PD(),Q=D!=="none"&&J?"image":"text+dashboard";return process.stdout.write(`protocol=${D}
13
- `),process.stdout.write(`resvg=${J?"yes":"no"}
14
- `),process.stdout.write(`path=${Q}
15
- `),0}async function tD(D=process.argv.slice(2)){if(D.includes("--probe"))return await eD();let{protocol:J,noImage:Q,svgOut:X}=rD(D),Z;try{let K=await aD();Z=JSON.parse(K)}catch(K){return process.stderr.write(`FALLBACK could not parse cockpit state: ${K.message}
16
- `),3}let $=YD()-2,q=await CD(Z,{protocol:J,forceText:Q,cols:$});if(X)try{let{writeFileSync:K}=await import("fs");K(X,q.svg)}catch{}if(q.kind==="image"&&q.data)return process.stdout.write(q.data),0;return process.stderr.write(`FALLBACK ${q.reason||"image unavailable"}
17
- `),3}if(import.meta.main)tD().then((D)=>process.exit(D));export{tD as main};
11
+ ${G}
12
+ </svg>`}var f,u;function PJ(){if(f!==void 0)return f;try{let J=globalThis.require??F;J.resolve("@resvg/resvg-js"),f=J("@resvg/resvg-js")}catch{f=null}return f}async function LJ(){if(u!==void 0)return u;try{let J=await Promise.resolve().then(() => (VJ(),qJ)),Q=globalThis.require??F,{readFileSync:X,existsSync:Z}=await import("fs"),{resolve:$,dirname:G}=await import("path"),{fileURLToPath:q}=await import("url"),K=null;try{let P=G(q(import.meta.url));for(let z of["../data/resvg.wasm","../../data/resvg.wasm"]){let E=$(P,z);if(Z(E)){K=X(E);break}}}catch{}if(!K){let P=Q.resolve("@resvg/resvg-wasm/index_bg.wasm");K=X(P)}await J.initWasm(K),u={Resvg:J.Resvg}}catch{u=null}return u}async function NJ(){if(PJ()?.Resvg)return!0;return(await LJ())?.Resvg!=null}var R;async function cJ(){if(R!==void 0)return R;try{let{readFileSync:J,existsSync:Q}=await import("fs"),X=["/System/Library/Fonts/Supplemental/Arial.ttf","/System/Library/Fonts/Helvetica.ttc","/Library/Fonts/Arial.ttf","/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf","/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf","/usr/share/fonts/dejavu/DejaVuSans.ttf","/usr/share/fonts/TTF/DejaVuSans.ttf","C:\\Windows\\Fonts\\arial.ttf","C:\\Windows\\Fonts\\segoeui.ttf"];for(let Z of X)if(Q(Z))return R=new Uint8Array(J(Z)),R;R=null}catch{R=null}return R}async function UJ(J,Q=900){let X=PJ();if(X?.Resvg)try{let $=new X.Resvg(J,{fitTo:{mode:"width",value:Q}});return{png:Uint8Array.from($.render().asPng()),available:!0}}catch{}let Z=await LJ();if(Z?.Resvg)try{let $=await cJ(),G={fitTo:{mode:"width",value:Q}};if($)G.font={fontBuffers:[$],defaultFontFamily:"Arial",loadSystemFonts:!1};else G.font={loadSystemFonts:!0};let q=new Z.Resvg(J,G);return{png:Uint8Array.from(q.render().asPng()),available:!0}}catch($){return{png:null,available:!1,reason:`raster failed: ${$.message}`}}return{png:null,available:!1,reason:"rasterizer unavailable (no resvg native or wasm)"}}function AJ(J){return Buffer.from(J).toString("base64")}function nJ(J,Q){let X=AJ(J),Z=Q&&Q>0?`${Q}`:"auto";return`\x1B]1337;File=${`inline=1;size=${J.length};width=${Z};height=auto;preserveAspectRatio=1`}:${X}\x07`}function sJ(J,Q=4096,X){let Z=AJ(J);if(Z.length===0)return"\x1B_Ga=T,f=100,m=0;\x1B\\";let $=[];for(let K=0;K<Z.length;K+=Q)$.push(Z.slice(K,K+Q));let G=X&&X>0?`,c=${X}`:"",q="";for(let K=0;K<$.length;K++){let z=K===$.length-1?0:1,E=K===0?`a=T,f=100${G},m=${z}`:`m=${z}`;q+=`\x1B_G${E};${$[K]}\x1B\\`}return q}function CJ(J,Q,X){return J==="kitty"?sJ(Q,4096,X):nJ(Q,X)}var oJ=new Set(["iterm.app","wezterm","ghostty"]);function l(J=process.env){let Q=(J.LOKI_COCKPIT_PROTOCOL||"").trim().toLowerCase();if(Q==="iterm2"||Q==="kitty"||Q==="none")return Q;let X=(J.KITTY_WINDOW_ID||"").trim(),Z=(J.TERM||"").trim().toLowerCase();if(X.length>0||Z==="xterm-kitty")return"kitty";let $=(J.TERM_PROGRAM||"").trim().toLowerCase();if(oJ.has($))return"iterm2";return"none"}async function YJ(J,Q={}){let X=ZJ(J);if(Q.forceText)return{kind:"fallback",protocol:"none",reason:"--no-image (text/browser fallback)",svg:X};let Z;if(Q.protocol&&Q.protocol!=="auto")Z=Q.protocol;else Z=l(Q.env);if(Z==="none")return{kind:"fallback",protocol:Z,reason:"no inline-image terminal detected",svg:X};let $=await UJ(X);if(!$.available||!$.png)return{kind:"fallback",protocol:Z,reason:$.reason||"rasterization unavailable",svg:X};let G=CJ(Z,$.png,Q.cols);return{kind:"image",protocol:Z,data:G,svg:X}}var zJ=(J)=>typeof J==="number"&&Number.isFinite(J)&&J>=40;function EJ(J=process.stdout,Q=process.env){let X=J?.columns;if(zJ(X))return Math.floor(X);let Z=Number(Q.COLUMNS);if(zJ(Z))return Math.floor(Z);return 80}async function aJ(){let J=[];for await(let Q of process.stdin)J.push(Q);return Buffer.concat(J).toString("utf-8")}function rJ(J){let Q="auto",X=!1,Z;for(let $=0;$<J.length;$++){let G=J[$];if(G==="--protocol"){let q=(J[++$]||"auto").toLowerCase();Q=q==="iterm2"||q==="kitty"||q==="none"?q:"auto"}else if(G==="--no-image")X=!0;else if(G==="--svg-out")Z=J[++$]}return{protocol:Q,noImage:X,svgOut:Z}}async function tJ(){let J=l(),Q=await NJ(),X=J!=="none"&&Q?"image":"text+dashboard";return process.stdout.write(`protocol=${J}
13
+ `),process.stdout.write(`resvg=${Q?"yes":"no"}
14
+ `),process.stdout.write(`path=${X}
15
+ `),0}async function eJ(J=process.argv.slice(2)){if(J.includes("--probe"))return await tJ();let{protocol:Q,noImage:X,svgOut:Z}=rJ(J),$;try{let K=await aJ();$=JSON.parse(K)}catch(K){return process.stderr.write(`FALLBACK could not parse cockpit state: ${K.message}
16
+ `),3}let G=EJ()-2,q=await YJ($,{protocol:Q,forceText:X,cols:G});if(Z)try{let{writeFileSync:K}=await import("fs");K(Z,q.svg)}catch{}if(q.kind==="image"&&q.data)return process.stdout.write(q.data),0;return process.stderr.write(`FALLBACK ${q.reason||"image unavailable"}
17
+ `),3}if(import.meta.main)eJ().then((J)=>process.exit(J));export{eJ as main};
18
18
 
19
- //# debugId=2F4CD3BF5DE92F4F02A2CF0BED7BBB85
19
+ //# debugId=8D6BC88E3E25DA192460C5798D71C777