pythinker-code 0.24.0__tar.gz → 0.26.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.24.0 → pythinker_code-0.26.0}/PKG-INFO +27 -27
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/README.md +25 -25
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/pyproject.toml +14 -2
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/CHANGELOG.md +27 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/agents/default/code_reviewer.yaml +1 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/agents/default/debugger.yaml +1 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/agents/default/security_reviewer.yaml +1 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/agents/default/system.md +31 -3
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/auth/github_feedback.py +3 -2
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/auth/oauth.py +3 -2
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/auth/openai.py +3 -2
- pythinker_code-0.26.0/src/pythinker_code/auth/opencode_go.py +449 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/auth/platforms.py +22 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/background/agent_runner.py +26 -18
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/background/manager.py +283 -103
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/background/store.py +81 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/background/worker.py +52 -2
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/cli/__init__.py +31 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/cli/mcp.py +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/config.py +44 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/scratchpad.py +76 -14
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/soul/pythinkersoul.py +67 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/soul/toolset.py +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/subagents/core.py +17 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/subagents/runner.py +3 -1
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/agent/__init__.py +5 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/background/output.md +1 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/file/grep_local.py +20 -4
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/file/replace.py +66 -2
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/todo/__init__.py +12 -1
- pythinker_code-0.26.0/src/pythinker_code/tools/web/_allowlist.py +27 -0
- pythinker_code-0.26.0/src/pythinker_code/tools/web/fetch.md +1 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/web/fetch.py +101 -42
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/web/search.md +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/web/search.py +23 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/print/visualize.py +15 -1
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/__init__.py +78 -14
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/components/markdown.py +196 -1
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/components/messages.py +2 -1
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/components/render_utils.py +26 -9
- pythinker_code-0.26.0/src/pythinker_code/ui/shell/components/report.py +311 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/components/settings_list.py +16 -4
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/glyphs.py +11 -8
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/motion.py +9 -6
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/prompt.py +5 -6
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/selector.py +16 -5
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/slash.py +11 -191
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +2 -2
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +24 -1
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +3 -2
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +7 -8
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/term.py +29 -0
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/_baseUniq-xke532Oy.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/_baseUniq-BV0IcpWE.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/arc-CegJbAFP.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/arc-Cyrtvkp5.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-gRgnu-gr.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-C6WJgnXC.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-Dg5w_2Yh.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-GQd1_IMc.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-CCef5OiF.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-B47mx86g.js +1 -1
- pythinker_code-0.26.0/src/pythinker_code/web/static/assets/channel-BUTOao-m.js +1 -0
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-EgaX5uMv.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-Cy5x8E1K.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-DxrhgIEt.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-DifqgNgE.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-CQVqjkPw.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-r0-BeGnv.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-CB92ALDq.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-XWQHVeUW.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-Dx0SG_k_.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-CA_nMgAr.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-CPf0eYoM.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-CJveaI0H.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CCzKoWw1.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-C1sAjmrf.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-DRcEkhpm.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-dYY99i90.js +1 -1
- pythinker_code-0.26.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-CLIe0T4n.js +1 -0
- pythinker_code-0.26.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-CLIe0T4n.js +1 -0
- pythinker_code-0.26.0/src/pythinker_code/web/static/assets/clone-BjWb914D.js +1 -0
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-B9Gx7wfK.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-CtrXu_Qg.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-Bk_TZfTb.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-Ka1axIdw.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/cytoscape.esm-BHcnjk-H.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/cytoscape.esm-CYgRHX5l.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-Crkbecci.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-DxeUvDkL.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CZZA6AcG.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-UpoQP3fh.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-Cl9Bn4z0.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-rexPrmXt.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-Cfd515FT.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-Bqsmg2Ru.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-bKIec5rn.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-B0XOb2uZ.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-QpAOui2R.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-CcOatfXl.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-9b-6k-Ce.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-D1YtSUzx.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-1jsNU7Xj.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-VZLZurNq.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/graph-BpD9mq1e.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/graph-CqflUrXP.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/index-JGsigFy8.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/index-BYhDBSlX.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/index-DOqWBZxx.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/index-CJApTS5K.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/index-CcDfQ78O.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/index-CddeEW2V.js +2 -2
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-DDG7tF9O.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-CBaPkiOc.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-CbGNODS3.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-Dk3pQbWG.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-C-9k-K2F.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-DP_5IDy5.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/layout-C_z0jB06.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/layout-YlHbm7XF.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/linear-BvpHbFJ9.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/linear-BDRfWBAl.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-BQYgOUUq.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DyUoFCBx.js +7 -7
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/mermaid.core-BJL5GYve.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/mermaid.core-COuleAQZ.js +5 -5
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/min-BEcwyy0D.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/min-BGh5aeLW.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-DGJ3sluz.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-C6QBRyVb.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-CopVB6-T.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-CSNHu75h.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-BdniBu5I.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-D5XNXTa7.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-_-TE819T.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-BMcLVFmN.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-Q0nhrVAc.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-BurCLwEY.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-CM9YS9lz.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-B2M0ZAUV.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-CN07f0ow.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-vdkc_FHq.js +1 -1
- pythinker_code-0.26.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-C6C4PIor.js +1 -0
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-BLVxjxj5.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-CXwebPi6.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-DkxAx6_v.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-s78Ox8eo.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-r872XVoE.js → pythinker_code-0.26.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-B8BvWA5q.js +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/index.html +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/install.ps1 +23 -9
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/install.sh +28 -1
- pythinker_code-0.24.0/src/pythinker_code/auth/opencode_go.py +0 -203
- pythinker_code-0.24.0/src/pythinker_code/tools/web/fetch.md +0 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/channel-D_mnrgqH.js +0 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-CitTAFHx.js +0 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-CitTAFHx.js +0 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/clone-Bz9PJd84.js +0 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-Cdl7WqDO.js +0 -1
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/LICENSE +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/NOTICE +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/__main__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/acp/AGENTS.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/acp/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/acp/convert.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/acp/host.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/acp/mcp.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/acp/server.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/acp/session.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/acp/tools.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/acp/types.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/acp/version.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/agents/default/coder.yaml +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/agents/default/explore.yaml +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/agents/default/implementer.yaml +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/agents/default/plan.yaml +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/agents/default/review.yaml +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/agents/default/verifier.yaml +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/agentspec.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/app.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/approval_runtime/models.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/auth/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/auth/deepseek.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/auth/lm_studio.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/auth/minimax.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/auth/ollama.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/auth/openrouter.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/background/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/background/ids.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/background/models.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/background/summary.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/cli/__main__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/cli/debug.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/cli/export.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/cli/info.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/cli/plugin.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/cli/review.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/cli/secscan.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/cli/security_scan.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/cli/skill.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/cli/toad.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/cli/update.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/cli/vis.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/cli/web.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/constant.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/events.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/exception.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/execution_profiles.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/extensions.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/file_restore.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/hooks/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/hooks/config.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/hooks/engine.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/hooks/events.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/hooks/runner.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/llm.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/memory/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/memory/consolidation.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/memory/harvest.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/memory/recall.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/memory/recap.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/memory/retriever.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/memory/retriever_sqlite.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/memory/sanitize.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/metadata.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/native.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/notifications/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/notifications/llm.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/notifications/manager.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/notifications/models.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/notifications/notifier.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/notifications/store.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/notifications/wire.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/plugin/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/plugin/manager.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/plugin/tool.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/project_memory.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/prompt_templates.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/prompts/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/prompts/compact.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/prompts/init.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/py.typed +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/session.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/session_fork.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/session_state.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/share.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/skill/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/skill/flow/d2.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/skill/lockfile.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/soul/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/soul/agent.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/soul/approval.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/soul/btw.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/soul/compaction.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/soul/context.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/soul/denwarenji.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/soul/message.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/soul/permission.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/soul/slash.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/subagents/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/subagents/builder.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/subagents/discovery.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/subagents/git_context.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/subagents/models.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/subagents/output.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/subagents/registry.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/subagents/store.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/telemetry/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/telemetry/config.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/telemetry/crash.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/telemetry/errors.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/telemetry/metrics.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/telemetry/otel.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/telemetry/sentry.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/telemetry/sink.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/AGENTS.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/agent/description.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/background/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/background/handoff.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/background/input.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/background/list.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/background/stop.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/display.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/file/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/file/glob.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/file/glob.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/file/grep.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/file/read.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/file/read.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/file/read_media.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/file/read_media.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/file/replace.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/file/utils.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/file/write.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/file/write.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/memory/memory.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/plan/description.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/plan/enter.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/shell/bash.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/skill/description.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/test.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/think/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/think/think.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/utils.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/tools/web/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/print/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/console.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/debug.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/echo.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/replay.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/setup.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/startup.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/tips.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/update.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/usage.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/theme.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/ui/tui_config.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/aiohttp.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/aioqueue.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/broadcast.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/changelog.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/clipboard.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/datetime.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/diff.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/editor.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/environment.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/envvar.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/export.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/file_filter.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/frontmatter.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/io.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/logging.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/media_tags.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/message.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/path.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/proctitle.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/proxy.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/rich/columns.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/sensitive.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/server.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/signals.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/slashcmd.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/string.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/utils/typing.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/vis/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/vis/api/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/vis/api/sessions.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/vis/api/statistics.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/vis/api/system.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/vis/app.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/vis/static/index.html +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/api/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/api/config.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/api/open_in.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/api/sessions.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/app.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/auth.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/models.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/runner/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/runner/messages.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/runner/process.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/runner/worker.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/_headers +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B2P5VJ9v.css +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/static/logo.png +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/store/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/web/store/sessions.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/wire/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/wire/file.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/wire/protocol.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/wire/root_hub.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/wire/serde.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/wire/server.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.26.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.26.0
|
|
4
4
|
Summary: Pythinker Code is your next CLI agent.
|
|
5
5
|
Keywords: cli,agent,ai,coding-assistant,llm,claude,openai,terminal
|
|
6
6
|
Author: Mohamed Elkholy
|
|
@@ -28,7 +28,7 @@ Requires-Dist: loguru>=0.6.0,<0.7
|
|
|
28
28
|
Requires-Dist: prompt-toolkit==3.0.52
|
|
29
29
|
Requires-Dist: pillow==12.2.0
|
|
30
30
|
Requires-Dist: pyyaml==6.0.3
|
|
31
|
-
Requires-Dist: rich==
|
|
31
|
+
Requires-Dist: rich==15.0.0
|
|
32
32
|
Requires-Dist: certifi>=2025.10.5
|
|
33
33
|
Requires-Dist: click==8.3.0
|
|
34
34
|
Requires-Dist: pyperclip==1.11.0
|
|
@@ -115,15 +115,15 @@ 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.26.0
|
|
119
119
|
|
|
120
|
-
- **
|
|
121
|
-
- **
|
|
122
|
-
- **
|
|
123
|
-
- **
|
|
124
|
-
- **
|
|
120
|
+
- **Install and update no longer 404 on a freshly published release.** Releases are now published as a prerelease and promoted to "latest" only once every platform asset has uploaded, and the curl/PowerShell installers wait for their archive + checksum before downloading — so `irm | iex` / `curl | bash` run mid-publish no longer fail on a missing installer.
|
|
121
|
+
- **OpenCode Go model catalog refreshes on startup without a re-login.** Bundled catalog changes (new models, corrected provider shapes) now reach existing installs through the every-startup refresh, across both OpenAI- and Anthropic-shaped providers, while preserving your default model and thinking settings.
|
|
122
|
+
- **Homebrew install shows the logo and fails fast on a missing tap token.** `brew install` now prints the robot-head banner via formula caveats, and the tap workflow reports an actionable error when `HOMEBREW_TAP_TOKEN` is missing instead of an opaque git failure.
|
|
123
|
+
- **Markdown and report rendering hardened against real model output.** Code-span pipes inside tables no longer fracture the table, and a `report` block nested inside a documentation fence is no longer wrongly promoted — report fences are now extracted via a markdown-it AST walk.
|
|
124
|
+
- **Steadier agent editing and a restored update prompt.** File-replace edit handling is hardened, subagent prompt persistence and the agent's working language are preserved, and the blocking pre-start update prompt is restored so it runs before every interactive session.
|
|
125
125
|
|
|
126
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
126
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.26.0`, or use the native installer for your platform from the [Releases page](https://github.com/TechMatrix-labs/pythinker-code/releases/latest).
|
|
127
127
|
|
|
128
128
|
|
|
129
129
|
---
|
|
@@ -213,7 +213,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
|
|
|
213
213
|
|
|
214
214
|
| Platform | Recommended install | Artifact source |
|
|
215
215
|
|---|---|---|
|
|
216
|
-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.
|
|
216
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.26.0.exe` from [Releases](https://github.com/TechMatrix-labs/pythinker-code/releases/latest) |
|
|
217
217
|
| **<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/TechMatrix-labs/pythinker-code/releases/latest) |
|
|
218
218
|
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install TechMatrix-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
|
|
219
219
|
| **<img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> — system package** | Download the `.deb` or `.rpm` for your distro below | [Releases](https://github.com/TechMatrix-labs/pythinker-code/releases/latest) |
|
|
@@ -238,7 +238,7 @@ pythinker # start the interactive TUI
|
|
|
238
238
|
|
|
239
239
|
### 🪟 Windows — native installer
|
|
240
240
|
|
|
241
|
-
`PythinkerSetup-0.
|
|
241
|
+
`PythinkerSetup-0.26.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
242
242
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
243
243
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
244
244
|
the change. **No UAC prompt.**
|
|
@@ -249,13 +249,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
249
249
|
|
|
250
250
|
# Or manually download the installer + checksum from the Releases page,
|
|
251
251
|
# verify with Get-FileHash, then run:
|
|
252
|
-
.\PythinkerSetup-0.
|
|
252
|
+
.\PythinkerSetup-0.26.0.exe
|
|
253
253
|
|
|
254
254
|
# Open a fresh PowerShell
|
|
255
255
|
pythinker --version
|
|
256
256
|
```
|
|
257
257
|
|
|
258
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
258
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.26.0.exe /ALLUSERS`
|
|
259
259
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
260
260
|
|
|
261
261
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -306,26 +306,26 @@ attached to every GitHub Release.
|
|
|
306
306
|
|
|
307
307
|
```sh
|
|
308
308
|
# Debian / Ubuntu (x86_64)
|
|
309
|
-
sudo dpkg -i pythinker-code_0.
|
|
309
|
+
sudo dpkg -i pythinker-code_0.26.0_amd64.deb
|
|
310
310
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
311
311
|
|
|
312
312
|
# Debian / Ubuntu (ARM64)
|
|
313
|
-
sudo dpkg -i pythinker-code_0.
|
|
313
|
+
sudo dpkg -i pythinker-code_0.26.0_arm64.deb
|
|
314
314
|
|
|
315
315
|
# Fedora / RHEL / openSUSE (x86_64)
|
|
316
|
-
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.
|
|
317
|
-
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.
|
|
318
|
-
sha256sum -c pythinker-code-0.
|
|
316
|
+
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.26.0/pythinker-code-0.26.0.x86_64.rpm
|
|
317
|
+
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.26.0/pythinker-code-0.26.0.x86_64.rpm.sha256
|
|
318
|
+
sha256sum -c pythinker-code-0.26.0.x86_64.rpm.sha256
|
|
319
319
|
# Fedora / RHEL:
|
|
320
|
-
sudo dnf install ./pythinker-code-0.
|
|
320
|
+
sudo dnf install ./pythinker-code-0.26.0.x86_64.rpm
|
|
321
321
|
# openSUSE:
|
|
322
|
-
sudo zypper install ./pythinker-code-0.
|
|
322
|
+
sudo zypper install ./pythinker-code-0.26.0.x86_64.rpm
|
|
323
323
|
|
|
324
324
|
# Fedora / RHEL (aarch64)
|
|
325
|
-
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.
|
|
326
|
-
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.
|
|
327
|
-
sha256sum -c pythinker-code-0.
|
|
328
|
-
sudo dnf install ./pythinker-code-0.
|
|
325
|
+
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.26.0/pythinker-code-0.26.0.aarch64.rpm
|
|
326
|
+
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.26.0/pythinker-code-0.26.0.aarch64.rpm.sha256
|
|
327
|
+
sha256sum -c pythinker-code-0.26.0.aarch64.rpm.sha256
|
|
328
|
+
sudo dnf install ./pythinker-code-0.26.0.aarch64.rpm
|
|
329
329
|
```
|
|
330
330
|
|
|
331
331
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -334,8 +334,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
334
334
|
**Verify before install:**
|
|
335
335
|
|
|
336
336
|
```sh
|
|
337
|
-
sha256sum -c pythinker-code_0.
|
|
338
|
-
sha256sum -c pythinker-code-0.
|
|
337
|
+
sha256sum -c pythinker-code_0.26.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
338
|
+
sha256sum -c pythinker-code-0.26.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
339
339
|
```
|
|
340
340
|
|
|
341
341
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -365,7 +365,7 @@ at `~/.local/bin/pythinker`.
|
|
|
365
365
|
curl -fsSL https://pythinker.com/install.sh | bash
|
|
366
366
|
|
|
367
367
|
# Pin a specific version
|
|
368
|
-
curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.
|
|
368
|
+
curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.26.0
|
|
369
369
|
|
|
370
370
|
# Custom prefix (defaults to $HOME/.local)
|
|
371
371
|
curl -fsSL https://pythinker.com/install.sh | bash -s -- --prefix /opt/pythinker
|
|
@@ -50,15 +50,15 @@ 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.26.0
|
|
54
54
|
|
|
55
|
-
- **
|
|
56
|
-
- **
|
|
57
|
-
- **
|
|
58
|
-
- **
|
|
59
|
-
- **
|
|
55
|
+
- **Install and update no longer 404 on a freshly published release.** Releases are now published as a prerelease and promoted to "latest" only once every platform asset has uploaded, and the curl/PowerShell installers wait for their archive + checksum before downloading — so `irm | iex` / `curl | bash` run mid-publish no longer fail on a missing installer.
|
|
56
|
+
- **OpenCode Go model catalog refreshes on startup without a re-login.** Bundled catalog changes (new models, corrected provider shapes) now reach existing installs through the every-startup refresh, across both OpenAI- and Anthropic-shaped providers, while preserving your default model and thinking settings.
|
|
57
|
+
- **Homebrew install shows the logo and fails fast on a missing tap token.** `brew install` now prints the robot-head banner via formula caveats, and the tap workflow reports an actionable error when `HOMEBREW_TAP_TOKEN` is missing instead of an opaque git failure.
|
|
58
|
+
- **Markdown and report rendering hardened against real model output.** Code-span pipes inside tables no longer fracture the table, and a `report` block nested inside a documentation fence is no longer wrongly promoted — report fences are now extracted via a markdown-it AST walk.
|
|
59
|
+
- **Steadier agent editing and a restored update prompt.** File-replace edit handling is hardened, subagent prompt persistence and the agent's working language are preserved, and the blocking pre-start update prompt is restored so it runs before every interactive session.
|
|
60
60
|
|
|
61
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
61
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.26.0`, or use the native installer for your platform from the [Releases page](https://github.com/TechMatrix-labs/pythinker-code/releases/latest).
|
|
62
62
|
|
|
63
63
|
|
|
64
64
|
---
|
|
@@ -148,7 +148,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
|
|
|
148
148
|
|
|
149
149
|
| Platform | Recommended install | Artifact source |
|
|
150
150
|
|---|---|---|
|
|
151
|
-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.
|
|
151
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.26.0.exe` from [Releases](https://github.com/TechMatrix-labs/pythinker-code/releases/latest) |
|
|
152
152
|
| **<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/TechMatrix-labs/pythinker-code/releases/latest) |
|
|
153
153
|
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install TechMatrix-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
|
|
154
154
|
| **<img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> — system package** | Download the `.deb` or `.rpm` for your distro below | [Releases](https://github.com/TechMatrix-labs/pythinker-code/releases/latest) |
|
|
@@ -173,7 +173,7 @@ pythinker # start the interactive TUI
|
|
|
173
173
|
|
|
174
174
|
### 🪟 Windows — native installer
|
|
175
175
|
|
|
176
|
-
`PythinkerSetup-0.
|
|
176
|
+
`PythinkerSetup-0.26.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
177
177
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
178
178
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
179
179
|
the change. **No UAC prompt.**
|
|
@@ -184,13 +184,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
184
184
|
|
|
185
185
|
# Or manually download the installer + checksum from the Releases page,
|
|
186
186
|
# verify with Get-FileHash, then run:
|
|
187
|
-
.\PythinkerSetup-0.
|
|
187
|
+
.\PythinkerSetup-0.26.0.exe
|
|
188
188
|
|
|
189
189
|
# Open a fresh PowerShell
|
|
190
190
|
pythinker --version
|
|
191
191
|
```
|
|
192
192
|
|
|
193
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
193
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.26.0.exe /ALLUSERS`
|
|
194
194
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
195
195
|
|
|
196
196
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -241,26 +241,26 @@ attached to every GitHub Release.
|
|
|
241
241
|
|
|
242
242
|
```sh
|
|
243
243
|
# Debian / Ubuntu (x86_64)
|
|
244
|
-
sudo dpkg -i pythinker-code_0.
|
|
244
|
+
sudo dpkg -i pythinker-code_0.26.0_amd64.deb
|
|
245
245
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
246
246
|
|
|
247
247
|
# Debian / Ubuntu (ARM64)
|
|
248
|
-
sudo dpkg -i pythinker-code_0.
|
|
248
|
+
sudo dpkg -i pythinker-code_0.26.0_arm64.deb
|
|
249
249
|
|
|
250
250
|
# Fedora / RHEL / openSUSE (x86_64)
|
|
251
|
-
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.
|
|
252
|
-
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.
|
|
253
|
-
sha256sum -c pythinker-code-0.
|
|
251
|
+
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.26.0/pythinker-code-0.26.0.x86_64.rpm
|
|
252
|
+
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.26.0/pythinker-code-0.26.0.x86_64.rpm.sha256
|
|
253
|
+
sha256sum -c pythinker-code-0.26.0.x86_64.rpm.sha256
|
|
254
254
|
# Fedora / RHEL:
|
|
255
|
-
sudo dnf install ./pythinker-code-0.
|
|
255
|
+
sudo dnf install ./pythinker-code-0.26.0.x86_64.rpm
|
|
256
256
|
# openSUSE:
|
|
257
|
-
sudo zypper install ./pythinker-code-0.
|
|
257
|
+
sudo zypper install ./pythinker-code-0.26.0.x86_64.rpm
|
|
258
258
|
|
|
259
259
|
# Fedora / RHEL (aarch64)
|
|
260
|
-
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.
|
|
261
|
-
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.
|
|
262
|
-
sha256sum -c pythinker-code-0.
|
|
263
|
-
sudo dnf install ./pythinker-code-0.
|
|
260
|
+
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.26.0/pythinker-code-0.26.0.aarch64.rpm
|
|
261
|
+
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.26.0/pythinker-code-0.26.0.aarch64.rpm.sha256
|
|
262
|
+
sha256sum -c pythinker-code-0.26.0.aarch64.rpm.sha256
|
|
263
|
+
sudo dnf install ./pythinker-code-0.26.0.aarch64.rpm
|
|
264
264
|
```
|
|
265
265
|
|
|
266
266
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -269,8 +269,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
269
269
|
**Verify before install:**
|
|
270
270
|
|
|
271
271
|
```sh
|
|
272
|
-
sha256sum -c pythinker-code_0.
|
|
273
|
-
sha256sum -c pythinker-code-0.
|
|
272
|
+
sha256sum -c pythinker-code_0.26.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
273
|
+
sha256sum -c pythinker-code-0.26.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
274
274
|
```
|
|
275
275
|
|
|
276
276
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -300,7 +300,7 @@ at `~/.local/bin/pythinker`.
|
|
|
300
300
|
curl -fsSL https://pythinker.com/install.sh | bash
|
|
301
301
|
|
|
302
302
|
# Pin a specific version
|
|
303
|
-
curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.
|
|
303
|
+
curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.26.0
|
|
304
304
|
|
|
305
305
|
# Custom prefix (defaults to $HOME/.local)
|
|
306
306
|
curl -fsSL https://pythinker.com/install.sh | bash -s -- --prefix /opt/pythinker
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "pythinker-code"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.26.0"
|
|
4
4
|
description = "Pythinker Code is your next CLI agent."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -32,7 +32,7 @@ dependencies = [
|
|
|
32
32
|
"prompt-toolkit==3.0.52",
|
|
33
33
|
"pillow==12.2.0",
|
|
34
34
|
"pyyaml==6.0.3",
|
|
35
|
-
"rich==
|
|
35
|
+
"rich==15.0.0",
|
|
36
36
|
"certifi>=2025.10.5",
|
|
37
37
|
"click==8.3.0",
|
|
38
38
|
"pyperclip==1.11.0",
|
|
@@ -175,4 +175,16 @@ reviewr = "reviewr"
|
|
|
175
175
|
fnd = "fnd"
|
|
176
176
|
edn = "edn"
|
|
177
177
|
Encrypter = "Encrypter"
|
|
178
|
+
# Hex session IDs (e.g. 06ba6c38) contain "ba".
|
|
179
|
+
ba = "ba"
|
|
178
180
|
uest = "uest"
|
|
181
|
+
# Verb stems in the unfinished-intent detection regex (soul/pythinkersoul.py)
|
|
182
|
+
# match word prefixes ("prepar" → prepare/preparing); kept as bare stems on
|
|
183
|
+
# purpose so they cover every inflection.
|
|
184
|
+
prepar = "prepar"
|
|
185
|
+
generat = "generat"
|
|
186
|
+
provid = "provid"
|
|
187
|
+
updat = "updat"
|
|
188
|
+
examin = "examin"
|
|
189
|
+
continu = "continu"
|
|
190
|
+
|
|
@@ -15,6 +15,33 @@ GitHub Releases page; `0.8.0` is the new starting line.
|
|
|
15
15
|
|
|
16
16
|
## Unreleased
|
|
17
17
|
|
|
18
|
+
## 0.26.0 (2026-05-30)
|
|
19
|
+
|
|
20
|
+
### What changed in this release
|
|
21
|
+
|
|
22
|
+
- **Install and update no longer 404 on a freshly published release.** The 0.24.0 "atomic latest" gate turned out to be dead code — it ran only on a `release: published` event that a token-created release never fires, and did not affect `/releases/latest` anyway. The GitHub Release is now created as a **prerelease**, and a new `promote-release.yml` runs on the tag push, waits for every platform asset to finish uploading, then clears the prerelease flag and marks the release latest — the single point at which a version becomes resolvable by installers and the in-app updater. As defense-in-depth, the curl and PowerShell installers now resolve the newest release that actually carries their platform asset (skipping drafts and prereleases) and wait for the archive plus checksum before downloading, so `irm | iex` / `curl | bash` run during the publish window no longer fail on a missing `PythinkerSetup-<ver>.exe` or archive.
|
|
23
|
+
- **OpenCode Go model catalog refreshes on every startup without a re-login.** Bundled catalog changes — new models, corrected provider shapes — previously reached an existing install only after a manual `pythinker login --opencode-go`. OpenCode Go is now wired into the every-startup `refresh_managed_models` task with its own discovery and a dedicated apply that upserts and prunes across both its OpenAI- and Anthropic-shaped providers while preserving your `default_model` and `default_thinking`. Discovery failures are isolated so they cannot abort other providers' saves; provider `base_url` repairs still require a re-login.
|
|
24
|
+
- **Homebrew install shows the logo and fails fast on a missing tap token.** `brew install` now prints the robot-head banner via a formula `caveats` block — the banner previously lived only in the curl and PowerShell installers, which Homebrew never runs. The tap auto-update workflow now detects an empty `HOMEBREW_TAP_TOKEN` (lost in the org migration, which had frozen the tap at 0.23.0) and fails with an actionable error instead of an opaque git exit-128.
|
|
25
|
+
- **Markdown and report rendering hardened against real model output.** Code-span pipes inside Markdown tables are now protected so a `|` inside backticks no longer fractures the table, and a `report` block nested inside an outer documentation fence is no longer wrongly promoted to a report — report fences are extracted via a markdown-it AST walk instead of a flat regex. Backed by a new TUI markdown/report contract test suite grounded in a real security-scan fixture.
|
|
26
|
+
- **Steadier agent editing and a restored update prompt.** File-replace edit handling is hardened, subagent prompt persistence and the agent's working language are preserved across turns, and the todo list stays aligned during a turn. The blocking pre-start update prompt — wired in 0.24.0 but again left unwired by a later refactor — is restored so it runs before every interactive session.
|
|
27
|
+
- **CI runs required checks on every pull request.** The `check`, `test`, and `release-validate` contexts were path-filtered off docs-only (and `sdks/`/`examples/`-only) PRs, so the required statuses never reported and those PRs stayed BLOCKED under branch protection with no clean override. The `pull_request` path filter is dropped so every PR runs each required context exactly once; the `push` trigger keeps its filter unchanged.
|
|
28
|
+
|
|
29
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.26.0`, or use the native installer for your OS (see the README install table).
|
|
30
|
+
|
|
31
|
+
## 0.25.0 (2026-05-29)
|
|
32
|
+
|
|
33
|
+
### What changed in this release
|
|
34
|
+
|
|
35
|
+
- **`Fetch` now re-checks every redirect hop against the SSRF guard.** Redirects were followed without re-validating the destination, so a public URL could redirect to a link-local address (e.g. a cloud metadata endpoint) and slip past the guard that only inspected the original URL. Redirects are now followed manually and every hop is re-validated, closing the public→link-local bypass.
|
|
36
|
+
- **Web domain allowlist for `Fetch` and `Search`.** A new `web.allowed_domains` config option restricts which hosts the web tools may reach. When set, `Fetch` (including every redirect hop) and `Search` reject any host outside the list; leave it unset to keep web access unrestricted.
|
|
37
|
+
- **Crash-consistent background tasks.** Task and agent-task state is now serialised under a cross-process per-task lock, so a worker heartbeat landing mid-update is no longer lost. Every terminal agent-task update routes through a single finalizer that writes the authoritative runtime first, and recovery reconciles records left divergent by a crash or kill without ever clobbering a live agent. Bash task output is capped (default 50 MiB) so a chatty task cannot exhaust disk, terminated processes get a SIGTERM→SIGKILL fallback, and aged terminal task directories are pruned (default 7 days).
|
|
38
|
+
- **Calmer, more reliable TUI.** The todo list no longer renders twice during an in-flight turn, OAuth and feedback links open through a detached browser launcher so browser output cannot corrupt the terminal or steal key presses, and the terminal is restored to a sane state on `SIGTERM`/`SIGQUIT` and at exit.
|
|
39
|
+
- **Live tool-execution feedback.** Tool calls now show a calm "preparing" row during approval and hooks, switch to a live status once execution starts, and stream shell `stdout`/`stderr` as a running tail before the final result lands. The composing assistant block renders a live Markdown preview as the model writes, code blocks gain clearer framing, and the active spinner uses smoother braille dots.
|
|
40
|
+
- **Steadier agent loop.** The model is nudged once when a turn ends on a bare statement of intent with no tool call, steered away from blocking on a single background task while siblings are still running, and a `SetTodoList` call whose todos arrive as a JSON-encoded string is now parsed transparently instead of failing validation.
|
|
41
|
+
- **Unified report rendering.** Code review, verify, and security-review output now share one standardized, muted report renderer — including `report` blocks emitted by skills and agents; a malformed block falls back to ordinary markdown rather than being swallowed.
|
|
42
|
+
|
|
43
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.25.0`, or use the native installer for your OS (see the README install table).
|
|
44
|
+
|
|
18
45
|
## 0.24.0 (2026-05-28)
|
|
19
46
|
|
|
20
47
|
### What changed in this release
|
{pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/agents/default/code_reviewer.yaml
RENAMED
|
@@ -51,6 +51,7 @@ agent:
|
|
|
51
51
|
Use to run a read-only diff-focused code review or code-reviewr-derived PR artifact workflow on the current branch.
|
|
52
52
|
allowed_tools:
|
|
53
53
|
- "pythinker_code.tools.shell:Shell"
|
|
54
|
+
- "pythinker_code.tools.todo:SetTodoList"
|
|
54
55
|
- "pythinker_code.tools.file:ReadFile"
|
|
55
56
|
- "pythinker_code.tools.file:Grep"
|
|
56
57
|
- "pythinker_code.tools.skill:ReadSkill"
|
{pythinker_code-0.24.0 → pythinker_code-0.26.0}/src/pythinker_code/agents/default/debugger.yaml
RENAMED
|
@@ -36,6 +36,7 @@ agent:
|
|
|
36
36
|
Use for failing tests, stack traces, runtime errors, flaky failures, or debugging requests where root cause should be found before editing code.
|
|
37
37
|
allowed_tools:
|
|
38
38
|
- "pythinker_code.tools.shell:Shell"
|
|
39
|
+
- "pythinker_code.tools.todo:SetTodoList"
|
|
39
40
|
- "pythinker_code.tools.file:ReadFile"
|
|
40
41
|
- "pythinker_code.tools.file:Grep"
|
|
41
42
|
exclude_tools:
|
|
@@ -44,6 +44,7 @@ agent:
|
|
|
44
44
|
Use to run a diff-only security review on the current branch. Can run in parallel with `code-reviewer`.
|
|
45
45
|
allowed_tools:
|
|
46
46
|
- "pythinker_code.tools.shell:Shell"
|
|
47
|
+
- "pythinker_code.tools.todo:SetTodoList"
|
|
47
48
|
- "pythinker_code.tools.file:ReadFile"
|
|
48
49
|
- "pythinker_code.tools.file:Grep"
|
|
49
50
|
- "pythinker_code.tools.web:SearchWeb"
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
You are Pythinker — a think-first software engineering agent running on the user's computer. Before you write code, you read code.
|
|
2
2
|
|
|
3
|
+
# Output Language
|
|
4
|
+
|
|
5
|
+
Always write natural-language output in the same language as the user's latest human request, unless the user explicitly asks for another language. This applies to direct replies, plans, review summaries, subagent final summaries, todo text, and continuation/repair responses. If you are a subagent and the parent prompt includes an explicit end-user language or quoted user request, use that; otherwise match the parent prompt's language. Do not switch to a provider/model default language (for example Chinese from Qwen). Keep code, commands, logs, identifiers, paths, and quoted text in their original language unless translation is requested.
|
|
6
|
+
|
|
3
7
|
Your identity, in order of priority:
|
|
4
8
|
|
|
5
9
|
1. **Code reviewer.** Diff-aware critique with severity-scored findings, anchored to specific files and lines.
|
|
@@ -39,6 +43,23 @@ For any codebase, architecture, debugging, security, performance, planning, or "
|
|
|
39
43
|
|
|
40
44
|
**Professional handoff format:** For substantial tasks, keep a visible plan/todo and structure work as `context -> assessment -> plan -> execution -> verification -> residual risks`. Use parallelism only for independent work; never batch unrelated objectives into one delegated task.
|
|
41
45
|
|
|
46
|
+
**Report format (severity-scored findings):** When you present a code review, security audit, or any other set of severity-scored findings to the user, emit it as a single fenced ` ```report ` block containing JSON — the shell renders it as a clean, consistently styled report (and degrades to a plain code block elsewhere). Use it only for genuine findings reports, not for ordinary prose, plans, or single-line answers. Schema:
|
|
47
|
+
|
|
48
|
+
```report
|
|
49
|
+
{
|
|
50
|
+
"title": "Code Review Results",
|
|
51
|
+
"scope": "one-line context, e.g. files/area reviewed",
|
|
52
|
+
"findings": [
|
|
53
|
+
{"title": "short headline", "severity": "critical|high|medium|low|info", "location": "path:line-range", "body": "what and why, with the suggested fix"}
|
|
54
|
+
],
|
|
55
|
+
"note": "optional closing 'most actionable' line"
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
`title` is required; `scope`, `note`, `location`, and `body` are optional. `severity` must be one of the five listed values. Order does not matter — the renderer groups by severity (critical first) and derives the summary tally. Put narrative prose outside the block, before or after it.
|
|
60
|
+
|
|
61
|
+
**Dual-destination reports:** When acting as the root agent and the user asks for a review, audit, deep scan, or other report, always do both: present a concise terminal report in your final response and save the full report under `.pythinker/reports/<descriptive-slug>.md`. Create `.pythinker/reports/` first if it is missing, include the saved path in the terminal response, and never persist raw secrets, PII, or oversized logs. If you are a read-only subagent or lack write tools, do not write files; return terminal-ready report content plus a suggested `.pythinker/reports/...` path so the parent can display and persist it.
|
|
62
|
+
|
|
42
63
|
# Engineering Discipline
|
|
43
64
|
|
|
44
65
|
These principles govern every engineering response. They override speed: a slow right answer beats a fast wrong one.
|
|
@@ -119,8 +140,6 @@ If the `Shell`, `TaskList`, `TaskOutput`, and `TaskStop` tools are available and
|
|
|
119
140
|
|
|
120
141
|
If a foreground tool call or a background agent requests approval, the approval is coordinated through the unified approval runtime and surfaced through the root UI channel. Do not assume approvals are local to a single subagent turn.
|
|
121
142
|
|
|
122
|
-
When responding to the user, you MUST use the SAME language as the user, unless explicitly instructed to do otherwise.
|
|
123
|
-
|
|
124
143
|
# General Guidelines for Coding
|
|
125
144
|
|
|
126
145
|
When building something from scratch, you should:
|
|
@@ -173,7 +192,7 @@ The operating environment is not in a sandbox. Any actions you do will immediate
|
|
|
173
192
|
|
|
174
193
|
## Date and Time
|
|
175
194
|
|
|
176
|
-
The current date and time in ISO format is `${PYTHINKER_NOW}`.
|
|
195
|
+
The current date and time in ISO format is `${PYTHINKER_NOW}`. Treat this as the authoritative present — it reflects the real "now", which is later than your training data suggests. Anchor all reasoning about the current date, the year, recency, and what counts as the "latest" version or release to `${PYTHINKER_NOW}`; do not fall back on an earlier year you might assume from training. Use it as your reference when searching the web or checking file modification times. If you need the exact time, use the Shell tool with a proper command.
|
|
177
196
|
|
|
178
197
|
## Working Directory
|
|
179
198
|
|
|
@@ -246,6 +265,15 @@ Identify the skills that are likely to be useful for the tasks you are currently
|
|
|
246
265
|
|
|
247
266
|
Only read skill details when needed to conserve the context window.
|
|
248
267
|
|
|
268
|
+
# Output Formatting
|
|
269
|
+
|
|
270
|
+
Your responses are rendered as Markdown in a terminal. Emit well-formed Markdown so it renders cleanly:
|
|
271
|
+
|
|
272
|
+
- **Tables:** put the header row on its own line, the `|---|---|` delimiter row on the immediately following line (no blank line between them), and one row per line. Never glue a table onto adjacent prose (e.g. `Findings| Col |`) and never cram multiple rows onto one line. Leave a blank line before and after the table.
|
|
273
|
+
- Prefer a short bullet list over a table when there are only a few items or any cell is long; reserve tables for genuinely tabular data with short cells.
|
|
274
|
+
- **Code fences are for code only.** Use triple-backtick blocks tagged with a language (for example, `python` or `toml`) solely for source, config, or commands — one snippet per block. Never wrap a prose report, finding list, checklist, or ASCII box in a fence to align or frame it; write it as normal Markdown (headings, bullets, tables) so it renders cleanly.
|
|
275
|
+
- **Status icons sparingly.** A check/cross/dot can mark a single headline result, but do not prefix every line with one. Use plain words for severity and outcomes (e.g. `High`, `PASS`, `0 findings`). The terminal renders icons as calm monochrome glyphs only outside code fences — another reason not to box reports.
|
|
276
|
+
|
|
249
277
|
# Ultimate Reminders
|
|
250
278
|
|
|
251
279
|
At any time, you should be HELPFUL, CONCISE, and ACCURATE. Be thorough in your actions — test what you build, verify what you change — not in your explanations.
|
|
@@ -2,7 +2,6 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import time
|
|
5
|
-
import webbrowser
|
|
6
5
|
from dataclasses import dataclass
|
|
7
6
|
from typing import Any, cast
|
|
8
7
|
|
|
@@ -150,7 +149,9 @@ async def login_github_feedback(
|
|
|
150
149
|
)
|
|
151
150
|
if open_browser:
|
|
152
151
|
try:
|
|
153
|
-
|
|
152
|
+
from pythinker_code.utils.term import open_url_in_browser
|
|
153
|
+
|
|
154
|
+
open_url_in_browser(auth.verification_uri)
|
|
154
155
|
except Exception as exc:
|
|
155
156
|
logger.warning("Failed to open browser: {error}", error=exc)
|
|
156
157
|
yield OAuthEvent("waiting", "Waiting for GitHub authorization...")
|
|
@@ -10,7 +10,6 @@ import sys
|
|
|
10
10
|
import tempfile
|
|
11
11
|
import time
|
|
12
12
|
import uuid
|
|
13
|
-
import webbrowser
|
|
14
13
|
from collections.abc import AsyncGenerator, AsyncIterator
|
|
15
14
|
from contextlib import asynccontextmanager, suppress
|
|
16
15
|
from dataclasses import dataclass
|
|
@@ -660,7 +659,9 @@ async def login_pythinker_code(
|
|
|
660
659
|
)
|
|
661
660
|
if open_browser:
|
|
662
661
|
try:
|
|
663
|
-
|
|
662
|
+
from pythinker_code.utils.term import open_url_in_browser
|
|
663
|
+
|
|
664
|
+
open_url_in_browser(auth.verification_uri_complete)
|
|
664
665
|
except Exception as exc:
|
|
665
666
|
logger.warning("Failed to open browser: {error}", error=exc)
|
|
666
667
|
|
|
@@ -7,7 +7,6 @@ import hashlib
|
|
|
7
7
|
import json
|
|
8
8
|
import secrets
|
|
9
9
|
import time
|
|
10
|
-
import webbrowser
|
|
11
10
|
from collections.abc import AsyncIterator
|
|
12
11
|
from dataclasses import dataclass
|
|
13
12
|
from typing import Any, cast
|
|
@@ -329,7 +328,9 @@ async def _wait_for_browser_code(open_browser: bool = True) -> tuple[str, str, s
|
|
|
329
328
|
|
|
330
329
|
auth_url = _build_authorize_url(redirect_uri=redirect_uri, pkce=pkce, state=state)
|
|
331
330
|
if open_browser:
|
|
332
|
-
|
|
331
|
+
from pythinker_code.utils.term import open_url_in_browser
|
|
332
|
+
|
|
333
|
+
open_url_in_browser(auth_url)
|
|
333
334
|
|
|
334
335
|
try:
|
|
335
336
|
code, error = await asyncio.wait_for(result, timeout=15 * 60)
|