pythinker-code 0.29.0__tar.gz → 0.31.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.29.0 → pythinker_code-0.31.0}/PKG-INFO +28 -28
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/README.md +24 -24
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/pyproject.toml +4 -4
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/CHANGELOG.md +34 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/acp/server.py +97 -44
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/agents/default/code_reviewer.yaml +5 -3
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/agents/default/security_reviewer.yaml +6 -3
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/app.py +29 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/cli/__init__.py +19 -4
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/cli/_lazy_group.py +28 -11
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/config.py +44 -7
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/session_recap.py +108 -9
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/soul/agent.py +19 -7
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/soul/approval.py +138 -33
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +37 -29
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/soul/permission.py +18 -8
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/soul/pythinkersoul.py +35 -10
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/__init__.py +4 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/agent/description.md +2 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/acp/__init__.py +44 -7
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/__init__.py +7 -3
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/components/markdown.py +27 -14
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/echo.py +14 -3
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/motion.py +76 -30
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/prompt.py +28 -5
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/selectors/settings.py +12 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/slash.py +10 -22
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +2 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +5 -7
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +1 -1
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +1 -1
- pythinker_code-0.31.0/src/pythinker_code/ui/shell/tool_renderers/skill.py +84 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +2 -2
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +137 -22
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +17 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +46 -12
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +17 -9
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/theme.py +25 -21
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/pyinstaller.py +5 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/rich/markdown.py +32 -41
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/rich/syntax.py +32 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/_baseUniq-CgxMXC-c.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/_baseUniq-DC1S-iCZ.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/arc-CRBBy4uQ.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/arc-CNIxC9rp.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-OftFBVm7.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-D22AlBUK.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-C4k2jrm0.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-DVpSAL1I.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-BdUvalhu.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-DY7MqqYI.js +1 -1
- pythinker_code-0.31.0/src/pythinker_code/web/static/assets/channel-DYd7h4UI.js +1 -0
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DuQ-vLEI.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-B_-G4pwz.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-BNb_KJbG.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-B_k2a5Jq.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-XSZOj5hR.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-MBuDy8EG.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-CgPwcBB1.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-DfmDFpc4.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-CpnM4Jzk.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-C1QitF6h.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-CprAV0g9.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-B8pwIVZJ.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CSX0Cg2Q.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-BageYt4Z.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-Drg_j0k7.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-DhaLY-N2.js +1 -1
- pythinker_code-0.31.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-C4KNVG4M.js +1 -0
- pythinker_code-0.31.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-C4KNVG4M.js +1 -0
- pythinker_code-0.31.0/src/pythinker_code/web/static/assets/clone-Drzw88ja.js +1 -0
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-B8jYG9WA.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-CNl1SkHd.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-BIe5qbQp.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-DhjvW-0t.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/cytoscape.esm-DRJzot-J.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/cytoscape.esm-BP8Niknm.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-Bs3qk1_w.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-BmhRJqGX.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-Dynk2DSf.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-B973QVta.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-BMxuViqa.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-cZ4eUsCm.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-CFNWP-1D.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-BvfODp16.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-Cs2Iq4y8.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-CK_SQro3.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-BA32P1Qd.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-BaBdXQpa.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-CMp4umlU.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-JygtVfFR.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-BzIUZUBd.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-DqHdVsF_.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/graph-CtCSApyt.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/graph-CqNFO2CC.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/index-Bk12GGJc.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/index--MUKtzM2.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/index-CZWExEIJ.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/index-DtuQ8kEJ.js +2 -2
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/index-CWH3DyiO.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/index-LuO0e-kY.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-DmqBfX87.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-Cg2t3pTH.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-4LBlzlYS.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-D9UsLYjz.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-DMJpOiYR.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-B1ccdtFp.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/layout-Bk_EsMXR.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/layout-CWAKOsro.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/linear-ByrBHe5Q.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/linear-Bi5qHtyA.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-zSj5EdJk.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-CIhTmKgJ.js +7 -7
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/mermaid.core-aCzfRgz1.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/mermaid.core-BSyEijZn.js +5 -5
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/min-BwR5RWWD.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/min-DcfRBc53.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-DhswlT4L.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-CwWyeU_z.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-CEG4ThTJ.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-DFRPs9ex.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-aJJ2CanL.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-DZ11KGHj.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-nuQiRopE.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-DgcpMAX5.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-Bgmma15o.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-C_VstXTy.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-Qnkd9aEf.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-OQ6FDYjg.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-BmerzPrd.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-BlkYAfhC.js +1 -1
- pythinker_code-0.31.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-D-CmmJDB.js +1 -0
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-DVLQ2yQz.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-v6F5SqKJ.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-DxALlWo8.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-DxTEDpFb.js +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-D8-15cDk.js → pythinker_code-0.31.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-C-t5auMI.js +1 -1
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/index.html +1 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/channel-DENEbOlS.js +0 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-BFyueyY8.js +0 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-BFyueyY8.js +0 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/clone-tPJSvyCb.js +0 -1
- pythinker_code-0.29.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-Ut5FiACF.js +0 -1
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/LICENSE +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/NOTICE +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/__main__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/acp/AGENTS.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/acp/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/acp/convert.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/acp/host.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/acp/mcp.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/acp/session.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/acp/tools.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/acp/types.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/acp/version.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/agents/default/judge.yaml +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/agents/default/review.yaml +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/agents/default/system.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/agentspec.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/approval_runtime/models.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/auth/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/auth/browser_login_page.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/auth/deepseek.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/auth/github_feedback.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/auth/lm_studio.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/auth/minimax.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/auth/oauth.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/auth/ollama.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/auth/openai.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/auth/opencode_go.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/auth/openrouter.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/auth/platforms.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/background/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/background/agent_runner.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/background/ids.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/background/manager.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/background/models.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/background/store.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/background/summary.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/background/worker.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/cli/__main__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/cli/debug.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/cli/export.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/cli/info.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/cli/mcp.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/cli/plugin.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/cli/review.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/cli/secscan.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/cli/security_scan.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/cli/skill.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/cli/toad.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/cli/update.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/cli/vis.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/cli/web.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/constant.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/events.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/exception.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/execution_profiles.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/extensions.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/feedback.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/feedback_repo.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/file_restore.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/hooks/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/hooks/config.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/hooks/engine.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/hooks/events.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/hooks/runner.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/llm.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/memory/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/memory/consolidation.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/memory/harvest.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/memory/recall.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/memory/recap.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/memory/retriever.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/memory/sanitize.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/metadata.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/native.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/notifications/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/notifications/llm.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/notifications/manager.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/notifications/models.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/notifications/notifier.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/notifications/store.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/notifications/wire.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/plugin/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/plugin/manager.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/plugin/tool.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/project_memory.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/prompt_templates.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/prompts/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/prompts/compact.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/prompts/init.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/py.typed +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/scratchpad.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/session.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/session_fork.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/session_state.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/share.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/skill/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/skill/flow/d2.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/skill/lockfile.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/soul/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/soul/btw.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/soul/compaction.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/soul/context.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/soul/deliberation.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/soul/denwarenji.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/soul/message.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/soul/slash.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/soul/toolset.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/subagents/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/subagents/builder.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/subagents/core.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/subagents/discovery.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/subagents/git_context.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/subagents/models.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/subagents/output.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/subagents/registry.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/subagents/runner.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/subagents/store.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/telemetry/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/telemetry/config.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/telemetry/crash.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/telemetry/errors.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/telemetry/metrics.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/telemetry/otel.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/telemetry/sentry.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/telemetry/sink.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/thinking.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/AGENTS.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/background/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/background/handoff.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/background/input.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/background/list.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/background/output.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/background/stop.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/display.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/file/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/file/glob.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/file/glob.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/file/grep.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/file/read.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/file/read.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/file/read_media.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/file/read_media.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/file/replace.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/file/replace.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/file/utils.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/file/write.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/file/write.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/memory/memory.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/plan/description.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/plan/enter.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/shell/bash.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/skill/description.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/test.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/think/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/think/think.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/utils.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/web/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/web/fetch.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/web/fetch.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/web/search.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/tools/web/search.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/print/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/print/visualize.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/components/report.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/console.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/debug.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/glyphs.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/replay.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/selector.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/setup.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/startup.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/tips.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/update.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/update_orchestrator.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/usage.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/terminal_capabilities.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/ui/tui_config.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/aiohttp.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/aioqueue.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/broadcast.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/changelog.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/clipboard.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/datetime.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/diff.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/editor.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/environment.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/envvar.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/export.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/file_filter.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/frontmatter.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/io.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/logging.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/media_tags.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/message.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/path.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/proctitle.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/proxy.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/rich/columns.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/sensitive.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/server.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/signals.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/slashcmd.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/string.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/term.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/utils/typing.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/vis/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/vis/api/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/vis/api/sessions.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/vis/api/statistics.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/vis/api/system.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/vis/app.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/vis/static/index.html +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/api/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/api/config.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/api/open_in.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/api/sessions.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/app.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/auth.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/models.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/runner/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/runner/messages.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/runner/process.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/runner/worker.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/_headers +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-YVZJy7__.css +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/install.ps1 +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/install.sh +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/static/logo.png +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/store/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/web/store/sessions.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/wire/__init__.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/wire/file.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/wire/protocol.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/wire/root_hub.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/wire/serde.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/wire/server.py +0 -0
- {pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/wire/types.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pythinker-code
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.31.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
|
|
@@ -19,10 +19,10 @@ Classifier: Programming Language :: Python :: 3.14
|
|
|
19
19
|
Classifier: Topic :: Software Development
|
|
20
20
|
Classifier: Topic :: Software Development :: Code Generators
|
|
21
21
|
Classifier: Topic :: Utilities
|
|
22
|
-
Requires-Dist: agent-client-protocol==0.
|
|
22
|
+
Requires-Dist: agent-client-protocol==0.10.1
|
|
23
23
|
Requires-Dist: aiofiles>=24.0,<26.0
|
|
24
|
-
Requires-Dist: aiohttp==3.
|
|
25
|
-
Requires-Dist: typer==0.
|
|
24
|
+
Requires-Dist: aiohttp==3.14.0
|
|
25
|
+
Requires-Dist: typer==0.26.5
|
|
26
26
|
Requires-Dist: pythinker-core[contrib]==1.2.0
|
|
27
27
|
Requires-Dist: loguru>=0.6.0,<0.7
|
|
28
28
|
Requires-Dist: prompt-toolkit==3.0.52
|
|
@@ -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.31.0
|
|
119
119
|
|
|
120
|
-
- **
|
|
121
|
-
- **
|
|
122
|
-
- **
|
|
123
|
-
- **
|
|
124
|
-
-
|
|
120
|
+
- **Release promotion no longer stalls when the Homebrew tap is broken.** The `promote-release` workflow now gates only on platform assets and PyPI; a lagging or broken Homebrew tap emits a warning annotation but no longer blocks the GitHub Release from reaching Latest.
|
|
121
|
+
- **Calmer, theme-aligned TUI rendering.** Transcript, recap, and tool-header output now use theme-standardized activity colors, and Markdown tables render as a bordered grid (wide tables no longer collapse into a stacked-record list).
|
|
122
|
+
- **Auto-mode tool approval fails closed when unattended.** In auto/non-interactive runs, actions still needing approval are denied with guidance instead of waiting indefinitely; the `auto_deliberate_destructive_actions` setting extends this backstop to interactive `--yolo` sessions.
|
|
123
|
+
- **Yolo + auto mode hardened against silent over-reach.** Entering plan mode requires confirmation in interactive `--yolo` sessions; a new `--no-yolo` flag overrides yolo globally; resuming a yolo/auto session surfaces a startup warning.
|
|
124
|
+
- **`pythinker review` validates finding evidence.** Reviewflow assembles prompts from a shared security-knowledge manifest and validates findings without failing the whole review on invalid ones.
|
|
125
125
|
|
|
126
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
126
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.31.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
127
127
|
|
|
128
128
|
|
|
129
129
|
---
|
|
@@ -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.31.0.exe` from [Releases](https://github.com/Pythoughts-labs/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/Pythoughts-labs/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 Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
|
|
219
219
|
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
|
|
@@ -241,7 +241,7 @@ pythinker # start the interactive TUI
|
|
|
241
241
|
|
|
242
242
|
### 🪟 Windows — native installer
|
|
243
243
|
|
|
244
|
-
`PythinkerSetup-0.
|
|
244
|
+
`PythinkerSetup-0.31.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
245
245
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
246
246
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
247
247
|
the change. **No UAC prompt.**
|
|
@@ -252,13 +252,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
252
252
|
|
|
253
253
|
# Or manually download the installer + checksum from the Releases page,
|
|
254
254
|
# verify with Get-FileHash, then run:
|
|
255
|
-
.\PythinkerSetup-0.
|
|
255
|
+
.\PythinkerSetup-0.31.0.exe
|
|
256
256
|
|
|
257
257
|
# Open a fresh PowerShell
|
|
258
258
|
pythinker --version
|
|
259
259
|
```
|
|
260
260
|
|
|
261
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
261
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.31.0.exe /ALLUSERS`
|
|
262
262
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
263
263
|
|
|
264
264
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -309,26 +309,26 @@ attached to every GitHub Release.
|
|
|
309
309
|
|
|
310
310
|
```sh
|
|
311
311
|
# Debian / Ubuntu (x86_64)
|
|
312
|
-
sudo dpkg -i pythinker-code_0.
|
|
312
|
+
sudo dpkg -i pythinker-code_0.31.0_amd64.deb
|
|
313
313
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
314
314
|
|
|
315
315
|
# Debian / Ubuntu (ARM64)
|
|
316
|
-
sudo dpkg -i pythinker-code_0.
|
|
316
|
+
sudo dpkg -i pythinker-code_0.31.0_arm64.deb
|
|
317
317
|
|
|
318
318
|
# Fedora / RHEL / openSUSE (x86_64)
|
|
319
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
320
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
321
|
-
sha256sum -c pythinker-code-0.
|
|
319
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.31.0/pythinker-code-0.31.0.x86_64.rpm
|
|
320
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.31.0/pythinker-code-0.31.0.x86_64.rpm.sha256
|
|
321
|
+
sha256sum -c pythinker-code-0.31.0.x86_64.rpm.sha256
|
|
322
322
|
# Fedora / RHEL:
|
|
323
|
-
sudo dnf install ./pythinker-code-0.
|
|
323
|
+
sudo dnf install ./pythinker-code-0.31.0.x86_64.rpm
|
|
324
324
|
# openSUSE:
|
|
325
|
-
sudo zypper install ./pythinker-code-0.
|
|
325
|
+
sudo zypper install ./pythinker-code-0.31.0.x86_64.rpm
|
|
326
326
|
|
|
327
327
|
# Fedora / RHEL (aarch64)
|
|
328
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
329
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
330
|
-
sha256sum -c pythinker-code-0.
|
|
331
|
-
sudo dnf install ./pythinker-code-0.
|
|
328
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.31.0/pythinker-code-0.31.0.aarch64.rpm
|
|
329
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.31.0/pythinker-code-0.31.0.aarch64.rpm.sha256
|
|
330
|
+
sha256sum -c pythinker-code-0.31.0.aarch64.rpm.sha256
|
|
331
|
+
sudo dnf install ./pythinker-code-0.31.0.aarch64.rpm
|
|
332
332
|
```
|
|
333
333
|
|
|
334
334
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -337,8 +337,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
337
337
|
**Verify before install:**
|
|
338
338
|
|
|
339
339
|
```sh
|
|
340
|
-
sha256sum -c pythinker-code_0.
|
|
341
|
-
sha256sum -c pythinker-code-0.
|
|
340
|
+
sha256sum -c pythinker-code_0.31.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
341
|
+
sha256sum -c pythinker-code-0.31.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
342
342
|
```
|
|
343
343
|
|
|
344
344
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -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.31.0
|
|
54
54
|
|
|
55
|
-
- **
|
|
56
|
-
- **
|
|
57
|
-
- **
|
|
58
|
-
- **
|
|
59
|
-
-
|
|
55
|
+
- **Release promotion no longer stalls when the Homebrew tap is broken.** The `promote-release` workflow now gates only on platform assets and PyPI; a lagging or broken Homebrew tap emits a warning annotation but no longer blocks the GitHub Release from reaching Latest.
|
|
56
|
+
- **Calmer, theme-aligned TUI rendering.** Transcript, recap, and tool-header output now use theme-standardized activity colors, and Markdown tables render as a bordered grid (wide tables no longer collapse into a stacked-record list).
|
|
57
|
+
- **Auto-mode tool approval fails closed when unattended.** In auto/non-interactive runs, actions still needing approval are denied with guidance instead of waiting indefinitely; the `auto_deliberate_destructive_actions` setting extends this backstop to interactive `--yolo` sessions.
|
|
58
|
+
- **Yolo + auto mode hardened against silent over-reach.** Entering plan mode requires confirmation in interactive `--yolo` sessions; a new `--no-yolo` flag overrides yolo globally; resuming a yolo/auto session surfaces a startup warning.
|
|
59
|
+
- **`pythinker review` validates finding evidence.** Reviewflow assembles prompts from a shared security-knowledge manifest and validates findings without failing the whole review on invalid ones.
|
|
60
60
|
|
|
61
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
61
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.31.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
62
62
|
|
|
63
63
|
|
|
64
64
|
---
|
|
@@ -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.31.0.exe` from [Releases](https://github.com/Pythoughts-labs/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/Pythoughts-labs/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 Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
|
|
154
154
|
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
|
|
@@ -176,7 +176,7 @@ pythinker # start the interactive TUI
|
|
|
176
176
|
|
|
177
177
|
### 🪟 Windows — native installer
|
|
178
178
|
|
|
179
|
-
`PythinkerSetup-0.
|
|
179
|
+
`PythinkerSetup-0.31.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
180
180
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
181
181
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
182
182
|
the change. **No UAC prompt.**
|
|
@@ -187,13 +187,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
187
187
|
|
|
188
188
|
# Or manually download the installer + checksum from the Releases page,
|
|
189
189
|
# verify with Get-FileHash, then run:
|
|
190
|
-
.\PythinkerSetup-0.
|
|
190
|
+
.\PythinkerSetup-0.31.0.exe
|
|
191
191
|
|
|
192
192
|
# Open a fresh PowerShell
|
|
193
193
|
pythinker --version
|
|
194
194
|
```
|
|
195
195
|
|
|
196
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
196
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.31.0.exe /ALLUSERS`
|
|
197
197
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
198
198
|
|
|
199
199
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -244,26 +244,26 @@ attached to every GitHub Release.
|
|
|
244
244
|
|
|
245
245
|
```sh
|
|
246
246
|
# Debian / Ubuntu (x86_64)
|
|
247
|
-
sudo dpkg -i pythinker-code_0.
|
|
247
|
+
sudo dpkg -i pythinker-code_0.31.0_amd64.deb
|
|
248
248
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
249
249
|
|
|
250
250
|
# Debian / Ubuntu (ARM64)
|
|
251
|
-
sudo dpkg -i pythinker-code_0.
|
|
251
|
+
sudo dpkg -i pythinker-code_0.31.0_arm64.deb
|
|
252
252
|
|
|
253
253
|
# Fedora / RHEL / openSUSE (x86_64)
|
|
254
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
255
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
256
|
-
sha256sum -c pythinker-code-0.
|
|
254
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.31.0/pythinker-code-0.31.0.x86_64.rpm
|
|
255
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.31.0/pythinker-code-0.31.0.x86_64.rpm.sha256
|
|
256
|
+
sha256sum -c pythinker-code-0.31.0.x86_64.rpm.sha256
|
|
257
257
|
# Fedora / RHEL:
|
|
258
|
-
sudo dnf install ./pythinker-code-0.
|
|
258
|
+
sudo dnf install ./pythinker-code-0.31.0.x86_64.rpm
|
|
259
259
|
# openSUSE:
|
|
260
|
-
sudo zypper install ./pythinker-code-0.
|
|
260
|
+
sudo zypper install ./pythinker-code-0.31.0.x86_64.rpm
|
|
261
261
|
|
|
262
262
|
# Fedora / RHEL (aarch64)
|
|
263
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
264
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
265
|
-
sha256sum -c pythinker-code-0.
|
|
266
|
-
sudo dnf install ./pythinker-code-0.
|
|
263
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.31.0/pythinker-code-0.31.0.aarch64.rpm
|
|
264
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.31.0/pythinker-code-0.31.0.aarch64.rpm.sha256
|
|
265
|
+
sha256sum -c pythinker-code-0.31.0.aarch64.rpm.sha256
|
|
266
|
+
sudo dnf install ./pythinker-code-0.31.0.aarch64.rpm
|
|
267
267
|
```
|
|
268
268
|
|
|
269
269
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -272,8 +272,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
272
272
|
**Verify before install:**
|
|
273
273
|
|
|
274
274
|
```sh
|
|
275
|
-
sha256sum -c pythinker-code_0.
|
|
276
|
-
sha256sum -c pythinker-code-0.
|
|
275
|
+
sha256sum -c pythinker-code_0.31.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
276
|
+
sha256sum -c pythinker-code-0.31.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
277
277
|
```
|
|
278
278
|
|
|
279
279
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "pythinker-code"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.31.0"
|
|
4
4
|
description = "Pythinker Code is your next CLI agent."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -22,10 +22,10 @@ classifiers = [
|
|
|
22
22
|
"Topic :: Utilities",
|
|
23
23
|
]
|
|
24
24
|
dependencies = [
|
|
25
|
-
"agent-client-protocol==0.
|
|
25
|
+
"agent-client-protocol==0.10.1",
|
|
26
26
|
"aiofiles>=24.0,<26.0",
|
|
27
|
-
"aiohttp==3.
|
|
28
|
-
"typer==0.
|
|
27
|
+
"aiohttp==3.14.0",
|
|
28
|
+
"typer==0.26.5",
|
|
29
29
|
"pythinker-core[contrib]==1.2.0",
|
|
30
30
|
# notify-py (via batrachian-toad) caps loguru at <=0.6.0 on 3.14+.
|
|
31
31
|
"loguru>=0.6.0,<0.7",
|
|
@@ -15,6 +15,40 @@ GitHub Releases page; `0.8.0` is the new starting line.
|
|
|
15
15
|
|
|
16
16
|
## Unreleased
|
|
17
17
|
|
|
18
|
+
## 0.31.0 (2026-06-02)
|
|
19
|
+
|
|
20
|
+
### What changed in this release
|
|
21
|
+
|
|
22
|
+
- **Release promotion no longer stalls when the Homebrew tap is broken.** The `promote-release` workflow now gates only on platform assets and PyPI; a lagging or broken Homebrew tap emits a warning annotation and step summary note but no longer blocks the GitHub Release from reaching Latest.
|
|
23
|
+
- **Calmer, theme-aligned TUI rendering.** Transcript, recap, and tool-header output now use theme-standardized activity colors instead of hardcoded values, and Markdown tables render as a bordered grid (wide tables no longer collapse into a stacked-record list).
|
|
24
|
+
- **Auto-mode tool approval fails closed when unattended.** In auto/non-interactive runs, an action that still needs approval under the active safe-mode/trust policy is denied with guidance instead of waiting indefinitely for an absent user, and outside-workspace writes are never auto-approved. A destructive auto-approved action is now bounced once for deliberation whenever no user is present (regardless of config), so the obvious `--yolo --auto` combination is no longer more dangerous than the `autonomous_coding` profile; the `auto_deliberate_destructive_actions` setting extends that backstop to interactive `--yolo` sessions, where a user is present but approvals are skipped.
|
|
25
|
+
- **Yolo + auto mode hardened against silent over-reach.** Entering plan mode now requires confirmation in an interactive `--yolo` session (matching exit), so the plan-review checkpoint is preserved when a user is present. A `--yolo` run no longer clears or persists the workspace's safe-mode/trust state. A new `--no-yolo` flag forces yolo off for a run — overriding the `--yolo` flag, the `default_yolo` config, and any resumed session state. Resuming a session that restores yolo and/or auto now surfaces a startup warning so it is never silent.
|
|
26
|
+
- **`pythinker review` validates finding evidence.** Reviewflow assembles prompts from a shared security-knowledge manifest and validates findings, handling invalid ones without failing the whole review.
|
|
27
|
+
|
|
28
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.31.0`, or use the native installer for your OS (see the README install table).
|
|
29
|
+
|
|
30
|
+
## 0.30.0 (2026-06-02)
|
|
31
|
+
|
|
32
|
+
### What changed in this release
|
|
33
|
+
|
|
34
|
+
- **ACP session close and auth errors are spec-compliant.** `session/close` now cancels any
|
|
35
|
+
in-flight work and frees the session's runtime resources (MCP toolset, background refresh)
|
|
36
|
+
before dropping it, instead of leaking them, per the ACP `session/close` requirement. The
|
|
37
|
+
`authenticate` failure path now serializes its `authMethods` to plain dicts so the JSON-RPC
|
|
38
|
+
error response no longer raises `TypeError` on encode.
|
|
39
|
+
- **Auto-mode destructive actions deliberate per turn and context.** Auto-deliberation now
|
|
40
|
+
scopes destructive-command one-shots to the active execution context and LLM generation,
|
|
41
|
+
so duplicate destructive calls in one response keep bouncing while later deliberate retries
|
|
42
|
+
and isolated subagent calls are handled independently. If a destructive action is ever
|
|
43
|
+
evaluated without that turn context, the gate now fails closed — it keeps deliberating
|
|
44
|
+
rather than auto-approving the action.
|
|
45
|
+
- **Release packaging keeps SDK/core pins in lockstep.** The SDK's `pythinker-core`
|
|
46
|
+
dependency is now updated by release automation and checked by CI/release validation,
|
|
47
|
+
preventing no-sources binary builds from resolving against a stale core pin.
|
|
48
|
+
- **Routine dependency bumps with the breaking-change fallout fixed.** Upgrades `agent-client-protocol` to 0.10.1, `aiohttp` to 3.14.0, and `typer` to 0.26.5. Aligns the `pythinker-review` `typer` pin so the uv workspace resolves; migrates the ACP server to the 0.10 auth schema (`TerminalAuthMethod`) and expanded `Agent` protocol (`additional_directories`, `close_session`, session config options); and restores the optional-value behaviour of `--session`/`--resume` (interactive picker when used without an ID) under Typer 0.26's new argument parser.
|
|
49
|
+
|
|
50
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.30.0`, or use the native installer for your OS (see the README install table).
|
|
51
|
+
|
|
18
52
|
## 0.29.0 (2026-06-01)
|
|
19
53
|
|
|
20
54
|
### What changed in this release
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
|
-
import sys
|
|
5
4
|
import time
|
|
6
5
|
from datetime import datetime
|
|
7
6
|
from pathlib import Path
|
|
@@ -27,6 +26,11 @@ from pythinker_code.soul.toolset import PythinkerToolset
|
|
|
27
26
|
from pythinker_code.thinking import DEFAULT_THINKING_EFFORT, effective_config_thinking_effort
|
|
28
27
|
from pythinker_code.utils.logging import logger
|
|
29
28
|
|
|
29
|
+
# ACP 0.10 types `auth_methods` as a discriminated union of auth-method variants.
|
|
30
|
+
ACPAuthMethod = (
|
|
31
|
+
acp.schema.EnvVarAuthMethod | acp.schema.TerminalAuthMethod | acp.schema.AuthMethodAgent
|
|
32
|
+
)
|
|
33
|
+
|
|
30
34
|
|
|
31
35
|
class ACPServer:
|
|
32
36
|
def __init__(self) -> None:
|
|
@@ -34,7 +38,7 @@ class ACPServer:
|
|
|
34
38
|
self.conn: acp.Client | None = None
|
|
35
39
|
self.sessions: dict[str, tuple[ACPSession, _ModelIDConv]] = {}
|
|
36
40
|
self.negotiated_version: ACPVersionSpec | None = None
|
|
37
|
-
self._auth_methods: list[
|
|
41
|
+
self._auth_methods: list[ACPAuthMethod] = []
|
|
38
42
|
|
|
39
43
|
def on_connect(self, conn: acp.Client) -> None:
|
|
40
44
|
logger.info("ACP client connected")
|
|
@@ -67,32 +71,22 @@ class ACPServer:
|
|
|
67
71
|
version=getattr(client_info, "version", None),
|
|
68
72
|
)
|
|
69
73
|
|
|
70
|
-
#
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
# Build terminal auth data for error response
|
|
75
|
-
terminal_args = args + ["login"]
|
|
74
|
+
# Build the terminal-auth args; the client re-runs the agent command
|
|
75
|
+
# with these args to complete login in the terminal.
|
|
76
|
+
terminal_args = ["login"]
|
|
76
77
|
|
|
77
78
|
# Build and cache auth methods for reuse in AUTH_REQUIRED errors
|
|
78
79
|
self._auth_methods = [
|
|
79
|
-
acp.schema.
|
|
80
|
+
acp.schema.TerminalAuthMethod(
|
|
80
81
|
id="login",
|
|
81
82
|
name="Login with Pythinker account",
|
|
82
83
|
description=(
|
|
83
84
|
"Run `pythinker login` command in the terminal, "
|
|
84
85
|
"then follow the instructions to finish login."
|
|
85
86
|
),
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
"command": command,
|
|
90
|
-
"args": terminal_args,
|
|
91
|
-
"label": "Pythinker Login",
|
|
92
|
-
"env": {},
|
|
93
|
-
"type": "terminal",
|
|
94
|
-
}
|
|
95
|
-
},
|
|
87
|
+
type="terminal",
|
|
88
|
+
args=terminal_args,
|
|
89
|
+
env={},
|
|
96
90
|
),
|
|
97
91
|
]
|
|
98
92
|
|
|
@@ -155,26 +149,28 @@ class ACPServer:
|
|
|
155
149
|
self._check_config_auth(config) if config is not None else self._check_token_usable()
|
|
156
150
|
)
|
|
157
151
|
if reason:
|
|
158
|
-
auth_methods_data: list[dict[str, Any]] = [
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
}
|
|
171
|
-
)
|
|
152
|
+
auth_methods_data: list[dict[str, Any]] = [
|
|
153
|
+
{
|
|
154
|
+
"id": m.id,
|
|
155
|
+
"name": m.name,
|
|
156
|
+
"description": m.description,
|
|
157
|
+
"type": m.type,
|
|
158
|
+
"args": m.args or [],
|
|
159
|
+
"env": m.env or {},
|
|
160
|
+
}
|
|
161
|
+
for m in self._auth_methods
|
|
162
|
+
if isinstance(m, acp.schema.TerminalAuthMethod)
|
|
163
|
+
]
|
|
172
164
|
|
|
173
165
|
logger.warning("Authentication required, {reason}", reason=reason)
|
|
174
166
|
raise acp.RequestError.auth_required({"authMethods": auth_methods_data})
|
|
175
167
|
|
|
176
168
|
async def new_session(
|
|
177
|
-
self,
|
|
169
|
+
self,
|
|
170
|
+
cwd: str,
|
|
171
|
+
additional_directories: list[str] | None = None,
|
|
172
|
+
mcp_servers: list[MCPServer] | None = None,
|
|
173
|
+
**kwargs: Any,
|
|
178
174
|
) -> acp.NewSessionResponse:
|
|
179
175
|
logger.info("Creating new session for working directory: {cwd}", cwd=cwd)
|
|
180
176
|
assert self.conn is not None, "ACP client not connected"
|
|
@@ -281,22 +277,33 @@ class ACPServer:
|
|
|
281
277
|
return acp_session, model_id_conv
|
|
282
278
|
|
|
283
279
|
async def load_session(
|
|
284
|
-
self,
|
|
285
|
-
|
|
280
|
+
self,
|
|
281
|
+
cwd: str,
|
|
282
|
+
session_id: str,
|
|
283
|
+
additional_directories: list[str] | None = None,
|
|
284
|
+
mcp_servers: list[MCPServer] | None = None,
|
|
285
|
+
**kwargs: Any,
|
|
286
|
+
) -> acp.schema.LoadSessionResponse | None:
|
|
286
287
|
logger.info("Loading session: {id} for working directory: {cwd}", id=session_id, cwd=cwd)
|
|
287
288
|
|
|
288
289
|
if session_id in self.sessions:
|
|
289
290
|
logger.warning("Session already loaded: {id}", id=session_id)
|
|
290
|
-
return
|
|
291
|
+
return None
|
|
291
292
|
|
|
292
293
|
# Check authentication before loading session
|
|
293
294
|
self._check_auth(load_config())
|
|
294
295
|
|
|
295
296
|
await self._setup_session(cwd, session_id, mcp_servers)
|
|
296
297
|
# TODO: replay session history?
|
|
298
|
+
return None
|
|
297
299
|
|
|
298
300
|
async def resume_session(
|
|
299
|
-
self,
|
|
301
|
+
self,
|
|
302
|
+
cwd: str,
|
|
303
|
+
session_id: str,
|
|
304
|
+
additional_directories: list[str] | None = None,
|
|
305
|
+
mcp_servers: list[MCPServer] | None = None,
|
|
306
|
+
**kwargs: Any,
|
|
300
307
|
) -> acp.schema.ResumeSessionResponse:
|
|
301
308
|
logger.info("Resuming session: {id} for working directory: {cwd}", id=session_id, cwd=cwd)
|
|
302
309
|
|
|
@@ -323,12 +330,21 @@ class ACPServer:
|
|
|
323
330
|
)
|
|
324
331
|
|
|
325
332
|
async def fork_session(
|
|
326
|
-
self,
|
|
333
|
+
self,
|
|
334
|
+
cwd: str,
|
|
335
|
+
session_id: str,
|
|
336
|
+
additional_directories: list[str] | None = None,
|
|
337
|
+
mcp_servers: list[MCPServer] | None = None,
|
|
338
|
+
**kwargs: Any,
|
|
327
339
|
) -> acp.schema.ForkSessionResponse:
|
|
328
340
|
raise NotImplementedError
|
|
329
341
|
|
|
330
342
|
async def list_sessions(
|
|
331
|
-
self,
|
|
343
|
+
self,
|
|
344
|
+
additional_directories: list[str] | None = None,
|
|
345
|
+
cursor: str | None = None,
|
|
346
|
+
cwd: str | None = None,
|
|
347
|
+
**kwargs: Any,
|
|
332
348
|
) -> acp.schema.ListSessionsResponse:
|
|
333
349
|
logger.info("Listing sessions for working directory: {cwd}", cwd=cwd)
|
|
334
350
|
if cwd is None:
|
|
@@ -348,8 +364,38 @@ class ACPServer:
|
|
|
348
364
|
next_cursor=None,
|
|
349
365
|
)
|
|
350
366
|
|
|
351
|
-
async def set_session_mode(
|
|
352
|
-
|
|
367
|
+
async def set_session_mode(
|
|
368
|
+
self, mode_id: str, session_id: str, **kwargs: Any
|
|
369
|
+
) -> acp.schema.SetSessionModeResponse | None:
|
|
370
|
+
if session_id not in self.sessions:
|
|
371
|
+
raise acp.RequestError.invalid_params({"session_id": "Session not found"})
|
|
372
|
+
if mode_id != "default":
|
|
373
|
+
raise acp.RequestError.invalid_params({"mode_id": "Only `default` mode is supported"})
|
|
374
|
+
return None
|
|
375
|
+
|
|
376
|
+
async def close_session(
|
|
377
|
+
self, session_id: str, **kwargs: Any
|
|
378
|
+
) -> acp.schema.CloseSessionResponse | None:
|
|
379
|
+
"""Close a session: cancel in-flight work, then free its resources (ACP 0.10).
|
|
380
|
+
|
|
381
|
+
The ``session/close`` spec requires the agent to cancel any ongoing work
|
|
382
|
+
(as if ``session/cancel`` was called) and then release the resources
|
|
383
|
+
associated with the session before dropping it from the registry.
|
|
384
|
+
"""
|
|
385
|
+
logger.info("Closing session: {id}", id=session_id)
|
|
386
|
+
entry = self.sessions.pop(session_id, None)
|
|
387
|
+
if entry is not None:
|
|
388
|
+
acp_session, _ = entry
|
|
389
|
+
await acp_session.cancel()
|
|
390
|
+
await acp_session.cli.cleanup_runtime_resources()
|
|
391
|
+
return None
|
|
392
|
+
|
|
393
|
+
async def set_config_option(
|
|
394
|
+
self, config_id: str, session_id: str, value: str | bool, **kwargs: Any
|
|
395
|
+
) -> acp.schema.SetSessionConfigOptionResponse | None:
|
|
396
|
+
"""Pythinker advertises no session config options, so none can be set."""
|
|
397
|
+
logger.warning("Unsupported session config option: {id}", id=config_id)
|
|
398
|
+
raise acp.RequestError.invalid_params({"config_id": "Unknown config option"})
|
|
353
399
|
|
|
354
400
|
async def set_session_model(self, model_id: str, session_id: str, **kwargs: Any) -> None:
|
|
355
401
|
logger.info(
|
|
@@ -432,7 +478,10 @@ class ACPServer:
|
|
|
432
478
|
raise acp.RequestError.auth_required(
|
|
433
479
|
{
|
|
434
480
|
"message": "Please complete login in terminal first",
|
|
435
|
-
"authMethods":
|
|
481
|
+
"authMethods": [
|
|
482
|
+
m.model_dump(by_alias=True, exclude_none=True)
|
|
483
|
+
for m in self._auth_methods
|
|
484
|
+
],
|
|
436
485
|
}
|
|
437
486
|
)
|
|
438
487
|
|
|
@@ -440,7 +489,11 @@ class ACPServer:
|
|
|
440
489
|
raise acp.RequestError.invalid_params({"method_id": "Unknown auth method"})
|
|
441
490
|
|
|
442
491
|
async def prompt(
|
|
443
|
-
self,
|
|
492
|
+
self,
|
|
493
|
+
prompt: list[ACPContentBlock],
|
|
494
|
+
session_id: str,
|
|
495
|
+
message_id: str | None = None,
|
|
496
|
+
**kwargs: Any,
|
|
444
497
|
) -> acp.PromptResponse:
|
|
445
498
|
logger.info("Received prompt request for session: {id}", id=session_id)
|
|
446
499
|
if session_id not in self.sessions:
|
{pythinker_code-0.29.0 → pythinker_code-0.31.0}/src/pythinker_code/agents/default/code_reviewer.yaml
RENAMED
|
@@ -7,20 +7,22 @@ agent:
|
|
|
7
7
|
|
|
8
8
|
Role and scope:
|
|
9
9
|
- Perform read-only, evidence-first review of the current repository diff.
|
|
10
|
-
- Use `pythinker review diff` by default; add `--with-security` when the parent requests security coverage.
|
|
10
|
+
- Use `pythinker review diff` by default for bounded branch/diff review; add `--with-security` when the parent requests security coverage.
|
|
11
|
+
- For repo-wide, long-running, resumable, or feature-slice review requests, prefer the stateful flow: `pythinker review init`, `pythinker review map`, then `pythinker review review --limit <n> --jobs <n>` followed by `report`/`next`/`show`/`triage` as needed.
|
|
11
12
|
- Use `pythinker review describe`, `suggest`/`improve`, `ask`, `ask-line`, `labels`, `changelog`, `docs`, `compliance`, `help-docs`, `similar-issues`, `tools`, or `config` only when the parent explicitly asks for that artifact/helper.
|
|
12
13
|
- For code-reviewr parity requests, prefer local read-only options such as `--labels-file`, `--extra-instructions`, `--best-practices-file`, `--min-score`, `--docs-style`, `--symbol`, `--pr-url`, and `--issues-dir` instead of provider publishing.
|
|
13
14
|
- Do not edit files, commit, stage, push, approve, merge, or publish provider comments.
|
|
14
15
|
|
|
15
16
|
Tool policy:
|
|
16
|
-
- Prefer `pythinker review diff --format json --no-save` so results are structured and do not write run state.
|
|
17
|
+
- Prefer `pythinker review diff --format json --no-save` for one-shot diff review so results are structured and do not write run state.
|
|
18
|
+
- Use stateful Reviewflow only when persistence, resumability, feature-slice coverage, or explicit fix/revalidate follow-up is part of the task.
|
|
17
19
|
- If persistence is requested, omit `--no-save` and report where run state was written.
|
|
18
20
|
- If the requested base ref fails, report the exact blocker instead of guessing another branch unless the parent gave fallback instructions.
|
|
19
21
|
- Read files only to verify a load-bearing finding or command failure.
|
|
20
22
|
|
|
21
23
|
Review discipline:
|
|
22
24
|
- 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.
|
|
25
|
+
- Build a review context packet: base ref/diff scope or Reviewflow feature IDs, changed behavior, likely tests, user-visible impact, valid evidence paths, omitted/truncated context, and validation evidence.
|
|
24
26
|
- Flag only issues introduced or made reachable by the diff.
|
|
25
27
|
- Prefer no finding over vague speculation. Every finding must cite concrete evidence and a failure mode.
|
|
26
28
|
|
|
@@ -16,9 +16,12 @@ agent:
|
|
|
16
16
|
Operating rules:
|
|
17
17
|
- If `.pythinker/review-guidelines.md` exists, read it before scoring findings.
|
|
18
18
|
- Read-only by convention. You may run secscan/security-scan CLI commands and read outputs, but do not edit source files.
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
19
|
+
- Choose the smallest scan mode that answers the parent: diff review for changed code, repo-wide scan for discovery, process/revalidate only for model-backed investigation.
|
|
20
|
+
- Diff mode default: `pythinker secscan diff --format json --no-save --fail-on critical`.
|
|
21
|
+
- Repo-wide discovery default: `pythinker security-scan scan --json`; if the project mirror is missing, run `pythinker security-scan init` first.
|
|
22
|
+
- Before deep repo-wide processing, preview state with `pythinker security-scan status` or `pythinker security-scan prompt --limit 1`; keep INFO.md project context short and specific if the parent asks you to improve it.
|
|
23
|
+
- Only run `pythinker security-scan process`, `revalidate`, or `triage` when the parent explicitly asks for model-backed investigation or deep validation; use `--limit`/`--jobs` to bound cost unless told otherwise.
|
|
24
|
+
- Treat matcher hits as leads, not findings. Framework and slug notes are reviewer instincts; still verify source → sink → missing mitigation in code.
|
|
22
25
|
- Check graceful degradation, observability/logging, recovery behavior, structured result/status correctness, and approval/policy mismatches when they affect security posture.
|
|
23
26
|
- Translate JSON output into the structured response block below.
|
|
24
27
|
|