pi-ui-extend 0.1.65 → 0.1.67

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.
@@ -0,0 +1,34 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" width="1036" height="534" viewBox="0 0 1036 534" role="img" aria-label="Pix · adaptive implementation plan">
3
+ <rect width="1036" height="534" rx="14" fill="#0f1218"/>
4
+ <rect x="1" y="1" width="1034" height="532" rx="13" fill="none" stroke="#303746"/>
5
+ <circle cx="22" cy="22" r="6" fill="#ff5f57"/><circle cx="42" cy="22" r="6" fill="#febc2e"/><circle cx="62" cy="22" r="6" fill="#28c840"/>
6
+ <text x="518" y="27" text-anchor="middle" fill="#7f8797" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="12">Pix · adaptive implementation plan</text>
7
+ <g><rect x="310" y="502" width="40" height="18" fill="rgb(48,54,61)"/></g>
8
+ <g font-family="JetBrainsMono Nerd Font Mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="13" font-variant-ligatures="none"><text x="22" y="66" xml:space="preserve"><tspan fill="rgb(124,169,130)">󰗠</tspan><tspan fill="rgb(255,255,255)"> Auth hardening: find the safest place to fix </tspan><tspan fill="rgb(125,133,144)">󰅖</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">│</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)" font-weight="700">󰐕</tspan><tspan fill="rgb(155,165,175)"> </tspan></text>
9
+ <text x="22" y="84" xml:space="preserve"><tspan fill="rgb(125,133,144)"> └──────────────────────────────────────────────────────────────────────────</tspan></text>
10
+ <text x="22" y="102" xml:space="preserve"><tspan fill="rgb(164,188,224)">guarded change. </tspan></text>
11
+ <text x="22" y="120" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
12
+ <text x="22" y="138" xml:space="preserve"><tspan fill="rgb(217,119,6)">Turn this into an adaptive implementation plan with explicit dependencies. </tspan></text>
13
+ <text x="22" y="156" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
14
+ <text x="22" y="174" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700">󰗠</tspan><tspan fill="rgb(133,143,153)" font-weight="700"> thinking</tspan><tspan fill="rgb(133,143,153)"> </tspan><tspan fill="rgb(155,165,175)">(medium) 0s</tspan><tspan fill="rgb(133,143,153)"> </tspan></text>
15
+ <text x="22" y="192" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
16
+ <text x="22" y="210" xml:space="preserve"><tspan fill="rgb(164,188,224)">I’ll keep the plan small and update it as each dependency clears. </tspan></text>
17
+ <text x="22" y="228" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
18
+ <text x="22" y="246" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700">󰗠</tspan><tspan fill="rgb(133,143,153)" font-weight="700"> todo</tspan><tspan fill="rgb(133,143,153)"> </tspan><tspan fill="rgb(155,165,175)">action=list nextId=6</tspan><tspan fill="rgb(133,143,153)"> </tspan></text>
19
+ <text x="22" y="264" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
20
+ <text x="22" y="282" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700">󰗠</tspan><tspan fill="rgb(133,143,153)" font-weight="700"> thinking</tspan><tspan fill="rgb(133,143,153)"> </tspan><tspan fill="rgb(155,165,175)">(medium) 0s</tspan><tspan fill="rgb(133,143,153)"> </tspan></text>
21
+ <text x="22" y="300" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
22
+ <text x="22" y="318" xml:space="preserve"><tspan fill="rgb(164,188,224)">The implementation order is now explicit: coverage first, guarded change second, focused checks last. </tspan></text>
23
+ <text x="22" y="336" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
24
+ <text x="22" y="354" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
25
+ <text x="22" y="372" xml:space="preserve"><tspan fill="rgb(212,154,74)">󰔟</tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(201,106,103)">5.Harden expired sessions</tspan><tspan fill="rgb(214,222,235)"> — hardening expired sessions </tspan></text>
26
+ <text x="22" y="390" xml:space="preserve"><tspan fill="rgb(124,169,130)"> ↳ 󰗠</tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(201,106,103)">1.Trace the session boundary</tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(214,222,235)">parent:#5</tspan><tspan fill="rgb(214,222,235)"> </tspan></text>
27
+ <text x="22" y="408" xml:space="preserve"><tspan fill="rgb(212,154,74)"> ↳ 󰔟</tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(201,106,103)">2.Add expiry regression coverage</tspan><tspan fill="rgb(214,222,235)"> — writing expiry regression tests parent:#5 </tspan></text>
28
+ <text x="22" y="426" xml:space="preserve"><tspan fill="rgb(125,133,144)"> ↳ 󰝦</tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(212,154,74)">3.Guard the refresh path</tspan><tspan fill="rgb(214,222,235)"> parent:#5 blocked:#2 </tspan></text>
29
+ <text x="22" y="444" xml:space="preserve"><tspan fill="rgb(125,133,144)"> ↳ 󰝦</tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(200,180,90)">4.Run focused checks</tspan><tspan fill="rgb(214,222,235)"> parent:#5 blocked:#3 </tspan></text>
30
+ <text x="22" y="462" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
31
+ <text x="22" y="480" xml:space="preserve"><tspan fill="rgb(217,119,6)"> </tspan></text>
32
+ <text x="22" y="498" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
33
+ <text x="22" y="516" xml:space="preserve"><tspan fill="rgb(48,54,61)">󰑊</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(200,180,90)">openai-codex/gpt-5.4</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(212,154,74)">󰌵 medium</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> 0%</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> </tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(255,255,255)">workspace</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰁨</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰀄</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)">󰕾</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰌵</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰍜</tspan><tspan fill="rgb(155,165,175)"> ↑ </tspan><tspan fill="rgb(125,133,144)">󰍬</tspan><tspan fill="rgb(155,165,175)"> EN</tspan></text></g>
34
+ </svg>
@@ -0,0 +1,49 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" width="1036" height="534" viewBox="0 0 1036 534" role="img" aria-label="Pix · commands and workflows">
3
+ <rect width="1036" height="534" rx="14" fill="#0f1218"/>
4
+ <rect x="1" y="1" width="1034" height="532" rx="13" fill="none" stroke="#303746"/>
5
+ <circle cx="22" cy="22" r="6" fill="#ff5f57"/><circle cx="42" cy="22" r="6" fill="#febc2e"/><circle cx="62" cy="22" r="6" fill="#28c840"/>
6
+ <text x="518" y="27" text-anchor="middle" fill="#7f8797" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="12">Pix · commands and workflows</text>
7
+ <g><rect x="22" y="322" width="16" height="18" fill="rgb(9,13,19)"/>
8
+ <rect x="38" y="322" width="960" height="18" fill="rgb(38,50,65)"/>
9
+ <rect x="998" y="322" width="16" height="18" fill="rgb(9,13,19)"/>
10
+ <rect x="38" y="340" width="960" height="18" fill="rgb(42,47,54)"/>
11
+ <rect x="998" y="340" width="16" height="18" fill="rgb(9,13,19)"/>
12
+ <rect x="38" y="358" width="960" height="18" fill="rgb(30,30,30)"/>
13
+ <rect x="998" y="358" width="16" height="18" fill="rgb(9,13,19)"/>
14
+ <rect x="38" y="376" width="960" height="18" fill="rgb(30,30,30)"/>
15
+ <rect x="998" y="376" width="16" height="18" fill="rgb(9,13,19)"/>
16
+ <rect x="38" y="394" width="960" height="18" fill="rgb(30,30,30)"/>
17
+ <rect x="998" y="394" width="16" height="18" fill="rgb(9,13,19)"/>
18
+ <rect x="38" y="412" width="960" height="18" fill="rgb(30,30,30)"/>
19
+ <rect x="998" y="412" width="16" height="18" fill="rgb(9,13,19)"/>
20
+ <rect x="38" y="430" width="960" height="18" fill="rgb(30,30,30)"/>
21
+ <rect x="998" y="430" width="16" height="18" fill="rgb(9,13,19)"/>
22
+ <rect x="310" y="502" width="40" height="18" fill="rgb(48,54,61)"/></g>
23
+ <g font-family="JetBrainsMono Nerd Font Mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="13" font-variant-ligatures="none"><text x="22" y="66" xml:space="preserve"><tspan fill="rgb(124,169,130)">󰗠</tspan><tspan fill="rgb(255,255,255)"> Auth hardening: find the safest place to fix </tspan><tspan fill="rgb(125,133,144)">󰅖</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">│</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)" font-weight="700">󰐕</tspan><tspan fill="rgb(155,165,175)"> </tspan></text>
24
+ <text x="22" y="84" xml:space="preserve"><tspan fill="rgb(125,133,144)"> └──────────────────────────────────────────────────────────────────────────</tspan></text>
25
+ <text x="22" y="102" xml:space="preserve"><tspan fill="rgb(217,119,6)">Auth hardening: find the safest place to fix expired sessions without widening the change. </tspan></text>
26
+ <text x="22" y="120" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
27
+ <text x="22" y="138" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700">󰗠</tspan><tspan fill="rgb(133,143,153)" font-weight="700"> thinking</tspan><tspan fill="rgb(133,143,153)"> </tspan><tspan fill="rgb(155,165,175)">(medium) 0s</tspan><tspan fill="rgb(133,143,153)"> </tspan></text>
28
+ <text x="22" y="156" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
29
+ <text x="22" y="174" xml:space="preserve"><tspan fill="rgb(164,188,224)">I’ll trace the session boundary and verify the current behavior first. </tspan></text>
30
+ <text x="22" y="192" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
31
+ <text x="22" y="210" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700">󰗠</tspan><tspan fill="rgb(133,143,153)" font-weight="700"> read</tspan><tspan fill="rgb(133,143,153)"> </tspan><tspan fill="rgb(155,165,175)">src/auth/session.ts</tspan><tspan fill="rgb(133,143,153)"> </tspan></text>
32
+ <text x="22" y="228" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
33
+ <text x="22" y="246" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700">󰗠</tspan><tspan fill="rgb(133,143,153)" font-weight="700"> thinking</tspan><tspan fill="rgb(133,143,153)"> </tspan><tspan fill="rgb(155,165,175)">(medium) 0s</tspan><tspan fill="rgb(133,143,153)"> </tspan></text>
34
+ <text x="22" y="264" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
35
+ <text x="22" y="282" xml:space="preserve"><tspan fill="rgb(164,188,224)">The refresh path is isolated in </tspan><tspan fill="rgb(124,169,130)">`loadSession()`</tspan><tspan fill="rgb(164,188,224)">. Next I’d add an expiry regression test, then make the smallest </tspan></text>
36
+ <text x="22" y="300" xml:space="preserve"><tspan fill="#d8dee9">guarded change. </tspan></text>
37
+ <text x="22" y="318" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
38
+ <text x="22" y="336" xml:space="preserve"><tspan fill="#d8dee9"> </tspan><tspan fill="rgb(122,162,214)"> Commands Esc </tspan><tspan fill="#d8dee9"> </tspan></text>
39
+ <text x="22" y="354" xml:space="preserve"><tspan fill="#d8dee9"> </tspan><tspan fill="rgb(230,237,243)" font-weight="700">▶ /settings Show renderer and Pi settings summary </tspan><tspan fill="#d8dee9"> </tspan></text>
40
+ <text x="22" y="372" xml:space="preserve"><tspan fill="#d8dee9"> </tspan><tspan fill="rgb(230,237,243)"> /model Select the active model </tspan><tspan fill="#d8dee9"> </tspan></text>
41
+ <text x="22" y="390" xml:space="preserve"><tspan fill="#d8dee9"> </tspan><tspan fill="rgb(230,237,243)"> /default-model Set the default model for new sessions </tspan><tspan fill="#d8dee9"> </tspan></text>
42
+ <text x="22" y="408" xml:space="preserve"><tspan fill="#d8dee9"> </tspan><tspan fill="rgb(230,237,243)"> /autocomplete Set inline autocomplete model, or empty to disable </tspan><tspan fill="#d8dee9"> </tspan></text>
43
+ <text x="22" y="426" xml:space="preserve"><tspan fill="#d8dee9"> </tspan><tspan fill="rgb(230,237,243)"> /no-context-files Set project AGENTS.md/CLAUDE.md loading off or on </tspan><tspan fill="#d8dee9"> </tspan></text>
44
+ <text x="22" y="444" xml:space="preserve"><tspan fill="#d8dee9"> </tspan><tspan fill="rgb(230,237,243)"> /scoped-models Show or set models used by the model selector/cycling </tspan><tspan fill="#d8dee9"> </tspan></text>
45
+ <text x="22" y="462" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
46
+ <text x="22" y="480" xml:space="preserve"><tspan fill="rgb(217,119,6)">/ </tspan></text>
47
+ <text x="22" y="498" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
48
+ <text x="22" y="516" xml:space="preserve"><tspan fill="rgb(48,54,61)">󰑊</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(200,180,90)">openai-codex/gpt-5.4</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(212,154,74)">󰌵 medium</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> 0%</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> </tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(255,255,255)">workspace</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)">󰔟</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰁨</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰀄</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)">󰕾</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰌵</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰍜</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰍬</tspan><tspan fill="rgb(155,165,175)"> EN</tspan></text></g>
49
+ </svg>
@@ -0,0 +1,34 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" width="1036" height="534" viewBox="0 0 1036 534" role="img" aria-label="Pix · agent workspace">
3
+ <rect width="1036" height="534" rx="14" fill="#0f1218"/>
4
+ <rect x="1" y="1" width="1034" height="532" rx="13" fill="none" stroke="#303746"/>
5
+ <circle cx="22" cy="22" r="6" fill="#ff5f57"/><circle cx="42" cy="22" r="6" fill="#febc2e"/><circle cx="62" cy="22" r="6" fill="#28c840"/>
6
+ <text x="518" y="27" text-anchor="middle" fill="#7f8797" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="12">Pix · agent workspace</text>
7
+ <g><rect x="310" y="502" width="40" height="18" fill="rgb(48,54,61)"/></g>
8
+ <g font-family="JetBrainsMono Nerd Font Mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="13" font-variant-ligatures="none"><text x="22" y="66" xml:space="preserve"><tspan fill="rgb(124,169,130)">󰗠</tspan><tspan fill="rgb(255,255,255)"> Auth hardening: find the safest place to fix </tspan><tspan fill="rgb(125,133,144)">󰅖</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">│</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)" font-weight="700">󰐕</tspan><tspan fill="rgb(155,165,175)"> </tspan></text>
9
+ <text x="22" y="84" xml:space="preserve"><tspan fill="rgb(125,133,144)"> └──────────────────────────────────────────────────────────────────────────</tspan></text>
10
+ <text x="22" y="102" xml:space="preserve"><tspan fill="rgb(217,119,6)">Auth hardening: find the safest place to fix expired sessions without widening the change. </tspan></text>
11
+ <text x="22" y="120" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
12
+ <text x="22" y="138" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700">󰗠</tspan><tspan fill="rgb(133,143,153)" font-weight="700"> thinking</tspan><tspan fill="rgb(133,143,153)"> </tspan><tspan fill="rgb(155,165,175)">(medium) 0s</tspan><tspan fill="rgb(133,143,153)"> </tspan></text>
13
+ <text x="22" y="156" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
14
+ <text x="22" y="174" xml:space="preserve"><tspan fill="rgb(164,188,224)">I’ll trace the session boundary and verify the current behavior first. </tspan></text>
15
+ <text x="22" y="192" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
16
+ <text x="22" y="210" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700">󰗠</tspan><tspan fill="rgb(133,143,153)" font-weight="700"> read</tspan><tspan fill="rgb(133,143,153)"> </tspan><tspan fill="rgb(155,165,175)">src/auth/session.ts</tspan><tspan fill="rgb(133,143,153)"> </tspan></text>
17
+ <text x="22" y="228" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
18
+ <text x="22" y="246" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700">󰗠</tspan><tspan fill="rgb(133,143,153)" font-weight="700"> thinking</tspan><tspan fill="rgb(133,143,153)"> </tspan><tspan fill="rgb(155,165,175)">(medium) 0s</tspan><tspan fill="rgb(133,143,153)"> </tspan></text>
19
+ <text x="22" y="264" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
20
+ <text x="22" y="282" xml:space="preserve"><tspan fill="rgb(164,188,224)">The refresh path is isolated in </tspan><tspan fill="rgb(124,169,130)">`loadSession()`</tspan><tspan fill="rgb(164,188,224)">. Next I’d add an expiry regression test, then make the smallest </tspan></text>
21
+ <text x="22" y="300" xml:space="preserve"><tspan fill="#d8dee9">guarded change. </tspan></text>
22
+ <text x="22" y="318" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
23
+ <text x="22" y="336" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
24
+ <text x="22" y="354" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
25
+ <text x="22" y="372" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
26
+ <text x="22" y="390" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
27
+ <text x="22" y="408" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
28
+ <text x="22" y="426" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
29
+ <text x="22" y="444" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
30
+ <text x="22" y="462" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
31
+ <text x="22" y="480" xml:space="preserve"><tspan fill="rgb(217,119,6)"> </tspan></text>
32
+ <text x="22" y="498" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
33
+ <text x="22" y="516" xml:space="preserve"><tspan fill="rgb(48,54,61)">󰑊</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(200,180,90)">openai-codex/gpt-5.4</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(212,154,74)">󰌵 medium</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> 0%</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> </tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(255,255,255)">workspace</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰁨</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰀄</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)">󰕾</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰌵</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰍜</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰍬</tspan><tspan fill="rgb(155,165,175)"> EN</tspan></text></g>
34
+ </svg>
@@ -0,0 +1,34 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" width="1036" height="534" viewBox="0 0 1036 534" role="img" aria-label="Pix · parallel sub-agents">
3
+ <rect width="1036" height="534" rx="14" fill="#0f1218"/>
4
+ <rect x="1" y="1" width="1034" height="532" rx="13" fill="none" stroke="#303746"/>
5
+ <circle cx="22" cy="22" r="6" fill="#ff5f57"/><circle cx="42" cy="22" r="6" fill="#febc2e"/><circle cx="62" cy="22" r="6" fill="#28c840"/>
6
+ <text x="518" y="27" text-anchor="middle" fill="#7f8797" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="12">Pix · parallel sub-agents</text>
7
+ <g><rect x="310" y="502" width="40" height="18" fill="rgb(48,54,61)"/></g>
8
+ <g font-family="JetBrainsMono Nerd Font Mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="13" font-variant-ligatures="none"><text x="22" y="66" xml:space="preserve"><tspan fill="rgb(124,169,130)">󰗠</tspan><tspan fill="rgb(255,255,255)"> Auth hardening: find the safest place to fix </tspan><tspan fill="rgb(125,133,144)">󰅖</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">│</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)" font-weight="700">󰐕</tspan><tspan fill="rgb(155,165,175)"> </tspan></text>
9
+ <text x="22" y="84" xml:space="preserve"><tspan fill="rgb(125,133,144)"> └──────────────────────────────────────────────────────────────────────────</tspan></text>
10
+ <text x="22" y="102" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
11
+ <text x="22" y="120" xml:space="preserve"><tspan fill="rgb(164,188,224)">The implementation order is now explicit: coverage first, guarded change second, focused checks last. </tspan></text>
12
+ <text x="22" y="138" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
13
+ <text x="22" y="156" xml:space="preserve"><tspan fill="rgb(217,119,6)">Run the independent review tracks in parallel while I keep the main implementation path. </tspan></text>
14
+ <text x="22" y="174" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
15
+ <text x="22" y="192" xml:space="preserve"><tspan fill="rgb(164,188,224)">I’ll split the independent review tracks and keep implementation in this session. </tspan></text>
16
+ <text x="22" y="210" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
17
+ <text x="22" y="228" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700">󰗠</tspan><tspan fill="rgb(125,133,144)" font-weight="700"> subagents</tspan><tspan fill="rgb(125,133,144)"> </tspan><tspan fill="rgb(155,165,175)">mode=spawn started=3/3 run=readme-parallel-audit</tspan><tspan fill="rgb(125,133,144)"> </tspan></text>
18
+ <text x="22" y="246" xml:space="preserve"><tspan fill="rgb(48,54,61)">└</tspan><tspan fill="rgb(155,165,175)"> started 3/3 subagents — running:2 done:1 — run readme-parallel-audit </tspan></text>
19
+ <text x="22" y="264" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
20
+ <text x="22" y="282" xml:space="preserve"><tspan fill="rgb(164,188,224)">Two reviews are running in parallel; I’ll merge their findings before changing the refresh path. </tspan></text>
21
+ <text x="22" y="300" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
22
+ <text x="22" y="318" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
23
+ <text x="22" y="336" xml:space="preserve"><tspan fill="rgb(212,154,74)">󰔟</tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(201,106,103)">5.Harden expired sessions</tspan><tspan fill="rgb(214,222,235)"> — hardening expired sessions </tspan></text>
24
+ <text x="22" y="354" xml:space="preserve"><tspan fill="rgb(124,169,130)"> ↳ 󰗠</tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(201,106,103)">1.Trace the session boundary</tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(214,222,235)">parent:#5</tspan><tspan fill="rgb(214,222,235)"> </tspan></text>
25
+ <text x="22" y="372" xml:space="preserve"><tspan fill="rgb(212,154,74)"> ↳ 󰔟</tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(201,106,103)">2.Add expiry regression coverage</tspan><tspan fill="rgb(214,222,235)"> — writing expiry regression tests parent:#5 </tspan></text>
26
+ <text x="22" y="390" xml:space="preserve"><tspan fill="rgb(125,133,144)"> ↳ 󰝦</tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(212,154,74)">3.Guard the refresh path</tspan><tspan fill="rgb(214,222,235)"> parent:#5 blocked:#2 </tspan></text>
27
+ <text x="22" y="408" xml:space="preserve"><tspan fill="rgb(125,133,144)"> ↳ 󰝦</tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(200,180,90)">4.Run focused checks</tspan><tspan fill="rgb(214,222,235)"> parent:#5 blocked:#3 </tspan></text>
28
+ <text x="22" y="426" xml:space="preserve"><tspan fill="rgb(127,179,200)" font-weight="700">󰔟</tspan><tspan fill="rgb(125,133,144)"> </tspan><tspan fill="rgb(122,162,214)" font-weight="700">test-review</tspan><tspan fill="rgb(125,133,144)"> </tspan><tspan fill="rgb(127,179,200)">claude-sonnet-4-6</tspan><tspan fill="rgb(125,133,144)"> Design expiry and race regression cases elapsed:— </tspan></text>
29
+ <text x="22" y="444" xml:space="preserve"><tspan fill="rgb(127,179,200)" font-weight="700">󰔟</tspan><tspan fill="rgb(125,133,144)"> </tspan><tspan fill="rgb(122,162,214)" font-weight="700">ux-audit</tspan><tspan fill="rgb(125,133,144)"> </tspan><tspan fill="rgb(127,179,200)">gemini-3.1-pro</tspan><tspan fill="rgb(125,133,144)"> Review user-visible recovery states elapsed:— </tspan></text>
30
+ <text x="22" y="462" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
31
+ <text x="22" y="480" xml:space="preserve"><tspan fill="rgb(217,119,6)"> </tspan></text>
32
+ <text x="22" y="498" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
33
+ <text x="22" y="516" xml:space="preserve"><tspan fill="rgb(48,54,61)">󰑊</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(200,180,90)">openai-codex/gpt-5.4</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(212,154,74)">󰌵 medium</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> 0%</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> </tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(255,255,255)">workspace</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰁨</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰀄</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)">󰕾</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰌵</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰍜</tspan><tspan fill="rgb(155,165,175)"> ↑ </tspan><tspan fill="rgb(125,133,144)">󰍬</tspan><tspan fill="rgb(155,165,175)"> EN</tspan></text></g>
34
+ </svg>
Binary file
@@ -0,0 +1,34 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" width="1036" height="534" viewBox="0 0 1036 534" role="img" aria-label="Pix · project-scoped session tabs">
3
+ <rect width="1036" height="534" rx="14" fill="#0f1218"/>
4
+ <rect x="1" y="1" width="1034" height="532" rx="13" fill="none" stroke="#303746"/>
5
+ <circle cx="22" cy="22" r="6" fill="#ff5f57"/><circle cx="42" cy="22" r="6" fill="#febc2e"/><circle cx="62" cy="22" r="6" fill="#28c840"/>
6
+ <text x="518" y="27" text-anchor="middle" fill="#7f8797" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="12">Pix · project-scoped session tabs</text>
7
+ <g><rect x="310" y="502" width="40" height="18" fill="rgb(48,54,61)"/></g>
8
+ <g font-family="JetBrainsMono Nerd Font Mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="13" font-variant-ligatures="none"><text x="22" y="66" xml:space="preserve"><tspan fill="rgb(124,169,130)">󰗠</tspan><tspan fill="rgb(155,165,175)"> Auth hardening: find the safest p… </tspan><tspan fill="rgb(125,133,144)">󰅖</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">│</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)">󰗠</tspan><tspan fill="rgb(155,165,175)"> Renderer polish: audit compact to… </tspan><tspan fill="rgb(125,133,144)">󰅖</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">│</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)">󰗠</tspan><tspan fill="rgb(255,255,255)"> Release checks: compare CI across… </tspan><tspan fill="rgb(125,133,144)">󰅖</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">│</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)" font-weight="700">󰐕</tspan></text>
9
+ <text x="22" y="84" xml:space="preserve"><tspan fill="rgb(125,133,144)">───────────────────────────────────────┴────────────────────────────────────────┘ └──</tspan></text>
10
+ <text x="22" y="102" xml:space="preserve"><tspan fill="#d8dee9">system: Opened a new tab. cwd=~/projects/pix </tspan></text>
11
+ <text x="22" y="120" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
12
+ <text x="22" y="138" xml:space="preserve"><tspan fill="rgb(217,119,6)">Release checks: compare CI across Linux, macOS, and Windows before publishing. </tspan></text>
13
+ <text x="22" y="156" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
14
+ <text x="22" y="174" xml:space="preserve"><tspan fill="rgb(164,188,224)">I’ll compare the release checks across Linux, macOS, and Windows before publishing. </tspan></text>
15
+ <text x="22" y="192" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
16
+ <text x="22" y="210" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
17
+ <text x="22" y="228" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
18
+ <text x="22" y="246" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
19
+ <text x="22" y="264" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
20
+ <text x="22" y="282" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
21
+ <text x="22" y="300" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
22
+ <text x="22" y="318" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
23
+ <text x="22" y="336" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
24
+ <text x="22" y="354" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
25
+ <text x="22" y="372" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
26
+ <text x="22" y="390" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
27
+ <text x="22" y="408" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
28
+ <text x="22" y="426" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
29
+ <text x="22" y="444" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
30
+ <text x="22" y="462" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
31
+ <text x="22" y="480" xml:space="preserve"><tspan fill="rgb(217,119,6)"> </tspan></text>
32
+ <text x="22" y="498" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
33
+ <text x="22" y="516" xml:space="preserve"><tspan fill="rgb(48,54,61)">󰑊</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(200,180,90)">openai-codex/gpt-5.4</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(212,154,74)">󰌵 medium</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> 0%</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> </tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(255,255,255)">workspace</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰁨</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰀄</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)">󰕾</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰌵</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰍜</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">󰍬</tspan><tspan fill="rgb(155,165,175)"> EN</tspan></text></g>
34
+ </svg>
@@ -5,19 +5,12 @@ import { parse as parseJsonc } from "jsonc-parser";
5
5
 
6
6
  import { DEFAULT_PI_TOOLS_SUITE_CONFIG_JSONC } from "./default-pi-tools-suite-config.js";
7
7
 
8
- export interface TelegramMirrorConfig {
9
- enabled: boolean;
10
- botToken: string;
11
- chatId: number;
12
- }
13
-
14
8
  export interface PiToolsSuiteConfig {
15
9
  enabled: boolean;
16
10
  disabledModules: string[];
17
11
  todoThinking: boolean;
18
12
  /** Vision-capable model used by the coding-discipline lookup tool; unset disables lookup. */
19
13
  lookupModel?: string;
20
- telegramMirror?: TelegramMirrorConfig;
21
14
  }
22
15
 
23
16
  type MutableConfig = {
@@ -25,7 +18,6 @@ type MutableConfig = {
25
18
  disabledModules: Set<string>;
26
19
  todoThinking: boolean;
27
20
  lookupModel: string | undefined;
28
- telegramMirror: TelegramMirrorConfig | undefined;
29
21
  };
30
22
 
31
23
  type Env = Record<string, string | undefined>;
@@ -70,27 +62,6 @@ function normalizeLookupModel(raw: unknown): string | undefined {
70
62
  return trimmed ? trimmed : undefined;
71
63
  }
72
64
 
73
- function normalizeTelegramMirror(raw: unknown): TelegramMirrorConfig | undefined {
74
- if (!isRecord(raw)) return undefined;
75
- const botToken = typeof raw.botToken === "string" ? raw.botToken.trim() : "";
76
- if (!botToken) return undefined;
77
-
78
- let chatId: number | undefined;
79
- if (typeof raw.chatId === "number" && Number.isFinite(raw.chatId) && Number.isInteger(raw.chatId)) {
80
- chatId = raw.chatId;
81
- } else if (typeof raw.chatId === "string") {
82
- const trimmed = raw.chatId.trim();
83
- if (/^-?\d+$/.test(trimmed)) {
84
- const parsed = Number(trimmed);
85
- if (Number.isFinite(parsed) && Number.isInteger(parsed)) chatId = parsed;
86
- }
87
- }
88
- if (chatId === undefined) return undefined;
89
-
90
- const enabled = typeof raw.enabled === "boolean" ? raw.enabled : true;
91
- return { enabled, botToken, chatId };
92
- }
93
-
94
65
  function boolFromEnv(value: string | undefined): boolean | undefined {
95
66
  if (value === undefined) return undefined;
96
67
  const normalized = value.trim().toLowerCase();
@@ -165,9 +136,6 @@ function mergeConfigLayer(config: MutableConfig, raw: Record<string, unknown>, k
165
136
  }
166
137
  }
167
138
 
168
- const telegramMirror = normalizeTelegramMirror(raw.telegramMirror);
169
- if (telegramMirror) config.telegramMirror = telegramMirror;
170
-
171
139
  return config;
172
140
  }
173
141
 
@@ -210,7 +178,6 @@ export function loadPiToolsSuiteConfig(moduleNames: readonly string[], options:
210
178
  disabledModules: new Set([...DEFAULT_DISABLED_MODULES].filter((name) => knownModules.has(name))),
211
179
  todoThinking: false,
212
180
  lookupModel: undefined,
213
- telegramMirror: undefined,
214
181
  };
215
182
  const userConfigPath = getPiToolsSuiteUserConfigPath(options.homeDir);
216
183
 
@@ -230,15 +197,5 @@ export function loadPiToolsSuiteConfig(moduleNames: readonly string[], options:
230
197
  disabledModules: [...config.disabledModules].sort(),
231
198
  todoThinking: config.todoThinking,
232
199
  ...(config.lookupModel ? { lookupModel: config.lookupModel } : {}),
233
- ...(config.telegramMirror ? { telegramMirror: config.telegramMirror } : {}),
234
200
  };
235
201
  }
236
-
237
- /**
238
- * Load only the telegram-mirror section from the pi-tools-suite config layers.
239
- * Returns undefined when the section is missing or invalid (botToken empty /
240
- * chatId non-integer).
241
- */
242
- export function loadTelegramMirrorConfig(options: { cwd?: string; env?: Env; homeDir?: string } = {}): TelegramMirrorConfig | undefined {
243
- return loadPiToolsSuiteConfig([], options).telegramMirror;
244
- }
@@ -22,11 +22,6 @@ export const DEFAULT_PI_TOOLS_SUITE_CONFIG_JSONC = String.raw`{
22
22
  // "balanced" — + restate-code + generic-explanation (default);
23
23
  // "aggressive" — any non-valuable net-new comment.
24
24
  "commentChecker": { "enabled": true, "strictness": "balanced" },
25
- // "telegramMirror": {
26
- // "enabled": true,
27
- // "botToken": "123456789:ABCdef...",
28
- // "chatId": 123456789
29
- // },
30
25
  "dcp": {
31
26
  "enabled": true,
32
27
  // Write a JSONL debug log of DCP context/prune/compress events to
@@ -26,7 +26,6 @@ export const MODULES: Array<{ name: string; load: () => Promise<ExtensionModule>
26
26
  { name: "dcp", load: () => import("./dcp/index") },
27
27
  { name: "prompt-commands", load: () => import("./prompt-commands/index") },
28
28
  { name: "skill-installer", load: () => import("./skill-installer/index") },
29
- { name: "telegram-mirror", load: () => import("./telegram-mirror/index") },
30
29
  // Keep this last: its before_provider_request handler is the final payload
31
30
  // sanitizer after DCP and any other provider-payload modifiers.
32
31
  { name: "codex-reasoning-fix", load: () => import("./codex-reasoning-fix/index") },
package/package.json CHANGED
@@ -1,7 +1,16 @@
1
1
  {
2
2
  "name": "pi-ui-extend",
3
- "version": "0.1.65",
3
+ "version": "0.1.67",
4
+ "description": "Pix: a workspace-first terminal UI for Pi with tabs, readable tool activity, voice input, and bundled agent tools.",
4
5
  "private": false,
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/dnaroid/pix.git"
9
+ },
10
+ "homepage": "https://github.com/dnaroid/pix#readme",
11
+ "bugs": {
12
+ "url": "https://github.com/dnaroid/pix/issues"
13
+ },
5
14
  "type": "module",
6
15
  "bin": {
7
16
  "pi-ui-extend": "./bin/pix.mjs",
@@ -20,6 +29,7 @@
20
29
  "./schemas/pi-tools-suite.json": "./schemas/pi-tools-suite.json"
21
30
  },
22
31
  "files": [
32
+ "assets/screenshots",
23
33
  "bin",
24
34
  "docs",
25
35
  "dist",