pythinker-code 0.50.0__tar.gz → 0.52.0__tar.gz
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.
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/PKG-INFO +26 -22
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/README.md +25 -21
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/pyproject.toml +1 -1
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/CHANGELOG.md +94 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/agent.yaml +1 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/judge.yaml +2 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/system.md +4 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/app.py +11 -2
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/__init__.py +21 -3
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/llm.py +62 -1
- pythinker_code-0.52.0/src/pythinker_code/skills/judge-minimum-diff/SKILL.md +104 -0
- pythinker_code-0.52.0/src/pythinker_code/skills/judge-overengineering-review/SKILL.md +104 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/pythinkersoul.py +6 -1
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/toolset.py +47 -4
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/agent/__init__.py +511 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/__init__.py +31 -6
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/prompt.py +42 -18
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/slash.py +5 -4
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/update.py +15 -1
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/terminal_capabilities.py +13 -1
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/rich/diff_render.py +32 -2
- pythinker_code-0.52.0/src/pythinker_code/web/static/assets/architecture-7EHR7CIX-Dt5rHq4t.js +1 -0
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-BtlQ9wMo.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-BQq04AbG.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-pChzMWgu.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-B5uPJ_UU.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/bootstrap-BFeiSQNA.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/bootstrap-BTuyuHCn.js +5 -5
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-B0VtZ4LT.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-C0oljTpw.js +1 -1
- pythinker_code-0.52.0/src/pythinker_code/web/static/assets/channel-BHdUUNg9.js +1 -0
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-zlKMk14A.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-Bh03mn97.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-3OPIFGDE-DDoUJziC.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-3OPIFGDE-p49QbF5n.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-5ZQYHXKU-BVGDalrl.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-5ZQYHXKU-D24JztdW.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-B40eBuzy.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-DvsJAMSH.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-Bjy9cEcL.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-BGK0b4L5.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-CSCIHK7Q-wEnjLHCK.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-CSCIHK7Q-UyPTw_C_.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-JAPRZBRM-D7mf7095.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-JAPRZBRM-C3a-j1pU.js +4 -4
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-KSCS5N6A-B8C4Qo3S.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-KSCS5N6A-zOmK4SEq.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-L5ZTLDWV-B6zR5vOT.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-L5ZTLDWV-D7vmhaHy.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-LZXEDZCA-E3COZolu.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-LZXEDZCA-DIytSV-G.js +2 -2
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-BMUb9pNq.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-dMP6GnnN.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-NZK2D7GU-lue24LQy.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-NZK2D7GU-MzC07Ck8.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-O5CBEL6O-DZnhYM8W.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-O5CBEL6O-Bjr3USpF.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-WU5MYG2G-Cs_Jps3h.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-WU5MYG2G-zmGggQfv.js +1 -1
- pythinker_code-0.52.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-IqKZfE80.js +1 -0
- pythinker_code-0.52.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-IqKZfE80.js +1 -0
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DaJkz64F.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-CjfuKqHz.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-D_p-zlC5.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-DSxhJzhl.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-CRfkF_rs.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-D41jRPTV.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL-CBiaQLBW.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL-DtdiESjn.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-Dmvj9htg.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-Ay9KiJfd.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-Ch0BqHT8.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-BGD4oJCE.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-B2o6fWB6.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-CoPSsn3G.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/dist-CGayAiNU.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/dist-R93fLvno.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-DlA5Xc3P.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-Cw60gIq3.js +1 -1
- pythinker_code-0.52.0/src/pythinker_code/web/static/assets/eventmodeling-FCH6USID-D6UmO-TF.js +1 -0
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-kUWABNTK.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-DCw4plvQ.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-YX6-BoSq.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-BXc1awqv.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/gitGraph-WXDBUCRP-C5UlYMXv.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/gitGraph-WXDBUCRP-DoAkzbS0.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-DuBE87Qy.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-D5TMwllB.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/index-BMV1Ud3J.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/index-DFOXSy3h.js +2 -2
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/info-J43DQDTF-DVQzXsUk.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/info-J43DQDTF-EJcPqD24.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-DLBRYCxD.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-BE5xCvsg.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-BbEtfJML.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-DmrUIPq0.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-B-8ADsM8.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-D4-7Iilc.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-DfsCNzSd.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-DRyfqyv1.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/line-DkTdvYY0.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/line-DRRHWkdU.js +1 -1
- pythinker_code-0.52.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-GJVL9tJM.js +1 -0
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/mermaid-parser.core-MA0k1ZCT.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/mermaid-parser.core-DDaUpkka.js +2 -2
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/mermaid.core-acFcYxBT.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/mermaid.core-BBnTQc5N.js +3 -3
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-BGBf4V3D.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-BPqdxPri.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/packet-YPE3B663-D7dp38ZY.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/packet-YPE3B663-CjVjaXUE.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/pie-LRSECV5Y-BQu4CDOE.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/pie-LRSECV5Y-B4rXtv6i.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-B7rhR3x4.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-DFwqAhb0.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-Bt28YYzI.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-DikE1PFE.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/radar-GUYGQ44K-BNCJkAg0.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/radar-GUYGQ44K-DC8IqVvg.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-BLkwlWmt.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-BSZHI8JW.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-lPWBpzo-.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-BbpTVe9o.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-TYMLWnFf.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-DH7jddAt.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-DSPmGaVQ.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-m7P-6acX.js +1 -1
- pythinker_code-0.52.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-CoAJxqPU.js +1 -0
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-CvP_yVPz.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-DLivSUwm.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/treeView-BLDUP644-CJQwlV6p.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/treeView-BLDUP644-Bt80xUUZ.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/treemap-LRROVOQU-C3lHTEMi.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/treemap-LRROVOQU-Dhwhsr3A.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-Br1IKWOD.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-BDhEA7T2.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-CYgdmfE4.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-xhnHNDqM.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-Cb_9nYBc.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-DsiJx-ji.js +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-CIdBR3kz.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-DBDBt_GI.js +1 -1
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/index.html +1 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/architecture-7EHR7CIX-CiJci_kb.js +0 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/channel-2cmWmtiR.js +0 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-Bss_rOtf.js +0 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-Bss_rOtf.js +0 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/eventmodeling-FCH6USID-94_6GtjE.js +0 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-otzZqrpj.js +0 -1
- pythinker_code-0.50.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-C6UIoI0l.js +0 -1
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/LICENSE +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/NOTICE +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/__main__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/AGENTS.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/convert.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/host.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/mcp.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/server.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/session.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/tools.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/types.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/version.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/ask.yaml +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/debug.yaml +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/planner.yaml +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/review.yaml +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/scout.yaml +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agentspec.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/approval_runtime/models.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/alibaba.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/browser_login_page.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/deepseek.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/github_feedback.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/kimi.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/lm_studio.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/minimax.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/moonshot.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/oauth.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/ollama.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openai/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openai/_shared.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openai/browser_flow.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openai/catalog.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openai/config_apply.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openai/constants.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openai/login.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openai/models.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openai/oauth_client.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/opencode_go.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openrouter.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/platforms.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/z_ai.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/background/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/background/agent_runner.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/background/ids.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/background/manager.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/background/models.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/background/store.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/background/summary.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/background/worker.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/__main__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/dashboard.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/debug.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/export.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/info.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/mcp.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/plugin.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/review.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/secscan.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/security_scan.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/skill.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/system_prompt.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/toad.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/update.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/web.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/config.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/constant.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/api/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/api/sessions.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/api/statistics.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/api/system.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/app.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/highlighted-body-OFNGDK62-BxVUIXn9.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/index-DAN_VzOP.css +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/index-DYyxzHPY.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/mermaid-GHXKKRXX-BR6KjYwB.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/index.html +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/events.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/exception.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/execution_profiles.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/extensions.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/feedback.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/feedback_repo.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/file_restore.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/hooks/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/hooks/config.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/hooks/engine.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/hooks/events.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/hooks/runner.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/client.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/diagnostics.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/framing.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/instance.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/manager.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/plugin_servers.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/protocol.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/recommend.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/service.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/memory/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/memory/consolidation.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/memory/harvest.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/memory/recall.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/memory/recap.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/memory/retriever.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/memory/sanitize.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/metadata.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/models_dev.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/native.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/notifications/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/notifications/llm.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/notifications/manager.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/notifications/models.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/notifications/notifier.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/notifications/store.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/notifications/wire.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/artifacts.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/dependency.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/directories.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/install.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/installed.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/integration.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/loader.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/manager.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/manifest.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/marketplace.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/options.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/policy.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/tool.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/project_memory.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/project_trust.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/prompt_templates.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/prompts/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/prompts/best_practices.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/prompts/compact.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/prompts/goal_continuation.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/prompts/goal_set.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/prompts/goal_wrap_up.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/prompts/init.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/prompts/learn.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/py.typed +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/scratchpad.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/session.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/session_cleanup.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/session_fork.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/session_recap.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/session_state.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/share.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skill/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skill/flow/d2.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skill/lockfile.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/agent-creator/SKILL.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/cleanup-audit/SKILL.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/customize-pythinker/SKILL.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/designer-skill/SKILL.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/agent.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/api_errors.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/approval.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/btw.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/compaction.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/context.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/deliberation.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/denwarenji.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/agent_list.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/git_status.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/goal_mode.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/inline_commands.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/lsp_diagnostics.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/model_defense.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/orchestration.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/permissions_state.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/flow_runner.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/live_tokens.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/message.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/permission.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/slash.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/builder.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/codenames.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/core.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/discovery.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/git_context.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/models.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/output.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/registry.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/runner.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/store.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/usage.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/worktree.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/telemetry/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/telemetry/config.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/telemetry/crash.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/telemetry/errors.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/telemetry/metrics.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/telemetry/names.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/telemetry/otel.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/telemetry/sentry.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/telemetry/sink.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/thinking.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/AGENTS.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/agent/description.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/background/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/background/handoff.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/background/input.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/background/list.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/background/output.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/background/stop.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/display.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/glob.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/glob.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/grep.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/read.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/read.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/read_media.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/read_media.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/replace.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/replace.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/utils.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/write.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/write.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/goal/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/goal/update_goal.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/lsp/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/lsp/formatters.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/lsp/schemas.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/lsp/symbol_context.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/lsp/tool.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/lsp/tool.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/mcp_resource/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/mcp_resource/list_description.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/mcp_resource/prompt_description.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/mcp_resource/read_description.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/memory/memory.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/memory/routing_guard.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/plan/description.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/plan/enter.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/progress/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/progress/description.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/recall/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/recall/description.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/shell/bash.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/skill/_mcp_bridge.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/skill/description.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/suggest/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/suggest/description.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/test.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/think/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/think/think.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/tool_search/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/tool_search/tool_search.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/utils.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/web/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/web/fetch.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/web/fetch.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/web/search.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/web/search.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/worktree/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/worktree/enter_worktree.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/worktree/exit_worktree.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/color_utils.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/print/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/print/visualize.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/markdown.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/report.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/report_prose_blocks.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/report_update.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/console.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/debug.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/echo.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/glyphs.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/markdown/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/markdown/audit.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/markdown/elements.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/markdown/fences.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/markdown/normalizers.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/markdown/renderer.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/markdown/streaming.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/motion.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/replay.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/selector.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/selectors/code_theme.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/setup.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/startup.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/stats.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/stats_collector.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/stats_pricing.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/statusline.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/sync_output.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tips.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/lsp.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/mcp_resource.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/memory.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/read_media.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/skill.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/smart_search.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/tool_search.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/worktree.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/update_orchestrator.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_activity.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/alibaba.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_diff_live.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/terminal_background.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/adapters/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/adapters/markdown.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/adapters/task_browser.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/capabilities.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/palettes.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/pythinker_themes.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/registry.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/resolver.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/spec.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/tui_config.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/update_policy.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/aiohttp.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/aioqueue.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/artifacts.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/broadcast.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/changelog.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/clipboard.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/datetime.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/diff.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/editor.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/environment.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/envvar.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/export.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/file_filter.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/file_read_cache.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/frontmatter.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/gitignore.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/io.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/logging.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/mcp_names.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/media_limits.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/media_tags.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/message.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/path.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/proctitle.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/proxy.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/rich/columns.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/sensitive.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/server.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/signals.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/slashcmd.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/string.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/term.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/trust.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/typing.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/api/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/api/config.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/api/open_in.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/api/sessions.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/app.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/auth.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/models.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/runner/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/runner/messages.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/runner/process.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/runner/worker.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/_headers +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/abap-CLvhMVsD.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/actionscript-3--17pq3dv.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ada-C5qYipkI.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/andromeeda-vGVdxbeo.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/angular-html-BKhkKBsm.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/angular-ts-CYPbMJCA.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/apache-U0d_L8uA.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/apex-CGTLDQj6.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/apl-D7bENxmy.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/applescript-CCn79oCD.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ara-4CJ0cIlV.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/arc-8BWbC-0s.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/array-BifhSqXX.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/asciidoc-DE70LPWp.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/asm-Cmm7eHzH.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/astro-B1l9MDUT.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/aurora-x-CDeNXAV0.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/awk-BWXHIvNe.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ayu-dark-DluEY0Gj.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ayu-light-C3h-C4tm.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ayu-mirage-Bqwy1Gya.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ballerina-B7ZEbQpA.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/bat-Bo4NYOV-.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/beancount-D-usSTwE.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/berry-DKpUyyne.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/bibtex-Ci_nEsc7.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/bicep-CUHmPFLl.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/bird2-C2hNVINV.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/blade-BlkqRXu6.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/bootstrap-BhLLvBaE.css +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/bsl-BkkzgIyY.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/c-PpPxyn8g.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/c3-CnJL0r0V.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/cadence-CQ2zXKGN.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/cairo-DLTphjLi.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-3VR1Za6u.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/catppuccin-latte-DwIHMF0Q.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DYnBP6_5.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-DYhrFGRu.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/character-entities-legacy-Wut6vMuj.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/chevrons-up-down-Dwo0Il5v.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-C0kf5ycP.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/chunk-55IACEB6-QyFAFTWp.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/chunk-BSJP7CBP-DIpfLhEz.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/chunk-Cyuzqnbw.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-C9D6P7Uq.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/chunk-NNHCCRGN-DmZbXBJw.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CyVdgm44.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/chunk-XPW4576I-ru3A962d.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/clarity-SemFz856.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/clojure-DqKBuwfJ.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/cmake-Bj61d0ZC.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/cobol-BoXxFQjh.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/codeowners-C8r90Shi.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/codeql-oeQT6MSM.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/coffee-B5TREocO.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/common-lisp-Cv5bFMCO.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/coq-BrsZFFmf.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-PjRvINHM.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/cpp-CVIk4zoB.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/crystal-CvUuUt6_.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/csharp-Ct8U2NOr.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/css-D7o5g6xi.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/csv-Dx-8-gkx.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/cue-CE9AQfxI.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/cypher-ClKdZ_lG.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/cytoscape.esm-jXPf2pm4.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/d-qD-0Kul2.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dagre-Uyq5yTtG.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dark-plus-Cs2F2srj.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dart-DkHntEIa.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dax-BkyTk9wS.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/defaultLocale-C8Fc0cco.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/desktop-Dlh5hvp9.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/diff-BDNflWRl.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/diff-Dvab7kiv.css +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/diff-woXpYk--.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dist-B7jLwIkG.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dist-D4B_Bs5p.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dist-reBDvVlc.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/docker-IyjqRm3v.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dotenv-_5a1GRtc.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dracula-BHWKrbxM.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dracula-soft-5eyTD99u.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dream-maker-DW3nJb8Q.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/edge-CmXZi-az.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/elixir-BoRIkjDi.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/elm-Cm7sFdI1.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9PiwqqW.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/erb-DuMAGb6i.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/erlang-Cphh6RMH.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/everforest-dark-sB-x3p7T.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/everforest-light-Df2xbC6M.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/fennel-DQxkIbk2.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/fish-BJitypiv.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/fluent-C03EYrpw.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-DEKoE2YW.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/fortran-free-form-CYNrtFtB.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/fsharp-D13ZGOAj.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gdresource-C0sCabJj.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gdscript-Cp2uCuqX.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gdshader-CBce3t8t.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/genie-CV2tkWYe.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gherkin-DExj1W_8.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/git-commit-BSykSTBG.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/git-rebase-D2tSwjJb.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/github-dark-C-LZuMrd.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/github-dark-default-DXG-b-1a.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-Bx1FflLF.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-B_tTalzw.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/github-light-EUqPIrTm.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/github-light-default-BXViO-2h.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-B68TUdTA.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gleam-CSRkHgEL.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/glimmer-js--VVKNatA.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/glimmer-ts-Bfa_wiNC.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/glsl-MPwHyiXQ.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gn-ilITqXS6.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gnuplot-7GGW24-e.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/go-BJwz_mda.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/graphlib-C22s9MDV.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/graphql-NW854Khs.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/groovy-CacY0gHj.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-C820rvS2.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-BPjhmG05.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-MrdJrrXF.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-BC_s9l72.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-BAWPOn9u.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-BSMLrYjP.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/hack-CSl79E5u.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/haml-Dmb1YmHj.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/handlebars-Du8DtnRB.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/haskell-D8IpX4py.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/haxe-OTjmBuCE.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/hcl-Dh228itO.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/hjson-CxZEssPk.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/hlsl-Cvrh5tZx.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/horizon-CE9ld1lL.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/horizon-bright-Br1oVSNq.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/houston-CsvMBhTu.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/html-Kpl3bQKd.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/html-derivative-BEEWNZ8Y.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/http-HvMG3K54.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/hurl-CLh1t2ES.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/hxml-B0Qn7Nwc.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/hy-CZbG8q4J.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/imba-DsUTQ-LC.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ini-B5eOa1yu.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/init-D6jRqBbL.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/java-Cst_eZTE.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/javascript-i_rUTyCW.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/jinja-CaXggA6f.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/jison-D9Fg2JgN.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/json-DS5j4FfK.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/json5-BR5RXkoi.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/jsonc-CYpm1nAK.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/jsonl-CmCQp5Yx.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/jsonnet-CJTPZ8u_.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/jssm-DXw9l8Rf.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/jsx-CFyhNHav.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/jsx-runtime-wSvXh6gi.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/julia-R8NNmfP1.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/just-BhhHYlS8.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CXtmUGW6.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-BN08jTvb.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/kanagawa-wave-CTweb8Dz.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/katex-BGaDVET_.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/katex-BorAY7qD.css +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/kdl-CsD5j6eV.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/kotlin-DhhofPvG.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/kusto-BUv0MjJC.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/laserwave-C_8bwKvT.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/latex-D5k_uhWv.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/lean-CewbzKMR.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/less-DVTAwKKz.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/lib-BLxG8W6T.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/libesm-8-2luV-1.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/light-plus-DVQuIRkW.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/linear-BktLjFGX.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/liquid-Q0_hzjly.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/llvm-Cm23YOpf.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/log-BNLmms1o.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/logo-Cluzi2Zq.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/lua-VoGSg0xb.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/luau-CNKltnaQ.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/make-Dixweg8N.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/markdown-BYOwaDjH.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/marked.esm-DLdcrU5H.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/marko-D_aeUD__.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/material-theme-Bm3Qr25_.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/material-theme-darker-2IIEA8gg.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/material-theme-lighter-uhdI0v04.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CHQ94UKr.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/material-theme-palenight-B5W6OYN7.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/matlab-D7qyCx1q.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/mdc-BSifqehP.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/mdx-DQZ5AkYe.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/mermaid-Bk4SNUv9.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/min-dark-BSWPekZh.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/min-light-DDpmG2fV.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/mipsasm-BMqwQI7S.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/mojo-BgCJLMeH.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/monokai-CdkpiU2Y.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/moonbit-CaWjb8XO.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/move-B1IS1UjX.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/narrat-_X_XdTYD.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/nextflow-Bbiyy34d.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/nextflow-groovy-Dc_ddanL.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/nginx-CgHaWcsO.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/night-owl-DhmEMT88.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/night-owl-light-eJ-hLW7d.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/nim-BuixXxPS.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/nix-IvuFDN5E.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/nord-Cb4Vim4T.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/nushell-DcLAeLz5.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/objective-c-D1A_Heim.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/objective-cpp-BsSzOQcm.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ocaml-O90oeIOV.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/odin-B1RWQWA5.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/one-dark-pro-CLwyXe_n.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/one-light-D7Lr4KcI.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/openscad-BUDT5pXO.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ordinal-hYBb2elL.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/pascal-4ZHwLPI5.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/path-BWPyau1x.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/perl-BLMySlFJ.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/php-Czf_fybR.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/pkl-ot-7Btpt.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/plastic-DQwYfKfQ.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/plsql-DGHpHOYJ.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/po-BiJDBrnU.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/poimandres-DRFjx7u4.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/polar-C7UOKdEL.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/postcss-BXeXVLqQ.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/powerquery-DNMTfnFr.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/powershell-DshXNtvi.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/prisma-BsRQq5mF.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/prolog-iXnhIJG7.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/proto-DB4EqR-F.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/pug-CsZglf8T.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/puppet-CDv2pdJW.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/purescript-9MfHhQsQ.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/python-gzcpVVnB.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/qml-DcW_sT3t.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/qmldir-DCQb3MpD.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/qss-Fe1Jh2GI.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/r-D2d3McyU.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/racket-DcIDlBhZ.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/raku-B3gFvitq.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/razor-oFpUW61Z.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/red-CJ3rzSJv.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/reg-CRGYupPL.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/regexp-Bu0flJgP.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/rel-BtDbiS_P.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/riscv-Ckw8ddFX.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ron-VUp2lXgN.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/rose-pine-BthvhNj6.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-Dg85fqjY.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/rose-pine-moon-hon4tzzS.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/rosmsg-CAekHB0j.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/rough.esm-CSKSodPl.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/rst-U6Eu7ipE.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ruby-CUQsVT6d.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/rust-Cfkwpbl8.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/sas-CNBFrLhc.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/sass-DXrisJhu.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/scala-DKOlJaKm.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/scheme-DQCgrYNe.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/scss-CPnU-uuv.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/sdbl-bTVj8UrX.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/shaderlab-TOUzSsQk.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/shellscript-BbTp1yjG.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/shellsession-BmAC8SMF.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/slack-dark-DnToyrRv.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/slack-ochin-B2OO5cIa.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/smalltalk-B16xEiuN.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/snazzy-light-4G7pJPwS.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/solarized-dark-DV17i1UV.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/solarized-light-DSh2HLQt.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/solidity-CKzVLygQ.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/soy-CdbyEXp6.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/space-separated-tokens-DpjE5PGy.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/sparql-D_iOobhT.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/splunk-BC2Px7Mm.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/sql-hpBkusIy.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/src-D-NMWEou.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ssh-config-BgfXC-Er.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/stata-DVbvk3qH.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/stylus-B6D30XZt.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/surrealql-DxccxuMd.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/svelte-DzNm5V2w.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/swift-DonLKvLd.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/synthwave-84-nFMaYfgc.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/system-verilog-DJ5XKQeo.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/systemd-BxMlprV5.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/talonscript-CohzipZa.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/tasl-DMoTqEGO.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/tcl-CZd0xW_V.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/templ-CsM0tTsw.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/terraform-DswuEJGm.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/tex-B0f_hYr8.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/tokyo-night-oM2G3aXe.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/toml-CcmNWLt0.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ts-tags-Bf-FGGvT.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/tsv-sltzmVWM.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/tsx-DFvk7AwW.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/turtle-ByJddavk.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/twig-VJ4-Ntm0.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/typescript-DHTLvXzV.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/typespec-B88KGewJ.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/typst-DI99ib-x.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/v-DETTlOr0.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/v4-DqR3yzBO.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vala-zf12oZj6.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vb-Djn5o6TS.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/verilog-CiiDBU1e.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vesper-D5bVUKB1.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vhdl-BroJfC0k.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/viml-DvXPmvsu.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vitesse-black-fwtXNY1n.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vitesse-dark-BZCL-v6S.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vitesse-light-VbXTXTou.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vue-D3dSYZKz.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vue-html-DQch_7VQ.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vue-vine-B67Dz05t.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vyper-CgoNMtux.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/wasm-BnjxR4X6.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/wasm-ByWQv1Qj.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/wenyan-C8pVoKbM.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/wgsl-BsKzXJz4.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/wikitext-ClFFjSW2.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/wit-DdvCle-K.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/wolfram-DLL8P-h_.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/xml-C33zriiW.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/xsl-BFS2wyMt.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/yaml-w0rMsuN4.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/zenscript-BnlCZFoB.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/zig-CMLA9XwU.js +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/install.ps1 +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/install.sh +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/logo.png +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/store/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/web/store/sessions.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/wire/__init__.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/wire/file.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/wire/protocol.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/wire/root_hub.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/wire/serde.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/wire/server.py +0 -0
- {pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/wire/types.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pythinker-code
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.52.0
|
|
4
4
|
Summary: Pythinker — an agentic CLI developed by Pythoughts-labs.
|
|
5
5
|
Keywords: cli,agent,ai,coding-assistant,llm,claude,openai,terminal
|
|
6
6
|
Author: Pythoughts-labs
|
|
@@ -115,12 +115,16 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
115
115
|
|
|
116
116
|
---
|
|
117
117
|
|
|
118
|
-
## 🆕 What's New in 0.
|
|
118
|
+
## 🆕 What's New in 0.52.0
|
|
119
119
|
|
|
120
|
-
- **
|
|
121
|
-
- **Cleaner
|
|
120
|
+
- **Model-aware thinking levels.** The thinking selector and Shift+Tab cycle now scope reasoning effort to what the active GPT-5-family model accepts; unsupported persisted levels are clamped before the API call.
|
|
121
|
+
- **Cleaner diff cards.** Diff syntax highlighting no longer paints an opaque code-theme background over green/red row tints — tints show through on every terminal.
|
|
122
|
+
- **Truecolor in VS Code terminals.** Integrated terminals reporting `TERM_PROGRAM=vscode` (and forks) are promoted to truecolor so diff tints don't fall back to 16-color mode.
|
|
123
|
+
- **No duplicate welcome banner on reload.** Same-session reloads (`/model`, `/theme`, `/thinking`, …) keep the existing banner instead of stacking a second splash.
|
|
124
|
+
- **Update notice moved to footer.** The persistent "Restart to apply" / "Update available" line renders below the status/clock row, clear of the input box.
|
|
125
|
+
- **Safer Homebrew self-upgrades.** Silent `brew upgrade` runs with cleanup/auto-update disabled so the in-use Cellar version isn't deleted mid-session.
|
|
122
126
|
|
|
123
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
127
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.52.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
124
128
|
|
|
125
129
|
|
|
126
130
|
---
|
|
@@ -210,7 +214,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
|
|
|
210
214
|
|
|
211
215
|
| Platform | Recommended install | Artifact source |
|
|
212
216
|
|---|---|---|
|
|
213
|
-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.
|
|
217
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.52.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
214
218
|
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
215
219
|
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
|
|
216
220
|
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
|
|
@@ -238,7 +242,7 @@ pythinker # start the interactive TUI
|
|
|
238
242
|
|
|
239
243
|
### 🪟 Windows — native installer
|
|
240
244
|
|
|
241
|
-
`PythinkerSetup-0.
|
|
245
|
+
`PythinkerSetup-0.52.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
242
246
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
243
247
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
244
248
|
the change. **No UAC prompt.**
|
|
@@ -249,13 +253,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
249
253
|
|
|
250
254
|
# Or manually download the installer + checksum from the Releases page,
|
|
251
255
|
# verify with Get-FileHash, then run:
|
|
252
|
-
.\PythinkerSetup-0.
|
|
256
|
+
.\PythinkerSetup-0.52.0.exe
|
|
253
257
|
|
|
254
258
|
# Open a fresh PowerShell
|
|
255
259
|
pythinker --version
|
|
256
260
|
```
|
|
257
261
|
|
|
258
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
262
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.52.0.exe /ALLUSERS`
|
|
259
263
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
260
264
|
|
|
261
265
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -313,26 +317,26 @@ attached to every GitHub Release.
|
|
|
313
317
|
|
|
314
318
|
```sh
|
|
315
319
|
# Debian / Ubuntu (x86_64)
|
|
316
|
-
sudo dpkg -i pythinker-code_0.
|
|
320
|
+
sudo dpkg -i pythinker-code_0.52.0_amd64.deb
|
|
317
321
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
318
322
|
|
|
319
323
|
# Debian / Ubuntu (ARM64)
|
|
320
|
-
sudo dpkg -i pythinker-code_0.
|
|
324
|
+
sudo dpkg -i pythinker-code_0.52.0_arm64.deb
|
|
321
325
|
|
|
322
326
|
# Fedora / RHEL / openSUSE (x86_64)
|
|
323
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
324
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
325
|
-
sha256sum -c pythinker-code-0.
|
|
327
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.52.0/pythinker-code-0.52.0.x86_64.rpm
|
|
328
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.52.0/pythinker-code-0.52.0.x86_64.rpm.sha256
|
|
329
|
+
sha256sum -c pythinker-code-0.52.0.x86_64.rpm.sha256
|
|
326
330
|
# Fedora / RHEL:
|
|
327
|
-
sudo dnf install ./pythinker-code-0.
|
|
331
|
+
sudo dnf install ./pythinker-code-0.52.0.x86_64.rpm
|
|
328
332
|
# openSUSE:
|
|
329
|
-
sudo zypper install ./pythinker-code-0.
|
|
333
|
+
sudo zypper install ./pythinker-code-0.52.0.x86_64.rpm
|
|
330
334
|
|
|
331
335
|
# Fedora / RHEL (aarch64)
|
|
332
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
333
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
334
|
-
sha256sum -c pythinker-code-0.
|
|
335
|
-
sudo dnf install ./pythinker-code-0.
|
|
336
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.52.0/pythinker-code-0.52.0.aarch64.rpm
|
|
337
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.52.0/pythinker-code-0.52.0.aarch64.rpm.sha256
|
|
338
|
+
sha256sum -c pythinker-code-0.52.0.aarch64.rpm.sha256
|
|
339
|
+
sudo dnf install ./pythinker-code-0.52.0.aarch64.rpm
|
|
336
340
|
```
|
|
337
341
|
|
|
338
342
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -341,8 +345,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
341
345
|
**Verify before install:**
|
|
342
346
|
|
|
343
347
|
```sh
|
|
344
|
-
sha256sum -c pythinker-code_0.
|
|
345
|
-
sha256sum -c pythinker-code-0.
|
|
348
|
+
sha256sum -c pythinker-code_0.52.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
349
|
+
sha256sum -c pythinker-code-0.52.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
346
350
|
```
|
|
347
351
|
|
|
348
352
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -50,12 +50,16 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
53
|
-
## 🆕 What's New in 0.
|
|
53
|
+
## 🆕 What's New in 0.52.0
|
|
54
54
|
|
|
55
|
-
- **
|
|
56
|
-
- **Cleaner
|
|
55
|
+
- **Model-aware thinking levels.** The thinking selector and Shift+Tab cycle now scope reasoning effort to what the active GPT-5-family model accepts; unsupported persisted levels are clamped before the API call.
|
|
56
|
+
- **Cleaner diff cards.** Diff syntax highlighting no longer paints an opaque code-theme background over green/red row tints — tints show through on every terminal.
|
|
57
|
+
- **Truecolor in VS Code terminals.** Integrated terminals reporting `TERM_PROGRAM=vscode` (and forks) are promoted to truecolor so diff tints don't fall back to 16-color mode.
|
|
58
|
+
- **No duplicate welcome banner on reload.** Same-session reloads (`/model`, `/theme`, `/thinking`, …) keep the existing banner instead of stacking a second splash.
|
|
59
|
+
- **Update notice moved to footer.** The persistent "Restart to apply" / "Update available" line renders below the status/clock row, clear of the input box.
|
|
60
|
+
- **Safer Homebrew self-upgrades.** Silent `brew upgrade` runs with cleanup/auto-update disabled so the in-use Cellar version isn't deleted mid-session.
|
|
57
61
|
|
|
58
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
62
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.52.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
59
63
|
|
|
60
64
|
|
|
61
65
|
---
|
|
@@ -145,7 +149,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
|
|
|
145
149
|
|
|
146
150
|
| Platform | Recommended install | Artifact source |
|
|
147
151
|
|---|---|---|
|
|
148
|
-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.
|
|
152
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.52.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
149
153
|
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
150
154
|
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
|
|
151
155
|
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
|
|
@@ -173,7 +177,7 @@ pythinker # start the interactive TUI
|
|
|
173
177
|
|
|
174
178
|
### 🪟 Windows — native installer
|
|
175
179
|
|
|
176
|
-
`PythinkerSetup-0.
|
|
180
|
+
`PythinkerSetup-0.52.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
177
181
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
178
182
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
179
183
|
the change. **No UAC prompt.**
|
|
@@ -184,13 +188,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
184
188
|
|
|
185
189
|
# Or manually download the installer + checksum from the Releases page,
|
|
186
190
|
# verify with Get-FileHash, then run:
|
|
187
|
-
.\PythinkerSetup-0.
|
|
191
|
+
.\PythinkerSetup-0.52.0.exe
|
|
188
192
|
|
|
189
193
|
# Open a fresh PowerShell
|
|
190
194
|
pythinker --version
|
|
191
195
|
```
|
|
192
196
|
|
|
193
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
197
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.52.0.exe /ALLUSERS`
|
|
194
198
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
195
199
|
|
|
196
200
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -248,26 +252,26 @@ attached to every GitHub Release.
|
|
|
248
252
|
|
|
249
253
|
```sh
|
|
250
254
|
# Debian / Ubuntu (x86_64)
|
|
251
|
-
sudo dpkg -i pythinker-code_0.
|
|
255
|
+
sudo dpkg -i pythinker-code_0.52.0_amd64.deb
|
|
252
256
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
253
257
|
|
|
254
258
|
# Debian / Ubuntu (ARM64)
|
|
255
|
-
sudo dpkg -i pythinker-code_0.
|
|
259
|
+
sudo dpkg -i pythinker-code_0.52.0_arm64.deb
|
|
256
260
|
|
|
257
261
|
# Fedora / RHEL / openSUSE (x86_64)
|
|
258
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
259
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
260
|
-
sha256sum -c pythinker-code-0.
|
|
262
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.52.0/pythinker-code-0.52.0.x86_64.rpm
|
|
263
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.52.0/pythinker-code-0.52.0.x86_64.rpm.sha256
|
|
264
|
+
sha256sum -c pythinker-code-0.52.0.x86_64.rpm.sha256
|
|
261
265
|
# Fedora / RHEL:
|
|
262
|
-
sudo dnf install ./pythinker-code-0.
|
|
266
|
+
sudo dnf install ./pythinker-code-0.52.0.x86_64.rpm
|
|
263
267
|
# openSUSE:
|
|
264
|
-
sudo zypper install ./pythinker-code-0.
|
|
268
|
+
sudo zypper install ./pythinker-code-0.52.0.x86_64.rpm
|
|
265
269
|
|
|
266
270
|
# Fedora / RHEL (aarch64)
|
|
267
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
268
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
269
|
-
sha256sum -c pythinker-code-0.
|
|
270
|
-
sudo dnf install ./pythinker-code-0.
|
|
271
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.52.0/pythinker-code-0.52.0.aarch64.rpm
|
|
272
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.52.0/pythinker-code-0.52.0.aarch64.rpm.sha256
|
|
273
|
+
sha256sum -c pythinker-code-0.52.0.aarch64.rpm.sha256
|
|
274
|
+
sudo dnf install ./pythinker-code-0.52.0.aarch64.rpm
|
|
271
275
|
```
|
|
272
276
|
|
|
273
277
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -276,8 +280,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
276
280
|
**Verify before install:**
|
|
277
281
|
|
|
278
282
|
```sh
|
|
279
|
-
sha256sum -c pythinker-code_0.
|
|
280
|
-
sha256sum -c pythinker-code-0.
|
|
283
|
+
sha256sum -c pythinker-code_0.52.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
284
|
+
sha256sum -c pythinker-code-0.52.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
281
285
|
```
|
|
282
286
|
|
|
283
287
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -15,6 +15,100 @@ GitHub Releases page; `0.8.0` is the new starting line.
|
|
|
15
15
|
|
|
16
16
|
## Unreleased
|
|
17
17
|
|
|
18
|
+
## 0.52.0 (2026-06-23)
|
|
19
|
+
|
|
20
|
+
- **`InvalidToolError` now names the failing tool and the reason.** A bad
|
|
21
|
+
tool path in `agent.yaml` (typo, missing class, or — most commonly — a
|
|
22
|
+
`pythinker` binary built before the tool was added) used to surface as a
|
|
23
|
+
bare `Invalid tools: ['pythinker_code.tools.agent:ImplementAndJudge']`
|
|
24
|
+
with the actual reason buried in the log file. The aggregated error now
|
|
25
|
+
lists each bad tool with the per-tool reason, and a class-name miss logs
|
|
26
|
+
a `Did you mean '<Closest>'?` hint. A constructor exception on one tool
|
|
27
|
+
is caught per-tool so the user gets one clear error instead of a
|
|
28
|
+
traceback. Rebuild the binary (`make build-bin`) if the new error names
|
|
29
|
+
a tool that exists in the working tree.
|
|
30
|
+
- **Auto-chain `implementer` → `judge` for non-trivial scoped edits.** The new
|
|
31
|
+
`ImplementAndJudge` tool runs `implementer` once, hands the artifact to
|
|
32
|
+
`judge`, and on `NEEDS_WORK` re-invokes `implementer` once with the
|
|
33
|
+
judge's `REQUIRED FIXES` under a `## Revision brief` section before
|
|
34
|
+
re-judging. Two implementer invocations is the hard cap — a
|
|
35
|
+
still-`NEEDS_WORK` after revision surfaces the contradiction and stops.
|
|
36
|
+
Parent agents should call `ImplementAndJudge` instead of `Agent:
|
|
37
|
+
implementer` + `Agent: judge`; bare `judge` calls remain the right shape
|
|
38
|
+
for non-implementation reviews (reports, audits, severity-scored
|
|
39
|
+
findings).
|
|
40
|
+
- **Judge adopts the minimum-diff rubric dimension.** Every non-trivial diff
|
|
41
|
+
the judge reviews is now checked against the reduction ladder
|
|
42
|
+
(skip-need → reuse-stdlib → use-native → use-installed-dep → one-line →
|
|
43
|
+
minimum) and the minimum-diff rubric (no abstractions, no new deps
|
|
44
|
+
without justification, no new config keys without a consumer, no
|
|
45
|
+
reformatting churn outside the changed lines). The judge applies the full
|
|
46
|
+
ladder uniformly — there is no mode switch on the judge.
|
|
47
|
+
- **Bundled judge-branded skills.** `judge-minimum-diff` (the rubric
|
|
48
|
+
applied as a judge dimension) and `judge-overengineering-review` (the
|
|
49
|
+
parent-facing review checklist) ship as static default skills, replacing
|
|
50
|
+
ad-hoc prose in the system prompt with explicit, versionable content.
|
|
51
|
+
- **Fix OpenAI Responses requests that could still send `role="system"` after
|
|
52
|
+
switching to a newer Pythinker catalog model (gpt-5.5, gpt-5.3-codex,
|
|
53
|
+
gpt-5.3-codex-spark, or any user-defined fine-tune).** Pythinker observed
|
|
54
|
+
OpenAI returning `System messages are not allowed` on this path, but the
|
|
55
|
+
`system→developer` conversion was previously gated on the openai SDK's
|
|
56
|
+
`ResponsesModel` literal, which lags Pythinker's own model catalog. The
|
|
57
|
+
conversion now runs unconditionally in `OpenAIResponses`, so all local
|
|
58
|
+
system messages are normalized before sending. Also fixes the model-switch
|
|
59
|
+
carry-over path (`_carry_context_to_session`) whose seeded `role="system"`
|
|
60
|
+
summary message was sent verbatim on the first request after a switch.
|
|
61
|
+
- **Background bash tasks (npm dev, docker run) no longer show the agent
|
|
62
|
+
verb spinner.** Pure-bash background work now shows a fixed "Running in
|
|
63
|
+
background…" label instead of "Composing…/Brewing…" verbs, which read as
|
|
64
|
+
agent activity. Mixed bash+agent background work keeps the verb spinner
|
|
65
|
+
while the agent is actively producing tokens.
|
|
66
|
+
- **Quiet background tasks no longer force a 0.1s prompt repaint.** When a
|
|
67
|
+
background task has produced no output for 2 seconds, the refresh loop
|
|
68
|
+
drops to the idle 1.0s interval instead of spinning the braille marker at
|
|
69
|
+
12.5 fps — fixing the "stuck spinner" look for long-running dev servers
|
|
70
|
+
on Windows VS Code.
|
|
71
|
+
- **Welcome banner no longer shows a stale "Update available" chip after a
|
|
72
|
+
successful /update.** The banner chip now mirrors the under-input notice:
|
|
73
|
+
when the update has landed this session (state=UPDATED, smoke check passed),
|
|
74
|
+
it shows "Updated X → vY. Restart to apply." instead of telling the user
|
|
75
|
+
to re-run an update that already completed.
|
|
76
|
+
|
|
77
|
+
## 0.51.0 (2026-06-22)
|
|
78
|
+
|
|
79
|
+
- **Reasoning levels now match each GPT model.** The thinking selector and
|
|
80
|
+
Shift+Tab cycle scope reasoning effort to what the active OpenAI GPT-5-family
|
|
81
|
+
model actually accepts — e.g. gpt-5.4/gpt-5.5 no longer offer `minimal`
|
|
82
|
+
(which they reject) and keep `xhigh`, while gpt-5.0 keeps `minimal`. A
|
|
83
|
+
persisted unsupported level is clamped to the nearest supported one before
|
|
84
|
+
it is sent, so the API never rejects it.
|
|
85
|
+
- **Diff cards no longer show a "blue overlay".** The syntax highlighter no
|
|
86
|
+
longer paints the code theme's opaque background (e.g. catppuccin `#1E1E2E`)
|
|
87
|
+
onto diff lines, so the green/red row tints — and the terminal background on
|
|
88
|
+
context lines — show through on every terminal. Previously that code-theme
|
|
89
|
+
block masked the row tints and only blended where the terminal background
|
|
90
|
+
happened to match it.
|
|
91
|
+
- **VS Code-family terminals are detected as truecolor.** `color_depth()` now
|
|
92
|
+
promotes integrated terminals reporting `TERM_PROGRAM=vscode` (including forks
|
|
93
|
+
built on it) to truecolor — like the existing Windows Terminal promotion — so
|
|
94
|
+
diff tints don't fall back to the colorless 16-color path when the terminal
|
|
95
|
+
doesn't advertise `COLORTERM`.
|
|
96
|
+
- **Model/theme switches no longer reprint the welcome banner.** A same-session
|
|
97
|
+
reload (`/model`, `/theme`, `/thinking`, `/new`, fork, …) now keeps the
|
|
98
|
+
existing banner and shows only its own "Switched to… / Reloading…"
|
|
99
|
+
confirmation, instead of stacking a redundant second welcome splash below it.
|
|
100
|
+
`/clear` and `/reload` still wipe the screen and reprint the banner.
|
|
101
|
+
- **Update notice no longer crowds the prompt.** The persistent "Restart to apply"
|
|
102
|
+
/ "Update available" line now renders as the last footer row — below the
|
|
103
|
+
status/clock line — instead of directly under the input box, keeping the input
|
|
104
|
+
area clear.
|
|
105
|
+
- **Homebrew self-upgrades no longer risk the live session.** The updater now runs
|
|
106
|
+
`brew upgrade` with `HOMEBREW_NO_INSTALL_CLEANUP` and `HOMEBREW_NO_AUTO_UPDATE`,
|
|
107
|
+
so brew can't delete the in-use Cellar version mid-session; the new build is
|
|
108
|
+
staged side-by-side and goes live on restart.
|
|
109
|
+
|
|
110
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.51.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
111
|
+
|
|
18
112
|
## 0.50.0 (2026-06-20)
|
|
19
113
|
|
|
20
114
|
- **Silent native updates no longer crash a running session.** The downloaded
|
{pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/agent.yaml
RENAMED
|
@@ -7,6 +7,7 @@ agent:
|
|
|
7
7
|
tools:
|
|
8
8
|
- "pythinker_code.tools.agent:Agent"
|
|
9
9
|
- "pythinker_code.tools.agent:RunAgents"
|
|
10
|
+
- "pythinker_code.tools.agent:ImplementAndJudge"
|
|
10
11
|
- "pythinker_code.tools.skill:ReadSkill"
|
|
11
12
|
# - "pythinker_code.tools.dmail:SendDMail"
|
|
12
13
|
# - "pythinker_code.tools.think:Think"
|
{pythinker_code-0.50.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/judge.yaml
RENAMED
|
@@ -18,6 +18,7 @@ agent:
|
|
|
18
18
|
|
|
19
19
|
## Context Gate
|
|
20
20
|
- Require the parent's packet: the original request, the diff or changed files, the commands actually run with their results, residual risks, and the draft final answer. If a load-bearing piece is missing, verdict BLOCKED and name it.
|
|
21
|
+
- When judging a code-change summary produced by `implementer`, require the implementer's `<coding_artifact>` block in the packet; if it is missing for a non-trivial code change, verdict BLOCKED and name it.
|
|
21
22
|
|
|
22
23
|
## External Claims (offline gate)
|
|
23
24
|
You run offline by design — the verify profile blocks network and doc-lookup tools, so you never go online. External claims are judged by the parent's evidence, never by your own research or training-cutoff memory:
|
|
@@ -39,6 +40,7 @@ agent:
|
|
|
39
40
|
- Safety and scope: no unsafe or destructive action, no secret or PII exposure, no scope creep beyond the request.
|
|
40
41
|
- Production guardrails: changed code that touches caches, resources, trust boundaries, shared state, outbound requests, long-lived listeners, or authorization context has explicit defenses for stampedes, cleanup, schemas, races, retry storms, leaks, and IDOR risks.
|
|
41
42
|
- Findings quality: for reports, each finding is actionable, anchored to evidence, and severity-ranked consistently with the base prompt's severity rubric (critical/high/medium/low/info).
|
|
43
|
+
- Minimum-diff: the diff takes the smallest rung of the reduction ladder (skip-need → reuse-stdlib → use-native → use-installed-dep → one-line → minimum) before adding new code; no abstractions, dependencies, config keys, files, or error paths that the brief did not ask for. New dependencies require a one-line justification; new config keys require a one-line consumer. The ladder applies uniformly — judge once, not per-mode.
|
|
42
44
|
|
|
43
45
|
## Role Exit Checklist
|
|
44
46
|
- PASS: sound; at most minor wording nits remain.
|
|
@@ -97,6 +97,8 @@ Build only after requirements are understood (ask if unclear) and evidence is ga
|
|
|
97
97
|
|
|
98
98
|
For refactors, update every call site the interface change touches, and do not alter existing logic — especially in tests — beyond what the change requires. For features, add tests if the project already has tests. Migrations go additive before destructive, reversible where the framework allows; never edit a migration that already shipped. Identify the synchronization model in use and conform to it; explicitly flag any new lock, atomic, or async-boundary change. Update comments, docstrings, and README snippets your change makes false — stale documentation is a bug you just wrote.
|
|
99
99
|
|
|
100
|
+
**Default to `ImplementAndJudge` for non-trivial scoped edits** instead of calling `implementer` and `judge` separately. The chain runs `implementer` first, hands the artifact to `judge`, and on `NEEDS_WORK` re-invokes `implementer` once with the judge's `REQUIRED FIXES` under a `## Revision brief` section before re-judging. The implementer cap is two invocations total — a still-`NEEDS_WORK` after revision surfaces the contradiction to you and stops. Pass `scope` so the judge can `git diff` only the allowed paths; pass `acceptance` to give the judge concrete pass conditions beyond the rubric.
|
|
101
|
+
|
|
100
102
|
### 4.5 Research & file generation
|
|
101
103
|
|
|
102
104
|
For research or multimedia tasks (images, video, PDFs, docs, spreadsheets, presentations): clarify requirements first, plan before deep or wide research, design search queries deliberately. Detect tools already in the environment before installing anything; third-party installs go in an isolated/virtual environment. After generating or editing any media file, read it back to confirm the content. Never install to or delete from outside the working directory without confirmation.
|
|
@@ -121,6 +123,8 @@ For research or multimedia tasks (images, video, PDFs, docs, spreadsheets, prese
|
|
|
121
123
|
|
|
122
124
|
**Judge gate.** Before delivering high-stakes or hard-to-reverse work, run an independent `judge` subagent as the last step when available. Triggers — any one suffices: a change spanning multiple files or touching production guardrail surfaces (§6); a deliverable the user will merge, deploy, publish, or act on; a security audit or any severity-scored findings report; a release or destructive action. When unsure whether work is high-stakes, treat it as high-stakes; skip it for low-stakes, reversible, or trivial work. Hand the judge a tight packet: original request, the diff or changed files, the commands actually run with their results, residual risks, and your draft answer. It is one cheap spot-checking pass that gates your evidence — it does not redo work or replace deterministic tests and lint, so run those first. Treat `NEEDS_WORK` or `BLOCKED` as a stop: fix or revise, re-judge only if the change was material. When the judge is unavailable, walk the same checklist yourself, lead with the same `PASS`/`NEEDS_WORK`/`BLOCKED` verdict, state what verification actually ran, and put any missing packet element under **BLOCKERS**.
|
|
123
125
|
|
|
126
|
+
Default to `ImplementAndJudge` for non-trivial scoped edits (see §4.4); reserve a bare `judge` call for non-implementation reviews — reports, audits, severity-scored findings, or answers that don't ship code.
|
|
127
|
+
|
|
124
128
|
**Background shell** (root agent only). Launch long-running commands via `Shell` with `run_in_background=true` and a short `description`; the system notifies you at terminal states. `TaskList` re-enumerates active tasks (especially after context compaction); `TaskOutput` gives non-blocking snapshots (`block=true` only to intentionally wait); `TaskStop` cancels. After starting a background task, default to returning control to the user. The only task-management slash command for users is `/task` — never invent subcommands like `/task list` or `/tasks`. Subagents and sessions without these tools must not assume background-task control.
|
|
125
129
|
|
|
126
130
|
**Skills (`ReadSkill`).** Load a skill's exact instructions before applying its workflow — mandatory for `review-pr`, `diagnose-ci-failures`, `fix-errors`, `implement-specs`, `spec-driven-implementation`, `check-impl-against-spec`, `resolve-merge-conflicts`, and `create-pr`. Read skill details only when needed, to conserve context. Catalog and scope precedence in §12.
|
|
@@ -832,7 +832,11 @@ class PythinkerCLI:
|
|
|
832
832
|
await external_cancel_task
|
|
833
833
|
|
|
834
834
|
async def run_shell(
|
|
835
|
-
self,
|
|
835
|
+
self,
|
|
836
|
+
command: str | None = None,
|
|
837
|
+
*,
|
|
838
|
+
prefill_text: str | None = None,
|
|
839
|
+
suppress_banner: bool = False,
|
|
836
840
|
) -> bool:
|
|
837
841
|
"""Run the Pythinker CLI instance with shell UI."""
|
|
838
842
|
from pythinker_code.ui.shell import Shell, WelcomeInfoItem
|
|
@@ -953,7 +957,12 @@ class PythinkerCLI:
|
|
|
953
957
|
)
|
|
954
958
|
)
|
|
955
959
|
async with self._env():
|
|
956
|
-
shell = Shell(
|
|
960
|
+
shell = Shell(
|
|
961
|
+
self._soul,
|
|
962
|
+
welcome_info=welcome_info,
|
|
963
|
+
prefill_text=prefill_text,
|
|
964
|
+
suppress_banner=suppress_banner,
|
|
965
|
+
)
|
|
957
966
|
return await shell.run(command)
|
|
958
967
|
|
|
959
968
|
async def run_print(
|
|
@@ -862,7 +862,12 @@ def pythinker(
|
|
|
862
862
|
# exception handler can clean it up even when _run() fails before returning.
|
|
863
863
|
_latest_created_session: Session | None = None
|
|
864
864
|
|
|
865
|
-
async def _run(
|
|
865
|
+
async def _run(
|
|
866
|
+
session_id: str | None,
|
|
867
|
+
prefill_text: str | None = None,
|
|
868
|
+
*,
|
|
869
|
+
suppress_banner: bool = False,
|
|
870
|
+
) -> tuple[Session, int]:
|
|
866
871
|
"""
|
|
867
872
|
Create/load session and run the CLI instance.
|
|
868
873
|
|
|
@@ -1056,7 +1061,11 @@ def pythinker(
|
|
|
1056
1061
|
try:
|
|
1057
1062
|
match ui:
|
|
1058
1063
|
case "shell":
|
|
1059
|
-
shell_ok = await instance.run_shell(
|
|
1064
|
+
shell_ok = await instance.run_shell(
|
|
1065
|
+
prompt,
|
|
1066
|
+
prefill_text=prefill_text,
|
|
1067
|
+
suppress_banner=suppress_banner,
|
|
1068
|
+
)
|
|
1060
1069
|
exit_code = ExitCode.SUCCESS if shell_ok else ExitCode.FAILURE
|
|
1061
1070
|
case "print":
|
|
1062
1071
|
exit_code = await instance.run_print(
|
|
@@ -1190,10 +1199,15 @@ def pythinker(
|
|
|
1190
1199
|
"""
|
|
1191
1200
|
last_session: Session | None = None
|
|
1192
1201
|
prefill_text: str | None = None
|
|
1202
|
+
suppress_banner = False
|
|
1193
1203
|
try:
|
|
1194
1204
|
while True:
|
|
1195
1205
|
try:
|
|
1196
|
-
last_session, exit_code = await _run(
|
|
1206
|
+
last_session, exit_code = await _run(
|
|
1207
|
+
session_id,
|
|
1208
|
+
prefill_text=prefill_text,
|
|
1209
|
+
suppress_banner=suppress_banner,
|
|
1210
|
+
)
|
|
1197
1211
|
break
|
|
1198
1212
|
except Reload as e:
|
|
1199
1213
|
if e.clear_screen:
|
|
@@ -1220,6 +1234,10 @@ def pythinker(
|
|
|
1220
1234
|
_print_resume_hint(old)
|
|
1221
1235
|
session_id = e.session_id
|
|
1222
1236
|
prefill_text = e.prefill_text
|
|
1237
|
+
# A non-clearing reload (/model, /theme, /new, fork, …) leaves
|
|
1238
|
+
# the previous banner on screen, so skip reprinting the splash.
|
|
1239
|
+
# /clear and /reload wiped the screen above and want it back.
|
|
1240
|
+
suppress_banner = not e.clear_screen
|
|
1223
1241
|
continue
|
|
1224
1242
|
except SwitchToWeb as e:
|
|
1225
1243
|
# The web worker subprocess becomes the session's writer.
|
|
@@ -3,6 +3,8 @@ from __future__ import annotations
|
|
|
3
3
|
import contextlib
|
|
4
4
|
import json
|
|
5
5
|
import os
|
|
6
|
+
import re
|
|
7
|
+
from collections.abc import Collection
|
|
6
8
|
from dataclasses import dataclass
|
|
7
9
|
from pathlib import Path
|
|
8
10
|
from typing import TYPE_CHECKING, Any, Literal, cast, get_args
|
|
@@ -12,7 +14,9 @@ from pythinker_core.chat_provider import ChatProvider, ThinkingEffort
|
|
|
12
14
|
from pythinker_code.constant import USER_AGENT
|
|
13
15
|
from pythinker_code.thinking import (
|
|
14
16
|
DEFAULT_THINKING_EFFORT,
|
|
17
|
+
available_thinking_levels,
|
|
15
18
|
bool_to_thinking_effort,
|
|
19
|
+
clamp_thinking_effort,
|
|
16
20
|
normalize_thinking_effort,
|
|
17
21
|
thinking_effort_enabled,
|
|
18
22
|
)
|
|
@@ -457,7 +461,15 @@ def create_llm(
|
|
|
457
461
|
else DEFAULT_THINKING_EFFORT
|
|
458
462
|
)
|
|
459
463
|
elif supports_thinking:
|
|
460
|
-
|
|
464
|
+
# Clamp to the model's actually-supported levels so a persisted effort
|
|
465
|
+
# the model rejects (e.g. ``minimal`` on gpt-5.4/5.5) is never sent.
|
|
466
|
+
effective_effort = (
|
|
467
|
+
clamp_thinking_effort(
|
|
468
|
+
requested_effort, available_model_thinking_levels(model, capabilities)
|
|
469
|
+
)
|
|
470
|
+
if requested_effort is not None
|
|
471
|
+
else None
|
|
472
|
+
)
|
|
461
473
|
else:
|
|
462
474
|
# Clamp to the model's supported levels: non-reasoning models have
|
|
463
475
|
# only the off level, so explicit non-off requests become off instead of
|
|
@@ -594,6 +606,55 @@ def derive_model_capabilities(model: LLMModel) -> set[ModelCapability]:
|
|
|
594
606
|
return capabilities
|
|
595
607
|
|
|
596
608
|
|
|
609
|
+
_GPT5_REASONING_RE = re.compile(r"gpt-5(?:\.(\d+))?", re.IGNORECASE)
|
|
610
|
+
|
|
611
|
+
|
|
612
|
+
def openai_gpt_reasoning_levels(model_id: str) -> tuple[ThinkingEffort, ...] | None:
|
|
613
|
+
"""Reasoning-effort levels an OpenAI GPT-5-family model actually accepts.
|
|
614
|
+
|
|
615
|
+
OpenAI's ``reasoning_effort`` set is model-dependent and has drifted across
|
|
616
|
+
the GPT-5 line, so the provider-neutral ladder over-offers levels a given
|
|
617
|
+
model rejects (e.g. ``minimal`` on gpt-5.4/5.5). Returns the supported
|
|
618
|
+
levels low->high including ``off`` (OpenAI ``none``), or ``None`` when
|
|
619
|
+
*model_id* is not a recognized GPT-5 reasoning model.
|
|
620
|
+
|
|
621
|
+
Matrix (OpenAI docs):
|
|
622
|
+
|
|
623
|
+
* ``5.0`` -> minimal, low, medium, high
|
|
624
|
+
* ``5.1`` / ``5.2`` / ``5.3`` -> low, medium, high (``minimal`` replaced by ``none``)
|
|
625
|
+
* ``5.1-codex-max``, ``5.4+`` -> low, medium, high, xhigh (``minimal`` dropped)
|
|
626
|
+
"""
|
|
627
|
+
match = _GPT5_REASONING_RE.search(model_id)
|
|
628
|
+
if match is None:
|
|
629
|
+
return None
|
|
630
|
+
minor = int(match.group(1)) if match.group(1) else 0
|
|
631
|
+
if minor == 0:
|
|
632
|
+
return ("off", "minimal", "low", "medium", "high")
|
|
633
|
+
if minor >= 4 or "codex-max" in model_id.lower():
|
|
634
|
+
return ("off", "low", "medium", "high", "xhigh")
|
|
635
|
+
return ("off", "low", "medium", "high")
|
|
636
|
+
|
|
637
|
+
|
|
638
|
+
def available_model_thinking_levels(
|
|
639
|
+
model: LLMModel, capabilities: Collection[str] | None
|
|
640
|
+
) -> tuple[ThinkingEffort, ...]:
|
|
641
|
+
"""Selectable thinking levels for *model*, scoped to provider-specific support.
|
|
642
|
+
|
|
643
|
+
Starts from the capability-derived ladder, then narrows to a provider's
|
|
644
|
+
actually-accepted set when known (currently the OpenAI GPT-5 family) so the
|
|
645
|
+
selector never offers — and :func:`create_llm` never sends — a level the
|
|
646
|
+
model rejects. Falls back to the full ladder for models without a known
|
|
647
|
+
per-model rule.
|
|
648
|
+
"""
|
|
649
|
+
base = available_thinking_levels(capabilities)
|
|
650
|
+
gpt_levels = openai_gpt_reasoning_levels(model.model)
|
|
651
|
+
if gpt_levels is None:
|
|
652
|
+
return base
|
|
653
|
+
allowed = set(gpt_levels)
|
|
654
|
+
scoped: tuple[ThinkingEffort, ...] = tuple(level for level in base if level in allowed)
|
|
655
|
+
return scoped or base
|
|
656
|
+
|
|
657
|
+
|
|
597
658
|
def _is_kimi_k2_model(model_name: str) -> bool:
|
|
598
659
|
return "kimi-k2" in model_name.lower().replace("_", "-")
|
|
599
660
|
|