pythinker-code 0.10.0__tar.gz → 0.12.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.10.0 → pythinker_code-0.12.0}/PKG-INFO +58 -11
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/README.md +56 -9
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/pyproject.toml +2 -2
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/CHANGELOG.md +24 -0
- pythinker_code-0.12.0/src/pythinker_code/native.py +38 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/footer.py +10 -21
- pythinker_code-0.12.0/src/pythinker_code/ui/shell/design_system.py +105 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/echo.py +3 -3
- pythinker_code-0.12.0/src/pythinker_code/ui/shell/motion.py +90 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/spinner_words.py +1 -1
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +29 -1
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +1 -1
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +3 -1
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/update.py +151 -1
- pythinker_code-0.12.0/src/pythinker_code/ui/shell/visualize/_activity_tree.py +47 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +29 -36
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +28 -68
- pythinker_code-0.12.0/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +60 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +2 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +32 -28
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +34 -41
- pythinker_code-0.12.0/src/pythinker_code/ui/shell/visualize/_transcript.py +40 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +18 -17
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/theme.py +27 -9
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/rich/markdown.py +15 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/_baseUniq-W400tXC7.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/_baseUniq-DW5pW6hO.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/arc-34EJCxo9.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/arc-z2Y2jvOB.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-DwaRWLiC.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-Bn9DboBt.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-BRSNRd25.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-BdPOJMCX.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-DD0UYjmm.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-05czCYL9.js +1 -1
- pythinker_code-0.12.0/src/pythinker_code/web/static/assets/channel-McQWqovU.js +1 -0
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DHgDfkME.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-CnPVDLQZ.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-BImVKHaT.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-1RjredC-.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-BI_7MRlj.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-DeuKNN5_.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-WJQkxwt1.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-BP6yPgV0.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-DhLSSn1H.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-DwDivipT.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-zZjGr-26.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-C9m2p4ww.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-BS3aXYU5.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CtoRKz4G.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-DwZ3sgQz.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-humsq0yN.js +1 -1
- pythinker_code-0.12.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-BUaiSEMD.js +1 -0
- pythinker_code-0.12.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-BUaiSEMD.js +1 -0
- pythinker_code-0.12.0/src/pythinker_code/web/static/assets/clone-CXz8Xc9z.js +1 -0
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-Bb_0wCjb.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-CwccqIQ0.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-DIEVeUwy.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-DeuvZfEf.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/cytoscape.esm-Dn1K7hBl.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/cytoscape.esm-VZbeKTj-.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-CkgSwIWx.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-DcduErgX.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CtQrWdyR.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-2MLKk55a.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-CSDDBGRj.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-W0wG02Gs.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-CYxMVXhs.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-DtiMGd96.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-BTnrd59H.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-zmP8JSbT.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-CEy_PjLC.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-6LUnKiOb.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-36ZRuSR4.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-DqBp88HY.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-CRuujZbj.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-DjCTO3dv.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/graph-BKh6X7Dn.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/graph-wUeZ000p.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/index-Cn2hJgP_.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/index-Ce6cvllw.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/index-CC2lLT6r.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/index-DoZOmOmM.js +2 -2
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/index-DzK6T3bK.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/index-sXlK_dAN.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-BdpB_TgQ.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-BSUmig3U.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-B-Ueb6_0.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-D8PkppLb.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-D4mjpd4e.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-DP76gagV.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/layout-s1vkLXlV.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/layout-DCpkmDhI.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/linear-maaL09f0.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/linear-P0RpqhFQ.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-Du-05kut.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DfJ5IhQM.js +7 -7
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/mermaid.core-YI5xJESq.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/mermaid.core-D2jP1-oT.js +5 -5
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/min-C-visb5z.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/min-vrRf7DTj.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-BtL7H-jO.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-GDbyNMac.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-DzCJMgpy.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-D-26Kio_.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-QxkFve7t.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-Cf9SP7Vp.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-CaigVcFF.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-CukOiyWf.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-BpueXMqU.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-DC_7mEmx.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-DF4777Nm.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-a57q9Neq.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-B_zFmVzG.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-Uv7w1fHu.js +1 -1
- pythinker_code-0.12.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-Bb3FpiXV.js +1 -0
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-BYaJbz91.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-Ca1hNW_F.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-BxgG9HnC.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-DZX3UyDt.js +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-87KaLLq9.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-DvAo5KoB.js +1 -1
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/index.html +1 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/channel-BGRpA8iD.js +0 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-BK5t0xBQ.js +0 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-BK5t0xBQ.js +0 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/clone-Dg1GHx6t.js +0 -1
- pythinker_code-0.10.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-9CQoRlCH.js +0 -1
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/LICENSE +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/NOTICE +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/__main__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/AGENTS.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/convert.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/host.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/mcp.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/server.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/session.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/tools.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/types.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/version.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/review.yaml +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/system.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agentspec.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/app.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/approval_runtime/models.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/deepseek.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/github_feedback.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/lm_studio.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/minimax.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/oauth.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/ollama.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/openai.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/opencode_go.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/openrouter.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/platforms.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/background/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/background/agent_runner.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/background/ids.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/background/manager.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/background/models.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/background/store.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/background/summary.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/background/worker.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/__main__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/debug.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/export.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/info.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/mcp.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/plugin.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/review.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/secscan.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/security_scan.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/toad.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/update.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/vis.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/web.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/config.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/constant.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/events.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/exception.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/extensions.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/file_restore.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/hooks/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/hooks/config.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/hooks/engine.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/hooks/events.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/hooks/runner.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/llm.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/metadata.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/notifications/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/notifications/llm.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/notifications/manager.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/notifications/models.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/notifications/notifier.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/notifications/store.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/notifications/wire.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/plugin/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/plugin/manager.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/plugin/tool.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/prompt_templates.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/prompts/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/prompts/compact.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/prompts/init.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/py.typed +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/session.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/session_fork.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/session_state.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/share.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/skill/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/skill/flow/d2.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/agent.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/approval.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/btw.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/compaction.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/context.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/denwarenji.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/message.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/permission.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/pythinkersoul.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/slash.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/toolset.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/builder.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/core.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/discovery.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/git_context.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/models.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/output.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/registry.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/runner.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/store.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/telemetry/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/telemetry/config.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/telemetry/crash.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/telemetry/errors.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/telemetry/metrics.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/telemetry/otel.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/telemetry/sentry.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/telemetry/sink.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/AGENTS.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/agent/description.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/background/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/background/list.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/background/output.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/background/stop.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/display.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/glob.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/glob.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/grep.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/read.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/read.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/read_media.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/read_media.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/replace.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/replace.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/utils.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/write.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/write.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/plan/description.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/plan/enter.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/shell/bash.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/test.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/think/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/think/think.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/utils.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/web/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/web/fetch.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/web/fetch.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/web/search.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/web/search.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/print/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/print/visualize.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/markdown.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/console.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/debug.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/prompt.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/replay.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/selector.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/setup.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/slash.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/startup.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/tui_config.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/aiohttp.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/aioqueue.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/broadcast.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/changelog.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/clipboard.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/datetime.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/diff.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/editor.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/environment.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/envvar.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/export.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/file_filter.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/frontmatter.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/io.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/logging.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/media_tags.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/message.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/path.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/proctitle.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/proxy.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/rich/columns.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/sensitive.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/server.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/signals.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/slashcmd.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/string.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/term.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/typing.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/api/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/api/sessions.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/api/statistics.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/api/system.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/app.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/index.html +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/api/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/api/config.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/api/open_in.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/api/sessions.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/app.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/auth.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/models.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/runner/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/runner/messages.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/runner/process.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/runner/worker.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B2P5VJ9v.css +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/logo.png +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/store/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/store/sessions.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/wire/__init__.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/wire/file.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/wire/protocol.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/wire/root_hub.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/wire/serde.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/wire/server.py +0 -0
- {pythinker_code-0.10.0 → pythinker_code-0.12.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.12.0
|
|
4
4
|
Summary: Pythinker Code is your next CLI agent.
|
|
5
5
|
Keywords: cli,agent,ai,coding-assistant,llm,claude,openai,terminal
|
|
6
6
|
Author: Mohamed Elkholy
|
|
@@ -23,7 +23,7 @@ Requires-Dist: agent-client-protocol==0.8.0
|
|
|
23
23
|
Requires-Dist: aiofiles>=24.0,<26.0
|
|
24
24
|
Requires-Dist: aiohttp==3.13.4
|
|
25
25
|
Requires-Dist: typer==0.21.1
|
|
26
|
-
Requires-Dist: pythinker-core[contrib]==1.1.
|
|
26
|
+
Requires-Dist: pythinker-core[contrib]==1.1.1
|
|
27
27
|
Requires-Dist: loguru>=0.6.0,<0.7
|
|
28
28
|
Requires-Dist: prompt-toolkit==3.0.52
|
|
29
29
|
Requires-Dist: pillow==12.2.0
|
|
@@ -115,17 +115,14 @@ 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.12.0
|
|
119
119
|
|
|
120
|
-
- **
|
|
121
|
-
- **
|
|
122
|
-
- **
|
|
123
|
-
- **Shell
|
|
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.
|
|
120
|
+
- **Native Windows installer.** A `PythinkerSetup-0.12.0.exe` is now attached to every GitHub Release. One double-click installs Pythinker per-user with no UAC prompt, no Python / Node / uv prerequisite, and registers `pythinker` on your PATH automatically. Uninstall via Apps & Features reverses every change. See the new *Windows — native installer* section in Quick Start for details.
|
|
121
|
+
- **In-app updates for the native build.** `pythinker update` from inside the native installer detects the build, fetches the latest installer from GitHub Releases, verifies its SHA-256, and re-runs it silently. The existing `PYTHINKER_CLI_NO_AUTO_UPDATE` env var now gates both the PyPI and native update flows — one opt-out, both paths.
|
|
122
|
+
- **Tag-triggered Windows CI.** A new `.github/workflows/windows-installer.yml` runs on every `pythinker-code-v*` tag, freezes `pythinker` via PyInstaller (`--onedir`), compiles the Inno Setup script, signs the result when the Authenticode cert is available, and uploads the `.exe` + SHA-256 to the Release.
|
|
123
|
+
- **Shell terminal rhythm refinements.** Tone tokens, motion timing, and the sky-blue accent palette (`#7dd3fc` / `#93c5fd`) were retuned so transcript rows, motion status, and dialog surfaces breathe consistently. UI snapshot tests updated to lock the new rhythm in place.
|
|
127
124
|
|
|
128
|
-
Upgrade with `pythinker update
|
|
125
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.12.0`, or — on Windows — download `PythinkerSetup-0.12.0.exe` from the [Releases page](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest).
|
|
129
126
|
|
|
130
127
|
|
|
131
128
|
---
|
|
@@ -210,6 +207,56 @@ Swap providers and models per-session: `--model openai/gpt-5.5`, hosted Pythinke
|
|
|
210
207
|
|
|
211
208
|
## ⚡ Quick Start
|
|
212
209
|
|
|
210
|
+
### 🪟 Windows — native installer (recommended)
|
|
211
|
+
|
|
212
|
+
`PythinkerSetup-x.y.z.exe` is attached to every GitHub Release. It bundles
|
|
213
|
+
Pythinker as a self-contained executable — **you do not need Python, Node, or
|
|
214
|
+
uv installed**, and there is no UAC / admin prompt.
|
|
215
|
+
|
|
216
|
+
**Install in three steps:**
|
|
217
|
+
|
|
218
|
+
1. Download `PythinkerSetup-x.y.z.exe` and its `.sha256` companion from the
|
|
219
|
+
[latest Release](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest).
|
|
220
|
+
2. (Optional, recommended) Verify the SHA-256:
|
|
221
|
+
```powershell
|
|
222
|
+
Get-FileHash .\PythinkerSetup-x.y.z.exe -Algorithm SHA256
|
|
223
|
+
Get-Content .\PythinkerSetup-x.y.z.exe.sha256
|
|
224
|
+
```
|
|
225
|
+
The hash from `Get-FileHash` must match the one in the `.sha256` file.
|
|
226
|
+
3. Double-click the installer. It writes to `%LOCALAPPDATA%\Programs\Pythinker`,
|
|
227
|
+
registers `pythinker` on your user PATH (`HKCU\Environment`), and broadcasts
|
|
228
|
+
`WM_SETTINGCHANGE` so any new shell window picks it up.
|
|
229
|
+
|
|
230
|
+
Open a fresh PowerShell and run `pythinker --version` to confirm.
|
|
231
|
+
|
|
232
|
+
> 🛡 **First-launch SmartScreen warning** — until the Authenticode signing
|
|
233
|
+
> cert is wired into the CI pipeline (see [build.ps1](./packages/windows-installer/build.ps1)
|
|
234
|
+
> and the `WINDOWS_CERT_PFX_BASE64` / `WINDOWS_CERT_PASSWORD` secrets), the
|
|
235
|
+
> installer ships unsigned and Windows SmartScreen will show *"Windows
|
|
236
|
+
> protected your PC."* Click **More info → Run anyway**. The published
|
|
237
|
+
> `.sha256` is your integrity check in the meantime.
|
|
238
|
+
|
|
239
|
+
**Built-in auto-update:** running `pythinker update` from inside the native
|
|
240
|
+
build queries the GitHub Releases API, downloads the newest installer,
|
|
241
|
+
verifies its SHA-256, and re-runs it silently (`/VERYSILENT /SUPPRESSMSGBOXES
|
|
242
|
+
/NORESTART`). Set `PYTHINKER_CLI_NO_AUTO_UPDATE=1` to disable the proactive
|
|
243
|
+
update check on shell startup (this is the same opt-out the PyPI/uv install
|
|
244
|
+
path uses — one knob, both flows).
|
|
245
|
+
|
|
246
|
+
**Uninstall:** Apps & Features → *Pythinker Code* → Uninstall. The uninstaller
|
|
247
|
+
removes the install directory and reverts the user-PATH edit. A new shell will
|
|
248
|
+
no longer find `pythinker`.
|
|
249
|
+
|
|
250
|
+
**Per-machine install** (multi-user / IT-managed boxes): pass `/ALLUSERS` to
|
|
251
|
+
the installer from an admin console:
|
|
252
|
+
|
|
253
|
+
```powershell
|
|
254
|
+
.\PythinkerSetup-x.y.z.exe /ALLUSERS
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
This installs to `%ProgramFiles%\Pythinker` and registers PATH at the HKLM
|
|
258
|
+
scope. The default (no flag) remains per-user.
|
|
259
|
+
|
|
213
260
|
### ✨ Recommended install (clean, with logo)
|
|
214
261
|
|
|
215
262
|
```sh
|
|
@@ -50,17 +50,14 @@ 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.12.0
|
|
54
54
|
|
|
55
|
-
- **
|
|
56
|
-
- **
|
|
57
|
-
- **
|
|
58
|
-
- **Shell
|
|
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.
|
|
55
|
+
- **Native Windows installer.** A `PythinkerSetup-0.12.0.exe` is now attached to every GitHub Release. One double-click installs Pythinker per-user with no UAC prompt, no Python / Node / uv prerequisite, and registers `pythinker` on your PATH automatically. Uninstall via Apps & Features reverses every change. See the new *Windows — native installer* section in Quick Start for details.
|
|
56
|
+
- **In-app updates for the native build.** `pythinker update` from inside the native installer detects the build, fetches the latest installer from GitHub Releases, verifies its SHA-256, and re-runs it silently. The existing `PYTHINKER_CLI_NO_AUTO_UPDATE` env var now gates both the PyPI and native update flows — one opt-out, both paths.
|
|
57
|
+
- **Tag-triggered Windows CI.** A new `.github/workflows/windows-installer.yml` runs on every `pythinker-code-v*` tag, freezes `pythinker` via PyInstaller (`--onedir`), compiles the Inno Setup script, signs the result when the Authenticode cert is available, and uploads the `.exe` + SHA-256 to the Release.
|
|
58
|
+
- **Shell terminal rhythm refinements.** Tone tokens, motion timing, and the sky-blue accent palette (`#7dd3fc` / `#93c5fd`) were retuned so transcript rows, motion status, and dialog surfaces breathe consistently. UI snapshot tests updated to lock the new rhythm in place.
|
|
62
59
|
|
|
63
|
-
Upgrade with `pythinker update
|
|
60
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.12.0`, or — on Windows — download `PythinkerSetup-0.12.0.exe` from the [Releases page](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest).
|
|
64
61
|
|
|
65
62
|
|
|
66
63
|
---
|
|
@@ -145,6 +142,56 @@ Swap providers and models per-session: `--model openai/gpt-5.5`, hosted Pythinke
|
|
|
145
142
|
|
|
146
143
|
## ⚡ Quick Start
|
|
147
144
|
|
|
145
|
+
### 🪟 Windows — native installer (recommended)
|
|
146
|
+
|
|
147
|
+
`PythinkerSetup-x.y.z.exe` is attached to every GitHub Release. It bundles
|
|
148
|
+
Pythinker as a self-contained executable — **you do not need Python, Node, or
|
|
149
|
+
uv installed**, and there is no UAC / admin prompt.
|
|
150
|
+
|
|
151
|
+
**Install in three steps:**
|
|
152
|
+
|
|
153
|
+
1. Download `PythinkerSetup-x.y.z.exe` and its `.sha256` companion from the
|
|
154
|
+
[latest Release](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest).
|
|
155
|
+
2. (Optional, recommended) Verify the SHA-256:
|
|
156
|
+
```powershell
|
|
157
|
+
Get-FileHash .\PythinkerSetup-x.y.z.exe -Algorithm SHA256
|
|
158
|
+
Get-Content .\PythinkerSetup-x.y.z.exe.sha256
|
|
159
|
+
```
|
|
160
|
+
The hash from `Get-FileHash` must match the one in the `.sha256` file.
|
|
161
|
+
3. Double-click the installer. It writes to `%LOCALAPPDATA%\Programs\Pythinker`,
|
|
162
|
+
registers `pythinker` on your user PATH (`HKCU\Environment`), and broadcasts
|
|
163
|
+
`WM_SETTINGCHANGE` so any new shell window picks it up.
|
|
164
|
+
|
|
165
|
+
Open a fresh PowerShell and run `pythinker --version` to confirm.
|
|
166
|
+
|
|
167
|
+
> 🛡 **First-launch SmartScreen warning** — until the Authenticode signing
|
|
168
|
+
> cert is wired into the CI pipeline (see [build.ps1](./packages/windows-installer/build.ps1)
|
|
169
|
+
> and the `WINDOWS_CERT_PFX_BASE64` / `WINDOWS_CERT_PASSWORD` secrets), the
|
|
170
|
+
> installer ships unsigned and Windows SmartScreen will show *"Windows
|
|
171
|
+
> protected your PC."* Click **More info → Run anyway**. The published
|
|
172
|
+
> `.sha256` is your integrity check in the meantime.
|
|
173
|
+
|
|
174
|
+
**Built-in auto-update:** running `pythinker update` from inside the native
|
|
175
|
+
build queries the GitHub Releases API, downloads the newest installer,
|
|
176
|
+
verifies its SHA-256, and re-runs it silently (`/VERYSILENT /SUPPRESSMSGBOXES
|
|
177
|
+
/NORESTART`). Set `PYTHINKER_CLI_NO_AUTO_UPDATE=1` to disable the proactive
|
|
178
|
+
update check on shell startup (this is the same opt-out the PyPI/uv install
|
|
179
|
+
path uses — one knob, both flows).
|
|
180
|
+
|
|
181
|
+
**Uninstall:** Apps & Features → *Pythinker Code* → Uninstall. The uninstaller
|
|
182
|
+
removes the install directory and reverts the user-PATH edit. A new shell will
|
|
183
|
+
no longer find `pythinker`.
|
|
184
|
+
|
|
185
|
+
**Per-machine install** (multi-user / IT-managed boxes): pass `/ALLUSERS` to
|
|
186
|
+
the installer from an admin console:
|
|
187
|
+
|
|
188
|
+
```powershell
|
|
189
|
+
.\PythinkerSetup-x.y.z.exe /ALLUSERS
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
This installs to `%ProgramFiles%\Pythinker` and registers PATH at the HKLM
|
|
193
|
+
scope. The default (no flag) remains per-user.
|
|
194
|
+
|
|
148
195
|
### ✨ Recommended install (clean, with logo)
|
|
149
196
|
|
|
150
197
|
```sh
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "pythinker-code"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.12.0"
|
|
4
4
|
description = "Pythinker Code is your next CLI agent."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -26,7 +26,7 @@ dependencies = [
|
|
|
26
26
|
"aiofiles>=24.0,<26.0",
|
|
27
27
|
"aiohttp==3.13.4",
|
|
28
28
|
"typer==0.21.1",
|
|
29
|
-
"pythinker-core[contrib]==1.1.
|
|
29
|
+
"pythinker-core[contrib]==1.1.1",
|
|
30
30
|
# notify-py (via batrachian-toad) caps loguru at <=0.6.0 on 3.14+.
|
|
31
31
|
"loguru>=0.6.0,<0.7",
|
|
32
32
|
"prompt-toolkit==3.0.52",
|
|
@@ -15,6 +15,30 @@ GitHub Releases page; `0.8.0` is the new starting line.
|
|
|
15
15
|
|
|
16
16
|
## Unreleased
|
|
17
17
|
|
|
18
|
+
## 0.12.0 (2026-05-22)
|
|
19
|
+
|
|
20
|
+
### What changed in this release
|
|
21
|
+
|
|
22
|
+
- **Native Windows installer.** A signed `PythinkerSetup-x.y.z.exe` is now attached to every GitHub Release — install Pythinker on Windows with one download, no Python / Node / uv prerequisite. The wizard installs per-user (no UAC) into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on the user PATH, and broadcasts `WM_SETTINGCHANGE` so new shells pick the change up immediately. Uninstall reverses the PATH edit. Code-signing is wired through `signtool` and ships unsigned until the Authenticode cert lands; from that point forward the same CI job produces signed installers with no code change required.
|
|
23
|
+
- **In-app updates for the native build.** `pythinker update` from a native install detects the build (via a `.pythinker-native` sentinel next to `pythinker.exe`), fetches the latest GitHub Release asset, verifies its SHA-256, and re-runs the installer silently (`/VERYSILENT /SUPPRESSMSGBOXES /NORESTART`). The `PYTHINKER_CLI_NO_AUTO_UPDATE` opt-out env var that the PyPI path already honors now also gates the native auto-update path — one knob, both flows. The update banner shows a human-readable `PythinkerSetup-x.y.z.exe` line instead of leaking internal markers.
|
|
24
|
+
- **Tag-triggered Windows build pipeline.** A new `.github/workflows/windows-installer.yml` runs on every `pythinker-code-v*` tag, freezes `pythinker` via PyInstaller (`--onedir` for faster startup and fewer AV false positives), compiles the Inno Setup script, signs the result if `WINDOWS_CERT_PFX_BASE64` / `WINDOWS_CERT_PASSWORD` secrets are populated, and uploads the `.exe` plus its `.sha256` to the corresponding Release.
|
|
25
|
+
- **Shell terminal rhythm refinements.** Tone tokens, motion timing, and theme palette were retuned (sky-blue `#7dd3fc` / `#93c5fd` accents) so transcript rows, motion status, and dialog surfaces breathe consistently. UI snapshot tests updated to lock the new rhythm in place.
|
|
26
|
+
|
|
27
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.12.0`, or — on Windows — download `PythinkerSetup-0.12.0.exe` from the Releases page.
|
|
28
|
+
|
|
29
|
+
## 0.11.0 (2026-05-22)
|
|
30
|
+
|
|
31
|
+
### What changed in this release
|
|
32
|
+
|
|
33
|
+
- **Fixed PyPI install conflict (was failing on Windows and every other platform).** `pip install pythinker-code==0.10.0` failed with `fastmcp 3.2.0 depends on mcp<2.0 and >=1.24.0` vs `pythinker-core 1.1.0 depends on mcp<1.17 and >=1`. 0.11.0 pins the republished `pythinker-core 1.1.1`, whose widened `mcp>=1.23,<2` constraint lets the resolver pick a single `mcp` version compatible with `fastmcp==3.2.0`.
|
|
34
|
+
- **Blackbox-style TUI port — phase 1.** Shell design primitives, compact transcript activity rows, blackbox-style motion status, standardized shell dialogs, aligned footer status styling, and a restyled tool-result surface land together. The TUI now shares a coherent visual language across rows, dialogs, and motion.
|
|
35
|
+
- **Refreshed TUI accent palette.** Dark/light theme accent retuned to a cleaner sky-blue (`#7dd3fc` dark, `#0284c7` light) for better contrast against the new tool-result surfaces.
|
|
36
|
+
- **Markdown + report polish.** Report spacing and markdown code blocks render with improved breathing room and consistent fences.
|
|
37
|
+
- **Rotating thinking-word indicator restored** with a leading space before the live stream status so the spinner no longer abuts surrounding text.
|
|
38
|
+
- **Internal audit + smoke evaluation.** A blackbox TUI scope map, prompt/agent audit, and a recorded visual smoke evaluation join the repo to govern future TUI work.
|
|
39
|
+
|
|
40
|
+
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.11.0`.
|
|
41
|
+
|
|
18
42
|
## 0.10.0 (2026-05-22)
|
|
19
43
|
|
|
20
44
|
### What changed in this release
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""Native-build detection + GitHub Releases lookup helpers.
|
|
2
|
+
|
|
3
|
+
The Windows native installer drops a sentinel file ``.pythinker-native`` next
|
|
4
|
+
to the PyInstaller-frozen ``pythinker.exe``. The runtime probes for that file
|
|
5
|
+
to decide whether ``pythinker update`` should re-run the native installer
|
|
6
|
+
instead of shelling out to ``uv tool upgrade``.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import sys
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
|
|
14
|
+
GITHUB_REPO = "mohamed-elkholy95/Pythinker-Code"
|
|
15
|
+
SENTINEL_FILENAME = ".pythinker-native"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def is_native_build() -> bool:
|
|
19
|
+
"""True iff this process is a Pythinker native (Inno Setup) install."""
|
|
20
|
+
if not getattr(sys, "frozen", False):
|
|
21
|
+
return False
|
|
22
|
+
try:
|
|
23
|
+
exe_dir = Path(sys.executable).resolve().parent
|
|
24
|
+
except OSError:
|
|
25
|
+
return False
|
|
26
|
+
return (exe_dir / SENTINEL_FILENAME).is_file()
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def native_installer_release_url(channel: str = "latest") -> str:
|
|
30
|
+
"""Return the GitHub API URL for the requested release channel."""
|
|
31
|
+
if channel == "latest":
|
|
32
|
+
return f"https://api.github.com/repos/{GITHUB_REPO}/releases/latest"
|
|
33
|
+
return f"https://api.github.com/repos/{GITHUB_REPO}/releases/tags/{channel}"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def native_installer_asset_name(version: str) -> str:
|
|
37
|
+
"""Filename of the installer asset attached to a Release."""
|
|
38
|
+
return f"PythinkerSetup-{version}.exe"
|
{pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/footer.py
RENAMED
|
@@ -19,10 +19,10 @@ from dataclasses import dataclass, field
|
|
|
19
19
|
from pathlib import Path
|
|
20
20
|
|
|
21
21
|
from rich.console import Group, RenderableType
|
|
22
|
-
from rich.style import Style as RichStyle
|
|
23
22
|
from rich.text import Text
|
|
24
23
|
|
|
25
24
|
from pythinker_code.ui.shell.components.render_utils import truncate_to_width
|
|
25
|
+
from pythinker_code.ui.shell.design_system import ShellTone, render_segment_line
|
|
26
26
|
from pythinker_code.ui.theme import tui_rich_style
|
|
27
27
|
|
|
28
28
|
__all__ = [
|
|
@@ -196,31 +196,20 @@ def render_footer(state: FooterState, *, width: int) -> RenderableType:
|
|
|
196
196
|
pwd_truncated = truncate_to_width(pwd, max(1, width))
|
|
197
197
|
pwd_text = Text(pwd_truncated, style=dim)
|
|
198
198
|
|
|
199
|
-
|
|
199
|
+
_, stats_left_plain = _build_stats_left(state)
|
|
200
200
|
if len(stats_left_plain) > width:
|
|
201
201
|
truncated = truncate_to_width(stats_left_plain, width)
|
|
202
|
-
stats_left_text = Text(truncated, style=dim)
|
|
203
202
|
stats_left_plain = truncated
|
|
204
203
|
|
|
205
204
|
right = _build_right_side(state, plain_left_width=len(stats_left_plain), width=width)
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
else:
|
|
215
|
-
right = ""
|
|
216
|
-
space = 0
|
|
217
|
-
stats_line = Text()
|
|
218
|
-
stats_line.append_text(stats_left_text)
|
|
219
|
-
if right:
|
|
220
|
-
stats_line.append(" " * space, style=dim)
|
|
221
|
-
stats_line.append(right, style=dim + RichStyle(bold=False))
|
|
222
|
-
else:
|
|
223
|
-
stats_line = stats_left_text
|
|
205
|
+
stats_line = render_segment_line(
|
|
206
|
+
left=[stats_left_plain],
|
|
207
|
+
right=[right],
|
|
208
|
+
width=width,
|
|
209
|
+
tone=ShellTone.MUTED,
|
|
210
|
+
)
|
|
211
|
+
if state.context_percent is not None and state.context_percent > 70:
|
|
212
|
+
stats_line.stylize(tui_rich_style("warning" if state.context_percent <= 90 else "error"))
|
|
224
213
|
|
|
225
214
|
children: list[RenderableType] = [pwd_text, stats_line]
|
|
226
215
|
if state.extension_statuses:
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"""Shared Rich primitives for the Pythinker shell TUI."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from enum import StrEnum
|
|
6
|
+
from typing import Literal
|
|
7
|
+
|
|
8
|
+
from rich.console import Group, RenderableType
|
|
9
|
+
from rich.style import Style
|
|
10
|
+
from rich.text import Text
|
|
11
|
+
|
|
12
|
+
from pythinker_code.ui.shell.components.render_utils import cell_width, truncate_to_width
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ShellTone(StrEnum):
|
|
16
|
+
NORMAL = "normal"
|
|
17
|
+
MUTED = "muted"
|
|
18
|
+
ACCENT = "accent"
|
|
19
|
+
SUCCESS = "success"
|
|
20
|
+
WARNING = "warning"
|
|
21
|
+
ERROR = "error"
|
|
22
|
+
INFO = "info"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
StatusName = Literal[
|
|
26
|
+
"running",
|
|
27
|
+
"completed",
|
|
28
|
+
"failed",
|
|
29
|
+
"denied",
|
|
30
|
+
"interrupted",
|
|
31
|
+
"waiting",
|
|
32
|
+
"question",
|
|
33
|
+
"approval",
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
_TONE_STYLES: dict[ShellTone, Style] = {
|
|
38
|
+
ShellTone.NORMAL: Style(color="default"),
|
|
39
|
+
ShellTone.MUTED: Style(color="grey50"),
|
|
40
|
+
ShellTone.ACCENT: Style(color="#7dd3fc"),
|
|
41
|
+
ShellTone.SUCCESS: Style(color="green"),
|
|
42
|
+
ShellTone.WARNING: Style(color="yellow"),
|
|
43
|
+
ShellTone.ERROR: Style(color="red"),
|
|
44
|
+
ShellTone.INFO: Style(color="#93c5fd"),
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
_STATUS: dict[StatusName, tuple[str, ShellTone]] = {
|
|
48
|
+
"running": ("●", ShellTone.ACCENT),
|
|
49
|
+
"completed": ("✓", ShellTone.SUCCESS),
|
|
50
|
+
"failed": ("!", ShellTone.ERROR),
|
|
51
|
+
"denied": ("×", ShellTone.WARNING),
|
|
52
|
+
"interrupted": ("■", ShellTone.MUTED),
|
|
53
|
+
"waiting": ("○", ShellTone.MUTED),
|
|
54
|
+
"question": ("?", ShellTone.WARNING),
|
|
55
|
+
"approval": ("?", ShellTone.ACCENT),
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def shell_style(tone: ShellTone) -> Style:
|
|
60
|
+
return _TONE_STYLES[tone]
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def status_icon(name: StatusName) -> Text:
|
|
64
|
+
icon, tone = _STATUS[name]
|
|
65
|
+
return Text(icon, style=shell_style(tone))
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def keyboard_hint(key: str, label: str) -> Text:
|
|
69
|
+
text = Text()
|
|
70
|
+
text.append(key, style=Style(color="cyan", bold=True))
|
|
71
|
+
if label:
|
|
72
|
+
text.append(f" {label}", style=shell_style(ShellTone.MUTED))
|
|
73
|
+
return text
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def dialog_title(kind: StatusName, title: str) -> Text:
|
|
77
|
+
text = Text()
|
|
78
|
+
text.append_text(status_icon(kind))
|
|
79
|
+
text.append(f" {title}", style=Style(bold=True))
|
|
80
|
+
return text
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def render_segment_line(
|
|
84
|
+
*,
|
|
85
|
+
left: list[str],
|
|
86
|
+
right: list[str],
|
|
87
|
+
width: int,
|
|
88
|
+
tone: ShellTone = ShellTone.MUTED,
|
|
89
|
+
) -> Text:
|
|
90
|
+
left_text = " | ".join(part for part in left if part)
|
|
91
|
+
right_parts = [part for part in right if part]
|
|
92
|
+
right_text = " | ".join(right_parts)
|
|
93
|
+
if width <= 0:
|
|
94
|
+
return Text("")
|
|
95
|
+
while right_parts and cell_width(left_text) + 2 + cell_width(right_text) > width:
|
|
96
|
+
right_parts.pop()
|
|
97
|
+
right_text = " | ".join(right_parts)
|
|
98
|
+
if not right_text:
|
|
99
|
+
return Text(truncate_to_width(left_text, width), style=shell_style(tone))
|
|
100
|
+
gap = max(2, width - cell_width(left_text) - cell_width(right_text))
|
|
101
|
+
return Text(left_text + (" " * gap) + right_text, style=shell_style(tone))
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def render_row(icon: str | Text, content: RenderableType) -> RenderableType:
|
|
105
|
+
return Group(Text.assemble(icon, " "), content)
|
|
@@ -5,7 +5,7 @@ from rich.console import RenderableType
|
|
|
5
5
|
from rich.text import Text
|
|
6
6
|
|
|
7
7
|
from pythinker_code.ui.shell.components import render_user_message
|
|
8
|
-
from pythinker_code.ui.shell.prompt import
|
|
8
|
+
from pythinker_code.ui.shell.prompt import PROMPT_SYMBOL_AGENT_INPUT
|
|
9
9
|
from pythinker_code.ui.tui_config import is_card_style
|
|
10
10
|
from pythinker_code.utils.message import message_stringify
|
|
11
11
|
|
|
@@ -20,11 +20,11 @@ def render_user_echo(message: Message) -> RenderableType:
|
|
|
20
20
|
text = message_stringify(message)
|
|
21
21
|
if is_card_style():
|
|
22
22
|
return render_user_message(text)
|
|
23
|
-
return Text(f"{
|
|
23
|
+
return Text(f"{PROMPT_SYMBOL_AGENT_INPUT} {text}")
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
def render_user_echo_text(text: str) -> RenderableType:
|
|
27
27
|
"""Render the local prompt text exactly as the user saw it in the buffer."""
|
|
28
28
|
if is_card_style():
|
|
29
29
|
return render_user_message(text)
|
|
30
|
-
return Text(f"{
|
|
30
|
+
return Text(f"{PROMPT_SYMBOL_AGENT_INPUT} {text}")
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"""Blackbox-inspired motion helpers for the shell TUI."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import os
|
|
6
|
+
from dataclasses import dataclass
|
|
7
|
+
|
|
8
|
+
from rich.text import Text
|
|
9
|
+
|
|
10
|
+
from pythinker_code.soul import format_token_count
|
|
11
|
+
from pythinker_code.ui.shell.components.render_utils import cell_width
|
|
12
|
+
from pythinker_code.ui.shell.design_system import ShellTone, shell_style
|
|
13
|
+
from pythinker_code.utils.datetime import format_elapsed
|
|
14
|
+
|
|
15
|
+
_FRAMES = ("⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏")
|
|
16
|
+
_FRAME_INTERVAL_S = 0.08
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@dataclass(frozen=True, slots=True)
|
|
20
|
+
class ActivitySnapshot:
|
|
21
|
+
label: str
|
|
22
|
+
elapsed_s: float
|
|
23
|
+
tokens: int = 0
|
|
24
|
+
token_rate: int | None = None
|
|
25
|
+
stalled: bool = False
|
|
26
|
+
interrupt_hint: str = ""
|
|
27
|
+
reduced_motion: bool = False
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def reduced_motion_enabled() -> bool:
|
|
31
|
+
return os.environ.get("PYTHINKER_REDUCED_MOTION", "").strip().lower() in {
|
|
32
|
+
"1",
|
|
33
|
+
"true",
|
|
34
|
+
"yes",
|
|
35
|
+
"on",
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def spinner_frame_at(elapsed_s: float, *, reduced_motion: bool = False) -> str:
|
|
40
|
+
if reduced_motion:
|
|
41
|
+
return "●"
|
|
42
|
+
index = int(max(0.0, elapsed_s) / _FRAME_INTERVAL_S) % len(_FRAMES)
|
|
43
|
+
return _FRAMES[index]
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _candidate_parts(snapshot: ActivitySnapshot) -> list[str]:
|
|
47
|
+
parts = [format_elapsed(snapshot.elapsed_s)]
|
|
48
|
+
if snapshot.tokens:
|
|
49
|
+
parts.append(f"↓ {format_token_count(snapshot.tokens)} tokens")
|
|
50
|
+
if snapshot.token_rate:
|
|
51
|
+
parts.append(f"{snapshot.token_rate} t/s")
|
|
52
|
+
if snapshot.interrupt_hint:
|
|
53
|
+
hint = "esc" if snapshot.interrupt_hint == "esc to interrupt" else snapshot.interrupt_hint
|
|
54
|
+
parts.append(hint)
|
|
55
|
+
return parts
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _activity_label(label: str) -> str:
|
|
59
|
+
stripped = label.rstrip()
|
|
60
|
+
if stripped.endswith(("…", "...")):
|
|
61
|
+
return stripped
|
|
62
|
+
return f"{stripped}…"
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def activity_status_line(snapshot: ActivitySnapshot, *, width: int | None = None) -> Text:
|
|
66
|
+
reduced = snapshot.reduced_motion or reduced_motion_enabled()
|
|
67
|
+
glyph_style = ShellTone.WARNING if snapshot.stalled else ShellTone.ACCENT
|
|
68
|
+
text = Text(
|
|
69
|
+
spinner_frame_at(snapshot.elapsed_s, reduced_motion=reduced),
|
|
70
|
+
style=shell_style(glyph_style),
|
|
71
|
+
)
|
|
72
|
+
text.append(" ")
|
|
73
|
+
text.append(
|
|
74
|
+
_activity_label(snapshot.label),
|
|
75
|
+
style="italic" if snapshot.label.lower() == "thinking" else "",
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
parts = _candidate_parts(snapshot)
|
|
79
|
+
if width is not None:
|
|
80
|
+
base_width = cell_width(text.plain)
|
|
81
|
+
kept: list[str] = []
|
|
82
|
+
for part in parts:
|
|
83
|
+
candidate = " · ".join([*kept, part])
|
|
84
|
+
if base_width + 3 + cell_width(candidate) <= width:
|
|
85
|
+
kept.append(part)
|
|
86
|
+
parts = kept
|
|
87
|
+
if parts:
|
|
88
|
+
text.append(" ")
|
|
89
|
+
text.append(f"({' · '.join(parts)})", style=shell_style(ShellTone.MUTED))
|
|
90
|
+
return text
|
{pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py
RENAMED
|
@@ -20,8 +20,10 @@ from pythinker_code.ui.shell.components.bash_execution import (
|
|
|
20
20
|
BashExecutionState,
|
|
21
21
|
BashStatus,
|
|
22
22
|
format_bash_command_for_header,
|
|
23
|
+
render_bash_execution,
|
|
23
24
|
render_bash_result_output,
|
|
24
25
|
)
|
|
26
|
+
from pythinker_code.ui.shell.components.render_utils import sanitize_ansi
|
|
25
27
|
from pythinker_code.ui.shell.tool_renderers import (
|
|
26
28
|
ToolRenderContext,
|
|
27
29
|
ToolRenderDefinition,
|
|
@@ -67,6 +69,8 @@ def _render_call(ctx: ToolRenderContext) -> RenderableType | None:
|
|
|
67
69
|
description = as_str(args.get("description"))
|
|
68
70
|
suffix = f" (background: {description})" if description else " (background)"
|
|
69
71
|
line.append_text(fg("muted", suffix))
|
|
72
|
+
if ctx.has_result and command:
|
|
73
|
+
return None
|
|
70
74
|
return running_spinner(line, execution_started=ctx.execution_started, has_result=ctx.has_result)
|
|
71
75
|
|
|
72
76
|
|
|
@@ -88,15 +92,39 @@ def _render_result(ctx: ToolRenderContext, result: ToolResultPayload) -> Rendera
|
|
|
88
92
|
status: BashStatus = "error" if result.is_error else "complete"
|
|
89
93
|
bash_state = BashExecutionState(
|
|
90
94
|
command=command,
|
|
91
|
-
output=result.text or "",
|
|
95
|
+
output=sanitize_ansi(result.text or ""),
|
|
92
96
|
status=status,
|
|
93
97
|
exit_code=None if not result.is_error else 1,
|
|
94
98
|
expanded=ctx.expanded,
|
|
95
99
|
header_suffix="".join(suffix_parts),
|
|
96
100
|
)
|
|
101
|
+
if _is_short_inline_output(bash_state.output):
|
|
102
|
+
return _render_inline_completed_result(bash_state, is_error=result.is_error)
|
|
103
|
+
if ctx.has_result:
|
|
104
|
+
return render_bash_execution(bash_state, width=ctx.width)
|
|
97
105
|
return render_bash_result_output(bash_state, width=ctx.width)
|
|
98
106
|
|
|
99
107
|
|
|
108
|
+
def _is_short_inline_output(output: str) -> bool:
|
|
109
|
+
text = output.strip()
|
|
110
|
+
return bool(text) and "\n" not in text and len(text) <= 80
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def _render_inline_completed_result(state: BashExecutionState, *, is_error: bool) -> Text:
|
|
114
|
+
status_style = tui_rich_style("error" if is_error else "success")
|
|
115
|
+
line = Text("✘ " if is_error else "✔ ", style=status_style)
|
|
116
|
+
line.append("$ ", style=tui_rich_style("bash_mode") + RichStyle(bold=True))
|
|
117
|
+
line.append(
|
|
118
|
+
format_bash_command_for_header(state.command, expanded=state.expanded),
|
|
119
|
+
style=tui_rich_style("bash_mode") + RichStyle(bold=True),
|
|
120
|
+
)
|
|
121
|
+
if state.header_suffix:
|
|
122
|
+
line.append(state.header_suffix, style=tui_rich_style("muted"))
|
|
123
|
+
line.append(" · ", style=tui_rich_style("muted"))
|
|
124
|
+
line.append(state.output.strip(), style=tui_rich_style("error" if is_error else "muted"))
|
|
125
|
+
return line
|
|
126
|
+
|
|
127
|
+
|
|
100
128
|
SHELL_RENDERER = ToolRenderDefinition(
|
|
101
129
|
name=_TOOL_NAME,
|
|
102
130
|
label="bash",
|
|
@@ -11,7 +11,7 @@ import json
|
|
|
11
11
|
from rich.console import Group, RenderableType
|
|
12
12
|
from rich.text import Text
|
|
13
13
|
|
|
14
|
-
from pythinker_code.ui.shell.components import sanitize_ansi
|
|
14
|
+
from pythinker_code.ui.shell.components.render_utils import sanitize_ansi
|
|
15
15
|
from pythinker_code.ui.shell.tool_renderers import (
|
|
16
16
|
ToolRenderContext,
|
|
17
17
|
ToolRenderDefinition,
|
{pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py
RENAMED
|
@@ -152,7 +152,9 @@ def _render_result(ctx: ToolRenderContext, result: ToolResultPayload) -> Rendera
|
|
|
152
152
|
collapsed_max_lines=0,
|
|
153
153
|
style_token="error",
|
|
154
154
|
)
|
|
155
|
-
|
|
155
|
+
if not body.plain:
|
|
156
|
+
return None
|
|
157
|
+
return body
|
|
156
158
|
|
|
157
159
|
|
|
158
160
|
TODO_RENDERER = ToolRenderDefinition(
|