pythinker-code 0.24.0__tar.gz → 0.25.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.25.0}/PKG-INFO +28 -27
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/README.md +26 -25
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/pyproject.toml +14 -2
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/CHANGELOG.md +14 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/agents/default/code_reviewer.yaml +1 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/agents/default/debugger.yaml +1 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/agents/default/security_reviewer.yaml +1 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/agents/default/system.md +25 -1
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/auth/github_feedback.py +3 -2
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/auth/oauth.py +3 -2
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/auth/openai.py +3 -2
- pythinker_code-0.25.0/src/pythinker_code/auth/opencode_go.py +357 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/background/agent_runner.py +26 -18
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/background/manager.py +283 -103
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/background/store.py +81 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/background/worker.py +52 -2
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/cli/__init__.py +31 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/cli/mcp.py +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/config.py +44 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/scratchpad.py +76 -14
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/soul/pythinkersoul.py +67 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/soul/toolset.py +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/agent/__init__.py +5 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/background/output.md +1 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/file/grep_local.py +20 -4
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/todo/__init__.py +12 -1
- pythinker_code-0.25.0/src/pythinker_code/tools/web/_allowlist.py +27 -0
- pythinker_code-0.25.0/src/pythinker_code/tools/web/fetch.md +1 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/web/fetch.py +101 -42
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/web/search.md +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/web/search.py +23 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/print/visualize.py +15 -1
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/__init__.py +68 -11
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/components/markdown.py +169 -1
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/components/messages.py +2 -1
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/components/render_utils.py +26 -9
- pythinker_code-0.25.0/src/pythinker_code/ui/shell/components/report.py +275 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/components/settings_list.py +16 -4
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/glyphs.py +11 -8
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/motion.py +9 -6
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/prompt.py +5 -6
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/selector.py +16 -5
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/slash.py +11 -191
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +2 -2
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +24 -1
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +3 -2
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +4 -4
- {pythinker_code-0.24.0 → pythinker_code-0.25.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.25.0/src/pythinker_code/web/static/assets/_baseUniq-BETuyuSd.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/arc-CegJbAFP.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/arc-9aCOI9DB.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-gRgnu-gr.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-purnwxgj.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-Dg5w_2Yh.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-CWJkQ8lw.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-CCef5OiF.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-CNLtpYDT.js +1 -1
- pythinker_code-0.25.0/src/pythinker_code/web/static/assets/channel-BZrJ1_EH.js +1 -0
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-EgaX5uMv.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-CxMQKWPK.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-DxrhgIEt.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-B-Sjvo9Q.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-CQVqjkPw.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-CAxNHDi-.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-CB92ALDq.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-efzZlF1X.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-Dx0SG_k_.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-CLE-PgkS.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-CPf0eYoM.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-DzeBoua8.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CCzKoWw1.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-DWiNjSHn.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-DRcEkhpm.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-UYL3QrRr.js +1 -1
- pythinker_code-0.25.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-DmBruagE.js +1 -0
- pythinker_code-0.25.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-DmBruagE.js +1 -0
- pythinker_code-0.25.0/src/pythinker_code/web/static/assets/clone-x4PiU-uh.js +1 -0
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-B9Gx7wfK.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-2PObM5Ub.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-Bk_TZfTb.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-BzG7eohs.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/cytoscape.esm-BHcnjk-H.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/cytoscape.esm-D8GEO0BE.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-Crkbecci.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-Dq4xiUtL.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CZZA6AcG.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-DFC71d2h.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-Cl9Bn4z0.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-Te_SRUeO.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-Cfd515FT.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-BiSlcy8L.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-bKIec5rn.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-CduNSzrC.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-QpAOui2R.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-CtFMWQpr.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-9b-6k-Ce.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-Cl1hY2iv.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-1jsNU7Xj.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-iPKWpJ0a.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/graph-BpD9mq1e.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/graph-DFyiQ_iC.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/index-CcDfQ78O.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/index-ClOjNFIa.js +2 -2
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/index-DOqWBZxx.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/index-Dfd6WqqI.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/index-JGsigFy8.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/index-v6n3kvtp.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-DDG7tF9O.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-DZcQqQGx.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-CbGNODS3.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-BJsGiEDw.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-C-9k-K2F.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-DYD8Cc2b.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/layout-C_z0jB06.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/layout-KNAe020y.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/linear-BvpHbFJ9.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/linear-F-ASHo5W.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-BQYgOUUq.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-BPp7ITVn.js +7 -7
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/mermaid.core-BJL5GYve.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/mermaid.core-DguUuNI2.js +5 -5
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/min-BEcwyy0D.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/min-CtILYf0e.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-DGJ3sluz.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-Cz5GuDHV.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-CopVB6-T.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-BZoqT-q3.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-BdniBu5I.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-xckz1CKJ.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-_-TE819T.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-TQ3Cky43.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-Q0nhrVAc.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-C0fe9iOM.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-CM9YS9lz.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-BRw2gAdM.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-CN07f0ow.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-DT4CUX8-.js +1 -1
- pythinker_code-0.25.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-DoANuOAR.js +1 -0
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-BLVxjxj5.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-CsLQ1mau.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-DkxAx6_v.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-BbC_5Wbj.js +1 -1
- pythinker_code-0.24.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-r872XVoE.js → pythinker_code-0.25.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-Ce0W0nFs.js +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/index.html +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/install.ps1 +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/install.sh +1 -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.25.0}/LICENSE +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/NOTICE +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/__main__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/acp/AGENTS.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/acp/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/acp/convert.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/acp/host.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/acp/mcp.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/acp/server.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/acp/session.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/acp/tools.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/acp/types.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/acp/version.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/agents/default/coder.yaml +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/agents/default/explore.yaml +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/agents/default/implementer.yaml +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/agents/default/plan.yaml +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/agents/default/review.yaml +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/agents/default/verifier.yaml +1 -1
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/agentspec.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/app.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/approval_runtime/models.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/auth/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/auth/deepseek.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/auth/lm_studio.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/auth/minimax.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/auth/ollama.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/auth/openrouter.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/auth/platforms.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/background/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/background/ids.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/background/models.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/background/summary.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/cli/__main__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/cli/debug.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/cli/export.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/cli/info.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/cli/plugin.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/cli/review.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/cli/secscan.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/cli/security_scan.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/cli/skill.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/cli/toad.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/cli/update.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/cli/vis.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/cli/web.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/constant.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/events.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/exception.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/execution_profiles.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/extensions.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/file_restore.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/hooks/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/hooks/config.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/hooks/engine.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/hooks/events.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/hooks/runner.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/llm.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/memory/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/memory/consolidation.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/memory/harvest.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/memory/recall.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/memory/recap.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/memory/retriever.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/memory/retriever_sqlite.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/memory/sanitize.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/metadata.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/native.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/notifications/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/notifications/llm.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/notifications/manager.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/notifications/models.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/notifications/notifier.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/notifications/store.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/notifications/wire.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/plugin/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/plugin/manager.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/plugin/tool.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/project_memory.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/prompt_templates.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/prompts/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/prompts/compact.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/prompts/init.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/py.typed +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/session.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/session_fork.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/session_state.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/share.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/skill/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/skill/flow/d2.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/skill/lockfile.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/soul/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/soul/agent.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/soul/approval.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/soul/btw.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/soul/compaction.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/soul/context.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/soul/denwarenji.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/soul/message.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/soul/permission.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/soul/slash.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/subagents/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/subagents/builder.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/subagents/core.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/subagents/discovery.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/subagents/git_context.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/subagents/models.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/subagents/output.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/subagents/registry.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/subagents/runner.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/subagents/store.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/telemetry/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/telemetry/config.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/telemetry/crash.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/telemetry/errors.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/telemetry/metrics.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/telemetry/otel.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/telemetry/sentry.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/telemetry/sink.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/AGENTS.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/agent/description.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/background/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/background/handoff.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/background/input.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/background/list.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/background/stop.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/display.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/file/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/file/glob.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/file/glob.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/file/grep.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/file/read.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/file/read.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/file/read_media.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/file/read_media.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/file/replace.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/file/replace.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/file/utils.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/file/write.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/file/write.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/memory/memory.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/plan/description.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/plan/enter.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/shell/bash.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/skill/description.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/test.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/think/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/think/think.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/utils.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/tools/web/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/print/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/console.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/debug.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/echo.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/replay.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/setup.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/startup.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/tips.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/update.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/usage.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/theme.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/ui/tui_config.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/aiohttp.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/aioqueue.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/broadcast.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/changelog.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/clipboard.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/datetime.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/diff.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/editor.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/environment.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/envvar.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/export.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/file_filter.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/frontmatter.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/io.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/logging.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/media_tags.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/message.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/path.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/proctitle.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/proxy.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/rich/columns.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/sensitive.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/server.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/signals.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/slashcmd.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/string.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/utils/typing.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/vis/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/vis/api/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/vis/api/sessions.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/vis/api/statistics.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/vis/api/system.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/vis/app.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.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.25.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/vis/static/index.html +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/api/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/api/config.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/api/open_in.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/api/sessions.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/app.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/auth.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/models.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/runner/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/runner/messages.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/runner/process.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/runner/worker.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/_headers +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.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.25.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B2P5VJ9v.css +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/static/logo.png +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/store/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/web/store/sessions.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/wire/__init__.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/wire/file.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/wire/protocol.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/wire/root_hub.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/wire/serde.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.0}/src/pythinker_code/wire/server.py +0 -0
- {pythinker_code-0.24.0 → pythinker_code-0.25.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.25.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,16 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
115
115
|
|
|
116
116
|
---
|
|
117
117
|
|
|
118
|
-
## 🆕 What's New in 0.
|
|
118
|
+
## 🆕 What's New in 0.25.0
|
|
119
119
|
|
|
120
|
-
-
|
|
121
|
-
- **
|
|
122
|
-
- **
|
|
123
|
-
- **
|
|
124
|
-
- **
|
|
120
|
+
- **`Fetch` 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. Every hop is now re-validated, closing the public→link-local bypass.
|
|
121
|
+
- **Web domain allowlist for `Fetch` and `Search`.** Set `web.allowed_domains` to restrict which hosts the web tools may reach — `Fetch` (every redirect hop included) and `Search` reject anything off the list. Leave it unset to keep web access unrestricted.
|
|
122
|
+
- **Crash-consistent background tasks.** Task state is serialised under a cross-process lock, terminal updates route through a single finalizer, and recovery reconciles records left divergent by a crash or kill without clobbering a live agent. Bash output is capped (default 50 MiB), kills escalate SIGTERM→SIGKILL, and aged terminal tasks are pruned (default 7 days).
|
|
123
|
+
- **Calmer TUI with live tool feedback.** Tool calls show a "preparing" row during approval, stream shell output as a running tail, and render a live Markdown preview as the model writes. The todo list no longer renders twice mid-turn, links open through a detached launcher, and the terminal is restored to a sane state on `SIGTERM`/`SIGQUIT` and at exit.
|
|
124
|
+
- **Steadier agent loop.** The model is nudged when a turn ends on a bare statement of intent, steered away from blocking on one background task while siblings run, and a `SetTodoList` whose todos arrive as a JSON string is parsed transparently instead of failing validation.
|
|
125
|
+
- **Unified report rendering.** Code review, verify, and security-review output share one standardized renderer, including `report` blocks emitted by skills and agents.
|
|
125
126
|
|
|
126
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
127
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.25.0`, or use the native installer for your platform from the [Releases page](https://github.com/TechMatrix-labs/pythinker-code/releases/latest).
|
|
127
128
|
|
|
128
129
|
|
|
129
130
|
---
|
|
@@ -213,7 +214,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
|
|
|
213
214
|
|
|
214
215
|
| Platform | Recommended install | Artifact source |
|
|
215
216
|
|---|---|---|
|
|
216
|
-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.
|
|
217
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.25.0.exe` from [Releases](https://github.com/TechMatrix-labs/pythinker-code/releases/latest) |
|
|
217
218
|
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/TechMatrix-labs/pythinker-code/releases/latest) |
|
|
218
219
|
| **<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
220
|
| **<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 +239,7 @@ pythinker # start the interactive TUI
|
|
|
238
239
|
|
|
239
240
|
### 🪟 Windows — native installer
|
|
240
241
|
|
|
241
|
-
`PythinkerSetup-0.
|
|
242
|
+
`PythinkerSetup-0.25.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
242
243
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
243
244
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
244
245
|
the change. **No UAC prompt.**
|
|
@@ -249,13 +250,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
249
250
|
|
|
250
251
|
# Or manually download the installer + checksum from the Releases page,
|
|
251
252
|
# verify with Get-FileHash, then run:
|
|
252
|
-
.\PythinkerSetup-0.
|
|
253
|
+
.\PythinkerSetup-0.25.0.exe
|
|
253
254
|
|
|
254
255
|
# Open a fresh PowerShell
|
|
255
256
|
pythinker --version
|
|
256
257
|
```
|
|
257
258
|
|
|
258
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
259
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.25.0.exe /ALLUSERS`
|
|
259
260
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
260
261
|
|
|
261
262
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -306,26 +307,26 @@ attached to every GitHub Release.
|
|
|
306
307
|
|
|
307
308
|
```sh
|
|
308
309
|
# Debian / Ubuntu (x86_64)
|
|
309
|
-
sudo dpkg -i pythinker-code_0.
|
|
310
|
+
sudo dpkg -i pythinker-code_0.25.0_amd64.deb
|
|
310
311
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
311
312
|
|
|
312
313
|
# Debian / Ubuntu (ARM64)
|
|
313
|
-
sudo dpkg -i pythinker-code_0.
|
|
314
|
+
sudo dpkg -i pythinker-code_0.25.0_arm64.deb
|
|
314
315
|
|
|
315
316
|
# 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.
|
|
317
|
+
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.25.0/pythinker-code-0.25.0.x86_64.rpm
|
|
318
|
+
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.25.0/pythinker-code-0.25.0.x86_64.rpm.sha256
|
|
319
|
+
sha256sum -c pythinker-code-0.25.0.x86_64.rpm.sha256
|
|
319
320
|
# Fedora / RHEL:
|
|
320
|
-
sudo dnf install ./pythinker-code-0.
|
|
321
|
+
sudo dnf install ./pythinker-code-0.25.0.x86_64.rpm
|
|
321
322
|
# openSUSE:
|
|
322
|
-
sudo zypper install ./pythinker-code-0.
|
|
323
|
+
sudo zypper install ./pythinker-code-0.25.0.x86_64.rpm
|
|
323
324
|
|
|
324
325
|
# 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.
|
|
326
|
+
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.25.0/pythinker-code-0.25.0.aarch64.rpm
|
|
327
|
+
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.25.0/pythinker-code-0.25.0.aarch64.rpm.sha256
|
|
328
|
+
sha256sum -c pythinker-code-0.25.0.aarch64.rpm.sha256
|
|
329
|
+
sudo dnf install ./pythinker-code-0.25.0.aarch64.rpm
|
|
329
330
|
```
|
|
330
331
|
|
|
331
332
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -334,8 +335,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
334
335
|
**Verify before install:**
|
|
335
336
|
|
|
336
337
|
```sh
|
|
337
|
-
sha256sum -c pythinker-code_0.
|
|
338
|
-
sha256sum -c pythinker-code-0.
|
|
338
|
+
sha256sum -c pythinker-code_0.25.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
339
|
+
sha256sum -c pythinker-code-0.25.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
339
340
|
```
|
|
340
341
|
|
|
341
342
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -365,7 +366,7 @@ at `~/.local/bin/pythinker`.
|
|
|
365
366
|
curl -fsSL https://pythinker.com/install.sh | bash
|
|
366
367
|
|
|
367
368
|
# Pin a specific version
|
|
368
|
-
curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.
|
|
369
|
+
curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.25.0
|
|
369
370
|
|
|
370
371
|
# Custom prefix (defaults to $HOME/.local)
|
|
371
372
|
curl -fsSL https://pythinker.com/install.sh | bash -s -- --prefix /opt/pythinker
|
|
@@ -50,15 +50,16 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
53
|
-
## 🆕 What's New in 0.
|
|
53
|
+
## 🆕 What's New in 0.25.0
|
|
54
54
|
|
|
55
|
-
-
|
|
56
|
-
- **
|
|
57
|
-
- **
|
|
58
|
-
- **
|
|
59
|
-
- **
|
|
55
|
+
- **`Fetch` 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. Every hop is now re-validated, closing the public→link-local bypass.
|
|
56
|
+
- **Web domain allowlist for `Fetch` and `Search`.** Set `web.allowed_domains` to restrict which hosts the web tools may reach — `Fetch` (every redirect hop included) and `Search` reject anything off the list. Leave it unset to keep web access unrestricted.
|
|
57
|
+
- **Crash-consistent background tasks.** Task state is serialised under a cross-process lock, terminal updates route through a single finalizer, and recovery reconciles records left divergent by a crash or kill without clobbering a live agent. Bash output is capped (default 50 MiB), kills escalate SIGTERM→SIGKILL, and aged terminal tasks are pruned (default 7 days).
|
|
58
|
+
- **Calmer TUI with live tool feedback.** Tool calls show a "preparing" row during approval, stream shell output as a running tail, and render a live Markdown preview as the model writes. The todo list no longer renders twice mid-turn, links open through a detached launcher, and the terminal is restored to a sane state on `SIGTERM`/`SIGQUIT` and at exit.
|
|
59
|
+
- **Steadier agent loop.** The model is nudged when a turn ends on a bare statement of intent, steered away from blocking on one background task while siblings run, and a `SetTodoList` whose todos arrive as a JSON string is parsed transparently instead of failing validation.
|
|
60
|
+
- **Unified report rendering.** Code review, verify, and security-review output share one standardized renderer, including `report` blocks emitted by skills and agents.
|
|
60
61
|
|
|
61
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
62
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.25.0`, or use the native installer for your platform from the [Releases page](https://github.com/TechMatrix-labs/pythinker-code/releases/latest).
|
|
62
63
|
|
|
63
64
|
|
|
64
65
|
---
|
|
@@ -148,7 +149,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
|
|
|
148
149
|
|
|
149
150
|
| Platform | Recommended install | Artifact source |
|
|
150
151
|
|---|---|---|
|
|
151
|
-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.
|
|
152
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.25.0.exe` from [Releases](https://github.com/TechMatrix-labs/pythinker-code/releases/latest) |
|
|
152
153
|
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/TechMatrix-labs/pythinker-code/releases/latest) |
|
|
153
154
|
| **<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
155
|
| **<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 +174,7 @@ pythinker # start the interactive TUI
|
|
|
173
174
|
|
|
174
175
|
### 🪟 Windows — native installer
|
|
175
176
|
|
|
176
|
-
`PythinkerSetup-0.
|
|
177
|
+
`PythinkerSetup-0.25.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
177
178
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
178
179
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
179
180
|
the change. **No UAC prompt.**
|
|
@@ -184,13 +185,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
184
185
|
|
|
185
186
|
# Or manually download the installer + checksum from the Releases page,
|
|
186
187
|
# verify with Get-FileHash, then run:
|
|
187
|
-
.\PythinkerSetup-0.
|
|
188
|
+
.\PythinkerSetup-0.25.0.exe
|
|
188
189
|
|
|
189
190
|
# Open a fresh PowerShell
|
|
190
191
|
pythinker --version
|
|
191
192
|
```
|
|
192
193
|
|
|
193
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
194
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.25.0.exe /ALLUSERS`
|
|
194
195
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
195
196
|
|
|
196
197
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -241,26 +242,26 @@ attached to every GitHub Release.
|
|
|
241
242
|
|
|
242
243
|
```sh
|
|
243
244
|
# Debian / Ubuntu (x86_64)
|
|
244
|
-
sudo dpkg -i pythinker-code_0.
|
|
245
|
+
sudo dpkg -i pythinker-code_0.25.0_amd64.deb
|
|
245
246
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
246
247
|
|
|
247
248
|
# Debian / Ubuntu (ARM64)
|
|
248
|
-
sudo dpkg -i pythinker-code_0.
|
|
249
|
+
sudo dpkg -i pythinker-code_0.25.0_arm64.deb
|
|
249
250
|
|
|
250
251
|
# 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.
|
|
252
|
+
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.25.0/pythinker-code-0.25.0.x86_64.rpm
|
|
253
|
+
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.25.0/pythinker-code-0.25.0.x86_64.rpm.sha256
|
|
254
|
+
sha256sum -c pythinker-code-0.25.0.x86_64.rpm.sha256
|
|
254
255
|
# Fedora / RHEL:
|
|
255
|
-
sudo dnf install ./pythinker-code-0.
|
|
256
|
+
sudo dnf install ./pythinker-code-0.25.0.x86_64.rpm
|
|
256
257
|
# openSUSE:
|
|
257
|
-
sudo zypper install ./pythinker-code-0.
|
|
258
|
+
sudo zypper install ./pythinker-code-0.25.0.x86_64.rpm
|
|
258
259
|
|
|
259
260
|
# 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.
|
|
261
|
+
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.25.0/pythinker-code-0.25.0.aarch64.rpm
|
|
262
|
+
curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.25.0/pythinker-code-0.25.0.aarch64.rpm.sha256
|
|
263
|
+
sha256sum -c pythinker-code-0.25.0.aarch64.rpm.sha256
|
|
264
|
+
sudo dnf install ./pythinker-code-0.25.0.aarch64.rpm
|
|
264
265
|
```
|
|
265
266
|
|
|
266
267
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -269,8 +270,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
269
270
|
**Verify before install:**
|
|
270
271
|
|
|
271
272
|
```sh
|
|
272
|
-
sha256sum -c pythinker-code_0.
|
|
273
|
-
sha256sum -c pythinker-code-0.
|
|
273
|
+
sha256sum -c pythinker-code_0.25.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
274
|
+
sha256sum -c pythinker-code-0.25.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
274
275
|
```
|
|
275
276
|
|
|
276
277
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -300,7 +301,7 @@ at `~/.local/bin/pythinker`.
|
|
|
300
301
|
curl -fsSL https://pythinker.com/install.sh | bash
|
|
301
302
|
|
|
302
303
|
# Pin a specific version
|
|
303
|
-
curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.
|
|
304
|
+
curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.25.0
|
|
304
305
|
|
|
305
306
|
# Custom prefix (defaults to $HOME/.local)
|
|
306
307
|
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.25.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,20 @@ GitHub Releases page; `0.8.0` is the new starting line.
|
|
|
15
15
|
|
|
16
16
|
## Unreleased
|
|
17
17
|
|
|
18
|
+
## 0.25.0 (2026-05-29)
|
|
19
|
+
|
|
20
|
+
### What changed in this release
|
|
21
|
+
|
|
22
|
+
- **`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.
|
|
23
|
+
- **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.
|
|
24
|
+
- **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).
|
|
25
|
+
- **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.
|
|
26
|
+
- **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.
|
|
27
|
+
- **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.
|
|
28
|
+
- **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.
|
|
29
|
+
|
|
30
|
+
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).
|
|
31
|
+
|
|
18
32
|
## 0.24.0 (2026-05-28)
|
|
19
33
|
|
|
20
34
|
### What changed in this release
|
{pythinker_code-0.24.0 → pythinker_code-0.25.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.25.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"
|
|
@@ -39,6 +39,21 @@ For any codebase, architecture, debugging, security, performance, planning, or "
|
|
|
39
39
|
|
|
40
40
|
**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
41
|
|
|
42
|
+
**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:
|
|
43
|
+
|
|
44
|
+
```report
|
|
45
|
+
{
|
|
46
|
+
"title": "Code Review Results",
|
|
47
|
+
"scope": "one-line context, e.g. files/area reviewed",
|
|
48
|
+
"findings": [
|
|
49
|
+
{"title": "short headline", "severity": "critical|high|medium|low|info", "location": "path:line-range", "body": "what and why, with the suggested fix"}
|
|
50
|
+
],
|
|
51
|
+
"note": "optional closing 'most actionable' line"
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
`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.
|
|
56
|
+
|
|
42
57
|
# Engineering Discipline
|
|
43
58
|
|
|
44
59
|
These principles govern every engineering response. They override speed: a slow right answer beats a fast wrong one.
|
|
@@ -173,7 +188,7 @@ The operating environment is not in a sandbox. Any actions you do will immediate
|
|
|
173
188
|
|
|
174
189
|
## Date and Time
|
|
175
190
|
|
|
176
|
-
The current date and time in ISO format is `${PYTHINKER_NOW}`.
|
|
191
|
+
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
192
|
|
|
178
193
|
## Working Directory
|
|
179
194
|
|
|
@@ -246,6 +261,15 @@ Identify the skills that are likely to be useful for the tasks you are currently
|
|
|
246
261
|
|
|
247
262
|
Only read skill details when needed to conserve the context window.
|
|
248
263
|
|
|
264
|
+
# Output Formatting
|
|
265
|
+
|
|
266
|
+
Your responses are rendered as Markdown in a terminal. Emit well-formed Markdown so it renders cleanly:
|
|
267
|
+
|
|
268
|
+
- **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.
|
|
269
|
+
- 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.
|
|
270
|
+
- **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.
|
|
271
|
+
- **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.
|
|
272
|
+
|
|
249
273
|
# Ultimate Reminders
|
|
250
274
|
|
|
251
275
|
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)
|