pythinker-code 0.9.0__tar.gz → 0.11.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.9.0 → pythinker_code-0.11.0}/PKG-INFO +18 -12
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/README.md +16 -10
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/pyproject.toml +2 -2
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/CHANGELOG.md +27 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/app.py +5 -2
- pythinker_code-0.11.0/src/pythinker_code/file_restore.py +83 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/session_state.py +13 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/soul/agent.py +5 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/soul/approval.py +9 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/soul/pythinkersoul.py +67 -1
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/file/replace.py +3 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/file/write.py +3 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -1
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/components/footer.py +10 -21
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/components/markdown.py +6 -23
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/components/tool_execution.py +4 -0
- pythinker_code-0.11.0/src/pythinker_code/ui/shell/design_system.py +105 -0
- pythinker_code-0.11.0/src/pythinker_code/ui/shell/motion.py +79 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/slash.py +236 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/spinner_words.py +1 -1
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +6 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +11 -1
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +3 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +3 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +32 -1
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +7 -1
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +7 -1
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +1 -1
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +3 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +3 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +3 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +3 -1
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +13 -2
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +5 -0
- pythinker_code-0.11.0/src/pythinker_code/ui/shell/visualize/_activity_tree.py +47 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +29 -36
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +28 -68
- pythinker_code-0.11.0/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +60 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +2 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +32 -28
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +34 -41
- pythinker_code-0.11.0/src/pythinker_code/ui/shell/visualize/_transcript.py +40 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +18 -17
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/theme.py +20 -2
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/clipboard.py +24 -1
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/rich/markdown.py +15 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/_baseUniq-CLYo-eYc.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/_baseUniq-C8Vm-s5G.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/arc-mC4g2zfg.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/arc-Bl8TmgUm.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-FmgnYRJb.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-BVGBY1Zr.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-C0qpB9e0.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-B_v49l_U.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-ByVx8Ywn.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-DXl05v-V.js +1 -1
- pythinker_code-0.11.0/src/pythinker_code/web/static/assets/channel-BYPABu6z.js +1 -0
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-wZ1dc8_P.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DpqTdhHZ.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-ylcVoZDW.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-BfJzLxfB.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-B3zDYjiB.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-C9tHMiZl.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-Byycj1Wy.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-DEGEEj0Z.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-Cgro0Pqg.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-CQ1KKOHk.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-BdU7uRdS.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-B4mTpmM0.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-qD4PdXAn.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CDOrj-r7.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-BqnSmzp_.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-QhgZOUxZ.js +1 -1
- pythinker_code-0.11.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-Cp1WyJdn.js +1 -0
- pythinker_code-0.11.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-Cp1WyJdn.js +1 -0
- pythinker_code-0.11.0/src/pythinker_code/web/static/assets/clone-gYdnM1ik.js +1 -0
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-D-cRJHCv.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-B_uMiJXe.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-DWFwWp_z.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-BY9LVGid.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/cytoscape.esm-u8DpDuAe.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/cytoscape.esm-BGbOmFRB.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-CSPpX_7_.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-sur5p5NW.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-DUq5-xrG.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CrF8_xNX.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-kzcEBaU4.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-CsFFEfnc.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-7geS4IkB.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-DoC68K_b.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-zVuDNqu7.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-Di7dyqAd.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-DG_-c07q.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-CycbaIsk.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-MSVeqymQ.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-CQi9ssAv.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-BlbwPpDQ.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-DN5v_FG9.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/graph-BbW0SHBo.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/graph-C2ZsTy1B.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/index-CRxnqkbf.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/index-C1bFMExm.js +2 -2
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/index-3X9fT2mZ.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/index-C36KD0lP.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/index-E_AGlbef.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/index-Dtq-M8w-.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-B0KZTmoa.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-BsSIH3Qo.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-BvlOjkBR.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-CRuVO9aw.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-B8ybpTIE.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-R4QyOuvf.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/layout-D_Rax6Qq.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/layout-CpWvp0O7.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/linear-Cs4yIP8t.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/linear-DUulTEqk.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-CFV6Atto.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DDAXDNOk.js +7 -7
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/mermaid.core-BY0ELBvq.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/mermaid.core-Do7HhOuC.js +5 -5
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/min-Bs8jBXMW.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/min-BiFWtQ8R.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-Cg3rLEXy.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-CYFQjmK7.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-DwQ97SEk.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-Dwg66_J9.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-D-pKdvp1.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-Dx_gyC0O.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-M7yGkeOP.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-yKyOcalB.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-VXTqg5Sd.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-D68f_psT.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-BjVjf4_O.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-C1hB4zgM.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-BUkn1DGi.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-6XdAmwqs.js +1 -1
- pythinker_code-0.11.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-DFQqtI5_.js +1 -0
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-D58FWsX4.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-CJG-qhm_.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-ky_39j1t.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-YaGyt4VQ.js +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-DXAaaG9C.js → pythinker_code-0.11.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-Zr6-qP0W.js +1 -1
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/index.html +1 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/channel-tCyj3CPG.js +0 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-OEjNCjm2.js +0 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-OEjNCjm2.js +0 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/clone-Dz5N6JGI.js +0 -1
- pythinker_code-0.9.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-CWssh2Re.js +0 -1
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/LICENSE +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/NOTICE +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/__main__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/acp/AGENTS.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/acp/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/acp/convert.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/acp/host.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/acp/mcp.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/acp/server.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/acp/session.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/acp/tools.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/acp/types.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/acp/version.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/agents/default/review.yaml +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/agents/default/system.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/agentspec.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/approval_runtime/models.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/auth/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/auth/deepseek.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/auth/github_feedback.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/auth/lm_studio.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/auth/minimax.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/auth/oauth.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/auth/ollama.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/auth/openai.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/auth/opencode_go.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/auth/openrouter.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/auth/platforms.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/background/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/background/agent_runner.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/background/ids.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/background/manager.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/background/models.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/background/store.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/background/summary.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/background/worker.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/cli/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/cli/__main__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/cli/debug.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/cli/export.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/cli/info.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/cli/mcp.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/cli/plugin.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/cli/review.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/cli/secscan.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/cli/security_scan.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/cli/toad.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/cli/update.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/cli/vis.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/cli/web.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/config.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/constant.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/events.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/exception.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/extensions.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/hooks/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/hooks/config.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/hooks/engine.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/hooks/events.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/hooks/runner.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/llm.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/metadata.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/notifications/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/notifications/llm.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/notifications/manager.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/notifications/models.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/notifications/notifier.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/notifications/store.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/notifications/wire.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/plugin/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/plugin/manager.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/plugin/tool.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/prompt_templates.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/prompts/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/prompts/compact.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/prompts/init.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/py.typed +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/session.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/session_fork.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/share.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/skill/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/skill/flow/d2.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/soul/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/soul/btw.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/soul/compaction.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/soul/context.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/soul/denwarenji.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/soul/message.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/soul/permission.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/soul/slash.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/soul/toolset.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/subagents/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/subagents/builder.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/subagents/core.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/subagents/discovery.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/subagents/git_context.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/subagents/models.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/subagents/output.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/subagents/registry.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/subagents/runner.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/subagents/store.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/telemetry/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/telemetry/config.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/telemetry/crash.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/telemetry/errors.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/telemetry/metrics.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/telemetry/otel.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/telemetry/sentry.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/telemetry/sink.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/AGENTS.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/agent/description.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/background/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/background/list.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/background/output.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/background/stop.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/display.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/file/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/file/glob.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/file/glob.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/file/grep.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/file/read.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/file/read.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/file/read_media.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/file/read_media.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/file/replace.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/file/utils.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/file/write.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/plan/description.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/plan/enter.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/shell/bash.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/test.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/think/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/think/think.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/utils.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/web/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/web/fetch.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/web/fetch.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/web/search.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/tools/web/search.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/print/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/print/visualize.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/console.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/debug.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/echo.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/prompt.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/replay.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/selector.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/setup.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/startup.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/update.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/usage.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/tui_config.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/aiohttp.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/aioqueue.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/broadcast.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/changelog.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/datetime.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/diff.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/editor.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/environment.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/envvar.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/export.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/file_filter.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/frontmatter.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/io.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/logging.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/media_tags.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/message.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/path.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/proctitle.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/proxy.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/rich/columns.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/sensitive.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/server.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/signals.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/slashcmd.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/string.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/term.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/utils/typing.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/vis/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/vis/api/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/vis/api/sessions.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/vis/api/statistics.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/vis/api/system.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/vis/app.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/vis/static/index.html +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/api/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/api/config.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/api/open_in.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/api/sessions.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/app.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/auth.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/models.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/runner/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/runner/messages.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/runner/process.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/runner/worker.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B2P5VJ9v.css +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/static/logo.png +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/store/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/web/store/sessions.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/wire/__init__.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/wire/file.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/wire/protocol.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/wire/root_hub.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/wire/serde.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/wire/server.py +0 -0
- {pythinker_code-0.9.0 → pythinker_code-0.11.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.11.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
|
|
@@ -23,7 +23,7 @@ Requires-Dist: agent-client-protocol==0.8.0
|
|
|
23
23
|
Requires-Dist: aiofiles>=24.0,<26.0
|
|
24
24
|
Requires-Dist: aiohttp==3.13.4
|
|
25
25
|
Requires-Dist: typer==0.21.1
|
|
26
|
-
Requires-Dist: pythinker-core[contrib]==1.1.
|
|
26
|
+
Requires-Dist: pythinker-core[contrib]==1.1.1
|
|
27
27
|
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
|
|
@@ -115,16 +115,22 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
115
115
|
|
|
116
116
|
---
|
|
117
117
|
|
|
118
|
-
## 🆕 What's New in 0.
|
|
119
|
-
|
|
120
|
-
- **
|
|
121
|
-
- **
|
|
122
|
-
- **
|
|
123
|
-
- **
|
|
124
|
-
- **
|
|
125
|
-
- **
|
|
126
|
-
|
|
127
|
-
|
|
118
|
+
## 🆕 What's New in 0.11.0
|
|
119
|
+
|
|
120
|
+
- **Fixed PyPI install conflict (was failing on Windows and every other platform).** The published `pythinker-core 1.1.0` capped `mcp<1.17` while `fastmcp==3.2.0` required `mcp>=1.24.0`, so `pip install pythinker-code==0.10.0` could not resolve. 0.11.0 pins the republished `pythinker-core 1.1.1` whose `mcp>=1.23,<2` constraint is compatible with `fastmcp`.
|
|
121
|
+
- **Blackbox-style TUI port — phase 1.** New shell design primitives, compact transcript activity rows, motion status, standardized dialogs, aligned footer styling, and a restyled tool-result surface. The TUI now shares one visual language across rows, dialogs, and motion.
|
|
122
|
+
- **Refreshed accent palette.** Dark/light TUI accent retuned to sky-blue (`#7dd3fc` / `#0284c7`) for better contrast on the new surfaces.
|
|
123
|
+
- **Report + markdown polish.** Improved spacing and consistent code-block rendering in report output.
|
|
124
|
+
- **Live stream + thinking indicators.** Rotating thinking-word indicator restored, with a leading space before the live stream status.
|
|
125
|
+
- **Tool failure recovery improvements.** The agent loop now handles malformed or empty tool-call responses more gracefully and can continue the session instead of leaving the UI stuck after a bad provider turn.
|
|
126
|
+
- **Safer file edits.** File write and replace tools now create restore points before mutating files, giving sessions a clearer recovery path after risky changes.
|
|
127
|
+
- **Session UX state tracking.** Runtime session state now records additional UX metadata so shell surfaces can provide better continuity across long-running work.
|
|
128
|
+
- **Shell command enhancements.** New shell slash-command plumbing improves discoverability and keeps interactive workflows smoother.
|
|
129
|
+
- **TUI renderer polish.** Tool cards now share more consistent status glyphs, truncation behavior, and result summaries across bash, read, write, edit, grep, find, web, subagent, background, ask-user, and think renderers.
|
|
130
|
+
- **Clipboard handling hardening.** Clipboard helpers now degrade more cleanly when platform clipboard access is unavailable.
|
|
131
|
+
- **Release and TUI specs.** The repository now includes the blackbox TUI port design and a visual smoke-test criterion for future terminal UI work.
|
|
132
|
+
|
|
133
|
+
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.11.0`.
|
|
128
134
|
|
|
129
135
|
|
|
130
136
|
---
|
|
@@ -50,16 +50,22 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
53
|
-
## 🆕 What's New in 0.
|
|
54
|
-
|
|
55
|
-
- **
|
|
56
|
-
- **
|
|
57
|
-
- **
|
|
58
|
-
- **
|
|
59
|
-
- **
|
|
60
|
-
- **
|
|
61
|
-
|
|
62
|
-
|
|
53
|
+
## 🆕 What's New in 0.11.0
|
|
54
|
+
|
|
55
|
+
- **Fixed PyPI install conflict (was failing on Windows and every other platform).** The published `pythinker-core 1.1.0` capped `mcp<1.17` while `fastmcp==3.2.0` required `mcp>=1.24.0`, so `pip install pythinker-code==0.10.0` could not resolve. 0.11.0 pins the republished `pythinker-core 1.1.1` whose `mcp>=1.23,<2` constraint is compatible with `fastmcp`.
|
|
56
|
+
- **Blackbox-style TUI port — phase 1.** New shell design primitives, compact transcript activity rows, motion status, standardized dialogs, aligned footer styling, and a restyled tool-result surface. The TUI now shares one visual language across rows, dialogs, and motion.
|
|
57
|
+
- **Refreshed accent palette.** Dark/light TUI accent retuned to sky-blue (`#7dd3fc` / `#0284c7`) for better contrast on the new surfaces.
|
|
58
|
+
- **Report + markdown polish.** Improved spacing and consistent code-block rendering in report output.
|
|
59
|
+
- **Live stream + thinking indicators.** Rotating thinking-word indicator restored, with a leading space before the live stream status.
|
|
60
|
+
- **Tool failure recovery improvements.** The agent loop now handles malformed or empty tool-call responses more gracefully and can continue the session instead of leaving the UI stuck after a bad provider turn.
|
|
61
|
+
- **Safer file edits.** File write and replace tools now create restore points before mutating files, giving sessions a clearer recovery path after risky changes.
|
|
62
|
+
- **Session UX state tracking.** Runtime session state now records additional UX metadata so shell surfaces can provide better continuity across long-running work.
|
|
63
|
+
- **Shell command enhancements.** New shell slash-command plumbing improves discoverability and keeps interactive workflows smoother.
|
|
64
|
+
- **TUI renderer polish.** Tool cards now share more consistent status glyphs, truncation behavior, and result summaries across bash, read, write, edit, grep, find, web, subagent, background, ask-user, and think renderers.
|
|
65
|
+
- **Clipboard handling hardening.** Clipboard helpers now degrade more cleanly when platform clipboard access is unavailable.
|
|
66
|
+
- **Release and TUI specs.** The repository now includes the blackbox TUI port design and a visual smoke-test criterion for future terminal UI work.
|
|
67
|
+
|
|
68
|
+
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.11.0`.
|
|
63
69
|
|
|
64
70
|
|
|
65
71
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "pythinker-code"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.11.0"
|
|
4
4
|
description = "Pythinker Code is your next CLI agent."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -26,7 +26,7 @@ dependencies = [
|
|
|
26
26
|
"aiofiles>=24.0,<26.0",
|
|
27
27
|
"aiohttp==3.13.4",
|
|
28
28
|
"typer==0.21.1",
|
|
29
|
-
"pythinker-core[contrib]==1.1.
|
|
29
|
+
"pythinker-core[contrib]==1.1.1",
|
|
30
30
|
# notify-py (via batrachian-toad) caps loguru at <=0.6.0 on 3.14+.
|
|
31
31
|
"loguru>=0.6.0,<0.7",
|
|
32
32
|
"prompt-toolkit==3.0.52",
|
|
@@ -15,6 +15,33 @@ GitHub Releases page; `0.8.0` is the new starting line.
|
|
|
15
15
|
|
|
16
16
|
## Unreleased
|
|
17
17
|
|
|
18
|
+
## 0.11.0 (2026-05-22)
|
|
19
|
+
|
|
20
|
+
### What changed in this release
|
|
21
|
+
|
|
22
|
+
- **Fixed PyPI install conflict (was failing on Windows and every other platform).** `pip install pythinker-code==0.10.0` failed with `fastmcp 3.2.0 depends on mcp<2.0 and >=1.24.0` vs `pythinker-core 1.1.0 depends on mcp<1.17 and >=1`. 0.11.0 pins the republished `pythinker-core 1.1.1`, whose widened `mcp>=1.23,<2` constraint lets the resolver pick a single `mcp` version compatible with `fastmcp==3.2.0`.
|
|
23
|
+
- **Blackbox-style TUI port — phase 1.** Shell design primitives, compact transcript activity rows, blackbox-style motion status, standardized shell dialogs, aligned footer status styling, and a restyled tool-result surface land together. The TUI now shares a coherent visual language across rows, dialogs, and motion.
|
|
24
|
+
- **Refreshed TUI accent palette.** Dark/light theme accent retuned to a cleaner sky-blue (`#7dd3fc` dark, `#0284c7` light) for better contrast against the new tool-result surfaces.
|
|
25
|
+
- **Markdown + report polish.** Report spacing and markdown code blocks render with improved breathing room and consistent fences.
|
|
26
|
+
- **Rotating thinking-word indicator restored** with a leading space before the live stream status so the spinner no longer abuts surrounding text.
|
|
27
|
+
- **Internal audit + smoke evaluation.** A blackbox TUI scope map, prompt/agent audit, and a recorded visual smoke evaluation join the repo to govern future TUI work.
|
|
28
|
+
|
|
29
|
+
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.11.0`.
|
|
30
|
+
|
|
31
|
+
## 0.10.0 (2026-05-22)
|
|
32
|
+
|
|
33
|
+
### What changed in this release
|
|
34
|
+
|
|
35
|
+
- **Tool failure recovery improvements.** The agent loop now handles malformed or empty tool-call responses more gracefully and can continue the session instead of leaving the UI stuck after a bad provider turn.
|
|
36
|
+
- **Safer file edits.** File write and replace tools now create restore points before mutating files, giving sessions a clearer recovery path after risky changes.
|
|
37
|
+
- **Session UX state tracking.** Runtime session state now records additional UX metadata so shell surfaces can provide better continuity across long-running work.
|
|
38
|
+
- **Shell command enhancements.** New shell slash-command plumbing improves discoverability and keeps interactive workflows smoother.
|
|
39
|
+
- **TUI renderer polish.** Tool cards now share more consistent status glyphs, truncation behavior, and result summaries across bash, read, write, edit, grep, find, web, subagent, background, ask-user, and think renderers.
|
|
40
|
+
- **Clipboard handling hardening.** Clipboard helpers now degrade more cleanly when platform clipboard access is unavailable.
|
|
41
|
+
- **Release and TUI specs.** The repository now includes the blackbox TUI port design and a visual smoke-test criterion for future terminal UI work.
|
|
42
|
+
|
|
43
|
+
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.10.0`.
|
|
44
|
+
|
|
18
45
|
## 0.9.0 (2026-05-21)
|
|
19
46
|
|
|
20
47
|
### What changed in this release
|
|
@@ -41,7 +41,7 @@ if TYPE_CHECKING:
|
|
|
41
41
|
_CWD_LOCK = asyncio.Lock()
|
|
42
42
|
|
|
43
43
|
|
|
44
|
-
def _safe_git_branch(cwd: str | Path) -> str | None:
|
|
44
|
+
def _safe_git_branch(cwd: str | Path | HostPath) -> str | None:
|
|
45
45
|
"""Return the current git branch name, or ``None`` outside a repo / on error."""
|
|
46
46
|
import subprocess
|
|
47
47
|
|
|
@@ -49,6 +49,7 @@ def _safe_git_branch(cwd: str | Path) -> str | None:
|
|
|
49
49
|
result = subprocess.run(
|
|
50
50
|
["git", "-C", str(cwd), "branch", "--show-current"],
|
|
51
51
|
capture_output=True,
|
|
52
|
+
encoding="utf-8",
|
|
52
53
|
text=True,
|
|
53
54
|
timeout=1.0,
|
|
54
55
|
check=False,
|
|
@@ -752,7 +753,9 @@ class PythinkerCLI:
|
|
|
752
753
|
welcome_info.append(WelcomeInfoItem(name="Branch", value=branch_name))
|
|
753
754
|
welcome_info.append(WelcomeInfoItem(name="Session", value=self._runtime.session.id))
|
|
754
755
|
try:
|
|
755
|
-
auto_save_path = str(
|
|
756
|
+
auto_save_path = str(
|
|
757
|
+
shorten_home(HostPath.unsafe_from_local_path(self._runtime.session.context_file))
|
|
758
|
+
)
|
|
756
759
|
except Exception:
|
|
757
760
|
auto_save_path = ""
|
|
758
761
|
if auto_save_path:
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import base64
|
|
4
|
+
import time
|
|
5
|
+
import uuid
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
from pydantic import BaseModel
|
|
9
|
+
|
|
10
|
+
from pythinker_code.session import Session
|
|
11
|
+
from pythinker_code.utils.io import atomic_json_write
|
|
12
|
+
|
|
13
|
+
_RESTORE_DIR = "file_restore_points"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class FileRestorePoint(BaseModel):
|
|
17
|
+
id: str
|
|
18
|
+
created_at: float
|
|
19
|
+
tool_name: str
|
|
20
|
+
path: Path
|
|
21
|
+
existed: bool
|
|
22
|
+
content_b64: str | None = None
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _restore_dir(session: Session) -> Path:
|
|
26
|
+
path = session.dir / _RESTORE_DIR
|
|
27
|
+
path.mkdir(parents=True, exist_ok=True)
|
|
28
|
+
return path
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _restore_file(session: Session, restore_id: str) -> Path:
|
|
32
|
+
return _restore_dir(session) / f"{restore_id}.json"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def create_file_restore_point(
|
|
36
|
+
session: Session,
|
|
37
|
+
*,
|
|
38
|
+
tool_name: str,
|
|
39
|
+
path: str | Path,
|
|
40
|
+
) -> FileRestorePoint:
|
|
41
|
+
target = Path(path)
|
|
42
|
+
existed = target.exists()
|
|
43
|
+
content_b64 = None
|
|
44
|
+
if existed and target.is_file():
|
|
45
|
+
content_b64 = base64.b64encode(target.read_bytes()).decode("utf-8")
|
|
46
|
+
|
|
47
|
+
point = FileRestorePoint(
|
|
48
|
+
id=f"{int(time.time() * 1000)}-{uuid.uuid4().hex[:8]}",
|
|
49
|
+
created_at=time.time(),
|
|
50
|
+
tool_name=tool_name,
|
|
51
|
+
path=target,
|
|
52
|
+
existed=existed,
|
|
53
|
+
content_b64=content_b64,
|
|
54
|
+
)
|
|
55
|
+
atomic_json_write(point.model_dump(mode="json"), _restore_file(session, point.id))
|
|
56
|
+
return point
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def list_file_restore_points(
|
|
60
|
+
session: Session, *, limit: int | None = None
|
|
61
|
+
) -> list[FileRestorePoint]:
|
|
62
|
+
points: list[FileRestorePoint] = []
|
|
63
|
+
for path in _restore_dir(session).glob("*.json"):
|
|
64
|
+
try:
|
|
65
|
+
points.append(FileRestorePoint.model_validate_json(path.read_text(encoding="utf-8")))
|
|
66
|
+
except Exception:
|
|
67
|
+
continue
|
|
68
|
+
points.sort(key=lambda point: (point.created_at, point.id), reverse=True)
|
|
69
|
+
return points[:limit] if limit is not None else points
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def restore_file_restore_point(session: Session, restore_id: str) -> FileRestorePoint:
|
|
73
|
+
point = FileRestorePoint.model_validate_json(
|
|
74
|
+
_restore_file(session, restore_id).read_text(encoding="utf-8")
|
|
75
|
+
)
|
|
76
|
+
if not point.existed:
|
|
77
|
+
point.path.unlink(missing_ok=True)
|
|
78
|
+
return point
|
|
79
|
+
|
|
80
|
+
point.path.parent.mkdir(parents=True, exist_ok=True)
|
|
81
|
+
content = base64.b64decode(point.content_b64 or "")
|
|
82
|
+
point.path.write_bytes(content)
|
|
83
|
+
return point
|
|
@@ -18,6 +18,17 @@ class ApprovalStateData(BaseModel):
|
|
|
18
18
|
auto_approve_actions: set[str] = Field(default_factory=set)
|
|
19
19
|
|
|
20
20
|
|
|
21
|
+
class TrustStateData(BaseModel):
|
|
22
|
+
trusted: bool = False
|
|
23
|
+
safe_mode: bool = True
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class AccessibilityStateData(BaseModel):
|
|
27
|
+
plain_output: bool = False
|
|
28
|
+
animations: bool = True
|
|
29
|
+
symbols: Literal["unicode", "ascii"] = "unicode"
|
|
30
|
+
|
|
31
|
+
|
|
21
32
|
class TodoItemState(BaseModel):
|
|
22
33
|
"""A single todo item stored in session or subagent state."""
|
|
23
34
|
|
|
@@ -28,6 +39,8 @@ class TodoItemState(BaseModel):
|
|
|
28
39
|
class SessionState(BaseModel):
|
|
29
40
|
version: int = 1
|
|
30
41
|
approval: ApprovalStateData = Field(default_factory=ApprovalStateData)
|
|
42
|
+
trust: TrustStateData = Field(default_factory=TrustStateData)
|
|
43
|
+
accessibility: AccessibilityStateData = Field(default_factory=AccessibilityStateData)
|
|
31
44
|
additional_dirs: list[str] = Field(default_factory=list)
|
|
32
45
|
custom_title: str | None = None
|
|
33
46
|
title_generated: bool = False
|
|
@@ -288,6 +288,9 @@ class Runtime:
|
|
|
288
288
|
|
|
289
289
|
# Merge invocation flags with persisted session state.
|
|
290
290
|
effective_yolo = yolo or session.state.approval.yolo
|
|
291
|
+
# An explicit --yolo invocation is already a deliberate trust decision for
|
|
292
|
+
# this run, so it must not deadlock non-interactive/e2e flows behind safe mode.
|
|
293
|
+
effective_safe_mode = False if yolo else session.state.trust.safe_mode
|
|
291
294
|
if auto and not session.state.approval.auto:
|
|
292
295
|
session.state.approval.auto = True
|
|
293
296
|
session.save_state()
|
|
@@ -297,12 +300,14 @@ class Runtime:
|
|
|
297
300
|
session.state.approval.yolo = approval_state.yolo
|
|
298
301
|
session.state.approval.auto = approval_state.auto
|
|
299
302
|
session.state.approval.auto_approve_actions = set(approval_state.auto_approve_actions)
|
|
303
|
+
session.state.trust.safe_mode = approval_state.safe_mode
|
|
300
304
|
session.save_state()
|
|
301
305
|
|
|
302
306
|
approval_state = ApprovalState(
|
|
303
307
|
yolo=effective_yolo,
|
|
304
308
|
auto=session.state.approval.auto,
|
|
305
309
|
runtime_auto=runtime_auto,
|
|
310
|
+
safe_mode=effective_safe_mode,
|
|
306
311
|
auto_approve_actions=saved_actions,
|
|
307
312
|
on_change=_on_approval_change,
|
|
308
313
|
)
|
|
@@ -58,6 +58,7 @@ class ApprovalState:
|
|
|
58
58
|
yolo: bool = False,
|
|
59
59
|
auto: bool = False,
|
|
60
60
|
runtime_auto: bool = False,
|
|
61
|
+
safe_mode: bool = False,
|
|
61
62
|
auto_approve_actions: set[str] | None = None,
|
|
62
63
|
on_change: Callable[[], None] | None = None,
|
|
63
64
|
):
|
|
@@ -69,6 +70,8 @@ class ApprovalState:
|
|
|
69
70
|
"""
|
|
70
71
|
self.runtime_auto = runtime_auto
|
|
71
72
|
"""Invocation-only auto flag, e.g. ``--auto`` or ``--print``. Not persisted."""
|
|
73
|
+
self.safe_mode = safe_mode
|
|
74
|
+
"""When true, all auto-approval paths are suppressed."""
|
|
72
75
|
self.auto_approve_actions: set[str] = auto_approve_actions or set()
|
|
73
76
|
"""Set of action names that should automatically be approved."""
|
|
74
77
|
self._on_change = on_change
|
|
@@ -120,12 +123,18 @@ class Approval:
|
|
|
120
123
|
"""Toggle invocation-only auto mode without persisting it."""
|
|
121
124
|
self._state.runtime_auto = auto
|
|
122
125
|
|
|
126
|
+
def set_safe_mode(self, safe_mode: bool) -> None:
|
|
127
|
+
self._state.safe_mode = safe_mode
|
|
128
|
+
self._state.notify_change()
|
|
129
|
+
|
|
123
130
|
def is_auto_approve(self) -> bool:
|
|
124
131
|
"""True when tool calls should be auto-approved.
|
|
125
132
|
|
|
126
133
|
Auto mode implies auto-approve, so this returns True whenever either the
|
|
127
134
|
explicit yolo flag or auto mode is set.
|
|
128
135
|
"""
|
|
136
|
+
if self._state.safe_mode:
|
|
137
|
+
return False
|
|
129
138
|
return self._state.yolo or self.is_auto()
|
|
130
139
|
|
|
131
140
|
def is_yolo(self) -> bool:
|
|
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import contextlib
|
|
5
|
+
import re
|
|
5
6
|
import time
|
|
6
7
|
import uuid
|
|
7
8
|
from collections.abc import Awaitable, Callable, Sequence
|
|
@@ -20,7 +21,7 @@ from pythinker_core.chat_provider import (
|
|
|
20
21
|
APITimeoutError,
|
|
21
22
|
RetryableChatProvider,
|
|
22
23
|
)
|
|
23
|
-
from pythinker_core.message import Message
|
|
24
|
+
from pythinker_core.message import Message, ToolCall
|
|
24
25
|
from tenacity import RetryCallState, retry_if_exception, stop_after_attempt, wait_exponential_jitter
|
|
25
26
|
|
|
26
27
|
from pythinker_code.approval_runtime import (
|
|
@@ -166,6 +167,54 @@ def classify_api_error(e: Exception) -> tuple[str, int | None]:
|
|
|
166
167
|
type StepStopReason = Literal["no_tool_calls", "tool_rejected"]
|
|
167
168
|
|
|
168
169
|
|
|
170
|
+
_MISSING_REQUIRED_FIELD_RE = re.compile(
|
|
171
|
+
r"^\s*(?P<field>[A-Za-z_][A-Za-z0-9_\-.]*)\s*\n\s+Field required",
|
|
172
|
+
re.MULTILINE,
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def _missing_required_fields_from_validation_error(message: str) -> list[str]:
|
|
177
|
+
"""Extract field names from Pydantic's missing-field validation text."""
|
|
178
|
+
if "Error validating JSON arguments:" not in message:
|
|
179
|
+
return []
|
|
180
|
+
return [match.group("field") for match in _MISSING_REQUIRED_FIELD_RE.finditer(message)]
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
def _is_empty_tool_arguments(tool_call: ToolCall) -> bool:
|
|
184
|
+
raw = tool_call.function.arguments
|
|
185
|
+
return raw is None or raw.strip() in {"", "{}"}
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def _malformed_empty_tool_call_summary(
|
|
189
|
+
tool_calls: Sequence[ToolCall], tool_results: Sequence[ToolResult]
|
|
190
|
+
) -> str | None:
|
|
191
|
+
"""Return a concise summary when a step only produced empty invalid tool calls.
|
|
192
|
+
|
|
193
|
+
Some models can get stuck emitting `{}`/empty arguments for tools with required
|
|
194
|
+
fields. Continuing the agent loop just floods the UI with repeated validation
|
|
195
|
+
cards. Detect that dead-end shape and stop after the first invalid batch.
|
|
196
|
+
"""
|
|
197
|
+
if not tool_calls or len(tool_calls) != len(tool_results):
|
|
198
|
+
return None
|
|
199
|
+
|
|
200
|
+
calls_by_id = {call.id: call for call in tool_calls}
|
|
201
|
+
missing_by_tool: list[str] = []
|
|
202
|
+
for result in tool_results:
|
|
203
|
+
call = calls_by_id.get(result.tool_call_id)
|
|
204
|
+
if call is None or not _is_empty_tool_arguments(call):
|
|
205
|
+
return None
|
|
206
|
+
if not result.return_value.is_error:
|
|
207
|
+
return None
|
|
208
|
+
fields = _missing_required_fields_from_validation_error(result.return_value.message)
|
|
209
|
+
if not fields:
|
|
210
|
+
return None
|
|
211
|
+
missing_by_tool.append(f"{call.function.name}.{', '.join(fields)}")
|
|
212
|
+
|
|
213
|
+
if not missing_by_tool:
|
|
214
|
+
return None
|
|
215
|
+
return "; ".join(missing_by_tool)
|
|
216
|
+
|
|
217
|
+
|
|
169
218
|
@dataclass(frozen=True, slots=True)
|
|
170
219
|
class StepOutcome:
|
|
171
220
|
stop_reason: StepStopReason
|
|
@@ -1249,6 +1298,23 @@ class PythinkerSoul:
|
|
|
1249
1298
|
await asyncio.shield(grow_context_task)
|
|
1250
1299
|
raise
|
|
1251
1300
|
|
|
1301
|
+
if invalid_summary := _malformed_empty_tool_call_summary(result.tool_calls, results):
|
|
1302
|
+
message = Message(
|
|
1303
|
+
role="assistant",
|
|
1304
|
+
content=[
|
|
1305
|
+
TextPart(
|
|
1306
|
+
text=(
|
|
1307
|
+
"I couldn't continue because the model emitted malformed empty "
|
|
1308
|
+
"tool calls with missing required arguments: "
|
|
1309
|
+
f"{invalid_summary}. Please retry the request, or switch models "
|
|
1310
|
+
"if this repeats."
|
|
1311
|
+
)
|
|
1312
|
+
)
|
|
1313
|
+
],
|
|
1314
|
+
)
|
|
1315
|
+
await self._context.append_message(message)
|
|
1316
|
+
return StepOutcome(stop_reason="no_tool_calls", assistant_message=message)
|
|
1317
|
+
|
|
1252
1318
|
rejected_errors = [
|
|
1253
1319
|
result.return_value
|
|
1254
1320
|
for result in results
|
|
@@ -6,6 +6,7 @@ from pydantic import BaseModel, Field
|
|
|
6
6
|
from pythinker_core.tooling import CallableTool2, ToolError, ToolReturnValue
|
|
7
7
|
from pythinker_host.path import HostPath
|
|
8
8
|
|
|
9
|
+
from pythinker_code.file_restore import create_file_restore_point
|
|
9
10
|
from pythinker_code.soul.agent import Runtime
|
|
10
11
|
from pythinker_code.soul.approval import Approval
|
|
11
12
|
from pythinker_code.soul.permission import check_file_mutation_allowed
|
|
@@ -172,6 +173,8 @@ class StrReplaceFile(CallableTool2[Params]):
|
|
|
172
173
|
if not result:
|
|
173
174
|
return result.rejection_error()
|
|
174
175
|
|
|
176
|
+
create_file_restore_point(self._runtime.session, tool_name=self.name, path=str(p))
|
|
177
|
+
|
|
175
178
|
# Write the modified content back to the file
|
|
176
179
|
await p.write_text(content, encoding="utf-8", errors="replace")
|
|
177
180
|
|
|
@@ -6,6 +6,7 @@ from pydantic import BaseModel, Field
|
|
|
6
6
|
from pythinker_core.tooling import CallableTool2, ToolError, ToolReturnValue
|
|
7
7
|
from pythinker_host.path import HostPath
|
|
8
8
|
|
|
9
|
+
from pythinker_code.file_restore import create_file_restore_point
|
|
9
10
|
from pythinker_code.soul.agent import Runtime
|
|
10
11
|
from pythinker_code.soul.approval import Approval
|
|
11
12
|
from pythinker_code.soul.permission import check_file_mutation_allowed
|
|
@@ -158,6 +159,8 @@ class WriteFile(CallableTool2[Params]):
|
|
|
158
159
|
if not result:
|
|
159
160
|
return result.rejection_error()
|
|
160
161
|
|
|
162
|
+
create_file_restore_point(self._runtime.session, tool_name=self.name, path=str(p))
|
|
163
|
+
|
|
161
164
|
# Write content to file
|
|
162
165
|
match params.mode:
|
|
163
166
|
case "overwrite":
|
|
@@ -134,7 +134,6 @@ def format_bash_command_for_header(command: str, *, expanded: bool) -> str:
|
|
|
134
134
|
|
|
135
135
|
|
|
136
136
|
def _status_header(state: BashExecutionState) -> Text:
|
|
137
|
-
accent = _accent_style(state)
|
|
138
137
|
if state.status in ("pending", "running"):
|
|
139
138
|
header = _pulsing_marker()
|
|
140
139
|
header.append("Running", style=tui_rich_style("muted") + RichStyle(bold=True))
|
{pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/components/footer.py
RENAMED
|
@@ -19,10 +19,10 @@ from dataclasses import dataclass, field
|
|
|
19
19
|
from pathlib import Path
|
|
20
20
|
|
|
21
21
|
from rich.console import Group, RenderableType
|
|
22
|
-
from rich.style import Style as RichStyle
|
|
23
22
|
from rich.text import Text
|
|
24
23
|
|
|
25
24
|
from pythinker_code.ui.shell.components.render_utils import truncate_to_width
|
|
25
|
+
from pythinker_code.ui.shell.design_system import ShellTone, render_segment_line
|
|
26
26
|
from pythinker_code.ui.theme import tui_rich_style
|
|
27
27
|
|
|
28
28
|
__all__ = [
|
|
@@ -196,31 +196,20 @@ def render_footer(state: FooterState, *, width: int) -> RenderableType:
|
|
|
196
196
|
pwd_truncated = truncate_to_width(pwd, max(1, width))
|
|
197
197
|
pwd_text = Text(pwd_truncated, style=dim)
|
|
198
198
|
|
|
199
|
-
|
|
199
|
+
_, stats_left_plain = _build_stats_left(state)
|
|
200
200
|
if len(stats_left_plain) > width:
|
|
201
201
|
truncated = truncate_to_width(stats_left_plain, width)
|
|
202
|
-
stats_left_text = Text(truncated, style=dim)
|
|
203
202
|
stats_left_plain = truncated
|
|
204
203
|
|
|
205
204
|
right = _build_right_side(state, plain_left_width=len(stats_left_plain), width=width)
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
else:
|
|
215
|
-
right = ""
|
|
216
|
-
space = 0
|
|
217
|
-
stats_line = Text()
|
|
218
|
-
stats_line.append_text(stats_left_text)
|
|
219
|
-
if right:
|
|
220
|
-
stats_line.append(" " * space, style=dim)
|
|
221
|
-
stats_line.append(right, style=dim + RichStyle(bold=False))
|
|
222
|
-
else:
|
|
223
|
-
stats_line = stats_left_text
|
|
205
|
+
stats_line = render_segment_line(
|
|
206
|
+
left=[stats_left_plain],
|
|
207
|
+
right=[right],
|
|
208
|
+
width=width,
|
|
209
|
+
tone=ShellTone.MUTED,
|
|
210
|
+
)
|
|
211
|
+
if state.context_percent is not None and state.context_percent > 70:
|
|
212
|
+
stats_line.stylize(tui_rich_style("warning" if state.context_percent <= 90 else "error"))
|
|
224
213
|
|
|
225
214
|
children: list[RenderableType] = [pwd_text, stats_line]
|
|
226
215
|
if state.extension_statuses:
|
{pythinker_code-0.9.0 → pythinker_code-0.11.0}/src/pythinker_code/ui/shell/components/markdown.py
RENAMED
|
@@ -18,13 +18,14 @@ from __future__ import annotations
|
|
|
18
18
|
|
|
19
19
|
from dataclasses import dataclass, field
|
|
20
20
|
|
|
21
|
-
from rich.console import Console, ConsoleOptions,
|
|
21
|
+
from rich.console import Console, ConsoleOptions, RenderableType, RenderResult
|
|
22
22
|
from rich.markdown import CodeBlock, Markdown
|
|
23
23
|
from rich.padding import Padding
|
|
24
24
|
from rich.rule import Rule
|
|
25
25
|
from rich.style import Style as RichStyle
|
|
26
26
|
from rich.syntax import Syntax
|
|
27
27
|
from rich.text import Text
|
|
28
|
+
from rich.theme import Theme
|
|
28
29
|
|
|
29
30
|
from pythinker_code.ui.theme import ThemeName, get_markdown_colors
|
|
30
31
|
|
|
@@ -38,9 +39,7 @@ __all__ = [
|
|
|
38
39
|
class _BorderedCodeBlock(CodeBlock):
|
|
39
40
|
"""Code block with ``╭─ lang`` / ``╰─`` border rules and background tint."""
|
|
40
41
|
|
|
41
|
-
def __rich_console__(
|
|
42
|
-
self, console: Console, options: ConsoleOptions
|
|
43
|
-
) -> RenderResult:
|
|
42
|
+
def __rich_console__(self, console: Console, options: ConsoleOptions) -> RenderResult:
|
|
44
43
|
colors = get_markdown_colors()
|
|
45
44
|
border_style = RichStyle(color=colors.code_block_border, bold=True)
|
|
46
45
|
bg_style = RichStyle(bgcolor=colors.code_block_bg) if colors.code_block_bg else RichStyle()
|
|
@@ -96,26 +95,12 @@ class PythinkerMarkdown(Markdown):
|
|
|
96
95
|
|
|
97
96
|
elements = {**Markdown.elements, "fence": _BorderedCodeBlock, "code_block": _BorderedCodeBlock}
|
|
98
97
|
|
|
99
|
-
def __rich_console__(
|
|
100
|
-
self, console: Console, options: ConsoleOptions
|
|
101
|
-
) -> RenderResult:
|
|
98
|
+
def __rich_console__(self, console: Console, options: ConsoleOptions) -> RenderResult:
|
|
102
99
|
overrides = _markdown_style_overrides()
|
|
103
|
-
with console.use_theme(
|
|
100
|
+
with console.use_theme(Theme(overrides, inherit=True)):
|
|
104
101
|
yield from super().__rich_console__(console, options)
|
|
105
102
|
|
|
106
103
|
|
|
107
|
-
class _PythinkerMarkdownTheme:
|
|
108
|
-
"""Lightweight Rich ``Theme`` shim — only enough to satisfy ``Console.use_theme``."""
|
|
109
|
-
|
|
110
|
-
def __init__(self, styles: dict[str, RichStyle]) -> None:
|
|
111
|
-
from rich.theme import Theme
|
|
112
|
-
|
|
113
|
-
self._theme = Theme(styles, inherit=True)
|
|
114
|
-
|
|
115
|
-
def __getattr__(self, name: str): # type: ignore[no-untyped-def]
|
|
116
|
-
return getattr(self._theme, name)
|
|
117
|
-
|
|
118
|
-
|
|
119
104
|
def pythinker_markdown(text: str, *, code_theme: str = "monokai") -> PythinkerMarkdown:
|
|
120
105
|
"""Build a :class:`PythinkerMarkdown` with the palette pre-wired."""
|
|
121
106
|
return PythinkerMarkdown(text, code_theme=code_theme)
|
|
@@ -199,9 +184,7 @@ def _find_stream_safe_boundary(text: str) -> int | None:
|
|
|
199
184
|
open_fence = opener
|
|
200
185
|
cursor = line_end
|
|
201
186
|
continue
|
|
202
|
-
if not content.strip():
|
|
203
|
-
last_boundary = line_end
|
|
204
|
-
elif content.rstrip().endswith(_SENTENCE_END):
|
|
187
|
+
if not content.strip() or content.rstrip().endswith(_SENTENCE_END):
|
|
205
188
|
last_boundary = line_end
|
|
206
189
|
cursor = line_end
|
|
207
190
|
return last_boundary
|
|
@@ -235,6 +235,10 @@ class ToolExecutionComponent:
|
|
|
235
235
|
return None
|
|
236
236
|
|
|
237
237
|
def _background_style(self) -> Style | None:
|
|
238
|
+
if self._status in _PENDING_LIKE:
|
|
239
|
+
return tui_rich_style("tool_pending_bg")
|
|
240
|
+
if self._status in (ToolExecutionStatus.ERROR, ToolExecutionStatus.DENIED):
|
|
241
|
+
return tui_rich_style("tool_error_bg")
|
|
238
242
|
return None
|
|
239
243
|
|
|
240
244
|
def _call_fallback(self) -> RenderableType:
|