Skip to content

Commit b03396d

Browse files
committed
Merge remote-tracking branch 'origin/fix/web-icons-and-agent-context' into feat/expert-talk
# Conflicts: # apps/pythinker-code/dist-web/.web-bundle-manifest.json # apps/pythinker-code/dist-web/assets/CodeBlockNode-12vFvmM_.js # apps/pythinker-code/dist-web/assets/CodeBlockNode-CDn5ZXqT.js # apps/pythinker-code/dist-web/assets/CodeBlockNode-blUZ7b1n.js # apps/pythinker-code/dist-web/assets/DesignSystemView-CN_ao3CW.js # apps/pythinker-code/dist-web/assets/Tooltip-BJqig-gj.js # apps/pythinker-code/dist-web/assets/Tooltip-CXoqJKN7.js # apps/pythinker-code/dist-web/assets/Tooltip-CeE1KmGq.js # apps/pythinker-code/dist-web/assets/abnfDiagram-VCTEODGH-DCiNqxUW.js # apps/pythinker-code/dist-web/assets/abnfDiagram-VCTEODGH-DkGSnA64.js # apps/pythinker-code/dist-web/assets/abnfDiagram-VCTEODGH-yOfT49Me.js # apps/pythinker-code/dist-web/assets/arc-CRALZ7W2.js # apps/pythinker-code/dist-web/assets/arc-DOXte3YA.js # apps/pythinker-code/dist-web/assets/arc-ZRdpD3ai.js # apps/pythinker-code/dist-web/assets/architectureDiagram-5GKGNRK7-Brn9P-cu.js # apps/pythinker-code/dist-web/assets/architectureDiagram-5GKGNRK7-DNZYsCKj.js # apps/pythinker-code/dist-web/assets/architectureDiagram-5GKGNRK7-fuE402Hn.js # apps/pythinker-code/dist-web/assets/blockDiagram-NRAW4CY4-BrcHUXlA.js # apps/pythinker-code/dist-web/assets/blockDiagram-NRAW4CY4-DZIOldaZ.js # apps/pythinker-code/dist-web/assets/blockDiagram-NRAW4CY4-jIhhfGHj.js # apps/pythinker-code/dist-web/assets/c4Diagram-UCG6FXSJ-9bfMPG6t.js # apps/pythinker-code/dist-web/assets/c4Diagram-UCG6FXSJ-B2TcMnNF.js # apps/pythinker-code/dist-web/assets/c4Diagram-UCG6FXSJ-DVV27-0b.js # apps/pythinker-code/dist-web/assets/chunk-2Q5K7J3B-CSPFJHnn.js # apps/pythinker-code/dist-web/assets/chunk-2Q5K7J3B-DjQA9UTZ.js # apps/pythinker-code/dist-web/assets/chunk-2Q5K7J3B-NVCF9dlE.js # apps/pythinker-code/dist-web/assets/chunk-5VM5RSS4-CRjOhtnK.js # apps/pythinker-code/dist-web/assets/chunk-5VM5RSS4-C_os9UuP.js # apps/pythinker-code/dist-web/assets/chunk-5VM5RSS4-EPpFXNK2.js # apps/pythinker-code/dist-web/assets/chunk-F27PBJKO-BJ1U8l5G.js # apps/pythinker-code/dist-web/assets/chunk-F27PBJKO-BhMN3PAu.js # apps/pythinker-code/dist-web/assets/chunk-F27PBJKO-CAjRd9Np.js # apps/pythinker-code/dist-web/assets/chunk-G27WJ6UU-BW3QWBgT.js # apps/pythinker-code/dist-web/assets/chunk-G27WJ6UU-DZbwPgSg.js # apps/pythinker-code/dist-web/assets/chunk-G27WJ6UU-DaaUVnWs.js # apps/pythinker-code/dist-web/assets/chunk-JWPE2WC7-BGoun8cp.js # apps/pythinker-code/dist-web/assets/chunk-JWPE2WC7-Htx04FF8.js # apps/pythinker-code/dist-web/assets/chunk-JWPE2WC7-jdNSOe2u.js # apps/pythinker-code/dist-web/assets/chunk-LCL6LL3I-3S-4pLwj.js # apps/pythinker-code/dist-web/assets/chunk-LCL6LL3I-BVn4t5XY.js # apps/pythinker-code/dist-web/assets/chunk-LCL6LL3I-B_QgwXLP.js # apps/pythinker-code/dist-web/assets/chunk-POPQ4Y6H-CDdnOWFD.js # apps/pythinker-code/dist-web/assets/chunk-POPQ4Y6H-CkgbKt8D.js # apps/pythinker-code/dist-web/assets/chunk-POPQ4Y6H-rZza1LpH.js # apps/pythinker-code/dist-web/assets/chunk-SVP7TREG-B59pM6te.js # apps/pythinker-code/dist-web/assets/chunk-SVP7TREG-B6TmlzkA.js # apps/pythinker-code/dist-web/assets/chunk-SVP7TREG-_rw_0lys.js # apps/pythinker-code/dist-web/assets/chunk-XXDRQBXY-CcpKYeyR.js # apps/pythinker-code/dist-web/assets/chunk-XXDRQBXY-Cwo-G0CM.js # apps/pythinker-code/dist-web/assets/chunk-XXDRQBXY-Dsq5gFWa.js # apps/pythinker-code/dist-web/assets/cose-bilkent-JH36ORCC-BVDZkW7K.js # apps/pythinker-code/dist-web/assets/cose-bilkent-JH36ORCC-DAnfikmN.js # apps/pythinker-code/dist-web/assets/cose-bilkent-JH36ORCC-YLk9zg6H.js # apps/pythinker-code/dist-web/assets/cssMode-BFJzPQeM.js # apps/pythinker-code/dist-web/assets/cssMode-BJeeakxy.js # apps/pythinker-code/dist-web/assets/cssMode-WhKKj-l0.js # apps/pythinker-code/dist-web/assets/cynefin-OW5HDTMX-BXHxCFcZ.js # apps/pythinker-code/dist-web/assets/cynefin-OW5HDTMX-Cnwb8kRi.js # apps/pythinker-code/dist-web/assets/cynefin-OW5HDTMX-NPAvoA16.js # apps/pythinker-code/dist-web/assets/cynefinDiagram-5FMLGOSQ-C4H3lZRT.js # apps/pythinker-code/dist-web/assets/cynefinDiagram-5FMLGOSQ-DHcQYOTf.js # apps/pythinker-code/dist-web/assets/cynefinDiagram-5FMLGOSQ-zU-zwYZJ.js # apps/pythinker-code/dist-web/assets/dagre-3AP2YEHR-BPmdDnAQ.js # apps/pythinker-code/dist-web/assets/dagre-3AP2YEHR-CqZBJIa2.js # apps/pythinker-code/dist-web/assets/dagre-3AP2YEHR-DiMgbj4X.js # apps/pythinker-code/dist-web/assets/diagram-S7CK7UJ4-CphAJ7Xt.js # apps/pythinker-code/dist-web/assets/diagram-S7CK7UJ4-D_MTJ1t0.js # apps/pythinker-code/dist-web/assets/diagram-S7CK7UJ4-DwZcQiWq.js # apps/pythinker-code/dist-web/assets/diagram-UQ7AKVKN-CmcpI8dw.js # apps/pythinker-code/dist-web/assets/diagram-UQ7AKVKN-D0BGChwq.js # apps/pythinker-code/dist-web/assets/diagram-UQ7AKVKN-DNLmPnuq.js # apps/pythinker-code/dist-web/assets/diagram-VSXAHHWV-BvDBLLSs.js # apps/pythinker-code/dist-web/assets/diagram-VSXAHHWV-DCxeyFe3.js # apps/pythinker-code/dist-web/assets/diagram-VSXAHHWV-DpFatbfR.js # apps/pythinker-code/dist-web/assets/diagram-VX7I27RA-4c0xFPHG.js # apps/pythinker-code/dist-web/assets/diagram-VX7I27RA-CFHyAt9L.js # apps/pythinker-code/dist-web/assets/diagram-VX7I27RA-DxvsXw0w.js # apps/pythinker-code/dist-web/assets/diagram-Z3DM3KII-BBC6CxRt.js # apps/pythinker-code/dist-web/assets/diagram-Z3DM3KII-BcJ84wOV.js # apps/pythinker-code/dist-web/assets/diagram-Z3DM3KII-C6jK5I0g.js # apps/pythinker-code/dist-web/assets/ebnfDiagram-PWID7BFC-BK0n5lzQ.js # apps/pythinker-code/dist-web/assets/ebnfDiagram-PWID7BFC-M3RfE2rR.js # apps/pythinker-code/dist-web/assets/ebnfDiagram-PWID7BFC-phT5xGlK.js # apps/pythinker-code/dist-web/assets/editor.main-BSAVbCX3.js # apps/pythinker-code/dist-web/assets/editor.main-CYChMLfs.js # apps/pythinker-code/dist-web/assets/editor.main-D-PM0CFl.js # apps/pythinker-code/dist-web/assets/erDiagram-SSCWMZ5O-35LyG7Ea.js # apps/pythinker-code/dist-web/assets/erDiagram-SSCWMZ5O-CKYsBbPk.js # apps/pythinker-code/dist-web/assets/erDiagram-SSCWMZ5O-CYgRvTl6.js # apps/pythinker-code/dist-web/assets/flowDiagram-A5DVABFB-BUEcHuBk.js # apps/pythinker-code/dist-web/assets/flowDiagram-A5DVABFB-DLHcFOP7.js # apps/pythinker-code/dist-web/assets/flowDiagram-A5DVABFB-GlxhW9MJ.js # apps/pythinker-code/dist-web/assets/freemarker2-DTpTNoxC.js # apps/pythinker-code/dist-web/assets/freemarker2-IBw3MFW1.js # apps/pythinker-code/dist-web/assets/freemarker2-VcczEAow.js # apps/pythinker-code/dist-web/assets/ganttDiagram-EL5Y4UJY-CvingeF3.js # apps/pythinker-code/dist-web/assets/ganttDiagram-EL5Y4UJY-Cxi7VLSx.js # apps/pythinker-code/dist-web/assets/ganttDiagram-EL5Y4UJY-DRHIPxd0.js # apps/pythinker-code/dist-web/assets/gitGraphDiagram-WWUBYQGX-BvvsoLXh.js # apps/pythinker-code/dist-web/assets/gitGraphDiagram-WWUBYQGX-CTUANK60.js # apps/pythinker-code/dist-web/assets/gitGraphDiagram-WWUBYQGX-tYcx-Rye.js # apps/pythinker-code/dist-web/assets/handlebars-BHVJLYaw.js # apps/pythinker-code/dist-web/assets/handlebars-Dd4iVNlz.js # apps/pythinker-code/dist-web/assets/handlebars-wCyrx7CY.js # apps/pythinker-code/dist-web/assets/html-BHbOcOXH.js # apps/pythinker-code/dist-web/assets/html-CnMLNZXn.js # apps/pythinker-code/dist-web/assets/html-uqRoBNqa.js # apps/pythinker-code/dist-web/assets/htmlMode-B22dyQM-.js # apps/pythinker-code/dist-web/assets/htmlMode-BdO0-MeR.js # apps/pythinker-code/dist-web/assets/htmlMode-CLIOrtdl.js # apps/pythinker-code/dist-web/assets/index-BVJX3HA9.js # apps/pythinker-code/dist-web/assets/index-BdljpA7Y.js # apps/pythinker-code/dist-web/assets/index-BfGnQEZd.js # apps/pythinker-code/dist-web/assets/index-C9dYiIm-.js # apps/pythinker-code/dist-web/assets/index-CWxol5yV.js # apps/pythinker-code/dist-web/assets/index-Ca1Hw-Tj.js # apps/pythinker-code/dist-web/assets/index-Cuhwkd2u.js # apps/pythinker-code/dist-web/assets/index-DKr7WVPb.js # apps/pythinker-code/dist-web/assets/index-DXyVQpv4.js # apps/pythinker-code/dist-web/assets/index-DzMVuE8K.js # apps/pythinker-code/dist-web/assets/index-EU58A9eq.js # apps/pythinker-code/dist-web/assets/index-xd1-FOc-.js # apps/pythinker-code/dist-web/assets/index10-3iUPHruw.js # apps/pythinker-code/dist-web/assets/index10-DWx7St8B.js # apps/pythinker-code/dist-web/assets/index10-ZSVeRRPK.js # apps/pythinker-code/dist-web/assets/index11-B7vm4Wyu.js # apps/pythinker-code/dist-web/assets/index11-RJ4Duo16.js # apps/pythinker-code/dist-web/assets/index11-j2gLatFD.js # apps/pythinker-code/dist-web/assets/index5-1kijGax5.js # apps/pythinker-code/dist-web/assets/index5-AB809MEU.js # apps/pythinker-code/dist-web/assets/index5-BBP5EAua.js # apps/pythinker-code/dist-web/assets/index6-CMdNEKm-.js # apps/pythinker-code/dist-web/assets/index6-CUxyjnAx.js # apps/pythinker-code/dist-web/assets/index6-CmxeH_a4.js # apps/pythinker-code/dist-web/assets/index7-DlKXDDNz.js # apps/pythinker-code/dist-web/assets/index7-DnV5Bwht.js # apps/pythinker-code/dist-web/assets/index7-ic3v_XV8.js # apps/pythinker-code/dist-web/assets/index8-B-Fs2WCK.js # apps/pythinker-code/dist-web/assets/index8-ChqfVWeC.js # apps/pythinker-code/dist-web/assets/index8-a8Z6jIeV.js # apps/pythinker-code/dist-web/assets/infoDiagram-RXCK75RN-A-Hcs547.js # apps/pythinker-code/dist-web/assets/infoDiagram-RXCK75RN-CwNMs0vo.js # apps/pythinker-code/dist-web/assets/infoDiagram-RXCK75RN-Dhs5rPlY.js # apps/pythinker-code/dist-web/assets/ishikawaDiagram-5VMMS53U-CiR9GQBa.js # apps/pythinker-code/dist-web/assets/ishikawaDiagram-5VMMS53U-Cp1OTuEH.js # apps/pythinker-code/dist-web/assets/ishikawaDiagram-5VMMS53U-_vyNztly.js # apps/pythinker-code/dist-web/assets/javascript-Ba_eDQwa.js # apps/pythinker-code/dist-web/assets/javascript-CGJpn67Y.js # apps/pythinker-code/dist-web/assets/javascript-DfaukSbt.js # apps/pythinker-code/dist-web/assets/journeyDiagram-EYS64GPL-CB4urXON.js # apps/pythinker-code/dist-web/assets/journeyDiagram-EYS64GPL-C_uua3eS.js # apps/pythinker-code/dist-web/assets/journeyDiagram-EYS64GPL-O1iMx33W.js # apps/pythinker-code/dist-web/assets/jsonMode-BERwnzU9.js # apps/pythinker-code/dist-web/assets/jsonMode-CqBUWvUN.js # apps/pythinker-code/dist-web/assets/jsonMode-DJ86g_nM.js # apps/pythinker-code/dist-web/assets/kanban-definition-3QL26DDD-3tzdQA4j.js # apps/pythinker-code/dist-web/assets/kanban-definition-3QL26DDD-B0Y2nFj_.js # apps/pythinker-code/dist-web/assets/kanban-definition-3QL26DDD-C6O7maCp.js # apps/pythinker-code/dist-web/assets/layout-BJoE1CLr.js # apps/pythinker-code/dist-web/assets/layout-B_Iz_RzW.js # apps/pythinker-code/dist-web/assets/layout-DxSsHXW1.js # apps/pythinker-code/dist-web/assets/linear-DH4YISJh.js # apps/pythinker-code/dist-web/assets/linear-DnN0dt7s.js # apps/pythinker-code/dist-web/assets/linear-O9xn7OJp.js # apps/pythinker-code/dist-web/assets/liquid-BGlCBM_n.js # apps/pythinker-code/dist-web/assets/liquid-BS8aeEHc.js # apps/pythinker-code/dist-web/assets/liquid-sKdl4UdI.js # apps/pythinker-code/dist-web/assets/lspLanguageFeatures-BTCo_Y1s.js # apps/pythinker-code/dist-web/assets/lspLanguageFeatures-C9ngNtEs.js # apps/pythinker-code/dist-web/assets/lspLanguageFeatures-CSEXgvx9.js # apps/pythinker-code/dist-web/assets/mdx-BnVXNSJr.js # apps/pythinker-code/dist-web/assets/mdx-CtDvK81x.js # apps/pythinker-code/dist-web/assets/mdx-wt0kEkuv.js # apps/pythinker-code/dist-web/assets/mermaid.core-BOrwZTX7.js # apps/pythinker-code/dist-web/assets/mermaid.core-C6OhN9Kk.js # apps/pythinker-code/dist-web/assets/mermaid.core-ZwzWU3bK.js # apps/pythinker-code/dist-web/assets/mindmap-definition-FBJOCRG2-C0jle5EI.js # apps/pythinker-code/dist-web/assets/mindmap-definition-FBJOCRG2-Cly6GUZN.js # apps/pythinker-code/dist-web/assets/mindmap-definition-FBJOCRG2-DTkal4N_.js # apps/pythinker-code/dist-web/assets/pegDiagram-XKGWAZYB-AeAc49AT.js # apps/pythinker-code/dist-web/assets/pegDiagram-XKGWAZYB-DK2fRG5F.js # apps/pythinker-code/dist-web/assets/pegDiagram-XKGWAZYB-TJAedqk7.js # apps/pythinker-code/dist-web/assets/pieDiagram-E7YTZNPT-5CI_jksY.js # apps/pythinker-code/dist-web/assets/pieDiagram-E7YTZNPT-BScaCxHk.js # apps/pythinker-code/dist-web/assets/pieDiagram-E7YTZNPT-SiY9ywB7.js # apps/pythinker-code/dist-web/assets/python-BwmBI_G0.js # apps/pythinker-code/dist-web/assets/python-D3FrwH3x.js # apps/pythinker-code/dist-web/assets/python-mo40ghbx.js # apps/pythinker-code/dist-web/assets/quadrantDiagram-AXDQQJYC-8quHtf6r.js # apps/pythinker-code/dist-web/assets/quadrantDiagram-AXDQQJYC-CvPjAJdf.js # apps/pythinker-code/dist-web/assets/quadrantDiagram-AXDQQJYC-CzIgStJr.js # apps/pythinker-code/dist-web/assets/railroadDiagram-O6MQD6OU-BVM85k9b.js # apps/pythinker-code/dist-web/assets/railroadDiagram-O6MQD6OU-DBfwO42Q.js # apps/pythinker-code/dist-web/assets/railroadDiagram-O6MQD6OU-vbtqhWiN.js # apps/pythinker-code/dist-web/assets/razor-DhKvkDLq.js # apps/pythinker-code/dist-web/assets/razor-Ds53pTeV.js # apps/pythinker-code/dist-web/assets/razor-Z8f5mG4b.js # apps/pythinker-code/dist-web/assets/requirementDiagram-EFPCY7ZU-BNvggxga.js # apps/pythinker-code/dist-web/assets/requirementDiagram-EFPCY7ZU-CbCGnoGf.js # apps/pythinker-code/dist-web/assets/requirementDiagram-EFPCY7ZU-Dj-m3gpu.js # apps/pythinker-code/dist-web/assets/sankeyDiagram-P5KCCOFB-ChRcRqnp.js # apps/pythinker-code/dist-web/assets/sankeyDiagram-P5KCCOFB-eMW_4q3F.js # apps/pythinker-code/dist-web/assets/sankeyDiagram-P5KCCOFB-xjm8Vxs8.js # apps/pythinker-code/dist-web/assets/sequenceDiagram-WJ2MYXX4-CdBcMKO8.js # apps/pythinker-code/dist-web/assets/sequenceDiagram-WJ2MYXX4-ChEmqiGj.js # apps/pythinker-code/dist-web/assets/sequenceDiagram-WJ2MYXX4-D-1MBEr0.js # apps/pythinker-code/dist-web/assets/sizeCapture-X5ZJPWSS-CqX0pFU_.js # apps/pythinker-code/dist-web/assets/sizeCapture-X5ZJPWSS-DBvyY2yi.js # apps/pythinker-code/dist-web/assets/sizeCapture-X5ZJPWSS-T49XUoAL.js # apps/pythinker-code/dist-web/assets/stateDiagram-HBIQ2CUA-B7FH38OW.js # apps/pythinker-code/dist-web/assets/stateDiagram-HBIQ2CUA-Da7xRfXe.js # apps/pythinker-code/dist-web/assets/stateDiagram-HBIQ2CUA-HhKPEKzk.js # apps/pythinker-code/dist-web/assets/swimlanes-XN3QIQJK-Bdudwge2.js # apps/pythinker-code/dist-web/assets/swimlanes-XN3QIQJK-DlSkivlD.js # apps/pythinker-code/dist-web/assets/swimlanes-XN3QIQJK-DonvnYvh.js # apps/pythinker-code/dist-web/assets/timeline-definition-24CTP7MA-C39botxJ.js # apps/pythinker-code/dist-web/assets/timeline-definition-24CTP7MA-Cgs4ffZh.js # apps/pythinker-code/dist-web/assets/timeline-definition-24CTP7MA-ClDQJzxt.js # apps/pythinker-code/dist-web/assets/tsMode-BnMpj1RR.js # apps/pythinker-code/dist-web/assets/tsMode-nJ1hzKCi.js # apps/pythinker-code/dist-web/assets/tsMode-uJSl2dkW.js # apps/pythinker-code/dist-web/assets/typescript-D8RfS7o2.js # apps/pythinker-code/dist-web/assets/typescript-DBXJ46ng.js # apps/pythinker-code/dist-web/assets/typescript-lSjBHhPp.js # apps/pythinker-code/dist-web/assets/vennDiagram-4TSXK5OY-DP8iKuKA.js # apps/pythinker-code/dist-web/assets/vennDiagram-4TSXK5OY-DydlVSgs.js # apps/pythinker-code/dist-web/assets/vennDiagram-4TSXK5OY-JwrXIUnz.js # apps/pythinker-code/dist-web/assets/vue.runtime.esm-bundler-DXaBSabU.js # apps/pythinker-code/dist-web/assets/vue.runtime.esm-bundler-Ds_bD7Ud.js # apps/pythinker-code/dist-web/assets/vue.runtime.esm-bundler-N36pXGj3.js # apps/pythinker-code/dist-web/assets/wardleyDiagram-VM6X3IG4-BOtRfI90.js # apps/pythinker-code/dist-web/assets/wardleyDiagram-VM6X3IG4-D_jIahwK.js # apps/pythinker-code/dist-web/assets/wardleyDiagram-VM6X3IG4-nYfxTMJ1.js # apps/pythinker-code/dist-web/assets/xml-B2qwnheY.js # apps/pythinker-code/dist-web/assets/xml-BZQOgYdl.js # apps/pythinker-code/dist-web/assets/xml-yYYCgfHE.js # apps/pythinker-code/dist-web/assets/xychartDiagram-S5SC5T6Z-BZkOklhI.js # apps/pythinker-code/dist-web/assets/xychartDiagram-S5SC5T6Z-ClIfflxT.js # apps/pythinker-code/dist-web/assets/xychartDiagram-S5SC5T6Z-DNRyTiID.js # apps/pythinker-code/dist-web/assets/yaml-Biss0P75.js # apps/pythinker-code/dist-web/assets/yaml-CtFrCf8J.js # apps/pythinker-code/dist-web/assets/yaml-DjysHl8R.js # apps/pythinker-code/dist-web/index.html # apps/pythinker-web/src/lib/icons.ts
2 parents 96d20c2 + a318976 commit b03396d

152 files changed

Lines changed: 1389 additions & 515 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/skills/write-tui/DESIGN.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,13 @@
8383
Select a model (type to search)
8484
Tab toggle provider · ↑↓ navigate · Enter select · Esc cancel ← hint 首项即 Tab 切换
8585
← 空行
86-
All Pythinker Code openai ← tab 条:激活项填充背景(primary 底 + text 字 + bold),其余 textMuted
86+
All Pythinker Code openai ← tab bar: active uses selectionBg + inverseText + bold; others use textMuted
8787
← 空行
8888
❯ ...
8989
```
9090

9191
- tab 条位置:**在 hint 行下方**,且**上下各一空行**(与 hint、与列表都隔开)。
92-
- 激活 tab`chalk.bgHex(colors.primary).hex(colors.text).bold(\` ${label} \`)`;非激活:`chalk.hex(colors.textMuted)`。两者可见宽度一致,切换不抖动。
92+
- Active tab: `chalk.bgHex(colors.selectionBg).hex(colors.inverseText).bold(\` ${label} \`)`; inactive tab: `chalk.hex(colors.textMuted)`. Both have the same visible width.
9393
- 第一个 tab 恒为 `All`(聚合所有 provider);**默认停在 `All`**。仅当显式传 `initialTabId`(如 `/provider` 新增完跳转)才停在指定 provider tab。
9494
- `Tab` / `Shift+Tab` 循环切换;hint 行首项即 `Tab toggle provider`
9595
- 当前模型在所在 tab 内仍以 `` + ` ← current` 标记,切 tab 不丢失定位。

.changeset/calm-doctors-check.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@pymodel/pythinker-code": patch
3+
---
4+
5+
Make `pythinker doctor` validate `config.toml` with the current schema in every engine mode.

.changeset/refresh-cli-tui.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@pymodel/pythinker-code": patch
3+
---
4+
5+
Update the terminal interface colors, transcript hierarchy, welcome panel, and workflow progress states.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@pymodel/pythinker-code": patch
3+
---
4+
5+
Use a refreshed New Chat icon across desktop and mobile navigation.

.github/workflows/nix-build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ jobs:
4848
4949
- name: Post or update PR comment
5050
if: steps.check.outputs.SYNC_OK == 'false' && github.event_name == 'pull_request'
51-
uses: actions/github-script@v7
51+
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9
5252
env:
5353
COMMENT_BODY: ${{ steps.missing.outputs.body }}
5454
with:
@@ -151,7 +151,7 @@ jobs:
151151
152152
- name: Post or update PR comment
153153
if: steps.build.outputs.BUILD_FAILED == 'true' && github.event_name == 'pull_request'
154-
uses: actions/github-script@v7
154+
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9
155155
env:
156156
COMMENT_BODY: ${{ steps.error.outputs.body }}
157157
with:

.github/workflows/release.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,10 +160,13 @@ jobs:
160160

161161
- name: Mint release-bot token
162162
id: release-bot
163-
uses: actions/create-github-app-token@fee1f7d63c2ff003460e3d139729b119787bc349 # pinned from v2
163+
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # pinned from v3.2.0
164164
with:
165165
app-id: ${{ vars.RELEASE_BOT_APP_ID }}
166166
private-key: ${{ secrets.RELEASE_BOT_PRIVATE_KEY }}
167+
permission-contents: write
168+
permission-pull-requests: write
169+
permission-issues: write
167170

168171
- name: Create Release Pull Request or Publish to npm
169172
id: changesets
@@ -507,7 +510,7 @@ jobs:
507510
# Cloning and pushing the tap needs contents and nothing else.
508511
- name: Mint tap token
509512
id: tap-token
510-
uses: actions/create-github-app-token@fee1f7d63c2ff003460e3d139729b119787bc349 # pinned from v2
513+
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # pinned from v3.2.0
511514
with:
512515
app-id: ${{ vars.RELEASE_BOT_APP_ID }}
513516
private-key: ${{ secrets.RELEASE_BOT_PRIVATE_KEY }}

.github/workflows/update-flake-lock.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
uses: DeterminateSystems/nix-installer-action@1d87d45818068401a10cf16bdc5f00b24994a83f # pinned from main
2828

2929
- name: Update flake.lock and open PR
30-
uses: DeterminateSystems/update-flake-lock@5ba4a20ae344a5edd7b97ed3002219974f4d20d7 # pinned from main
30+
uses: DeterminateSystems/update-flake-lock@f21d5f4a9e57815a4941a2e7c3860f4664cb3a96 # pinned from main
3131
with:
3232
pr-title: "chore(nix): monthly flake.lock update"
3333
pr-labels: dependencies

CONTEXT.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# Pythinker Code
2+
3+
Pythinker Code is a provider-agnostic AI coding agent for terminal, browser, desktop, and editor workflows.
4+
5+
## Language
6+
7+
**Expert Talk**:
8+
A structured conversation between two user-selected AI models that returns one fused answer.
9+
_Avoid_: Debate mode, fusion mode
10+
11+
**Expert Talk pair**:
12+
The two ordered configured model IDs saved for future Expert Talk runs.
13+
_Avoid_: Global pair, secondary model
14+
15+
**Configured model ID**:
16+
The stable catalog key that identifies one configured model record and can be stored in an Expert Talk pair.
17+
_Avoid_: Display name, provider model name, loose alias
18+
19+
**Effective model binding**:
20+
The immutable execution identity produced for one Expert Talk role after current catalog and routing validation.
21+
_Avoid_: Selected model, live alias
22+
23+
**Pair collapse**:
24+
An Expert Talk admission failure where two configured selections resolve to the same effective execution target.
25+
_Avoid_: Duplicate model choice
26+
27+
**Expert Talk admission**:
28+
The pre-acceptance validation that resolves and freezes an eligible, distinct pair for one run.
29+
_Avoid_: Provider ping, opening stage
30+
31+
**Fusion Lead**:
32+
The first model in an Expert Talk pair. It participates as an equal expert, then its immutable model binding supplies a fresh inference for fusion.
33+
_Avoid_: Architect, judge, Model 1
34+
35+
**Peer Expert**:
36+
The second model in an Expert Talk pair. It participates as an equal expert in opening and peer review but does not own fusion.
37+
_Avoid_: Secondary model, Model 2
38+
39+
**Expert Talk activation**:
40+
The transient intent to use Expert Talk for the next accepted user turn.
41+
_Avoid_: Expert Talk mode, persistent activation
42+
43+
**Expert Talk run**:
44+
One recorded Expert Talk execution owned by one accepted user turn.
45+
_Avoid_: Resumed run, shared run
46+
47+
**Expert Talk exchange**:
48+
Two independent openings followed by one symmetric peer review between the run-scoped Fusion Lead and Peer Expert.
49+
_Avoid_: Debate, adaptive conversation
50+
51+
**Fused answer**:
52+
The single direct response produced by a fresh Fusion Lead inference after the Expert Talk exchange.
53+
_Avoid_: Verdict, winning answer
54+
55+
**Fusion notes**:
56+
Structured consensus, divergence, uncertainty, and attribution stored with an Expert Talk run but excluded from the normal assistant answer.
57+
_Avoid_: Diagnostic appendix, debate transcript
58+
59+
**Expert Talk stage artifact**:
60+
An immutable complete or partial opening, review, or fusion output owned by one role and stage and kept outside the normal transcript.
61+
_Avoid_: Participant message, hidden memory
62+
63+
**Expert Talk result**:
64+
The versioned successful-run record that contains the fused answer and separate fusion notes.
65+
_Avoid_: Meeting transcript, winning opinion
66+
67+
**Expert Talk retry**:
68+
A new run for the same accepted turn input that reruns admission and every stage without resuming participants or reusing artifacts.
69+
_Avoid_: Resume, fusion-only retry
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
2-
"sourceHash": "83a39813541adf15776a3e903bdc9515b003ab4e21b3fffc721161494b343257",
2+
"sourceHash": "0a37c819db91d9c13c59e2b4cd1b26e5e6eda54d5dab911b7d233bc3e6a1868a",
33
"sourceFileCount": 417
44
}

0 commit comments

Comments
 (0)