pythinker-code 0.27.0__tar.gz → 0.28.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.27.0 → pythinker_code-0.28.0}/PKG-INFO +59 -52
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/README.md +53 -46
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/pyproject.toml +6 -6
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/CHANGELOG.md +21 -3
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/__main__.py +2 -2
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/agent.yaml +3 -0
- pythinker_code-0.28.0/src/pythinker_code/agents/default/judge.yaml +56 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/plan.yaml +1 -1
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/system.md +17 -5
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/app.py +5 -9
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/openai.py +272 -30
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/platforms.py +43 -5
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/__init__.py +2 -2
- pythinker_code-0.28.0/src/pythinker_code/cli/update.py +69 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/config.py +10 -1
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/execution_profiles.py +2 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/feedback.py +20 -3
- pythinker_code-0.28.0/src/pythinker_code/feedback_repo.py +23 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/llm.py +8 -1
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/native.py +1 -1
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +4 -4
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/agent.py +7 -22
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/permission.py +53 -5
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/runner.py +1 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/agent/description.md +4 -3
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/__init__.py +125 -40
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/bash_execution.py +2 -2
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +6 -1
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/tool_execution.py +2 -2
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/design_system.py +3 -2
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/glyphs.py +30 -13
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/mcp_status.py +16 -10
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/motion.py +9 -8
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/prompt.py +8 -4
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/slash.py +23 -11
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +8 -3
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +5 -5
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/update.py +222 -160
- pythinker_code-0.28.0/src/pythinker_code/ui/shell/update_orchestrator.py +485 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +14 -4
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +156 -7
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +6 -1
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +36 -3
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +11 -2
- pythinker_code-0.28.0/src/pythinker_code/ui/terminal_capabilities.py +90 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/theme.py +99 -47
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/_baseUniq-DMfW9l69.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/_baseUniq-GashHLgw.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/arc-CNnQ_qgI.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/arc-DEWPFwW9.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-PQYSR_Co.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-Dwj_75SA.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-dWpUsIm1.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-BimuzGAk.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-FAUDt5mg.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-B8L7fvII.js +1 -1
- pythinker_code-0.28.0/src/pythinker_code/web/static/assets/channel-B_RyZ3Hg.js +1 -0
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DRApifnv.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-qrOmRQpW.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-C176nFT5.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-tr65WtB9.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-DRkAssSa.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-BIL16yOB.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-B0_beBOr.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-BhTHAnWR.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-C1rSyssd.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-CJGXTY-C.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-WrQm9ejt.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-BEdYgE4-.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-Df-UuTwz.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CcwBy9_m.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-BjFtBBPf.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-BubpIDxH.js +1 -1
- pythinker_code-0.28.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-Bq3OpdHm.js +1 -0
- pythinker_code-0.28.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-Bq3OpdHm.js +1 -0
- pythinker_code-0.28.0/src/pythinker_code/web/static/assets/clone-GvlpQ0ej.js +1 -0
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-BRYo-pOg.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-D04qHW6c.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-DhRlqauq.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-BPawTe1E.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/cytoscape.esm-BFVia8Ox.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/cytoscape.esm-RnhU_9Wa.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-Ch9fNJcv.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-UWFQqM0K.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CSI-D5SY.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CLjjfotY.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-PZR1OjEn.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-qpL5YNE7.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-VR2QNfAH.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-CbFvh8Cw.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-B4HWjVZz.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-CjYV8vm9.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-DQcqtixb.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-C2fVr1_G.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-B9f8DQ6x.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-DLZrDPZ0.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-Bg4pzbTs.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-DuEcFZx1.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/graph-C9kGixri.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/graph-B2G9FUQn.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/index--efV__RQ.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/index-B87_cLpx.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/index-2vWeToDr.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/index-CWw7hKJL.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/index-Dn_nK-59.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/index-DaTrJm4j.js +2 -2
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-Bhq_AB7C.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-BP4wXDgY.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-DIRspuBf.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-DRoRmtcl.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-Dio69EXI.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-ChS3i5hy.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/layout-D297gqp3.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/layout-Ci-xrvgb.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/linear-DqxkCJMI.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/linear-B2P_3hKc.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-D5Ytdlln.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DT1aPIMQ.js +37 -37
- pythinker_code-0.28.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-YVZJy7__.css +1 -0
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/mermaid.core-D8hbsme0.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/mermaid.core-CIXBcBwk.js +5 -5
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/min-Bh6x6hFE.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/min-CXhhlW7H.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-Pz_BTd5r.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-DTIinMnI.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-CnlRsjSR.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-CIBCliKO.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-fnwm0VTI.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-CxSjcZcX.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-DHMgAblB.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-DAAVV1OD.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-CZHPPGSM.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-DFebIFvN.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-CTSHj8Ll.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-DioeBndC.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-BHXHgUPH.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-QgkZgi2p.js +1 -1
- pythinker_code-0.28.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-sBpGXbnZ.js +1 -0
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-Dngdul0S.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-BDygaett.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-RF3499L1.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-B-glFAnf.js +1 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-Di8-sSQy.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-DAXy-uTd.js +1 -1
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/index.html +1 -1
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/install.ps1 +63 -27
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/install.sh +14 -5
- pythinker_code-0.27.0/src/pythinker_code/cli/update.py +0 -26
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/channel-d_JMQytX.js +0 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-MtuanyI0.js +0 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-MtuanyI0.js +0 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/clone-Va3amHzi.js +0 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B2P5VJ9v.css +0 -1
- pythinker_code-0.27.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-BGInGpxc.js +0 -1
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/LICENSE +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/NOTICE +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/AGENTS.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/convert.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/host.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/mcp.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/server.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/session.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/tools.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/types.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/version.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/review.yaml +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agentspec.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/approval_runtime/models.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/deepseek.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/github_feedback.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/lm_studio.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/minimax.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/oauth.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/ollama.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/opencode_go.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/openrouter.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/background/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/background/agent_runner.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/background/ids.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/background/manager.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/background/models.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/background/store.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/background/summary.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/background/worker.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/__main__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/debug.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/export.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/info.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/mcp.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/plugin.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/review.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/secscan.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/security_scan.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/skill.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/toad.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/vis.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/web.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/constant.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/events.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/exception.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/extensions.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/file_restore.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/hooks/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/hooks/config.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/hooks/engine.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/hooks/events.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/hooks/runner.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/memory/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/memory/consolidation.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/memory/harvest.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/memory/recall.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/memory/recap.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/memory/retriever.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/memory/sanitize.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/metadata.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/notifications/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/notifications/llm.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/notifications/manager.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/notifications/models.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/notifications/notifier.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/notifications/store.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/notifications/wire.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/plugin/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/plugin/manager.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/plugin/tool.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/project_memory.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/prompt_templates.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/prompts/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/prompts/compact.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/prompts/init.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/py.typed +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/scratchpad.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/session.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/session_fork.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/session_state.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/share.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skill/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skill/flow/d2.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skill/lockfile.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/approval.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/btw.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/compaction.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/context.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/denwarenji.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/message.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/pythinkersoul.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/slash.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/toolset.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/builder.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/core.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/discovery.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/git_context.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/models.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/output.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/registry.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/store.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/telemetry/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/telemetry/config.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/telemetry/crash.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/telemetry/errors.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/telemetry/metrics.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/telemetry/otel.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/telemetry/sentry.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/telemetry/sink.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/AGENTS.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/background/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/background/handoff.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/background/input.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/background/list.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/background/output.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/background/stop.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/display.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/glob.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/glob.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/grep.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/read.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/read.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/read_media.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/read_media.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/replace.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/replace.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/utils.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/write.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/write.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/memory/memory.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/plan/description.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/plan/enter.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/shell/bash.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/skill/description.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/test.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/think/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/think/think.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/utils.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/web/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/web/fetch.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/web/fetch.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/web/search.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/web/search.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/print/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/print/visualize.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/markdown.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/report.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/console.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/debug.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/echo.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/replay.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/selector.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/setup.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/startup.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tips.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/tui_config.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/aiohttp.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/aioqueue.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/broadcast.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/changelog.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/clipboard.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/datetime.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/diff.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/editor.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/environment.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/envvar.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/export.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/file_filter.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/frontmatter.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/io.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/logging.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/media_tags.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/message.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/path.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/proctitle.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/proxy.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/rich/columns.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/sensitive.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/server.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/signals.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/slashcmd.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/string.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/term.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/typing.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/api/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/api/sessions.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/api/statistics.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/api/system.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/app.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/index.html +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/api/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/api/config.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/api/open_in.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/api/sessions.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/app.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/auth.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/models.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/runner/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/runner/messages.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/runner/process.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/runner/worker.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/_headers +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/logo.png +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/store/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/store/sessions.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/wire/__init__.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/wire/file.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/wire/protocol.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/wire/root_hub.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/wire/serde.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/wire/server.py +0 -0
- {pythinker_code-0.27.0 → pythinker_code-0.28.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.28.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
|
|
@@ -56,16 +56,16 @@ Requires-Dist: opentelemetry-api>=1.30,<2
|
|
|
56
56
|
Requires-Dist: opentelemetry-sdk>=1.30,<2
|
|
57
57
|
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.30,<2
|
|
58
58
|
Requires-Python: >=3.12
|
|
59
|
-
Project-URL: Changelog, https://github.com/
|
|
60
|
-
Project-URL: Documentation, https://github.com/
|
|
61
|
-
Project-URL: Homepage, https://github.com/
|
|
62
|
-
Project-URL: Issues, https://github.com/
|
|
63
|
-
Project-URL: Repository, https://github.com/
|
|
59
|
+
Project-URL: Changelog, https://github.com/Pythoughts-labs/pythinker-code/blob/main/CHANGELOG.md
|
|
60
|
+
Project-URL: Documentation, https://github.com/Pythoughts-labs/pythinker-code#readme
|
|
61
|
+
Project-URL: Homepage, https://github.com/Pythoughts-labs/pythinker-code
|
|
62
|
+
Project-URL: Issues, https://github.com/Pythoughts-labs/pythinker-code/issues
|
|
63
|
+
Project-URL: Repository, https://github.com/Pythoughts-labs/pythinker-code
|
|
64
64
|
Description-Content-Type: text/markdown
|
|
65
65
|
|
|
66
66
|
<div align="center">
|
|
67
67
|
|
|
68
|
-
# <img src="https://raw.githubusercontent.com/
|
|
68
|
+
# <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/logo.png" alt="Pythinker logo" width="42" align="top"> Pythinker Code
|
|
69
69
|
|
|
70
70
|
### *Think first, then code. Your terminal-native review-first AI engineering agent.*
|
|
71
71
|
|
|
@@ -75,9 +75,9 @@ Description-Content-Type: text/markdown
|
|
|
75
75
|
<br />
|
|
76
76
|
|
|
77
77
|
[](https://pypi.org/project/pythinker-code/)
|
|
78
|
-
[](https://github.com/
|
|
79
|
-
[](https://github.com/
|
|
80
|
-
[](https://github.com/Pythoughts-labs/pythinker-code/blob/main/pyproject.toml)
|
|
79
|
+
[](https://github.com/Pythoughts-labs/pythinker-code/blob/main/LICENSE)
|
|
80
|
+
[](https://github.com/Pythoughts-labs/pythinker-code/actions/workflows/ci-pythinker-cli.yml?query=branch%3Amain)
|
|
81
81
|
|
|
82
82
|
[](https://piptrends.com/package/pythinker-code)
|
|
83
83
|
[](https://docs.astral.sh/ruff/)
|
|
@@ -97,7 +97,7 @@ Description-Content-Type: text/markdown
|
|
|
97
97
|
|
|
98
98
|
<br /><br />
|
|
99
99
|
|
|
100
|
-
<img src="https://raw.githubusercontent.com/
|
|
100
|
+
<img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/pythinker-cli.gif" alt="Pythinker Code terminal demo" width="860">
|
|
101
101
|
|
|
102
102
|
</div>
|
|
103
103
|
|
|
@@ -115,15 +115,15 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
115
115
|
|
|
116
116
|
---
|
|
117
117
|
|
|
118
|
-
## 🆕 What's New in 0.
|
|
118
|
+
## 🆕 What's New in 0.28.0
|
|
119
119
|
|
|
120
|
-
-
|
|
121
|
-
- **
|
|
122
|
-
- **
|
|
123
|
-
- **
|
|
124
|
-
- **
|
|
120
|
+
- **Redesigned startup welcome banner.** A cleaner footer-chip layout — the "What's new / Update available" chip now sits on the panel's bottom border, the headline/strapline/help lines align beside the robot logo, and the info grid drops its vertical separator.
|
|
121
|
+
- **Terminal-aware rendering for minimal and CI terminals.** The shell UI adapts to your terminal — ASCII glyph fallbacks for `TERM=dumb` and legacy Windows code pages, a reduced-motion mode (`PYTHINKER_REDUCED_MOTION`), and `NO_COLOR`/`CLICOLOR` support — so output stays readable in CI logs, SSH panes, and bare terminals.
|
|
122
|
+
- **Windows updates avoid encoded PowerShell.** Native updates launch the signed Inno installer directly with Restart Manager flags instead of a `powershell.exe -EncodedCommand` helper, reducing antivirus false positives, and bootstrap installs show visible `/SILENT` progress.
|
|
123
|
+
- **More distribution channels.** Releases now include best-effort Docker/GHCR, Scoop, Nix, and manual WinGet plumbing, with channel-native update guidance where the install format supports it.
|
|
124
|
+
- **Repository moved to the Pythoughts-labs GitHub org.** All GitHub URLs, install scripts, CI configuration, and the default `/feedback` repository now point to `github.com/Pythoughts-labs/pythinker-code`; configs that still reference the previous owner are auto-migrated.
|
|
125
125
|
|
|
126
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
126
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.28.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
127
127
|
|
|
128
128
|
|
|
129
129
|
---
|
|
@@ -201,7 +201,7 @@ Swap providers and models per-session: `--model openai/gpt-5.5`, hosted Pythinke
|
|
|
201
201
|
> Built-in shell commands such as `cd` are not yet supported in shell command mode.
|
|
202
202
|
|
|
203
203
|
<div align="center">
|
|
204
|
-
<img src="https://raw.githubusercontent.com/
|
|
204
|
+
<img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/shell-mode.gif" alt="Shell command mode demo" width="860">
|
|
205
205
|
</div>
|
|
206
206
|
|
|
207
207
|
---
|
|
@@ -213,10 +213,13 @@ matches your OS — no Python, Node, or `uv` prerequisite.
|
|
|
213
213
|
|
|
214
214
|
| Platform | Recommended install | Artifact source |
|
|
215
215
|
|---|---|---|
|
|
216
|
-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.
|
|
217
|
-
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/
|
|
218
|
-
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install
|
|
219
|
-
|
|
|
216
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.28.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
217
|
+
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
218
|
+
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
|
|
219
|
+
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
|
|
220
|
+
| **🪟 Windows — Scoop** | `scoop bucket add pythinker https://github.com/Pythoughts-labs/scoop-pythinker && scoop install pythinker-code` | auto-published Scoop bucket |
|
|
221
|
+
| **❄️ Nix** | `nix run github:Pythoughts-labs/pythinker-code` | flake `apps.default` |
|
|
222
|
+
| **<img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> — system package** | Download the `.deb` or `.rpm` for your distro below | [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
220
223
|
| **🐍 Python fallback** | `pip install pythinker-code` | PyPI |
|
|
221
224
|
|
|
222
225
|
Every artifact ships with a matching `.sha256` file — verify before install on
|
|
@@ -238,7 +241,7 @@ pythinker # start the interactive TUI
|
|
|
238
241
|
|
|
239
242
|
### 🪟 Windows — native installer
|
|
240
243
|
|
|
241
|
-
`PythinkerSetup-0.
|
|
244
|
+
`PythinkerSetup-0.28.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
242
245
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
243
246
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
244
247
|
the change. **No UAC prompt.**
|
|
@@ -249,18 +252,18 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
249
252
|
|
|
250
253
|
# Or manually download the installer + checksum from the Releases page,
|
|
251
254
|
# verify with Get-FileHash, then run:
|
|
252
|
-
.\PythinkerSetup-0.
|
|
255
|
+
.\PythinkerSetup-0.28.0.exe
|
|
253
256
|
|
|
254
257
|
# Open a fresh PowerShell
|
|
255
258
|
pythinker --version
|
|
256
259
|
```
|
|
257
260
|
|
|
258
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
261
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.28.0.exe /ALLUSERS`
|
|
259
262
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
260
263
|
|
|
261
264
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
262
|
-
the newest installer, verifies SHA-256, and
|
|
263
|
-
(`/
|
|
265
|
+
the newest installer, verifies SHA-256, and launches the signed Inno installer
|
|
266
|
+
with visible progress (`/SILENT /NORESTART /CURRENTUSER /CLOSEAPPLICATIONS /NORESTARTAPPLICATIONS`).
|
|
264
267
|
|
|
265
268
|
**Uninstall:** Apps & Features → *Pythinker Code* → Uninstall reverts both
|
|
266
269
|
the files and the PATH edit.
|
|
@@ -276,7 +279,7 @@ the files and the PATH edit.
|
|
|
276
279
|
|
|
277
280
|
```sh
|
|
278
281
|
# 1. Install
|
|
279
|
-
brew install
|
|
282
|
+
brew install Pythoughts-labs/pythinker/pythinker-code
|
|
280
283
|
|
|
281
284
|
# 2. Verify
|
|
282
285
|
pythinker --version
|
|
@@ -292,9 +295,9 @@ latest version.
|
|
|
292
295
|
**Upgrade:** `brew upgrade pythinker-code` (Homebrew packages don't
|
|
293
296
|
auto-update; run this whenever you want the latest).
|
|
294
297
|
|
|
295
|
-
**Uninstall:** `brew uninstall pythinker-code && brew untap
|
|
298
|
+
**Uninstall:** `brew uninstall pythinker-code && brew untap Pythoughts-labs/pythinker`.
|
|
296
299
|
|
|
297
|
-
> The tap repo is [
|
|
300
|
+
> The tap repo is [Pythoughts-labs/homebrew-pythinker](https://github.com/Pythoughts-labs/homebrew-pythinker)
|
|
298
301
|
> — auto-maintained, do not hand-edit.
|
|
299
302
|
|
|
300
303
|
---
|
|
@@ -306,26 +309,26 @@ attached to every GitHub Release.
|
|
|
306
309
|
|
|
307
310
|
```sh
|
|
308
311
|
# Debian / Ubuntu (x86_64)
|
|
309
|
-
sudo dpkg -i pythinker-code_0.
|
|
312
|
+
sudo dpkg -i pythinker-code_0.28.0_amd64.deb
|
|
310
313
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
311
314
|
|
|
312
315
|
# Debian / Ubuntu (ARM64)
|
|
313
|
-
sudo dpkg -i pythinker-code_0.
|
|
316
|
+
sudo dpkg -i pythinker-code_0.28.0_arm64.deb
|
|
314
317
|
|
|
315
318
|
# Fedora / RHEL / openSUSE (x86_64)
|
|
316
|
-
curl -LO https://github.com/
|
|
317
|
-
curl -LO https://github.com/
|
|
318
|
-
sha256sum -c pythinker-code-0.
|
|
319
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.x86_64.rpm
|
|
320
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.x86_64.rpm.sha256
|
|
321
|
+
sha256sum -c pythinker-code-0.28.0.x86_64.rpm.sha256
|
|
319
322
|
# Fedora / RHEL:
|
|
320
|
-
sudo dnf install ./pythinker-code-0.
|
|
323
|
+
sudo dnf install ./pythinker-code-0.28.0.x86_64.rpm
|
|
321
324
|
# openSUSE:
|
|
322
|
-
sudo zypper install ./pythinker-code-0.
|
|
325
|
+
sudo zypper install ./pythinker-code-0.28.0.x86_64.rpm
|
|
323
326
|
|
|
324
327
|
# Fedora / RHEL (aarch64)
|
|
325
|
-
curl -LO https://github.com/
|
|
326
|
-
curl -LO https://github.com/
|
|
327
|
-
sha256sum -c pythinker-code-0.
|
|
328
|
-
sudo dnf install ./pythinker-code-0.
|
|
328
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.aarch64.rpm
|
|
329
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.aarch64.rpm.sha256
|
|
330
|
+
sha256sum -c pythinker-code-0.28.0.aarch64.rpm.sha256
|
|
331
|
+
sudo dnf install ./pythinker-code-0.28.0.aarch64.rpm
|
|
329
332
|
```
|
|
330
333
|
|
|
331
334
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -334,8 +337,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
334
337
|
**Verify before install:**
|
|
335
338
|
|
|
336
339
|
```sh
|
|
337
|
-
sha256sum -c pythinker-code_0.
|
|
338
|
-
sha256sum -c pythinker-code-0.
|
|
340
|
+
sha256sum -c pythinker-code_0.28.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
341
|
+
sha256sum -c pythinker-code-0.28.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
339
342
|
```
|
|
340
343
|
|
|
341
344
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -606,7 +609,7 @@ The ACP server provides:
|
|
|
606
609
|
| 🔄 **Hot model swap** | Change models for a running ACP session |
|
|
607
610
|
|
|
608
611
|
<div align="center">
|
|
609
|
-
<img src="https://raw.githubusercontent.com/
|
|
612
|
+
<img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/acp-integration.gif" alt="ACP IDE integration demo" width="860">
|
|
610
613
|
</div>
|
|
611
614
|
|
|
612
615
|
---
|
|
@@ -681,7 +684,7 @@ Pythinker is a small, extensible runtime — not a monolith. Build on it.
|
|
|
681
684
|
## 🏗️ Architecture
|
|
682
685
|
|
|
683
686
|
<div align="center">
|
|
684
|
-
<img src="https://raw.githubusercontent.com/
|
|
687
|
+
<img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/Architecture.webp" alt="Pythinker Code architecture diagram" width="860">
|
|
685
688
|
</div>
|
|
686
689
|
|
|
687
690
|
---
|
|
@@ -761,7 +764,7 @@ are used automatically unless you turn telemetry off.
|
|
|
761
764
|
### 🏁 Prepare the workspace
|
|
762
765
|
|
|
763
766
|
```sh
|
|
764
|
-
git clone https://github.com/
|
|
767
|
+
git clone https://github.com/Pythoughts-labs/pythinker-code.git
|
|
765
768
|
cd pythinker-code
|
|
766
769
|
make prepare
|
|
767
770
|
```
|
|
@@ -842,9 +845,9 @@ pythinker-code/
|
|
|
842
845
|
|
|
843
846
|
Contributions are warmly welcome — bug reports, PRs, plugins, skills, and docs all help.
|
|
844
847
|
|
|
845
|
-
- 📖 Start with [`CONTRIBUTING.md`](https://github.com/
|
|
846
|
-
- 🔐 See [`SECURITY.md`](https://github.com/
|
|
847
|
-
- 📜 Skim [`AGENTS.md`](https://github.com/
|
|
848
|
+
- 📖 Start with [`CONTRIBUTING.md`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/CONTRIBUTING.md)
|
|
849
|
+
- 🔐 See [`SECURITY.md`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/SECURITY.md) for responsible disclosure
|
|
850
|
+
- 📜 Skim [`AGENTS.md`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/AGENTS.md) for the agent design notes
|
|
848
851
|
|
|
849
852
|
If Pythinker helps you, **a ⭐ on GitHub goes a long way.**
|
|
850
853
|
|
|
@@ -852,7 +855,7 @@ If Pythinker helps you, **a ⭐ on GitHub goes a long way.**
|
|
|
852
855
|
|
|
853
856
|
## 📜 License
|
|
854
857
|
|
|
855
|
-
Distributed under the **Apache-2.0 License**. See [`LICENSE`](https://github.com/
|
|
858
|
+
Distributed under the **Apache-2.0 License**. See [`LICENSE`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/LICENSE) for the full text and [`NOTICE`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/NOTICE) for attributions.
|
|
856
859
|
|
|
857
860
|
<br />
|
|
858
861
|
|
|
@@ -862,8 +865,12 @@ Distributed under the **Apache-2.0 License**. See [`LICENSE`](https://github.com
|
|
|
862
865
|
|
|
863
866
|
[🌐 pythinker.com](https://pythinker.com) ·
|
|
864
867
|
[📦 PyPI](https://pypi.org/project/pythinker-code/) ·
|
|
865
|
-
[🐙 GitHub](https://github.com/
|
|
868
|
+
[🐙 GitHub](https://github.com/Pythoughts-labs/pythinker-code) ·
|
|
866
869
|
[🧩 ACP](https://github.com/agentclientprotocol/agent-client-protocol) ·
|
|
867
870
|
[🔌 MCP](https://modelcontextprotocol.io/)
|
|
868
871
|
|
|
872
|
+
<p align="center">
|
|
873
|
+
<em>Thanks for visiting ✨ Pythinker! Viewing this README does not trigger telemetry.</em>
|
|
874
|
+
</p>
|
|
875
|
+
|
|
869
876
|
</div>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
# <img src="https://raw.githubusercontent.com/
|
|
3
|
+
# <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/logo.png" alt="Pythinker logo" width="42" align="top"> Pythinker Code
|
|
4
4
|
|
|
5
5
|
### *Think first, then code. Your terminal-native review-first AI engineering agent.*
|
|
6
6
|
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
<br />
|
|
11
11
|
|
|
12
12
|
[](https://pypi.org/project/pythinker-code/)
|
|
13
|
-
[](https://github.com/
|
|
14
|
-
[](https://github.com/
|
|
15
|
-
[](https://github.com/Pythoughts-labs/pythinker-code/blob/main/pyproject.toml)
|
|
14
|
+
[](https://github.com/Pythoughts-labs/pythinker-code/blob/main/LICENSE)
|
|
15
|
+
[](https://github.com/Pythoughts-labs/pythinker-code/actions/workflows/ci-pythinker-cli.yml?query=branch%3Amain)
|
|
16
16
|
|
|
17
17
|
[](https://piptrends.com/package/pythinker-code)
|
|
18
18
|
[](https://docs.astral.sh/ruff/)
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
|
|
33
33
|
<br /><br />
|
|
34
34
|
|
|
35
|
-
<img src="https://raw.githubusercontent.com/
|
|
35
|
+
<img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/pythinker-cli.gif" alt="Pythinker Code terminal demo" width="860">
|
|
36
36
|
|
|
37
37
|
</div>
|
|
38
38
|
|
|
@@ -50,15 +50,15 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
53
|
-
## 🆕 What's New in 0.
|
|
53
|
+
## 🆕 What's New in 0.28.0
|
|
54
54
|
|
|
55
|
-
-
|
|
56
|
-
- **
|
|
57
|
-
- **
|
|
58
|
-
- **
|
|
59
|
-
- **
|
|
55
|
+
- **Redesigned startup welcome banner.** A cleaner footer-chip layout — the "What's new / Update available" chip now sits on the panel's bottom border, the headline/strapline/help lines align beside the robot logo, and the info grid drops its vertical separator.
|
|
56
|
+
- **Terminal-aware rendering for minimal and CI terminals.** The shell UI adapts to your terminal — ASCII glyph fallbacks for `TERM=dumb` and legacy Windows code pages, a reduced-motion mode (`PYTHINKER_REDUCED_MOTION`), and `NO_COLOR`/`CLICOLOR` support — so output stays readable in CI logs, SSH panes, and bare terminals.
|
|
57
|
+
- **Windows updates avoid encoded PowerShell.** Native updates launch the signed Inno installer directly with Restart Manager flags instead of a `powershell.exe -EncodedCommand` helper, reducing antivirus false positives, and bootstrap installs show visible `/SILENT` progress.
|
|
58
|
+
- **More distribution channels.** Releases now include best-effort Docker/GHCR, Scoop, Nix, and manual WinGet plumbing, with channel-native update guidance where the install format supports it.
|
|
59
|
+
- **Repository moved to the Pythoughts-labs GitHub org.** All GitHub URLs, install scripts, CI configuration, and the default `/feedback` repository now point to `github.com/Pythoughts-labs/pythinker-code`; configs that still reference the previous owner are auto-migrated.
|
|
60
60
|
|
|
61
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
61
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.28.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
62
62
|
|
|
63
63
|
|
|
64
64
|
---
|
|
@@ -136,7 +136,7 @@ Swap providers and models per-session: `--model openai/gpt-5.5`, hosted Pythinke
|
|
|
136
136
|
> Built-in shell commands such as `cd` are not yet supported in shell command mode.
|
|
137
137
|
|
|
138
138
|
<div align="center">
|
|
139
|
-
<img src="https://raw.githubusercontent.com/
|
|
139
|
+
<img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/shell-mode.gif" alt="Shell command mode demo" width="860">
|
|
140
140
|
</div>
|
|
141
141
|
|
|
142
142
|
---
|
|
@@ -148,10 +148,13 @@ matches your OS — no Python, Node, or `uv` prerequisite.
|
|
|
148
148
|
|
|
149
149
|
| Platform | Recommended install | Artifact source |
|
|
150
150
|
|---|---|---|
|
|
151
|
-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.
|
|
152
|
-
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/
|
|
153
|
-
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install
|
|
154
|
-
|
|
|
151
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.28.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
152
|
+
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
153
|
+
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
|
|
154
|
+
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
|
|
155
|
+
| **🪟 Windows — Scoop** | `scoop bucket add pythinker https://github.com/Pythoughts-labs/scoop-pythinker && scoop install pythinker-code` | auto-published Scoop bucket |
|
|
156
|
+
| **❄️ Nix** | `nix run github:Pythoughts-labs/pythinker-code` | flake `apps.default` |
|
|
157
|
+
| **<img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> — system package** | Download the `.deb` or `.rpm` for your distro below | [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
155
158
|
| **🐍 Python fallback** | `pip install pythinker-code` | PyPI |
|
|
156
159
|
|
|
157
160
|
Every artifact ships with a matching `.sha256` file — verify before install on
|
|
@@ -173,7 +176,7 @@ pythinker # start the interactive TUI
|
|
|
173
176
|
|
|
174
177
|
### 🪟 Windows — native installer
|
|
175
178
|
|
|
176
|
-
`PythinkerSetup-0.
|
|
179
|
+
`PythinkerSetup-0.28.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
177
180
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
178
181
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
179
182
|
the change. **No UAC prompt.**
|
|
@@ -184,18 +187,18 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
184
187
|
|
|
185
188
|
# Or manually download the installer + checksum from the Releases page,
|
|
186
189
|
# verify with Get-FileHash, then run:
|
|
187
|
-
.\PythinkerSetup-0.
|
|
190
|
+
.\PythinkerSetup-0.28.0.exe
|
|
188
191
|
|
|
189
192
|
# Open a fresh PowerShell
|
|
190
193
|
pythinker --version
|
|
191
194
|
```
|
|
192
195
|
|
|
193
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
196
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.28.0.exe /ALLUSERS`
|
|
194
197
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
195
198
|
|
|
196
199
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
197
|
-
the newest installer, verifies SHA-256, and
|
|
198
|
-
(`/
|
|
200
|
+
the newest installer, verifies SHA-256, and launches the signed Inno installer
|
|
201
|
+
with visible progress (`/SILENT /NORESTART /CURRENTUSER /CLOSEAPPLICATIONS /NORESTARTAPPLICATIONS`).
|
|
199
202
|
|
|
200
203
|
**Uninstall:** Apps & Features → *Pythinker Code* → Uninstall reverts both
|
|
201
204
|
the files and the PATH edit.
|
|
@@ -211,7 +214,7 @@ the files and the PATH edit.
|
|
|
211
214
|
|
|
212
215
|
```sh
|
|
213
216
|
# 1. Install
|
|
214
|
-
brew install
|
|
217
|
+
brew install Pythoughts-labs/pythinker/pythinker-code
|
|
215
218
|
|
|
216
219
|
# 2. Verify
|
|
217
220
|
pythinker --version
|
|
@@ -227,9 +230,9 @@ latest version.
|
|
|
227
230
|
**Upgrade:** `brew upgrade pythinker-code` (Homebrew packages don't
|
|
228
231
|
auto-update; run this whenever you want the latest).
|
|
229
232
|
|
|
230
|
-
**Uninstall:** `brew uninstall pythinker-code && brew untap
|
|
233
|
+
**Uninstall:** `brew uninstall pythinker-code && brew untap Pythoughts-labs/pythinker`.
|
|
231
234
|
|
|
232
|
-
> The tap repo is [
|
|
235
|
+
> The tap repo is [Pythoughts-labs/homebrew-pythinker](https://github.com/Pythoughts-labs/homebrew-pythinker)
|
|
233
236
|
> — auto-maintained, do not hand-edit.
|
|
234
237
|
|
|
235
238
|
---
|
|
@@ -241,26 +244,26 @@ attached to every GitHub Release.
|
|
|
241
244
|
|
|
242
245
|
```sh
|
|
243
246
|
# Debian / Ubuntu (x86_64)
|
|
244
|
-
sudo dpkg -i pythinker-code_0.
|
|
247
|
+
sudo dpkg -i pythinker-code_0.28.0_amd64.deb
|
|
245
248
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
246
249
|
|
|
247
250
|
# Debian / Ubuntu (ARM64)
|
|
248
|
-
sudo dpkg -i pythinker-code_0.
|
|
251
|
+
sudo dpkg -i pythinker-code_0.28.0_arm64.deb
|
|
249
252
|
|
|
250
253
|
# Fedora / RHEL / openSUSE (x86_64)
|
|
251
|
-
curl -LO https://github.com/
|
|
252
|
-
curl -LO https://github.com/
|
|
253
|
-
sha256sum -c pythinker-code-0.
|
|
254
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.x86_64.rpm
|
|
255
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.x86_64.rpm.sha256
|
|
256
|
+
sha256sum -c pythinker-code-0.28.0.x86_64.rpm.sha256
|
|
254
257
|
# Fedora / RHEL:
|
|
255
|
-
sudo dnf install ./pythinker-code-0.
|
|
258
|
+
sudo dnf install ./pythinker-code-0.28.0.x86_64.rpm
|
|
256
259
|
# openSUSE:
|
|
257
|
-
sudo zypper install ./pythinker-code-0.
|
|
260
|
+
sudo zypper install ./pythinker-code-0.28.0.x86_64.rpm
|
|
258
261
|
|
|
259
262
|
# Fedora / RHEL (aarch64)
|
|
260
|
-
curl -LO https://github.com/
|
|
261
|
-
curl -LO https://github.com/
|
|
262
|
-
sha256sum -c pythinker-code-0.
|
|
263
|
-
sudo dnf install ./pythinker-code-0.
|
|
263
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.aarch64.rpm
|
|
264
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.aarch64.rpm.sha256
|
|
265
|
+
sha256sum -c pythinker-code-0.28.0.aarch64.rpm.sha256
|
|
266
|
+
sudo dnf install ./pythinker-code-0.28.0.aarch64.rpm
|
|
264
267
|
```
|
|
265
268
|
|
|
266
269
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -269,8 +272,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
269
272
|
**Verify before install:**
|
|
270
273
|
|
|
271
274
|
```sh
|
|
272
|
-
sha256sum -c pythinker-code_0.
|
|
273
|
-
sha256sum -c pythinker-code-0.
|
|
275
|
+
sha256sum -c pythinker-code_0.28.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
276
|
+
sha256sum -c pythinker-code-0.28.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
274
277
|
```
|
|
275
278
|
|
|
276
279
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -541,7 +544,7 @@ The ACP server provides:
|
|
|
541
544
|
| 🔄 **Hot model swap** | Change models for a running ACP session |
|
|
542
545
|
|
|
543
546
|
<div align="center">
|
|
544
|
-
<img src="https://raw.githubusercontent.com/
|
|
547
|
+
<img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/acp-integration.gif" alt="ACP IDE integration demo" width="860">
|
|
545
548
|
</div>
|
|
546
549
|
|
|
547
550
|
---
|
|
@@ -616,7 +619,7 @@ Pythinker is a small, extensible runtime — not a monolith. Build on it.
|
|
|
616
619
|
## 🏗️ Architecture
|
|
617
620
|
|
|
618
621
|
<div align="center">
|
|
619
|
-
<img src="https://raw.githubusercontent.com/
|
|
622
|
+
<img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/Architecture.webp" alt="Pythinker Code architecture diagram" width="860">
|
|
620
623
|
</div>
|
|
621
624
|
|
|
622
625
|
---
|
|
@@ -696,7 +699,7 @@ are used automatically unless you turn telemetry off.
|
|
|
696
699
|
### 🏁 Prepare the workspace
|
|
697
700
|
|
|
698
701
|
```sh
|
|
699
|
-
git clone https://github.com/
|
|
702
|
+
git clone https://github.com/Pythoughts-labs/pythinker-code.git
|
|
700
703
|
cd pythinker-code
|
|
701
704
|
make prepare
|
|
702
705
|
```
|
|
@@ -777,9 +780,9 @@ pythinker-code/
|
|
|
777
780
|
|
|
778
781
|
Contributions are warmly welcome — bug reports, PRs, plugins, skills, and docs all help.
|
|
779
782
|
|
|
780
|
-
- 📖 Start with [`CONTRIBUTING.md`](https://github.com/
|
|
781
|
-
- 🔐 See [`SECURITY.md`](https://github.com/
|
|
782
|
-
- 📜 Skim [`AGENTS.md`](https://github.com/
|
|
783
|
+
- 📖 Start with [`CONTRIBUTING.md`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/CONTRIBUTING.md)
|
|
784
|
+
- 🔐 See [`SECURITY.md`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/SECURITY.md) for responsible disclosure
|
|
785
|
+
- 📜 Skim [`AGENTS.md`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/AGENTS.md) for the agent design notes
|
|
783
786
|
|
|
784
787
|
If Pythinker helps you, **a ⭐ on GitHub goes a long way.**
|
|
785
788
|
|
|
@@ -787,7 +790,7 @@ If Pythinker helps you, **a ⭐ on GitHub goes a long way.**
|
|
|
787
790
|
|
|
788
791
|
## 📜 License
|
|
789
792
|
|
|
790
|
-
Distributed under the **Apache-2.0 License**. See [`LICENSE`](https://github.com/
|
|
793
|
+
Distributed under the **Apache-2.0 License**. See [`LICENSE`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/LICENSE) for the full text and [`NOTICE`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/NOTICE) for attributions.
|
|
791
794
|
|
|
792
795
|
<br />
|
|
793
796
|
|
|
@@ -797,8 +800,12 @@ Distributed under the **Apache-2.0 License**. See [`LICENSE`](https://github.com
|
|
|
797
800
|
|
|
798
801
|
[🌐 pythinker.com](https://pythinker.com) ·
|
|
799
802
|
[📦 PyPI](https://pypi.org/project/pythinker-code/) ·
|
|
800
|
-
[🐙 GitHub](https://github.com/
|
|
803
|
+
[🐙 GitHub](https://github.com/Pythoughts-labs/pythinker-code) ·
|
|
801
804
|
[🧩 ACP](https://github.com/agentclientprotocol/agent-client-protocol) ·
|
|
802
805
|
[🔌 MCP](https://modelcontextprotocol.io/)
|
|
803
806
|
|
|
807
|
+
<p align="center">
|
|
808
|
+
<em>Thanks for visiting ✨ Pythinker! Viewing this README does not trigger telemetry.</em>
|
|
809
|
+
</p>
|
|
810
|
+
|
|
804
811
|
</div>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "pythinker-code"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.28.0"
|
|
4
4
|
description = "Pythinker Code is your next CLI agent."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -102,11 +102,11 @@ pythinker = "pythinker_code.__main__:main"
|
|
|
102
102
|
pythinker-code = "pythinker_code.__main__:main"
|
|
103
103
|
|
|
104
104
|
[project.urls]
|
|
105
|
-
Homepage = "https://github.com/
|
|
106
|
-
Repository = "https://github.com/
|
|
107
|
-
Issues = "https://github.com/
|
|
108
|
-
Changelog = "https://github.com/
|
|
109
|
-
Documentation = "https://github.com/
|
|
105
|
+
Homepage = "https://github.com/Pythoughts-labs/pythinker-code"
|
|
106
|
+
Repository = "https://github.com/Pythoughts-labs/pythinker-code"
|
|
107
|
+
Issues = "https://github.com/Pythoughts-labs/pythinker-code/issues"
|
|
108
|
+
Changelog = "https://github.com/Pythoughts-labs/pythinker-code/blob/main/CHANGELOG.md"
|
|
109
|
+
Documentation = "https://github.com/Pythoughts-labs/pythinker-code#readme"
|
|
110
110
|
|
|
111
111
|
[tool.ruff]
|
|
112
112
|
line-length = 100
|
|
@@ -15,6 +15,24 @@ GitHub Releases page; `0.8.0` is the new starting line.
|
|
|
15
15
|
|
|
16
16
|
## Unreleased
|
|
17
17
|
|
|
18
|
+
## 0.28.0 (2026-05-31)
|
|
19
|
+
|
|
20
|
+
### What changed in this release
|
|
21
|
+
|
|
22
|
+
- **Repository moved to the Pythoughts-labs GitHub org.** All GitHub URLs, install scripts, CI configuration, and the default `/feedback` repository now point to `github.com/Pythoughts-labs/pythinker-code`; existing configs that still reference the previous owner are auto-migrated to the new default.
|
|
23
|
+
- **Broadened distribution channels for releases.** Releases now include best-effort Docker/GHCR, Scoop, Nix, and manual WinGet distribution plumbing with channel-native update markers where the installer format supports them.
|
|
24
|
+
- **Release preparation now uses a version single source of truth.** `scripts/release.py` rewrites derived release files from `pyproject.toml`, verifies version lockstep on every PR, enforces the frozen `pythinker-review==0.1.0` pin, and managed-channel installs now show channel-native update guidance instead of trying to self-update.
|
|
25
|
+
- **Node.js 24 CI with pinned, credential-checked workflows.** CI and release workflows now run on Node.js 24-backed GitHub Actions, pin action revisions to immutable commits, and preflight optional website/tap GitHub App credentials with clear errors or notices instead of opaque token failures.
|
|
26
|
+
- **Release pipeline hardening.** Migrate the pythinker-home website-sync dispatch to the org-owned `pythinker-release-bot` GitHub App and fail loud on an empty token; retire the dead pythinker-core API-docs gh-pages publish step; add exponential backoff to the native install scripts and fix the Windows installer's release-pagination cliff.
|
|
27
|
+
- **Redesigned startup welcome banner.** The banner now uses a cleaner footer-chip layout: the "What's new / Update available" chip sits on the panel's bottom border, the headline/strapline/help lines align beside the robot logo, and the info grid drops its vertical separator. The robot art and palette are unchanged.
|
|
28
|
+
- **Terminal-aware rendering for minimal and CI terminals.** The shell UI adapts to the terminal — ASCII glyph fallbacks for `TERM=dumb` and legacy Windows code pages, reduced-motion mode (`PYTHINKER_REDUCED_MOTION`), and `NO_COLOR`/`CLICOLOR` support that strips color cleanly — so output stays readable in CI logs, SSH panes, and bare terminals.
|
|
29
|
+
- **Windows updates avoid encoded PowerShell.** Native updates now launch the signed Inno installer directly with Restart Manager flags instead of a `powershell.exe -EncodedCommand` helper, reducing antivirus command-line heuristic false positives. Windows bootstrap installs use visible `/SILENT` progress instead of fully suppressed setup, and the installer build signs bundled PE files plus Inno's setup/uninstaller/temp copies when signing credentials are configured.
|
|
30
|
+
- **New `judge` subagent and redesigned default prompts.** Adds an independent LLM-as-judge quality-gate subagent — a cheap single spot-checking pass for high-stakes deliverables, after deterministic gates — and rewrites the default agent, plan, and system prompts for clearer, more efficient guidance.
|
|
31
|
+
- **`.pythinker/AGENTS.md` is no longer loaded as project instructions.** Only `AGENTS.md`/`agents.md` from the project root down to the working directory are merged. Move any instructions kept solely in `.pythinker/AGENTS.md` to a root or directory-level `AGENTS.md` (see breaking changes).
|
|
32
|
+
- **Read-only subagent profiles block network and git config-injection shell commands.** The `read_only`/`plan`/`review`/`verify` permission profiles now deny network clients (`curl`/`wget`/`ssh`/`git fetch`) and unsafe `git -c`/`--config-env`/`--exec-path` options that can execute arbitrary commands (for example via `core.pager`/`core.sshCommand`), closing a Shell-tool bypass of a read-only agent's no-web-tools intent.
|
|
33
|
+
|
|
34
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.28.0`, or use the native installer for your OS (see the README install table).
|
|
35
|
+
|
|
18
36
|
## 0.27.0 (2026-05-31)
|
|
19
37
|
|
|
20
38
|
### What changed in this release
|
|
@@ -80,7 +98,7 @@ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.25.0`,
|
|
|
80
98
|
- **Complete native installer `Fetch` fix.** The 0.23.0 release bundled trafilatura's data files but missed `justext`'s stoplists directory, so the `Fetch` tool still crashed with `FileNotFoundError: ./_MEIxxxx/justext/stoplists` on `.exe`, `.deb`, and `.rpm` installs. All three installer specs now bundle both `trafilatura` and `justext` data files. PyPI / `pip install` was unaffected.
|
|
81
99
|
- **Atomic "latest" release gating.** The GitHub Release is no longer marked "latest" until every platform asset (4 archives, 1 `.exe`, 4 `.deb`/`.rpm`) is attached. A dispatch workflow polls for completeness before flipping the flag, so `/releases/latest` and the in-app updater no longer serve a partially-built release during the publish window.
|
|
82
100
|
- **Smarter `/update` command.** `run_update_prompt` now routes through `do_update(check_only=True)` to get a fresh PyPI version before showing the update modal, and verifies that the expected binary asset for your platform exists on the GitHub Release before initiating a native upgrade.
|
|
83
|
-
- **Repository transferred to
|
|
101
|
+
- **Repository transferred to Pythoughts-labs.** All GitHub URLs, install script references, and CI configuration now point to `github.com/Pythoughts-labs/pythinker-code`.
|
|
84
102
|
|
|
85
103
|
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.24.0`, or use the native installer for your OS (see the README install table).
|
|
86
104
|
|
|
@@ -193,8 +211,8 @@ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.14.0`,
|
|
|
193
211
|
|
|
194
212
|
### What changed in this release
|
|
195
213
|
|
|
196
|
-
- **Native installers for macOS and Linux.** `brew install
|
|
197
|
-
- **Cross-OS curl-bash native installer.** `curl -fsSL https://raw.githubusercontent.com/
|
|
214
|
+
- **Native installers for macOS and Linux.** `brew install Pythoughts-labs/pythinker/pythinker-code` (Homebrew tap) covers both macOS (Intel + Apple Silicon) and Linux brew installs from a single auto-generated formula. Debian/Ubuntu users get `pythinker-code_x.y.z_<arch>.deb` and Fedora/RHEL/openSUSE users get `pythinker-code-x.y.z.<arch>.rpm`, both attached to every GitHub Release for `x86_64` and `aarch64`. Together with the Windows `PythinkerSetup-x.y.z.exe` shipped in 0.12.0, Pythinker now ships native installers for every supported platform — no Python, Node, or `uv` prerequisite.
|
|
215
|
+
- **Cross-OS curl-bash native installer.** `curl -fsSL https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/scripts/install-native.sh | bash` detects your OS + arch, downloads the matching PyInstaller-frozen tarball from the latest Release, verifies its SHA-256, and lands the binary at `~/.local/bin/pythinker`. Supports `linux-x86_64`, `linux-aarch64`, and `macos-arm64`. Honors `--version`, `--prefix`, and `NO_COLOR`.
|
|
198
216
|
- **Homebrew tap auto-published on every release.** A new `.github/workflows/homebrew-tap.yml` waits for the PyPI publish to land, runs an in-tree formula generator (replaces the unmaintained `homebrew-pypi-poet` — see release notes for the why), and pushes `Formula/pythinker-code.rb` to the `homebrew-pythinker` tap repo. 132 transitive deps are enumerated automatically — no hand-curation per release.
|
|
199
217
|
- **Tag-triggered Linux package pipeline.** A new `.github/workflows/linux-installer.yml` matrix-builds `.deb` and `.rpm` for `x86_64` and `aarch64` (the latter via QEMU on `ubuntu-latest`), then uploads all six artifacts to the GitHub Release via `softprops/action-gh-release@v2`.
|
|
200
218
|
- **Frozen-binary data-files fix.** The PyInstaller specs for both the Windows and Linux pipelines now call `collect_data_files(pkg, include_py_files=False)` per package, so `pythinker_code/prompts/*.md`, `agents/default/*.yaml`, `tools/*/description.md`, `skills/*/SKILL.md`, and similar package resources are bundled into `_internal/`. Without this fix the frozen binary crashed the first time it tried to load `init.md` or an agent yaml. The Windows installer that shipped in 0.12.0 is affected; users on that build should upgrade to 0.13.0.
|