pythinker-code 0.8.0__tar.gz → 0.10.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.8.0 → pythinker_code-0.10.0}/PKG-INFO +10 -11
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/README.md +9 -10
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/pyproject.toml +7 -1
- pythinker_code-0.10.0/src/pythinker_code/CHANGELOG.md +106 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/app.py +35 -4
- pythinker_code-0.10.0/src/pythinker_code/file_restore.py +83 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/session_state.py +13 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/agent.py +5 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/approval.py +9 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/pythinkersoul.py +67 -1
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/replace.py +3 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/write.py +3 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/__init__.py +4 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/bash_execution.py +15 -3
- pythinker_code-0.10.0/src/pythinker_code/ui/shell/components/markdown.py +216 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/messages.py +5 -5
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/tool_execution.py +41 -12
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/slash.py +236 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +6 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +11 -1
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +3 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +3 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +3 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +7 -1
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +7 -1
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +3 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +3 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +3 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +13 -2
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +5 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/theme.py +75 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/clipboard.py +24 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/_baseUniq-DpSMr1jx.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/_baseUniq-W400tXC7.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/arc-DpsahJyV.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/arc-34EJCxo9.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-DqiRv9Eg.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-DwaRWLiC.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-WgtUvqbp.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-BRSNRd25.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-rK0RPuZd.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-DD0UYjmm.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/channel-BGRpA8iD.js +1 -0
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DIkMuLV-.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DHgDfkME.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-CORdm4k4.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-BImVKHaT.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-D9xDhwHO.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-BI_7MRlj.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-BDmF9Bh-.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-WJQkxwt1.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-BCse_HmM.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-DhLSSn1H.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-DCpBmTzA.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-zZjGr-26.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-BqLuqobw.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-BS3aXYU5.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-8K2ogOKS.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-DwZ3sgQz.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-BK5t0xBQ.js +1 -0
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-BK5t0xBQ.js +1 -0
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/clone-Dg1GHx6t.js +1 -0
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DWTFYA28.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-Bb_0wCjb.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-BRI7ES-N.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-DIEVeUwy.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/cytoscape.esm-B6BxUuKW.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/cytoscape.esm-Dn1K7hBl.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-Ci5GdWfi.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-CkgSwIWx.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-0hhAylV4.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CtQrWdyR.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-8fxgaW6d.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-CSDDBGRj.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-FRr0_atE.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-CYxMVXhs.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-B3T-hJUM.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-BTnrd59H.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-D0S3u7ot.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-CEy_PjLC.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-CHrN2a23.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-36ZRuSR4.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-CfcXZWg0.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-CRuujZbj.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/graph-8jMJwCqE.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/graph-BKh6X7Dn.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/index-C4gFzubz.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/index-CC2lLT6r.js +2 -2
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/index-BXrFnzMy.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/index-Cn2hJgP_.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/index-BrfQJnRD.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/index-DzK6T3bK.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-DdxonBf3.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-BdpB_TgQ.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-BXf4aQei.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-B-Ueb6_0.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-DLpPPOu8.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-D4mjpd4e.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/layout-DH73UoAH.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/layout-s1vkLXlV.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/linear-bAer2-sK.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/linear-maaL09f0.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-CuqbwKXv.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-Du-05kut.js +7 -7
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/mermaid.core-Nx-rTKiV.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/mermaid.core-YI5xJESq.js +5 -5
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/min-DbfD8Ywu.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/min-C-visb5z.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-C6l761Ue.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-BtL7H-jO.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-fNg41mT9.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-DzCJMgpy.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-DJz3Kx87.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-QxkFve7t.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-B4SbrfE9.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-CaigVcFF.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-CoSUjLAG.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-BpueXMqU.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-PjhBNHi3.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-DF4777Nm.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-DOwESt8-.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-B_zFmVzG.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-9CQoRlCH.js +1 -0
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-CkCLnAgi.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-BYaJbz91.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-CZS5XwTf.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-BxgG9HnC.js +1 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-DkqqHNLh.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-87KaLLq9.js +1 -1
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/index.html +1 -1
- pythinker_code-0.8.0/src/pythinker_code/CHANGELOG.md +0 -60
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/channel-B0rlvkH-.js +0 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-D_ZHSii2.js +0 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-D_ZHSii2.js +0 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/clone-GSXejyY1.js +0 -1
- pythinker_code-0.8.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-yl3OHWiP.js +0 -1
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/LICENSE +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/NOTICE +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/__main__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/AGENTS.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/convert.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/host.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/mcp.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/server.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/session.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/tools.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/types.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/version.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/review.yaml +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/system.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agentspec.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/approval_runtime/models.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/deepseek.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/github_feedback.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/lm_studio.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/minimax.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/oauth.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/ollama.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/openai.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/opencode_go.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/openrouter.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/platforms.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/background/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/background/agent_runner.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/background/ids.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/background/manager.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/background/models.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/background/store.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/background/summary.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/background/worker.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/__main__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/debug.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/export.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/info.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/mcp.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/plugin.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/review.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/secscan.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/security_scan.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/toad.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/update.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/vis.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/web.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/config.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/constant.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/events.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/exception.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/extensions.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/hooks/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/hooks/config.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/hooks/engine.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/hooks/events.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/hooks/runner.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/llm.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/metadata.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/llm.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/manager.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/models.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/notifier.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/store.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/wire.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/plugin/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/plugin/manager.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/plugin/tool.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/prompt_templates.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/prompts/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/prompts/compact.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/prompts/init.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/py.typed +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/session.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/session_fork.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/share.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/skill/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/skill/flow/d2.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/btw.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/compaction.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/context.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/denwarenji.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/message.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/permission.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/slash.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/toolset.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/builder.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/core.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/discovery.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/git_context.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/models.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/output.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/registry.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/runner.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/store.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/config.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/crash.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/errors.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/metrics.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/otel.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/sentry.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/sink.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/AGENTS.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/agent/description.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/background/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/background/list.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/background/output.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/background/stop.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/display.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/glob.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/glob.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/grep.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/read.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/read.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/read_media.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/read_media.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/replace.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/utils.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/write.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/plan/description.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/plan/enter.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/shell/bash.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/test.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/think/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/think/think.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/utils.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/web/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/web/fetch.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/web/fetch.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/web/search.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/web/search.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/print/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/print/visualize.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/console.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/debug.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/echo.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/prompt.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/replay.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selector.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/setup.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/startup.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/update.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/tui_config.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/aiohttp.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/aioqueue.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/broadcast.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/changelog.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/datetime.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/diff.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/editor.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/environment.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/envvar.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/export.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/file_filter.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/frontmatter.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/io.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/logging.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/media_tags.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/message.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/path.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/proctitle.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/proxy.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/columns.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/sensitive.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/server.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/signals.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/slashcmd.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/string.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/term.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/typing.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/api/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/api/sessions.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/api/statistics.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/api/system.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/app.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/index.html +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/api/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/api/config.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/api/open_in.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/api/sessions.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/app.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/auth.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/models.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/runner/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/runner/messages.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/runner/process.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/runner/worker.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B2P5VJ9v.css +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/logo.png +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/store/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/store/sessions.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/__init__.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/file.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/protocol.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/root_hub.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/serde.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/server.py +0 -0
- {pythinker_code-0.8.0 → pythinker_code-0.10.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.10.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
|
|
@@ -115,18 +115,17 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
115
115
|
|
|
116
116
|
---
|
|
117
117
|
|
|
118
|
-
## 🆕 What's New in 0.
|
|
118
|
+
## 🆕 What's New in 0.10.0
|
|
119
119
|
|
|
120
|
-
|
|
120
|
+
- **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.
|
|
121
|
+
- **Safer file edits.** File write and replace tools now create restore points before mutating files, giving sessions a clearer recovery path after risky changes.
|
|
122
|
+
- **Session UX state tracking.** Runtime session state now records additional UX metadata so shell surfaces can provide better continuity across long-running work.
|
|
123
|
+
- **Shell command enhancements.** New shell slash-command plumbing improves discoverability and keeps interactive workflows smoother.
|
|
124
|
+
- **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.
|
|
125
|
+
- **Clipboard handling hardening.** Clipboard helpers now degrade more cleanly when platform clipboard access is unavailable.
|
|
126
|
+
- **Release and TUI specs.** The repository now includes the blackbox TUI port design and a visual smoke-test criterion for future terminal UI work.
|
|
121
127
|
|
|
122
|
-
|
|
123
|
-
- **PyPI reset.** All prior `pythinker-code` 1.x/2.x releases have been **yanked** from PyPI. New installs (`pip install pythinker-code`, `pip install --upgrade pythinker-code`, `uv tool install pythinker-code`, and `pythinker update`) resolve to `0.8.0`.
|
|
124
|
-
- **GitHub reset.** All pre-`0.8.0` GitHub Releases and matching git tags have been removed. `v0.8.0` is the first tag on the new line.
|
|
125
|
-
- **Tag scheme.** Release tags are now `v<MAJOR>.<MINOR>.<PATCH>` (e.g. `v0.8.0`). The release workflow trigger and `scripts/check_version_tag.py` both expect the `v` prefix.
|
|
126
|
-
- **No app-level regressions.** All functionality shipped through 2.7.0 is preserved: review-first workflows (`pythinker review`, `pythinker secscan`, `pythinker security-scan`, `pythinker debug`), Reviewflow stateful review/fix workflows, the `code-reviewer` / `security-reviewer` / `debugger` subagent roles, hardened review-output validation, and the read-only PR artifact helpers.
|
|
127
|
-
- **History preserved in-repo.** The detailed 1.x/2.x release notes are archived at [`docs/history/CHANGELOG-pre-0.8.0.md`](docs/history/CHANGELOG-pre-0.8.0.md).
|
|
128
|
-
|
|
129
|
-
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.8.0`.
|
|
128
|
+
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.10.0`.
|
|
130
129
|
|
|
131
130
|
|
|
132
131
|
---
|
|
@@ -50,18 +50,17 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
53
|
-
## 🆕 What's New in 0.
|
|
53
|
+
## 🆕 What's New in 0.10.0
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
- **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.
|
|
56
|
+
- **Safer file edits.** File write and replace tools now create restore points before mutating files, giving sessions a clearer recovery path after risky changes.
|
|
57
|
+
- **Session UX state tracking.** Runtime session state now records additional UX metadata so shell surfaces can provide better continuity across long-running work.
|
|
58
|
+
- **Shell command enhancements.** New shell slash-command plumbing improves discoverability and keeps interactive workflows smoother.
|
|
59
|
+
- **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.
|
|
60
|
+
- **Clipboard handling hardening.** Clipboard helpers now degrade more cleanly when platform clipboard access is unavailable.
|
|
61
|
+
- **Release and TUI specs.** The repository now includes the blackbox TUI port design and a visual smoke-test criterion for future terminal UI work.
|
|
56
62
|
|
|
57
|
-
|
|
58
|
-
- **PyPI reset.** All prior `pythinker-code` 1.x/2.x releases have been **yanked** from PyPI. New installs (`pip install pythinker-code`, `pip install --upgrade pythinker-code`, `uv tool install pythinker-code`, and `pythinker update`) resolve to `0.8.0`.
|
|
59
|
-
- **GitHub reset.** All pre-`0.8.0` GitHub Releases and matching git tags have been removed. `v0.8.0` is the first tag on the new line.
|
|
60
|
-
- **Tag scheme.** Release tags are now `v<MAJOR>.<MINOR>.<PATCH>` (e.g. `v0.8.0`). The release workflow trigger and `scripts/check_version_tag.py` both expect the `v` prefix.
|
|
61
|
-
- **No app-level regressions.** All functionality shipped through 2.7.0 is preserved: review-first workflows (`pythinker review`, `pythinker secscan`, `pythinker security-scan`, `pythinker debug`), Reviewflow stateful review/fix workflows, the `code-reviewer` / `security-reviewer` / `debugger` subagent roles, hardened review-output validation, and the read-only PR artifact helpers.
|
|
62
|
-
- **History preserved in-repo.** The detailed 1.x/2.x release notes are archived at [`docs/history/CHANGELOG-pre-0.8.0.md`](docs/history/CHANGELOG-pre-0.8.0.md).
|
|
63
|
-
|
|
64
|
-
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.8.0`.
|
|
63
|
+
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.10.0`.
|
|
65
64
|
|
|
66
65
|
|
|
67
66
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "pythinker-code"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.10.0"
|
|
4
4
|
description = "Pythinker Code is your next CLI agent."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -158,3 +158,9 @@ seeked = "seeked"
|
|
|
158
158
|
iterm = "iterm"
|
|
159
159
|
# Verbatim pyright CLI output ("0 informations") quoted in docs.
|
|
160
160
|
informations = "informations"
|
|
161
|
+
# Project/domain-specific names and generated IDs.
|
|
162
|
+
reviewr = "reviewr"
|
|
163
|
+
fnd = "fnd"
|
|
164
|
+
edn = "edn"
|
|
165
|
+
Encrypter = "Encrypter"
|
|
166
|
+
uest = "uest"
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `pythinker-code` are tracked in this file.
|
|
4
|
+
|
|
5
|
+
Pythinker Code uses a `0.MINOR.PATCH` version scheme. `MINOR` is a release
|
|
6
|
+
counter that continues advancing with each release. `PATCH` is reserved for
|
|
7
|
+
hotfixes against an already-released `MINOR`. There is no `1.0.0` milestone
|
|
8
|
+
planned on this line.
|
|
9
|
+
|
|
10
|
+
Releases earlier than `0.8.0` were published as `pythinker-code` 1.x/2.x
|
|
11
|
+
under a different scheme. The full pre-`0.8.0` history is preserved in
|
|
12
|
+
[`docs/history/CHANGELOG-pre-0.8.0.md`](docs/history/CHANGELOG-pre-0.8.0.md).
|
|
13
|
+
All 1.x and 2.x releases have been yanked from PyPI and removed from the
|
|
14
|
+
GitHub Releases page; `0.8.0` is the new starting line.
|
|
15
|
+
|
|
16
|
+
## Unreleased
|
|
17
|
+
|
|
18
|
+
## 0.10.0 (2026-05-22)
|
|
19
|
+
|
|
20
|
+
### What changed in this release
|
|
21
|
+
|
|
22
|
+
- **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.
|
|
23
|
+
- **Safer file edits.** File write and replace tools now create restore points before mutating files, giving sessions a clearer recovery path after risky changes.
|
|
24
|
+
- **Session UX state tracking.** Runtime session state now records additional UX metadata so shell surfaces can provide better continuity across long-running work.
|
|
25
|
+
- **Shell command enhancements.** New shell slash-command plumbing improves discoverability and keeps interactive workflows smoother.
|
|
26
|
+
- **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.
|
|
27
|
+
- **Clipboard handling hardening.** Clipboard helpers now degrade more cleanly when platform clipboard access is unavailable.
|
|
28
|
+
- **Release and TUI specs.** The repository now includes the blackbox TUI port design and a visual smoke-test criterion for future terminal UI work.
|
|
29
|
+
|
|
30
|
+
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.10.0`.
|
|
31
|
+
|
|
32
|
+
## 0.9.0 (2026-05-21)
|
|
33
|
+
|
|
34
|
+
### What changed in this release
|
|
35
|
+
|
|
36
|
+
- **Cleaner TUI — tool card backgrounds removed.** The grey pending/running
|
|
37
|
+
background overlay that appeared behind every tool execution card (subagents,
|
|
38
|
+
bash executions, reads, etc.) has been removed. Only user-message blocks
|
|
39
|
+
retain a background tint, keeping the visual hierarchy focused on your input.
|
|
40
|
+
- **Welcome screen enhancements.** The startup info panel now shows the current
|
|
41
|
+
git branch (when inside a git repo) and the session auto-save path alongside
|
|
42
|
+
the working directory and session ID. Branch name is highlighted in magenta
|
|
43
|
+
for quick scanning.
|
|
44
|
+
- **Bash header strip styling.** The `$ command` portion of bash execution
|
|
45
|
+
headers now picks up the `tool_pending_bg` token for the strip background,
|
|
46
|
+
matching the reference renderer style and providing consistent visual weight
|
|
47
|
+
across themes.
|
|
48
|
+
- **Pythinker markdown renderer wired into message components.** User messages,
|
|
49
|
+
assistant messages, and custom messages now render through `pythinker_markdown`
|
|
50
|
+
(the project's own Markdown renderer) instead of raw `rich.markdown.Markdown`,
|
|
51
|
+
giving consistent heading, code-block, and table styling everywhere.
|
|
52
|
+
- **Expanded theme palette.** `theme.py` gains a full `MarkdownColors` /
|
|
53
|
+
`markdown_rich_style` subsystem with dark and light palettes covering headings,
|
|
54
|
+
emphasis, inline code, links, blockquotes, table borders, code-block borders
|
|
55
|
+
and backgrounds, and spinner states (active/done/failed).
|
|
56
|
+
- **Improved tool fallback renderers.** The call fallback now emits a
|
|
57
|
+
status-glyph header (`✔`/`✘`/`●`) instead of a bare label. The result
|
|
58
|
+
fallback now truncates long outputs at 60 lines / 4000 chars with an
|
|
59
|
+
italicised note (matching the card renderer's behaviour), and applies the
|
|
60
|
+
correct theme tokens for error vs. muted output.
|
|
61
|
+
|
|
62
|
+
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.9.0`.
|
|
63
|
+
|
|
64
|
+
## 0.8.0 (2026-05-21)
|
|
65
|
+
|
|
66
|
+
Version-scheme reset. `pythinker-code` now ships as `0.8.0` under the new
|
|
67
|
+
`0.MINOR.PATCH` line.
|
|
68
|
+
|
|
69
|
+
### What changed in this release
|
|
70
|
+
|
|
71
|
+
- **Version line reset.** `pyproject.toml` `version` is `0.8.0` under the new release design.
|
|
72
|
+
All prior `pythinker-code` 1.x/2.x releases have been yanked from PyPI and
|
|
73
|
+
removed from the GitHub Releases page. New installs of
|
|
74
|
+
`pip install --upgrade pythinker-code==0.8.0` resolve to the `0.x` line.
|
|
75
|
+
- **Tag scheme standardised** on `v<MAJOR>.<MINOR>.<PATCH>`. The
|
|
76
|
+
`release-pythinker-cli.yml` workflow trigger now matches `v[0-9]+.[0-9]+.[0-9]+`
|
|
77
|
+
and `scripts/check_version_tag.py` strips the leading `v` before comparing the
|
|
78
|
+
tag to `pyproject.toml`.
|
|
79
|
+
- **Release gate preserved.** The `What's New in <version>` section,
|
|
80
|
+
`pythinker-code==<version>` install snippet, and `## <version> (YYYY-MM-DD)`
|
|
81
|
+
CHANGELOG entry are still required for every tag — only the version values
|
|
82
|
+
change.
|
|
83
|
+
- **CHANGELOG restart.** Pre-`0.8.0` history archived to
|
|
84
|
+
`docs/history/CHANGELOG-pre-0.8.0.md`; this file starts fresh at `0.8.0`.
|
|
85
|
+
- **README "What's New" trimmed.** The cascading 2.x "What's New" wall is
|
|
86
|
+
replaced by a single `0.8.0` section. Past release notes live in the archived
|
|
87
|
+
CHANGELOG and the per-tag GitHub Releases (from `v0.8.0` onward).
|
|
88
|
+
- **Test refactor.** `tests/telemetry/test_otel_resource.py` now reads the
|
|
89
|
+
expected service version from `importlib.metadata.version("pythinker-code")`
|
|
90
|
+
instead of a hard-coded string, so future version bumps don't require a test
|
|
91
|
+
edit.
|
|
92
|
+
|
|
93
|
+
### Included in 0.8.0
|
|
94
|
+
|
|
95
|
+
All functionality included in `pythinker-code` 0.8.0 is preserved:
|
|
96
|
+
review-first workflows (`pythinker review`, `pythinker secscan`,
|
|
97
|
+
`pythinker security-scan`, `pythinker debug`), Reviewflow stateful
|
|
98
|
+
review/fix workflows, the new `code-reviewer` / `security-reviewer` /
|
|
99
|
+
`debugger` subagent roles, hardened review-output validation, and the
|
|
100
|
+
read-only PR artifact helpers (`describe`, `improve` / `suggest`, `ask`,
|
|
101
|
+
`labels`, `changelog`, `docs`, `compliance`, etc.).
|
|
102
|
+
|
|
103
|
+
See [`docs/history/CHANGELOG-pre-0.8.0.md`](docs/history/CHANGELOG-pre-0.8.0.md)
|
|
104
|
+
for the archived pre-reset release-by-release notes.
|
|
105
|
+
|
|
106
|
+
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.8.0`.
|
|
@@ -41,6 +41,27 @@ if TYPE_CHECKING:
|
|
|
41
41
|
_CWD_LOCK = asyncio.Lock()
|
|
42
42
|
|
|
43
43
|
|
|
44
|
+
def _safe_git_branch(cwd: str | Path | HostPath) -> str | None:
|
|
45
|
+
"""Return the current git branch name, or ``None`` outside a repo / on error."""
|
|
46
|
+
import subprocess
|
|
47
|
+
|
|
48
|
+
try:
|
|
49
|
+
result = subprocess.run(
|
|
50
|
+
["git", "-C", str(cwd), "branch", "--show-current"],
|
|
51
|
+
capture_output=True,
|
|
52
|
+
encoding="utf-8",
|
|
53
|
+
text=True,
|
|
54
|
+
timeout=1.0,
|
|
55
|
+
check=False,
|
|
56
|
+
)
|
|
57
|
+
except (OSError, subprocess.SubprocessError):
|
|
58
|
+
return None
|
|
59
|
+
if result.returncode != 0:
|
|
60
|
+
return None
|
|
61
|
+
branch = result.stdout.strip()
|
|
62
|
+
return branch or None
|
|
63
|
+
|
|
64
|
+
|
|
44
65
|
def _patch_session_id(record: dict[str, Any]) -> None:
|
|
45
66
|
"""Inject the current session ID (from ContextVar) into log records."""
|
|
46
67
|
try:
|
|
@@ -723,12 +744,22 @@ class PythinkerCLI:
|
|
|
723
744
|
print_update_banner()
|
|
724
745
|
schedule_auto_update_check()
|
|
725
746
|
|
|
747
|
+
work_dir = self._runtime.session.work_dir
|
|
726
748
|
welcome_info = [
|
|
727
|
-
WelcomeInfoItem(
|
|
728
|
-
name="Directory", value=str(shorten_home(self._runtime.session.work_dir))
|
|
729
|
-
),
|
|
730
|
-
WelcomeInfoItem(name="Session", value=self._runtime.session.id),
|
|
749
|
+
WelcomeInfoItem(name="Directory", value=str(shorten_home(work_dir))),
|
|
731
750
|
]
|
|
751
|
+
branch_name = _safe_git_branch(work_dir)
|
|
752
|
+
if branch_name:
|
|
753
|
+
welcome_info.append(WelcomeInfoItem(name="Branch", value=branch_name))
|
|
754
|
+
welcome_info.append(WelcomeInfoItem(name="Session", value=self._runtime.session.id))
|
|
755
|
+
try:
|
|
756
|
+
auto_save_path = str(
|
|
757
|
+
shorten_home(HostPath.unsafe_from_local_path(self._runtime.session.context_file))
|
|
758
|
+
)
|
|
759
|
+
except Exception:
|
|
760
|
+
auto_save_path = ""
|
|
761
|
+
if auto_save_path:
|
|
762
|
+
welcome_info.append(WelcomeInfoItem(name="Auto-save", value=auto_save_path))
|
|
732
763
|
if base_url := self._env_overrides.get("PYTHINKER_BASE_URL"):
|
|
733
764
|
welcome_info.append(
|
|
734
765
|
WelcomeInfoItem(
|
|
@@ -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":
|
|
@@ -1735,6 +1735,10 @@ def _value_style_for_label(label: str, level: WelcomeInfoItem.Level) -> str:
|
|
|
1735
1735
|
return "grey39"
|
|
1736
1736
|
if label == "Model":
|
|
1737
1737
|
return "bold bright_white"
|
|
1738
|
+
if label == "Branch":
|
|
1739
|
+
return "magenta"
|
|
1740
|
+
if label == "Auto-save":
|
|
1741
|
+
return "grey50"
|
|
1738
1742
|
return level.value
|
|
1739
1743
|
|
|
1740
1744
|
|
|
@@ -76,6 +76,18 @@ def _accent_style(state: BashExecutionState) -> RichStyle:
|
|
|
76
76
|
return tui_rich_style("muted" if state.exclude_from_context else "bash_mode")
|
|
77
77
|
|
|
78
78
|
|
|
79
|
+
def _command_strip_style(state: BashExecutionState) -> RichStyle:
|
|
80
|
+
"""Background tint for the ``$ cmd`` portion of the bash header.
|
|
81
|
+
|
|
82
|
+
Mirrors the dark 256-color strip used by the reference renderer; on light
|
|
83
|
+
themes we use the tool pending background so the strip still reads as a
|
|
84
|
+
contiguous run rather than blending into the surrounding card.
|
|
85
|
+
"""
|
|
86
|
+
accent = _accent_style(state)
|
|
87
|
+
bg = tui_rich_style("tool_pending_bg")
|
|
88
|
+
return accent + bg + RichStyle(bold=True)
|
|
89
|
+
|
|
90
|
+
|
|
79
91
|
def _output_lines(output: str) -> list[str]:
|
|
80
92
|
cleaned = sanitize_ansi(output).replace("\r\n", "\n").replace("\r", "\n")
|
|
81
93
|
if cleaned == "":
|
|
@@ -122,7 +134,6 @@ def format_bash_command_for_header(command: str, *, expanded: bool) -> str:
|
|
|
122
134
|
|
|
123
135
|
|
|
124
136
|
def _status_header(state: BashExecutionState) -> Text:
|
|
125
|
-
accent = _accent_style(state)
|
|
126
137
|
if state.status in ("pending", "running"):
|
|
127
138
|
header = _pulsing_marker()
|
|
128
139
|
header.append("Running", style=tui_rich_style("muted") + RichStyle(bold=True))
|
|
@@ -136,11 +147,12 @@ def _status_header(state: BashExecutionState) -> Text:
|
|
|
136
147
|
header = Text("✔ ", style=tui_rich_style("success"))
|
|
137
148
|
header.append("Ran", style=tui_rich_style("success") + RichStyle(bold=True))
|
|
138
149
|
|
|
150
|
+
strip = _command_strip_style(state)
|
|
139
151
|
header.append(" ")
|
|
140
|
-
header.append("$ ", style=
|
|
152
|
+
header.append("$ ", style=strip)
|
|
141
153
|
header.append(
|
|
142
154
|
format_bash_command_for_header(state.command, expanded=state.expanded),
|
|
143
|
-
style=
|
|
155
|
+
style=strip,
|
|
144
156
|
)
|
|
145
157
|
if state.header_suffix:
|
|
146
158
|
header.append(state.header_suffix, style=tui_rich_style("muted"))
|