pythinker-code 0.17.0__tar.gz → 0.18.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.17.0 → pythinker_code-0.18.0}/PKG-INFO +40 -43
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/README.md +39 -42
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/pyproject.toml +1 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/CHANGELOG.md +12 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/code_reviewer.yaml +2 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/coder.yaml +12 -2
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/debugger.yaml +12 -5
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/explore.yaml +9 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/implementer.yaml +9 -3
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/plan.yaml +23 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/review.yaml +5 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/security_reviewer.yaml +6 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/system.md +31 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/verifier.yaml +11 -2
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/app.py +11 -3
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/background/agent_runner.py +14 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/background/manager.py +42 -2
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/__init__.py +48 -2
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/config.py +81 -25
- pythinker_code-0.18.0/src/pythinker_code/scratchpad.py +895 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/agent.py +5 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/approval.py +14 -4
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/pythinkersoul.py +60 -34
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/toolset.py +79 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/config.py +18 -10
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/agent/__init__.py +170 -44
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/agent/description.md +5 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/ask_user/__init__.py +16 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/replace.py +3 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/write.py +3 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/shell/__init__.py +19 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/todo/__init__.py +29 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/__init__.py +4 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/__init__.py +11 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/bash_execution.py +7 -2
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +3 -4
- pythinker_code-0.18.0/src/pythinker_code/ui/shell/components/dynamic_border.py +37 -0
- pythinker_code-0.18.0/src/pythinker_code/ui/shell/components/key_hints.py +55 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/markdown.py +174 -26
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/settings_list.py +56 -7
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/tool_execution.py +3 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/echo.py +2 -9
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/glyphs.py +9 -1
- pythinker_code-0.18.0/src/pythinker_code/ui/shell/mcp_status.py +148 -0
- pythinker_code-0.18.0/src/pythinker_code/ui/shell/model_picker.py +114 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/motion.py +72 -23
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/prompt.py +49 -4
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selector.py +101 -14
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/slash.py +20 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +50 -7
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +10 -3
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +30 -11
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +5 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +11 -3
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +5 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +5 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +10 -18
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +5 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +5 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +2 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +6 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +9 -2
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +5 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/__init__.py +6 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +7 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +259 -37
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +4 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +137 -18
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/syntax.py +5 -5
- pythinker_code-0.18.0/src/pythinker_code/utils/sleep_inhibitor.py +473 -0
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/_baseUniq-qyLZSOfA.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/_baseUniq-diyiadw5.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/arc-CYkfKUJw.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/arc-C_-dPtYA.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-Cc3dJmlV.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-pe7jaN72.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-HSBk6vox.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-DvNsLxaI.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-wRemIQog.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-DOutQDwU.js +1 -1
- pythinker_code-0.18.0/src/pythinker_code/web/static/assets/channel-BEd858yH.js +1 -0
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-0esCM_vg.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-CSkVLnTI.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-C55bd2_o.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-Sp6O21Fa.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-DJxNZVQC.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-HEkwgVVV.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-CEWPxLfs.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-JBzEF4BM.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-DmhbuRTm.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-D7NzL_UD.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-nrPUkuWR.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-CFUUnKRn.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CzXInrrR.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-BFM8Zf86.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-DREZe46B.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-BkppE9ae.js +1 -1
- pythinker_code-0.18.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-Crr9_YII.js +1 -0
- pythinker_code-0.18.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-Crr9_YII.js +1 -0
- pythinker_code-0.18.0/src/pythinker_code/web/static/assets/clone-Dfc-F2za.js +1 -0
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DMVWN-ml.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-CmR8Cdcu.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-Coir87Qv.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-DAm3W4aX.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/cytoscape.esm-eAWqnCYK.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/cytoscape.esm-y1coXWUc.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-CiTUIg0q.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-B0i4dUeh.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-Cq9GXOjk.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CpwOBk04.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-Eamm6xAa.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-BKdKDUAt.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-DA1Yz6Pa.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-BWSTCXj5.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-DzlJ-wwC.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-CJeB4CQf.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-Bz9U20to.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-ChW3Nkg5.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-fsG79E9p.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-BCYS-5Wi.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-BjchK9W1.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-CibT-GPx.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/graph-DbF6cZU0.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/graph-Bg8wdmyQ.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/index-BgIGGFpA.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/index-C-9Nx5Zv.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/index-BLAcYwJO.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/index-Crd7puVX.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/index-Brd7Qj46.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/index-PSmqu2sC.js +2 -2
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-CYSDBUZQ.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-BZCKIRhX.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-BeF28JOm.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-BIv2-5-D.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-BVAC2O5Q.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-BbXFbER0.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/layout-DNSNr4If.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/layout-Zmsvl1hy.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/linear-HQWQZMSq.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/linear-BV_H68rk.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-BeS6uII_.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DVprBX-j.js +7 -7
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/mermaid.core-CsiBWAvS.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/mermaid.core-CR7QF1E3.js +5 -5
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/min-z2ooYt5Q.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/min-Doa9BVeR.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-BrkkNtDO.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-DNQnYfPv.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-C0odTEkg.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-DVqIhUw6.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-Daco3FUa.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-BuGgJuP-.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-vOrTEG8b.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-DCQLUIxL.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-BVExYdTG.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-CSqLQRPC.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-BkPzuwcM.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-B9es9563.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-Bontz6tD.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-D6uJ4ieP.js +1 -1
- pythinker_code-0.18.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-KTWgI9rj.js +1 -0
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-CxfiYDXf.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-B1yc8-Ia.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-B-wzCRqq.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-_HhSkYE5.js +1 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-DIGOnUa7.js → pythinker_code-0.18.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-BUOOjSUz.js +1 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/index.html +1 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/install.ps1 +1 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/install.sh +1 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/types.py +48 -0
- pythinker_code-0.17.0/src/pythinker_code/ui/shell/components/key_hints.py +0 -25
- pythinker_code-0.17.0/src/pythinker_code/ui/shell/mcp_status.py +0 -121
- pythinker_code-0.17.0/src/pythinker_code/ui/shell/model_picker.py +0 -319
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/channel-B7CcdrQR.js +0 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-1oL3irp2.js +0 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-1oL3irp2.js +0 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/clone-aTWLJUtw.js +0 -1
- pythinker_code-0.17.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-vD5xTSoN.js +0 -1
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/LICENSE +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/NOTICE +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/__main__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/AGENTS.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/convert.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/host.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/mcp.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/server.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/session.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/tools.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/types.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/acp/version.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agentspec.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/approval_runtime/models.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/deepseek.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/github_feedback.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/lm_studio.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/minimax.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/oauth.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/ollama.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/openai.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/opencode_go.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/openrouter.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/auth/platforms.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/background/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/background/ids.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/background/models.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/background/store.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/background/summary.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/background/worker.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/__main__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/debug.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/export.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/info.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/mcp.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/plugin.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/review.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/secscan.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/security_scan.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/skill.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/toad.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/update.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/vis.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/cli/web.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/constant.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/events.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/exception.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/execution_profiles.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/extensions.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/file_restore.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/hooks/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/hooks/config.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/hooks/engine.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/hooks/events.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/hooks/runner.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/llm.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/metadata.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/native.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/llm.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/manager.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/models.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/notifier.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/store.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/notifications/wire.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/plugin/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/plugin/manager.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/plugin/tool.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/prompt_templates.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/prompts/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/prompts/compact.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/prompts/init.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/py.typed +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/session.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/session_fork.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/session_state.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/share.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skill/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skill/flow/d2.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skill/lockfile.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/btw.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/compaction.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/context.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/denwarenji.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/message.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/permission.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/soul/slash.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/builder.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/core.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/discovery.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/git_context.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/models.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/output.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/registry.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/runner.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/subagents/store.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/crash.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/errors.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/metrics.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/otel.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/sentry.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/telemetry/sink.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/AGENTS.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/background/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/background/handoff.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/background/input.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/background/list.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/background/output.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/background/stop.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/display.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/glob.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/glob.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/grep.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/read.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/read.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/read_media.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/read_media.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/replace.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/utils.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/file/write.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/plan/description.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/plan/enter.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/shell/bash.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/skill/description.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/test.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/think/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/think/think.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/utils.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/web/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/web/fetch.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/web/fetch.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/web/search.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/tools/web/search.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/print/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/print/visualize.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/console.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/debug.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/replay.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/setup.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/startup.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tips.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/update.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/theme.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/ui/tui_config.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/aiohttp.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/aioqueue.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/broadcast.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/changelog.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/clipboard.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/datetime.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/diff.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/editor.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/environment.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/envvar.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/export.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/file_filter.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/frontmatter.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/io.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/logging.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/media_tags.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/message.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/path.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/proctitle.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/proxy.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/columns.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/sensitive.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/server.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/signals.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/slashcmd.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/string.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/term.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/utils/typing.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/api/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/api/sessions.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/api/statistics.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/api/system.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/app.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/vis/static/index.html +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/api/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/api/config.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/api/open_in.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/api/sessions.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/app.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/auth.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/models.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/runner/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/runner/messages.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/runner/process.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/runner/worker.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/_headers +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B2P5VJ9v.css +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/static/logo.png +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/store/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/web/store/sessions.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/__init__.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/file.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/protocol.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/root_hub.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/serde.py +0 -0
- {pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/wire/server.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pythinker-code
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.18.0
|
|
4
4
|
Summary: Pythinker Code is your next CLI agent.
|
|
5
5
|
Keywords: cli,agent,ai,coding-assistant,llm,claude,openai,terminal
|
|
6
6
|
Author: Mohamed Elkholy
|
|
@@ -115,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.18.0
|
|
119
119
|
|
|
120
|
-
- **
|
|
121
|
-
- **
|
|
122
|
-
- **
|
|
123
|
-
- **
|
|
124
|
-
- **
|
|
120
|
+
- **Live subagent activity streaming.** Subagent tool calls now stream live into the transcript, with safe pending headers for in-flight tool calls, new transcript progress events, and a unified shimmer animation across active-work labels so long-running exploration stays legible.
|
|
121
|
+
- **Smarter delegation and orchestration.** A Context-First Orchestration Protocol guides the default agent, specialist subagents receive prompt packets for single-objective delegation plus evidence and verification gates, and overflow RunAgents children are deferred instead of hard-failing.
|
|
122
|
+
- **Calmer, more resilient TUI.** In-flight and singular Ask payloads no longer flash an invalid badge, MCP startup status is cleaner, and shell rendering and MCP guidance are refined.
|
|
123
|
+
- **Sturdier configuration handling.** Incompatible legacy JSON config is now preserved instead of being silently reset to defaults.
|
|
124
|
+
- **Security and shell hardening.** The security scan and shell execution paths were hardened against unexpected input.
|
|
125
125
|
|
|
126
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
126
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.18.0`, or use the native installer for your platform from the [Releases page](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest).
|
|
127
127
|
|
|
128
128
|
|
|
129
129
|
---
|
|
@@ -213,7 +213,7 @@ 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.
|
|
216
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.18.0.exe` from [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
|
|
217
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/mohamed-elkholy95/Pythinker-Code/releases/latest) |
|
|
218
218
|
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install mohamed-elkholy95/pythinker/pythinker-code` | auto-published Homebrew tap |
|
|
219
219
|
| **<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/mohamed-elkholy95/Pythinker-Code/releases/latest) |
|
|
@@ -238,7 +238,7 @@ pythinker # start the interactive TUI
|
|
|
238
238
|
|
|
239
239
|
### 🪟 Windows — native installer
|
|
240
240
|
|
|
241
|
-
`PythinkerSetup-0.
|
|
241
|
+
`PythinkerSetup-0.18.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
242
242
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
243
243
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
244
244
|
the change. **No UAC prompt.**
|
|
@@ -249,13 +249,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
249
249
|
|
|
250
250
|
# Or manually download the installer + checksum from the Releases page,
|
|
251
251
|
# verify with Get-FileHash, then run:
|
|
252
|
-
.\PythinkerSetup-0.
|
|
252
|
+
.\PythinkerSetup-0.18.0.exe
|
|
253
253
|
|
|
254
254
|
# Open a fresh PowerShell
|
|
255
255
|
pythinker --version
|
|
256
256
|
```
|
|
257
257
|
|
|
258
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
258
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.18.0.exe /ALLUSERS`
|
|
259
259
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
260
260
|
|
|
261
261
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -305,26 +305,26 @@ attached to every GitHub Release.
|
|
|
305
305
|
|
|
306
306
|
```sh
|
|
307
307
|
# Debian / Ubuntu (x86_64)
|
|
308
|
-
sudo dpkg -i pythinker-code_0.
|
|
308
|
+
sudo dpkg -i pythinker-code_0.18.0_amd64.deb
|
|
309
309
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
310
310
|
|
|
311
311
|
# Debian / Ubuntu (ARM64)
|
|
312
|
-
sudo dpkg -i pythinker-code_0.
|
|
312
|
+
sudo dpkg -i pythinker-code_0.18.0_arm64.deb
|
|
313
313
|
|
|
314
314
|
# Fedora / RHEL / openSUSE (x86_64)
|
|
315
|
-
curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.
|
|
316
|
-
curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.
|
|
317
|
-
sha256sum -c pythinker-code-0.
|
|
315
|
+
curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.18.0/pythinker-code-0.18.0.x86_64.rpm
|
|
316
|
+
curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.18.0/pythinker-code-0.18.0.x86_64.rpm.sha256
|
|
317
|
+
sha256sum -c pythinker-code-0.18.0.x86_64.rpm.sha256
|
|
318
318
|
# Fedora / RHEL:
|
|
319
|
-
sudo dnf install ./pythinker-code-0.
|
|
319
|
+
sudo dnf install ./pythinker-code-0.18.0.x86_64.rpm
|
|
320
320
|
# openSUSE:
|
|
321
|
-
sudo zypper install ./pythinker-code-0.
|
|
321
|
+
sudo zypper install ./pythinker-code-0.18.0.x86_64.rpm
|
|
322
322
|
|
|
323
323
|
# Fedora / RHEL (aarch64)
|
|
324
|
-
curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.
|
|
325
|
-
curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.
|
|
326
|
-
sha256sum -c pythinker-code-0.
|
|
327
|
-
sudo dnf install ./pythinker-code-0.
|
|
324
|
+
curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.18.0/pythinker-code-0.18.0.aarch64.rpm
|
|
325
|
+
curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.18.0/pythinker-code-0.18.0.aarch64.rpm.sha256
|
|
326
|
+
sha256sum -c pythinker-code-0.18.0.aarch64.rpm.sha256
|
|
327
|
+
sudo dnf install ./pythinker-code-0.18.0.aarch64.rpm
|
|
328
328
|
```
|
|
329
329
|
|
|
330
330
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -333,8 +333,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
333
333
|
**Verify before install:**
|
|
334
334
|
|
|
335
335
|
```sh
|
|
336
|
-
sha256sum -c pythinker-code_0.
|
|
337
|
-
sha256sum -c pythinker-code-0.
|
|
336
|
+
sha256sum -c pythinker-code_0.18.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
337
|
+
sha256sum -c pythinker-code-0.18.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
338
338
|
```
|
|
339
339
|
|
|
340
340
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -364,7 +364,7 @@ at `~/.local/bin/pythinker`.
|
|
|
364
364
|
curl -fsSL https://pythinker.com/install.sh | bash
|
|
365
365
|
|
|
366
366
|
# Pin a specific version
|
|
367
|
-
curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.
|
|
367
|
+
curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.18.0
|
|
368
368
|
|
|
369
369
|
# Custom prefix (defaults to $HOME/.local)
|
|
370
370
|
curl -fsSL https://pythinker.com/install.sh | bash -s -- --prefix /opt/pythinker
|
|
@@ -385,9 +385,9 @@ Supported targets:
|
|
|
385
385
|
|
|
386
386
|
| `uname -s / -m` | Tarball asset |
|
|
387
387
|
|---|---|
|
|
388
|
-
| Linux / x86_64 | `pythinker-0.
|
|
389
|
-
| Linux / aarch64 | `pythinker-0.
|
|
390
|
-
| Darwin / arm64 | `pythinker-0.
|
|
388
|
+
| Linux / x86_64 | `pythinker-0.18.0-x86_64-unknown-linux-gnu.tar.gz` |
|
|
389
|
+
| Linux / aarch64 | `pythinker-0.18.0-aarch64-unknown-linux-gnu.tar.gz` |
|
|
390
|
+
| Darwin / arm64 | `pythinker-0.18.0-aarch64-apple-darwin.tar.gz` |
|
|
391
391
|
|
|
392
392
|
The script prints PATH guidance if `~/.local/bin` isn't already on your
|
|
393
393
|
`$PATH`. Intel macOS users — use Homebrew or `pip install pythinker-code`;
|
|
@@ -617,14 +617,18 @@ Pythinker loads [Model Context Protocol](https://modelcontextprotocol.io/) tools
|
|
|
617
617
|
### 🛠️ Manage persistent MCP servers
|
|
618
618
|
|
|
619
619
|
```sh
|
|
620
|
+
# 📚 Context7 stdio server (Codex-style: NAME -- COMMAND)
|
|
621
|
+
pythinker mcp add context7 -- npx -y @upstash/context7-mcp --api-key YOUR-API-KEY
|
|
622
|
+
# Added MCP server 'context7' to ~/.pythinker/mcp.json
|
|
623
|
+
|
|
620
624
|
# 🌐 Streamable HTTP server with API key
|
|
621
|
-
pythinker mcp add --transport http
|
|
622
|
-
--header "
|
|
625
|
+
pythinker mcp add --transport http docs https://example.com/mcp \
|
|
626
|
+
--header "API_KEY: your-key"
|
|
623
627
|
|
|
624
628
|
# 🔐 Streamable HTTP server with OAuth
|
|
625
629
|
pythinker mcp add --transport http --auth oauth linear https://mcp.linear.app/mcp
|
|
626
630
|
|
|
627
|
-
# 💻 stdio server
|
|
631
|
+
# 💻 stdio server with explicit transport
|
|
628
632
|
pythinker mcp add --transport stdio chrome-devtools -- npx chrome-devtools-mcp@latest
|
|
629
633
|
|
|
630
634
|
# 📋 List, authorize, test, and remove
|
|
@@ -714,16 +718,9 @@ file paths, or any user-identifying data. Two channels:
|
|
|
714
718
|
- Your real name, email, IP address, hostname (host name field is dropped at the edge collector)
|
|
715
719
|
- Tool arguments (e.g. what file you read, what command you ran)
|
|
716
720
|
|
|
717
|
-
###
|
|
718
|
-
|
|
719
|
-
Telemetry is off by default. To enable it for a process:
|
|
720
|
-
|
|
721
|
-
```sh
|
|
722
|
-
export PYTHINKER_ENABLE_TELEMETRY=1
|
|
723
|
-
pythinker
|
|
724
|
-
```
|
|
721
|
+
### Turning it off
|
|
725
722
|
|
|
726
|
-
|
|
723
|
+
Telemetry is on by default. To turn it off:
|
|
727
724
|
|
|
728
725
|
```sh
|
|
729
726
|
# 1. Per-invocation CLI flag
|
|
@@ -753,8 +750,8 @@ export PYTHINKER_OTEL_ENDPOINT="https://your-otel-collector.example.com"
|
|
|
753
750
|
export PYTHINKER_OTEL_TOKEN="<your bearer token>"
|
|
754
751
|
```
|
|
755
752
|
|
|
756
|
-
The defaults point at infrastructure operated by the pythinker maintainers
|
|
757
|
-
|
|
753
|
+
The defaults point at infrastructure operated by the pythinker maintainers and
|
|
754
|
+
are used automatically unless you turn telemetry off.
|
|
758
755
|
|
|
759
756
|
---
|
|
760
757
|
|
|
@@ -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.18.0
|
|
54
54
|
|
|
55
|
-
- **
|
|
56
|
-
- **
|
|
57
|
-
- **
|
|
58
|
-
- **
|
|
59
|
-
- **
|
|
55
|
+
- **Live subagent activity streaming.** Subagent tool calls now stream live into the transcript, with safe pending headers for in-flight tool calls, new transcript progress events, and a unified shimmer animation across active-work labels so long-running exploration stays legible.
|
|
56
|
+
- **Smarter delegation and orchestration.** A Context-First Orchestration Protocol guides the default agent, specialist subagents receive prompt packets for single-objective delegation plus evidence and verification gates, and overflow RunAgents children are deferred instead of hard-failing.
|
|
57
|
+
- **Calmer, more resilient TUI.** In-flight and singular Ask payloads no longer flash an invalid badge, MCP startup status is cleaner, and shell rendering and MCP guidance are refined.
|
|
58
|
+
- **Sturdier configuration handling.** Incompatible legacy JSON config is now preserved instead of being silently reset to defaults.
|
|
59
|
+
- **Security and shell hardening.** The security scan and shell execution paths were hardened against unexpected input.
|
|
60
60
|
|
|
61
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
61
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.18.0`, or use the native installer for your platform from the [Releases page](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest).
|
|
62
62
|
|
|
63
63
|
|
|
64
64
|
---
|
|
@@ -148,7 +148,7 @@ 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.
|
|
151
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.18.0.exe` from [Releases](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest) |
|
|
152
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/mohamed-elkholy95/Pythinker-Code/releases/latest) |
|
|
153
153
|
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install mohamed-elkholy95/pythinker/pythinker-code` | auto-published Homebrew tap |
|
|
154
154
|
| **<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/mohamed-elkholy95/Pythinker-Code/releases/latest) |
|
|
@@ -173,7 +173,7 @@ pythinker # start the interactive TUI
|
|
|
173
173
|
|
|
174
174
|
### 🪟 Windows — native installer
|
|
175
175
|
|
|
176
|
-
`PythinkerSetup-0.
|
|
176
|
+
`PythinkerSetup-0.18.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
177
177
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
178
178
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
179
179
|
the change. **No UAC prompt.**
|
|
@@ -184,13 +184,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
184
184
|
|
|
185
185
|
# Or manually download the installer + checksum from the Releases page,
|
|
186
186
|
# verify with Get-FileHash, then run:
|
|
187
|
-
.\PythinkerSetup-0.
|
|
187
|
+
.\PythinkerSetup-0.18.0.exe
|
|
188
188
|
|
|
189
189
|
# Open a fresh PowerShell
|
|
190
190
|
pythinker --version
|
|
191
191
|
```
|
|
192
192
|
|
|
193
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
193
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.18.0.exe /ALLUSERS`
|
|
194
194
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
195
195
|
|
|
196
196
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -240,26 +240,26 @@ attached to every GitHub Release.
|
|
|
240
240
|
|
|
241
241
|
```sh
|
|
242
242
|
# Debian / Ubuntu (x86_64)
|
|
243
|
-
sudo dpkg -i pythinker-code_0.
|
|
243
|
+
sudo dpkg -i pythinker-code_0.18.0_amd64.deb
|
|
244
244
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
245
245
|
|
|
246
246
|
# Debian / Ubuntu (ARM64)
|
|
247
|
-
sudo dpkg -i pythinker-code_0.
|
|
247
|
+
sudo dpkg -i pythinker-code_0.18.0_arm64.deb
|
|
248
248
|
|
|
249
249
|
# Fedora / RHEL / openSUSE (x86_64)
|
|
250
|
-
curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.
|
|
251
|
-
curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.
|
|
252
|
-
sha256sum -c pythinker-code-0.
|
|
250
|
+
curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.18.0/pythinker-code-0.18.0.x86_64.rpm
|
|
251
|
+
curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.18.0/pythinker-code-0.18.0.x86_64.rpm.sha256
|
|
252
|
+
sha256sum -c pythinker-code-0.18.0.x86_64.rpm.sha256
|
|
253
253
|
# Fedora / RHEL:
|
|
254
|
-
sudo dnf install ./pythinker-code-0.
|
|
254
|
+
sudo dnf install ./pythinker-code-0.18.0.x86_64.rpm
|
|
255
255
|
# openSUSE:
|
|
256
|
-
sudo zypper install ./pythinker-code-0.
|
|
256
|
+
sudo zypper install ./pythinker-code-0.18.0.x86_64.rpm
|
|
257
257
|
|
|
258
258
|
# Fedora / RHEL (aarch64)
|
|
259
|
-
curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.
|
|
260
|
-
curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.
|
|
261
|
-
sha256sum -c pythinker-code-0.
|
|
262
|
-
sudo dnf install ./pythinker-code-0.
|
|
259
|
+
curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.18.0/pythinker-code-0.18.0.aarch64.rpm
|
|
260
|
+
curl -LO https://github.com/mohamed-elkholy95/Pythinker-Code/releases/download/v0.18.0/pythinker-code-0.18.0.aarch64.rpm.sha256
|
|
261
|
+
sha256sum -c pythinker-code-0.18.0.aarch64.rpm.sha256
|
|
262
|
+
sudo dnf install ./pythinker-code-0.18.0.aarch64.rpm
|
|
263
263
|
```
|
|
264
264
|
|
|
265
265
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -268,8 +268,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
268
268
|
**Verify before install:**
|
|
269
269
|
|
|
270
270
|
```sh
|
|
271
|
-
sha256sum -c pythinker-code_0.
|
|
272
|
-
sha256sum -c pythinker-code-0.
|
|
271
|
+
sha256sum -c pythinker-code_0.18.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
272
|
+
sha256sum -c pythinker-code-0.18.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
273
273
|
```
|
|
274
274
|
|
|
275
275
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -299,7 +299,7 @@ at `~/.local/bin/pythinker`.
|
|
|
299
299
|
curl -fsSL https://pythinker.com/install.sh | bash
|
|
300
300
|
|
|
301
301
|
# Pin a specific version
|
|
302
|
-
curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.
|
|
302
|
+
curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.18.0
|
|
303
303
|
|
|
304
304
|
# Custom prefix (defaults to $HOME/.local)
|
|
305
305
|
curl -fsSL https://pythinker.com/install.sh | bash -s -- --prefix /opt/pythinker
|
|
@@ -320,9 +320,9 @@ Supported targets:
|
|
|
320
320
|
|
|
321
321
|
| `uname -s / -m` | Tarball asset |
|
|
322
322
|
|---|---|
|
|
323
|
-
| Linux / x86_64 | `pythinker-0.
|
|
324
|
-
| Linux / aarch64 | `pythinker-0.
|
|
325
|
-
| Darwin / arm64 | `pythinker-0.
|
|
323
|
+
| Linux / x86_64 | `pythinker-0.18.0-x86_64-unknown-linux-gnu.tar.gz` |
|
|
324
|
+
| Linux / aarch64 | `pythinker-0.18.0-aarch64-unknown-linux-gnu.tar.gz` |
|
|
325
|
+
| Darwin / arm64 | `pythinker-0.18.0-aarch64-apple-darwin.tar.gz` |
|
|
326
326
|
|
|
327
327
|
The script prints PATH guidance if `~/.local/bin` isn't already on your
|
|
328
328
|
`$PATH`. Intel macOS users — use Homebrew or `pip install pythinker-code`;
|
|
@@ -552,14 +552,18 @@ Pythinker loads [Model Context Protocol](https://modelcontextprotocol.io/) tools
|
|
|
552
552
|
### 🛠️ Manage persistent MCP servers
|
|
553
553
|
|
|
554
554
|
```sh
|
|
555
|
+
# 📚 Context7 stdio server (Codex-style: NAME -- COMMAND)
|
|
556
|
+
pythinker mcp add context7 -- npx -y @upstash/context7-mcp --api-key YOUR-API-KEY
|
|
557
|
+
# Added MCP server 'context7' to ~/.pythinker/mcp.json
|
|
558
|
+
|
|
555
559
|
# 🌐 Streamable HTTP server with API key
|
|
556
|
-
pythinker mcp add --transport http
|
|
557
|
-
--header "
|
|
560
|
+
pythinker mcp add --transport http docs https://example.com/mcp \
|
|
561
|
+
--header "API_KEY: your-key"
|
|
558
562
|
|
|
559
563
|
# 🔐 Streamable HTTP server with OAuth
|
|
560
564
|
pythinker mcp add --transport http --auth oauth linear https://mcp.linear.app/mcp
|
|
561
565
|
|
|
562
|
-
# 💻 stdio server
|
|
566
|
+
# 💻 stdio server with explicit transport
|
|
563
567
|
pythinker mcp add --transport stdio chrome-devtools -- npx chrome-devtools-mcp@latest
|
|
564
568
|
|
|
565
569
|
# 📋 List, authorize, test, and remove
|
|
@@ -649,16 +653,9 @@ file paths, or any user-identifying data. Two channels:
|
|
|
649
653
|
- Your real name, email, IP address, hostname (host name field is dropped at the edge collector)
|
|
650
654
|
- Tool arguments (e.g. what file you read, what command you ran)
|
|
651
655
|
|
|
652
|
-
###
|
|
653
|
-
|
|
654
|
-
Telemetry is off by default. To enable it for a process:
|
|
655
|
-
|
|
656
|
-
```sh
|
|
657
|
-
export PYTHINKER_ENABLE_TELEMETRY=1
|
|
658
|
-
pythinker
|
|
659
|
-
```
|
|
656
|
+
### Turning it off
|
|
660
657
|
|
|
661
|
-
|
|
658
|
+
Telemetry is on by default. To turn it off:
|
|
662
659
|
|
|
663
660
|
```sh
|
|
664
661
|
# 1. Per-invocation CLI flag
|
|
@@ -688,8 +685,8 @@ export PYTHINKER_OTEL_ENDPOINT="https://your-otel-collector.example.com"
|
|
|
688
685
|
export PYTHINKER_OTEL_TOKEN="<your bearer token>"
|
|
689
686
|
```
|
|
690
687
|
|
|
691
|
-
The defaults point at infrastructure operated by the pythinker maintainers
|
|
692
|
-
|
|
688
|
+
The defaults point at infrastructure operated by the pythinker maintainers and
|
|
689
|
+
are used automatically unless you turn telemetry off.
|
|
693
690
|
|
|
694
691
|
---
|
|
695
692
|
|
|
@@ -15,6 +15,18 @@ GitHub Releases page; `0.8.0` is the new starting line.
|
|
|
15
15
|
|
|
16
16
|
## Unreleased
|
|
17
17
|
|
|
18
|
+
## 0.18.0 (2026-05-27)
|
|
19
|
+
|
|
20
|
+
### What changed in this release
|
|
21
|
+
|
|
22
|
+
- **Live subagent activity streaming.** Subagent tool calls now stream live into the transcript, with safe pending headers for in-flight tool calls, new transcript progress events, and a unified shimmer animation across active-work labels so long-running exploration stays legible.
|
|
23
|
+
- **Smarter delegation and orchestration.** A Context-First Orchestration Protocol guides the default agent, specialist subagents receive prompt packets for single-objective delegation plus evidence and verification gates, and overflow RunAgents children are deferred instead of hard-failing.
|
|
24
|
+
- **Calmer, more resilient TUI.** In-flight and singular Ask payloads no longer flash an invalid badge, MCP startup status is cleaner, and shell rendering and MCP guidance are refined.
|
|
25
|
+
- **Sturdier configuration handling.** Incompatible legacy JSON config is now preserved instead of being silently reset to defaults.
|
|
26
|
+
- **Security and shell hardening.** The security scan and shell execution paths were hardened against unexpected input.
|
|
27
|
+
|
|
28
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.18.0`, or use the native installer for your OS (see the README install table).
|
|
29
|
+
|
|
18
30
|
## 0.17.0 (2026-05-25)
|
|
19
31
|
|
|
20
32
|
### What changed in this release
|
{pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/code_reviewer.yaml
RENAMED
|
@@ -20,8 +20,9 @@ agent:
|
|
|
20
20
|
|
|
21
21
|
Review discipline:
|
|
22
22
|
- If `.pythinker/review-guidelines.md` exists, read it before scoring findings.
|
|
23
|
+
- Build a review context packet: base ref/diff scope, changed behavior, likely tests, user-visible impact, and validation evidence.
|
|
23
24
|
- Flag only issues introduced or made reachable by the diff.
|
|
24
|
-
- Prefer no finding over vague speculation.
|
|
25
|
+
- Prefer no finding over vague speculation. Every finding must cite concrete evidence and a failure mode.
|
|
25
26
|
- Do not request tests unless they cover a distinct behavior or risk introduced by the change.
|
|
26
27
|
- Treat V0 robustness suggestions as future work unless they risk correctness, security, data loss, or persistent hangs.
|
|
27
28
|
- For user-visible UI/behavior changes, check whether screenshots, GIFs, videos, or equivalent visual evidence are present; if absent, request that evidence as a blocking review concern.
|
{pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/coder.yaml
RENAMED
|
@@ -7,13 +7,23 @@ agent:
|
|
|
7
7
|
|
|
8
8
|
Stay tightly scoped to exactly what the parent assigned. Do not expand into adjacent cleanup or refactors. If you discover related work, surface it under RISKS or BLOCKERS rather than doing it.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Context gate before editing:
|
|
11
|
+
- Confirm the parent provided a clear goal, scope, constraints, and acceptance criteria. If not, inspect the code enough to infer them or report BLOCKERS.
|
|
12
|
+
- Read target files, nearby patterns, and relevant tests before writing. Do not edit code you cannot explain.
|
|
13
|
+
- Prefer the minimum implementation that satisfies the brief; no speculative abstractions or broad formatting churn.
|
|
14
|
+
|
|
15
|
+
Implementation method:
|
|
16
|
+
- Before editing, read the target files and confirm the line ranges/patterns you will change.
|
|
17
|
+
- Prefer StrReplaceFile for narrow changes; use WriteFile only for new files or intentional full rewrites.
|
|
18
|
+
- Add or update tests when the brief requires behavior changes and the project has relevant tests.
|
|
19
|
+
- After edits, inspect the diff/changed files for scope creep, TODOs/placeholders, import mistakes, and logic mismatches.
|
|
20
|
+
- Run the smallest relevant verification command available and report the result. If verification cannot run, explain the blocker.
|
|
11
21
|
|
|
12
22
|
Final response contract:
|
|
13
23
|
### SUMMARY
|
|
14
24
|
One paragraph with what you did and the outcome.
|
|
15
25
|
### EVIDENCE
|
|
16
|
-
Bullet list of concrete file paths, command results, or observed errors that support the outcome.
|
|
26
|
+
Bullet list of concrete file paths, command results, diff inspection, or observed errors that support the outcome.
|
|
17
27
|
### CHANGES
|
|
18
28
|
Bullet list of every file you modified, or `None.` if read-only.
|
|
19
29
|
### RISKS
|
{pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/debugger.yaml
RENAMED
|
@@ -5,24 +5,31 @@ agent:
|
|
|
5
5
|
ROLE_ADDITIONAL: |
|
|
6
6
|
You are now running as a subagent. All `user` messages are sent by the main agent. The main agent cannot see your context, only your last message. Treat the parent agent as your caller. Do not ask the end user questions; surface ambiguity in your final summary.
|
|
7
7
|
|
|
8
|
-
You are a root-cause debugger. Your job is to
|
|
8
|
+
You are a root-cause debugger. Your job is to establish reproduction evidence, isolate the likely cause, and recommend the smallest next action before anyone edits code.
|
|
9
|
+
|
|
10
|
+
Reproduction protocol:
|
|
11
|
+
- If a failure log is available, run `pythinker debug failure <log-file> --format json` and translate the result for the parent.
|
|
12
|
+
- If no log file is available but a failing command is provided, run the command only when it is safe and bounded; capture stdout/stderr and exit code.
|
|
13
|
+
- If neither log nor command evidence is available, do not guess. Request the parent provide the missing log path, failing command, environment, or reproduction steps under BLOCKERS.
|
|
9
14
|
|
|
10
15
|
Operating rules:
|
|
11
16
|
- If `.pythinker/review-guidelines.md` exists, read it before judging failure severity or fix priority.
|
|
12
17
|
- Read-only by convention. Do not edit source files.
|
|
13
|
-
-
|
|
18
|
+
- Observe first: stack traces, assertions, recent diffs, environment, and reproduction steps.
|
|
19
|
+
- Correlate failures with changed files, callers/callees, config, tests, and recent assumptions.
|
|
20
|
+
- State confidence. Separate confirmed root cause from plausible hypotheses.
|
|
14
21
|
- Check graceful degradation, observability/logging, recovery behavior, structured result/status correctness, approval/policy mismatches, and user-facing string regressions when they explain or worsen the failure.
|
|
15
|
-
-
|
|
22
|
+
- Recommend the minimal next action and the verification that should prove the fix.
|
|
16
23
|
|
|
17
24
|
Final response contract:
|
|
18
25
|
### SUMMARY
|
|
19
26
|
One paragraph: likely root cause, confidence, and first recommended action.
|
|
20
27
|
### EVIDENCE
|
|
21
|
-
Bullet list of log/stack/diff evidence with file:line when available.
|
|
28
|
+
Bullet list of log/stack/diff/reproduction evidence with file:line when available.
|
|
22
29
|
### CHANGES
|
|
23
30
|
None.
|
|
24
31
|
### RISKS
|
|
25
|
-
Ambiguities, missing reproduction context, or `None observed.`.
|
|
32
|
+
Ambiguities, alternate hypotheses, missing reproduction context, or `None observed.`.
|
|
26
33
|
### BLOCKERS
|
|
27
34
|
Missing log path, command, environment, or `None.`.
|
|
28
35
|
when_to_use: |
|
{pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/explore.yaml
RENAMED
|
@@ -7,6 +7,12 @@ agent:
|
|
|
7
7
|
|
|
8
8
|
You are a codebase exploration specialist. Your role is EXCLUSIVELY to search, read, and analyze existing code and resources. You do NOT have access to file editing tools. If the task appears to require a write, stop and put the gap under BLOCKERS.
|
|
9
9
|
|
|
10
|
+
Context packet requirements:
|
|
11
|
+
- Collect the smallest evidence set that can support the parent's decision: relevant files, symbols, callers/callees, tests, docs, commands, config, and existing patterns.
|
|
12
|
+
- Do not provide architecture judgment, root-cause claims, implementation recommendations, or risk assessment unless the evidence is cited.
|
|
13
|
+
- Distinguish CONFIRMED facts from LIKELY inferences. Put unknowns and missing evidence under RISKS or BLOCKERS.
|
|
14
|
+
- Prefer path:line-range citations for load-bearing findings. Search broadly enough to avoid a false map, then stop when the parent has enough context.
|
|
15
|
+
|
|
10
16
|
Your strengths:
|
|
11
17
|
- Rapidly finding files using glob patterns
|
|
12
18
|
- Searching code and text with powerful regex patterns
|
|
@@ -21,6 +27,7 @@ agent:
|
|
|
21
27
|
- NEVER use Shell for any file creation or modification commands
|
|
22
28
|
- Adapt your search depth based on the thoroughness level specified by the caller
|
|
23
29
|
- Wherever possible, spawn multiple parallel tool calls for grepping and reading files to maximize speed
|
|
30
|
+
- When running lint or complexity checks (e.g. ruff, flake8), always run with the project's configured rule set first (no extra `--select` flags). If you run supplemental checks that add rules not in the project config (e.g. `--select C901` when C901 is absent from pyproject.toml), you MUST label those findings explicitly as "outside project lint policy — not an enforced violation" so the caller can distinguish real project violations from advisory findings.
|
|
24
31
|
|
|
25
32
|
If the prompt includes a <git-context> block, use it to orient yourself about the repository state before starting your investigation.
|
|
26
33
|
|
|
@@ -29,6 +36,8 @@ agent:
|
|
|
29
36
|
Final response contract:
|
|
30
37
|
### SUMMARY
|
|
31
38
|
One paragraph with the headline answer.
|
|
39
|
+
### CONTEXT PACKET
|
|
40
|
+
Bullets for goal, relevant files/symbols, existing patterns, tests/docs, and unknowns.
|
|
32
41
|
### EVIDENCE
|
|
33
42
|
Bullet list of concrete file paths, line ranges, search hits, and command results.
|
|
34
43
|
### CHANGES
|
{pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/implementer.yaml
RENAMED
|
@@ -7,17 +7,23 @@ agent:
|
|
|
7
7
|
|
|
8
8
|
You are an implementation specialist. Land exactly the change the parent assigned with the minimum surrounding edit. Do not refactor adjacent code, rename unrelated variables, tidy files, or expand scope. Put related follow-up work under RISKS or BLOCKERS instead.
|
|
9
9
|
|
|
10
|
+
Context gate before editing:
|
|
11
|
+
- Confirm the parent provided a clear goal, scope, constraints, and acceptance criteria. If not, inspect the code enough to infer them or report BLOCKERS.
|
|
12
|
+
- Read target files, nearby patterns, and relevant tests before writing. Do not edit code you cannot explain.
|
|
13
|
+
- Prefer the minimum implementation that satisfies the brief; no speculative abstractions or broad formatting churn.
|
|
14
|
+
|
|
10
15
|
Method:
|
|
11
|
-
- Read target files before editing.
|
|
16
|
+
- Read target files before editing and confirm the line ranges/patterns you will change.
|
|
12
17
|
- Prefer StrReplaceFile for narrow changes; use WriteFile only for new files or intentional full rewrites.
|
|
13
18
|
- Add or update tests when the brief requires behavior changes and the project has relevant tests.
|
|
14
|
-
- After edits,
|
|
19
|
+
- After edits, inspect the diff/changed files for scope creep, TODOs/placeholders, import mistakes, and logic mismatches.
|
|
20
|
+
- Run the smallest relevant verification command and report pass/fail evidence. If verification cannot run, explain the blocker.
|
|
15
21
|
|
|
16
22
|
Final response contract:
|
|
17
23
|
### SUMMARY
|
|
18
24
|
One paragraph with what changed and the verification outcome.
|
|
19
25
|
### EVIDENCE
|
|
20
|
-
Bullet list of file reads, command results, and test/lint evidence.
|
|
26
|
+
Bullet list of file reads, command results, diff inspection, and test/lint evidence.
|
|
21
27
|
### CHANGES
|
|
22
28
|
Bullet list of every modified path with a one-line reason.
|
|
23
29
|
### RISKS
|
|
@@ -5,13 +5,35 @@ agent:
|
|
|
5
5
|
ROLE_ADDITIONAL: |
|
|
6
6
|
You are now running as a subagent. All the `user` messages are sent by the main agent. The main agent cannot see your context, it can only see your last message when you finish the task. You must treat the parent agent as your caller. Do not directly ask the end user questions. If something is unclear, explain the ambiguity in your final summary to the parent agent.
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
You are a read-only planning and architecture specialist. Your output must be an evidence-backed execution plan, not a guess.
|
|
9
|
+
|
|
10
|
+
Context gate:
|
|
11
|
+
- Before designing a plan, build a context packet from repository evidence, docs, tests, existing patterns, and the user's stated goal.
|
|
12
|
+
- If the relevant codebase area is not understood, do not invent a plan. Recommend concrete `explore` questions for the parent agent to run first.
|
|
13
|
+
- State assumptions explicitly and separate them from confirmed evidence.
|
|
14
|
+
- Before proposing a fix for any lint or complexity violation, verify the rule is in the project's active rule set (e.g. `select` in pyproject.toml or .ruff.toml). Findings that only appear via an explicit `--select <rule>` flag not present in the project config are NOT project violations; do not include them in the plan unless the user explicitly asked to enforce that rule.
|
|
15
|
+
|
|
16
|
+
Plan requirements:
|
|
17
|
+
- Include a User Request Summary and the success criteria you optimized for.
|
|
18
|
+
- Identify likely files/modules and why they are in scope.
|
|
19
|
+
- Provide a Task Dependency Graph: each task, what it depends on, and the reason.
|
|
20
|
+
- Provide a Parallel Execution Graph: which tasks can run together, which must be sequential, and the critical path.
|
|
21
|
+
- For every task, include artifacts to change, acceptance criteria, suggested specialist (`explore`, `implementer`, `review`, `security-reviewer`, `debugger`, `verifier`), and the smallest verification command/check.
|
|
22
|
+
- Call out risks, blockers, migration/backward-compatibility concerns, and test gaps.
|
|
9
23
|
|
|
10
24
|
Ground the plan in evidence. Read enough files to avoid guessing, name the trade-offs, and choose one path with a reason. Each step should name the artifact it changes and the verification that proves it worked. Order steps by dependency first, then by risk reduced per effort.
|
|
11
25
|
|
|
12
26
|
Final response contract:
|
|
13
27
|
### SUMMARY
|
|
14
28
|
One paragraph with the recommended plan and why.
|
|
29
|
+
### CONTEXT
|
|
30
|
+
User request summary, confirmed context, assumptions, and unknowns.
|
|
31
|
+
### TASK DEPENDENCY GRAPH
|
|
32
|
+
Table or bullets showing task dependencies and reasons.
|
|
33
|
+
### PARALLEL EXECUTION GRAPH
|
|
34
|
+
Execution waves, critical path, and what can/cannot run concurrently.
|
|
35
|
+
### PLAN
|
|
36
|
+
Numbered tasks with artifacts, acceptance criteria, specialist recommendation, and verification.
|
|
15
37
|
### EVIDENCE
|
|
16
38
|
Bullet list of concrete file paths, line ranges, docs, or search hits that shaped the plan.
|
|
17
39
|
### CHANGES
|
{pythinker_code-0.17.0 → pythinker_code-0.18.0}/src/pythinker_code/agents/default/review.yaml
RENAMED
|
@@ -7,6 +7,11 @@ agent:
|
|
|
7
7
|
|
|
8
8
|
You are a code review specialist. Your job is to read the requested diff/files and emit severity-scored findings. You are read-only by convention: do not patch code even if the fix is obvious. Describe the fix so the parent can dispatch an implementer.
|
|
9
9
|
|
|
10
|
+
Evidence gate:
|
|
11
|
+
- Do not score or report a finding until you have read the relevant diff/file and at least one supporting caller, test, config, or sibling pattern when applicable.
|
|
12
|
+
- Flag only issues introduced or made reachable by the requested diff/files.
|
|
13
|
+
- Prefer no finding over vague speculation. Label residual uncertainty under RISKS.
|
|
14
|
+
|
|
10
15
|
Method:
|
|
11
16
|
- If `.pythinker/review-guidelines.md` exists, read it before scoring findings.
|
|
12
17
|
- Read the diff or target files before scoring.
|
|
@@ -7,6 +7,12 @@ agent:
|
|
|
7
7
|
|
|
8
8
|
You are a security reviewer. For diff-focused review, run `pythinker secscan diff` and reformat the result for the parent. For repo-wide vulnerability discovery, run the Python-native `pythinker security-scan` pipeline.
|
|
9
9
|
|
|
10
|
+
Security review discipline:
|
|
11
|
+
- Build a threat context before judging: changed trust boundaries, inputs/outputs, authz/authn, filesystem/network access, secrets, serialization, command execution, and persistence.
|
|
12
|
+
- Report only reachable or plausibly reachable vulnerabilities backed by evidence. Prefer no finding over speculative risk.
|
|
13
|
+
- For each finding, include exploit preconditions, impact, severity rationale, and the smallest safe mitigation.
|
|
14
|
+
- Treat secrets/PII carefully: never print raw secret values; redact if needed.
|
|
15
|
+
|
|
10
16
|
Operating rules:
|
|
11
17
|
- If `.pythinker/review-guidelines.md` exists, read it before scoring findings.
|
|
12
18
|
- Read-only by convention. You may run secscan/security-scan CLI commands and read outputs, but do not edit source files.
|