pythinker-code 0.30.0__tar.gz → 0.32.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.30.0 → pythinker_code-0.32.0}/PKG-INFO +25 -25
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/README.md +24 -24
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/pyproject.toml +1 -1
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/CHANGELOG.md +23 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/session.py +1 -1
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/code_reviewer.yaml +5 -3
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/security_reviewer.yaml +6 -3
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/app.py +29 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/__init__.py +31 -4
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/config.py +53 -7
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/scratchpad.py +43 -0
- pythinker_code-0.32.0/src/pythinker_code/session_cleanup.py +260 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/session_recap.py +108 -9
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/agent.py +19 -7
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/approval.py +64 -10
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +37 -29
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/pythinkersoul.py +23 -8
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/__init__.py +4 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/agent/description.md +2 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/shell/__init__.py +6 -6
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/print/__init__.py +1 -1
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/__init__.py +8 -4
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/markdown.py +27 -14
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/echo.py +14 -3
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/motion.py +76 -30
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/prompt.py +28 -5
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/selectors/settings.py +12 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/slash.py +10 -22
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +2 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +5 -7
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +1 -1
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +1 -1
- pythinker_code-0.32.0/src/pythinker_code/ui/shell/tool_renderers/skill.py +84 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +2 -2
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +137 -22
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +17 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +46 -12
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +17 -9
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/theme.py +25 -21
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/pyinstaller.py +12 -5
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/rich/markdown.py +32 -41
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/rich/syntax.py +32 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/_baseUniq-BpBZwHN_.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/_baseUniq-Bifyk8NN.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/arc-DP9ud60-.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/arc-BYpkXSz8.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-DTfdSqNy.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-CyKYl5gX.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-C2G2Cu29.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-CEgNKzwz.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-ComToUA5.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-BHjzrlC6.js +1 -1
- pythinker_code-0.32.0/src/pythinker_code/web/static/assets/channel-6SvD-Q3G.js +1 -0
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-D96vnFIw.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DfkR0dZ9.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-B0qnyDND.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-BGiC5VZW.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-DcgAnCnn.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-DxVGxC1F.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-CMZQpCjP.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-zN0LfjGZ.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-DKHRIomN.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-BzWNV9cS.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-laZOaFx9.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-BHLGK8_b.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-B1jKxOKI.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-Da0J0B84.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-yIThlDNj.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-Ct8dBGJH.js +1 -1
- pythinker_code-0.32.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-D8_PjZVG.js +1 -0
- pythinker_code-0.32.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-D8_PjZVG.js +1 -0
- pythinker_code-0.32.0/src/pythinker_code/web/static/assets/clone-CFEh_EP3.js +1 -0
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-CHP42Z9a.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-Cxm_b-b-.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-CQ1HXW6x.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-C5xz2pZw.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/cytoscape.esm-C9FIomKi.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/cytoscape.esm-DCXCrMWk.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-C2_b9bSH.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-DNG-R8yA.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-nEM7k0TB.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CNOaVFaY.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-WrdMaUNh.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-Bwwcc_vK.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-DS3U5Zjh.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-DvnIsCVi.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-BcWzCeiC.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-Dl05OpEj.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-DdjIyGyT.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-BltqvXtV.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-DqtkXHa6.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-DL7PiVmE.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-c-pctF5V.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-CH4ZKKZj.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/graph-fAmhffdU.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/graph-B4Kzwv80.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/index-BgmeZfYh.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/index-BkNQzVTK.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/index-D82Jkou6.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/index-DJ8OfNNk.js +2 -2
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/index-D4RsU1W9.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/index-Z_xsZ3W6.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-DRLS8TXt.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-ZAfE1Ir5.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-BUtWQT7p.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-CRmMzq2d.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-DnSOvMIT.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-B8Li9_1d.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/layout-B56R08kx.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/layout-DX5pYCeV.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/linear-B7Z5u4Ef.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/linear-pptMzQ-K.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-CBRFGpvi.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-b7xUvj9U.js +7 -7
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/mermaid.core-BuhofBVT.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/mermaid.core-DCw3BYz7.js +5 -5
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/min-C3PE9D8T.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/min-tMI5897w.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-DBKiQrtd.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-C6aZL2vS.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-kQOSbgTo.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-vNbhzK3J.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-j4UapWXo.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-bBv6bv7G.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-C1ZQuL0D.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-CGSWL41c.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-CX5TCpHV.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-fmgNCgCs.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-DFM_2rnO.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-DuYLVv43.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-BATCmOry.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-DSpubNLv.js +1 -1
- pythinker_code-0.32.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-I3HpLmKV.js +1 -0
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-CcwzUm5O.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-_GniQiss.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-DHL8NzIM.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-FD_NWnVZ.js +1 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-Bz9jd22K.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-CWP4yJ_Q.js +1 -1
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/index.html +1 -1
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/wire/__init__.py +4 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/channel-D7XKNUp-.js +0 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-C5iasCpX.js +0 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-C5iasCpX.js +0 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/clone-qwIL_iPW.js +0 -1
- pythinker_code-0.30.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-D7KeOreI.js +0 -1
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/LICENSE +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/NOTICE +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/__main__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/AGENTS.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/convert.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/host.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/mcp.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/server.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/tools.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/types.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/version.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/judge.yaml +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/review.yaml +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/system.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agentspec.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/approval_runtime/models.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/browser_login_page.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/deepseek.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/github_feedback.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/lm_studio.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/minimax.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/oauth.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/ollama.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/openai.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/opencode_go.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/openrouter.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/platforms.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/background/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/background/agent_runner.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/background/ids.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/background/manager.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/background/models.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/background/store.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/background/summary.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/background/worker.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/__main__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/debug.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/export.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/info.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/mcp.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/plugin.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/review.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/secscan.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/security_scan.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/skill.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/toad.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/update.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/vis.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/web.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/constant.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/events.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/exception.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/execution_profiles.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/extensions.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/feedback.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/feedback_repo.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/file_restore.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/hooks/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/hooks/config.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/hooks/engine.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/hooks/events.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/hooks/runner.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/llm.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/memory/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/memory/consolidation.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/memory/harvest.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/memory/recall.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/memory/recap.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/memory/retriever.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/memory/sanitize.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/metadata.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/native.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/notifications/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/notifications/llm.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/notifications/manager.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/notifications/models.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/notifications/notifier.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/notifications/store.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/notifications/wire.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/plugin/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/plugin/manager.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/plugin/tool.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/project_memory.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/prompt_templates.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/prompts/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/prompts/compact.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/prompts/init.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/py.typed +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/session.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/session_fork.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/session_state.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/share.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skill/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skill/flow/d2.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skill/lockfile.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/btw.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/compaction.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/context.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/deliberation.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/denwarenji.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/message.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/permission.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/slash.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/toolset.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/builder.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/core.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/discovery.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/git_context.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/models.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/output.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/registry.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/runner.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/store.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/telemetry/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/telemetry/config.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/telemetry/crash.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/telemetry/errors.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/telemetry/metrics.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/telemetry/otel.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/telemetry/sentry.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/telemetry/sink.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/thinking.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/AGENTS.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/background/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/background/handoff.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/background/input.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/background/list.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/background/output.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/background/stop.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/display.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/glob.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/glob.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/grep.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/read.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/read.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/read_media.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/read_media.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/replace.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/replace.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/utils.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/write.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/write.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/memory/memory.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/plan/description.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/plan/enter.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/shell/bash.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/skill/description.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/test.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/think/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/think/think.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/utils.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/web/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/web/fetch.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/web/fetch.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/web/search.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/web/search.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/print/visualize.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/report.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/console.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/debug.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/glyphs.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/replay.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/selector.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/setup.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/startup.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tips.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/update.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/update_orchestrator.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/terminal_capabilities.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/tui_config.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/aiohttp.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/aioqueue.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/broadcast.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/changelog.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/clipboard.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/datetime.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/diff.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/editor.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/environment.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/envvar.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/export.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/file_filter.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/frontmatter.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/io.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/logging.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/media_tags.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/message.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/path.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/proctitle.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/proxy.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/rich/columns.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/sensitive.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/server.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/signals.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/slashcmd.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/string.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/term.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/typing.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/api/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/api/sessions.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/api/statistics.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/api/system.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/app.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/index.html +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/api/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/api/config.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/api/open_in.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/api/sessions.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/app.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/auth.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/models.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/runner/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/runner/messages.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/runner/process.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/runner/worker.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/_headers +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-YVZJy7__.css +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/install.ps1 +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/install.sh +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/logo.png +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/store/__init__.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/store/sessions.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/wire/file.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/wire/protocol.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/wire/root_hub.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/wire/serde.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/wire/server.py +0 -0
- {pythinker_code-0.30.0 → pythinker_code-0.32.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.32.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
|
|
@@ -79,7 +79,7 @@ Description-Content-Type: text/markdown
|
|
|
79
79
|
[](https://github.com/Pythoughts-labs/pythinker-code/blob/main/LICENSE)
|
|
80
80
|
[](https://github.com/Pythoughts-labs/pythinker-code/actions/workflows/ci-pythinker-cli.yml?query=branch%3Amain)
|
|
81
81
|
|
|
82
|
-
[](https://pepy.tech/projects/pythinker-code)
|
|
83
83
|
[](https://docs.astral.sh/ruff/)
|
|
84
84
|
[](https://github.com/agentclientprotocol/agent-client-protocol)
|
|
85
85
|
[](https://modelcontextprotocol.io/)
|
|
@@ -115,14 +115,14 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
115
115
|
|
|
116
116
|
---
|
|
117
117
|
|
|
118
|
-
## 🆕 What's New in 0.
|
|
118
|
+
## 🆕 What's New in 0.32.0
|
|
119
119
|
|
|
120
|
-
-
|
|
121
|
-
- **
|
|
122
|
-
- **
|
|
123
|
-
- **
|
|
120
|
+
- **`pythinker mcp add` no longer crashes on Windows and Linux native builds.** `copy_metadata()` replaces the fragile `collect_data_files()` approach in all three PyInstaller specs, so `fastmcp` and `mcp` dist-info are bundled and `importlib.metadata` resolves correctly in frozen binaries.
|
|
121
|
+
- **Pythinker work directories are automatically gitignored on startup.** `.pythinker/`, `.pythinker-review/`, and `.pythinker-review-flow/` are silently added to the project's `.gitignore` when the agent starts inside a git repo, keeping the working tree clean.
|
|
122
|
+
- **Old sessions and plan files are swept on startup.** Archives older than `session_retention_days` (default 30) are removed non-interactively at launch. Set `session_retention_days = 0` to disable.
|
|
123
|
+
- **Windows upgrade version display fix.** Inno Setup now wipes `_internal` before installing new files, so in-place upgrades no longer show a stale version number or re-trigger the update prompt.
|
|
124
124
|
|
|
125
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
125
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.32.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
126
126
|
|
|
127
127
|
|
|
128
128
|
---
|
|
@@ -212,7 +212,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
|
|
|
212
212
|
|
|
213
213
|
| Platform | Recommended install | Artifact source |
|
|
214
214
|
|---|---|---|
|
|
215
|
-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.
|
|
215
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.32.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
216
216
|
| **<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) |
|
|
217
217
|
| **<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 |
|
|
218
218
|
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
|
|
@@ -240,7 +240,7 @@ pythinker # start the interactive TUI
|
|
|
240
240
|
|
|
241
241
|
### 🪟 Windows — native installer
|
|
242
242
|
|
|
243
|
-
`PythinkerSetup-0.
|
|
243
|
+
`PythinkerSetup-0.32.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
244
244
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
245
245
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
246
246
|
the change. **No UAC prompt.**
|
|
@@ -251,13 +251,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
251
251
|
|
|
252
252
|
# Or manually download the installer + checksum from the Releases page,
|
|
253
253
|
# verify with Get-FileHash, then run:
|
|
254
|
-
.\PythinkerSetup-0.
|
|
254
|
+
.\PythinkerSetup-0.32.0.exe
|
|
255
255
|
|
|
256
256
|
# Open a fresh PowerShell
|
|
257
257
|
pythinker --version
|
|
258
258
|
```
|
|
259
259
|
|
|
260
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
260
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.32.0.exe /ALLUSERS`
|
|
261
261
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
262
262
|
|
|
263
263
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -308,26 +308,26 @@ attached to every GitHub Release.
|
|
|
308
308
|
|
|
309
309
|
```sh
|
|
310
310
|
# Debian / Ubuntu (x86_64)
|
|
311
|
-
sudo dpkg -i pythinker-code_0.
|
|
311
|
+
sudo dpkg -i pythinker-code_0.32.0_amd64.deb
|
|
312
312
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
313
313
|
|
|
314
314
|
# Debian / Ubuntu (ARM64)
|
|
315
|
-
sudo dpkg -i pythinker-code_0.
|
|
315
|
+
sudo dpkg -i pythinker-code_0.32.0_arm64.deb
|
|
316
316
|
|
|
317
317
|
# Fedora / RHEL / openSUSE (x86_64)
|
|
318
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
319
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
320
|
-
sha256sum -c pythinker-code-0.
|
|
318
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.x86_64.rpm
|
|
319
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.x86_64.rpm.sha256
|
|
320
|
+
sha256sum -c pythinker-code-0.32.0.x86_64.rpm.sha256
|
|
321
321
|
# Fedora / RHEL:
|
|
322
|
-
sudo dnf install ./pythinker-code-0.
|
|
322
|
+
sudo dnf install ./pythinker-code-0.32.0.x86_64.rpm
|
|
323
323
|
# openSUSE:
|
|
324
|
-
sudo zypper install ./pythinker-code-0.
|
|
324
|
+
sudo zypper install ./pythinker-code-0.32.0.x86_64.rpm
|
|
325
325
|
|
|
326
326
|
# Fedora / RHEL (aarch64)
|
|
327
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
328
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
329
|
-
sha256sum -c pythinker-code-0.
|
|
330
|
-
sudo dnf install ./pythinker-code-0.
|
|
327
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.aarch64.rpm
|
|
328
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.aarch64.rpm.sha256
|
|
329
|
+
sha256sum -c pythinker-code-0.32.0.aarch64.rpm.sha256
|
|
330
|
+
sudo dnf install ./pythinker-code-0.32.0.aarch64.rpm
|
|
331
331
|
```
|
|
332
332
|
|
|
333
333
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -336,8 +336,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
336
336
|
**Verify before install:**
|
|
337
337
|
|
|
338
338
|
```sh
|
|
339
|
-
sha256sum -c pythinker-code_0.
|
|
340
|
-
sha256sum -c pythinker-code-0.
|
|
339
|
+
sha256sum -c pythinker-code_0.32.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
340
|
+
sha256sum -c pythinker-code-0.32.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
341
341
|
```
|
|
342
342
|
|
|
343
343
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
[](https://github.com/Pythoughts-labs/pythinker-code/blob/main/LICENSE)
|
|
15
15
|
[](https://github.com/Pythoughts-labs/pythinker-code/actions/workflows/ci-pythinker-cli.yml?query=branch%3Amain)
|
|
16
16
|
|
|
17
|
-
[](https://pepy.tech/projects/pythinker-code)
|
|
18
18
|
[](https://docs.astral.sh/ruff/)
|
|
19
19
|
[](https://github.com/agentclientprotocol/agent-client-protocol)
|
|
20
20
|
[](https://modelcontextprotocol.io/)
|
|
@@ -50,14 +50,14 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
53
|
-
## 🆕 What's New in 0.
|
|
53
|
+
## 🆕 What's New in 0.32.0
|
|
54
54
|
|
|
55
|
-
-
|
|
56
|
-
- **
|
|
57
|
-
- **
|
|
58
|
-
- **
|
|
55
|
+
- **`pythinker mcp add` no longer crashes on Windows and Linux native builds.** `copy_metadata()` replaces the fragile `collect_data_files()` approach in all three PyInstaller specs, so `fastmcp` and `mcp` dist-info are bundled and `importlib.metadata` resolves correctly in frozen binaries.
|
|
56
|
+
- **Pythinker work directories are automatically gitignored on startup.** `.pythinker/`, `.pythinker-review/`, and `.pythinker-review-flow/` are silently added to the project's `.gitignore` when the agent starts inside a git repo, keeping the working tree clean.
|
|
57
|
+
- **Old sessions and plan files are swept on startup.** Archives older than `session_retention_days` (default 30) are removed non-interactively at launch. Set `session_retention_days = 0` to disable.
|
|
58
|
+
- **Windows upgrade version display fix.** Inno Setup now wipes `_internal` before installing new files, so in-place upgrades no longer show a stale version number or re-trigger the update prompt.
|
|
59
59
|
|
|
60
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
60
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.32.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
61
61
|
|
|
62
62
|
|
|
63
63
|
---
|
|
@@ -147,7 +147,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
|
|
|
147
147
|
|
|
148
148
|
| Platform | Recommended install | Artifact source |
|
|
149
149
|
|---|---|---|
|
|
150
|
-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.
|
|
150
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.32.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
151
151
|
| **<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) |
|
|
152
152
|
| **<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 |
|
|
153
153
|
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
|
|
@@ -175,7 +175,7 @@ pythinker # start the interactive TUI
|
|
|
175
175
|
|
|
176
176
|
### 🪟 Windows — native installer
|
|
177
177
|
|
|
178
|
-
`PythinkerSetup-0.
|
|
178
|
+
`PythinkerSetup-0.32.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
179
179
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
180
180
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
181
181
|
the change. **No UAC prompt.**
|
|
@@ -186,13 +186,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
186
186
|
|
|
187
187
|
# Or manually download the installer + checksum from the Releases page,
|
|
188
188
|
# verify with Get-FileHash, then run:
|
|
189
|
-
.\PythinkerSetup-0.
|
|
189
|
+
.\PythinkerSetup-0.32.0.exe
|
|
190
190
|
|
|
191
191
|
# Open a fresh PowerShell
|
|
192
192
|
pythinker --version
|
|
193
193
|
```
|
|
194
194
|
|
|
195
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
195
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.32.0.exe /ALLUSERS`
|
|
196
196
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
197
197
|
|
|
198
198
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -243,26 +243,26 @@ attached to every GitHub Release.
|
|
|
243
243
|
|
|
244
244
|
```sh
|
|
245
245
|
# Debian / Ubuntu (x86_64)
|
|
246
|
-
sudo dpkg -i pythinker-code_0.
|
|
246
|
+
sudo dpkg -i pythinker-code_0.32.0_amd64.deb
|
|
247
247
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
248
248
|
|
|
249
249
|
# Debian / Ubuntu (ARM64)
|
|
250
|
-
sudo dpkg -i pythinker-code_0.
|
|
250
|
+
sudo dpkg -i pythinker-code_0.32.0_arm64.deb
|
|
251
251
|
|
|
252
252
|
# Fedora / RHEL / openSUSE (x86_64)
|
|
253
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
254
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
255
|
-
sha256sum -c pythinker-code-0.
|
|
253
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.x86_64.rpm
|
|
254
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.x86_64.rpm.sha256
|
|
255
|
+
sha256sum -c pythinker-code-0.32.0.x86_64.rpm.sha256
|
|
256
256
|
# Fedora / RHEL:
|
|
257
|
-
sudo dnf install ./pythinker-code-0.
|
|
257
|
+
sudo dnf install ./pythinker-code-0.32.0.x86_64.rpm
|
|
258
258
|
# openSUSE:
|
|
259
|
-
sudo zypper install ./pythinker-code-0.
|
|
259
|
+
sudo zypper install ./pythinker-code-0.32.0.x86_64.rpm
|
|
260
260
|
|
|
261
261
|
# Fedora / RHEL (aarch64)
|
|
262
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
263
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
264
|
-
sha256sum -c pythinker-code-0.
|
|
265
|
-
sudo dnf install ./pythinker-code-0.
|
|
262
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.aarch64.rpm
|
|
263
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.aarch64.rpm.sha256
|
|
264
|
+
sha256sum -c pythinker-code-0.32.0.aarch64.rpm.sha256
|
|
265
|
+
sudo dnf install ./pythinker-code-0.32.0.aarch64.rpm
|
|
266
266
|
```
|
|
267
267
|
|
|
268
268
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -271,8 +271,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
271
271
|
**Verify before install:**
|
|
272
272
|
|
|
273
273
|
```sh
|
|
274
|
-
sha256sum -c pythinker-code_0.
|
|
275
|
-
sha256sum -c pythinker-code-0.
|
|
274
|
+
sha256sum -c pythinker-code_0.32.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
275
|
+
sha256sum -c pythinker-code-0.32.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
276
276
|
```
|
|
277
277
|
|
|
278
278
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -15,6 +15,29 @@ GitHub Releases page; `0.8.0` is the new starting line.
|
|
|
15
15
|
|
|
16
16
|
## Unreleased
|
|
17
17
|
|
|
18
|
+
## 0.32.0 (2026-06-03)
|
|
19
|
+
|
|
20
|
+
### What changed in this release
|
|
21
|
+
|
|
22
|
+
- **`pythinker mcp add` no longer crashes on Windows and Linux native builds.** The PyInstaller specs were using `collect_data_files()` which silently omits the `fastmcp-*.dist-info/` sibling directory; fastmcp calls `importlib.metadata.version("fastmcp")` at import time, so every `mcp add` / `mcp list` invocation raised `PackageNotFoundError`. Switched all three specs (Windows installer, Linux installer, macOS/tarball) to `copy_metadata()` — the PyInstaller-standard hook for bundling dist-info.
|
|
23
|
+
- **Pythinker work directories are automatically gitignored on startup.** When the agent starts inside a git repository, `.pythinker/`, `.pythinker-review/`, and `.pythinker-review-flow/` are silently appended to the project's `.gitignore` if missing, preventing local agent state from making the working tree dirty.
|
|
24
|
+
- **Old sessions and plan files are swept on startup.** Archived session directories under `~/.pythinker/sessions/` and hero-name plan files under `~/.pythinker/plans/` older than `session_retention_days` (default 30) are removed non-interactively at startup. Set `session_retention_days = 0` to disable.
|
|
25
|
+
- **Windows upgrade version display fix.** In-place upgrades no longer show a stale version number or re-trigger the update prompt. Inno Setup now wipes `_internal` before installing new files, preventing old `dist-info` directories from accumulating and causing `importlib.metadata` to report the previous version.
|
|
26
|
+
|
|
27
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.32.0`, or use the native installer for your OS (see the README install table).
|
|
28
|
+
|
|
29
|
+
## 0.31.0 (2026-06-02)
|
|
30
|
+
|
|
31
|
+
### What changed in this release
|
|
32
|
+
|
|
33
|
+
- **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.
|
|
34
|
+
- **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).
|
|
35
|
+
- **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.
|
|
36
|
+
- **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.
|
|
37
|
+
- **`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.
|
|
38
|
+
|
|
39
|
+
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).
|
|
40
|
+
|
|
18
41
|
## 0.30.0 (2026-06-02)
|
|
19
42
|
|
|
20
43
|
### What changed in this release
|
|
@@ -215,7 +215,7 @@ class ACPSession:
|
|
|
215
215
|
case _:
|
|
216
216
|
pass
|
|
217
217
|
except LLMNotSet as e:
|
|
218
|
-
logger.
|
|
218
|
+
logger.warning("LLM not set — user has no provider configured")
|
|
219
219
|
raise acp.RequestError.auth_required() from e
|
|
220
220
|
except LLMNotSupported as e:
|
|
221
221
|
logger.exception("LLM not supported:")
|
{pythinker_code-0.30.0 → pythinker_code-0.32.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
|
|
|
@@ -63,6 +63,23 @@ def _safe_git_branch(cwd: str | Path | HostPath) -> str | None:
|
|
|
63
63
|
return branch or None
|
|
64
64
|
|
|
65
65
|
|
|
66
|
+
def _resumed_unsupervised_notice(*, resumed: bool, yolo: bool, auto: bool) -> str | None:
|
|
67
|
+
"""Welcome-banner warning when a resumed session is running unsupervised.
|
|
68
|
+
|
|
69
|
+
Resuming restores ``yolo``/``auto`` from persisted state, so a session can come back
|
|
70
|
+
unattended and, under YOLO, auto-approving actions with no prompt. Surface that
|
|
71
|
+
prominently at startup (it also fires when the modes were passed explicitly on the
|
|
72
|
+
resume command — acceptable over-notification). ``None`` when not a resume or no
|
|
73
|
+
unsupervised mode is active.
|
|
74
|
+
"""
|
|
75
|
+
if not resumed or not (yolo or auto):
|
|
76
|
+
return None
|
|
77
|
+
modes = " + ".join(name for name, active in (("YOLO", yolo), ("auto", auto)) if active)
|
|
78
|
+
if yolo:
|
|
79
|
+
return f"{modes} active — actions auto-approved; toggle with /yolo /auto"
|
|
80
|
+
return "auto active — interactive approvals still required; toggle with /auto"
|
|
81
|
+
|
|
82
|
+
|
|
66
83
|
def _patch_session_id(record: dict[str, Any]) -> None:
|
|
67
84
|
"""Inject the current session ID (from ContextVar) into log records."""
|
|
68
85
|
try:
|
|
@@ -153,6 +170,7 @@ class PythinkerCLI:
|
|
|
153
170
|
thinking_effort: ThinkingEffort | None = None,
|
|
154
171
|
# Run mode
|
|
155
172
|
yolo: bool = False,
|
|
173
|
+
no_yolo: bool = False,
|
|
156
174
|
auto: bool = False,
|
|
157
175
|
runtime_auto: bool = False,
|
|
158
176
|
plan_mode: bool = False,
|
|
@@ -183,6 +201,8 @@ class PythinkerCLI:
|
|
|
183
201
|
Defaults to None.
|
|
184
202
|
yolo (bool, optional): Dangerously skip permission approvals. The user is still
|
|
185
203
|
reachable via ``AskUserQuestion``. Defaults to False.
|
|
204
|
+
no_yolo (bool, optional): Force yolo OFF for this run, overriding the ``yolo``
|
|
205
|
+
flag, config ``default_yolo``, and persisted session state. Defaults to False.
|
|
186
206
|
auto (bool, optional): Invocation-level auto mode (no user is present to answer
|
|
187
207
|
questions or approve actions). Implies auto-approve. Defaults to False.
|
|
188
208
|
runtime_auto (bool, optional): Internal invocation-only auto-mode overlay, used by
|
|
@@ -307,6 +327,7 @@ class PythinkerCLI:
|
|
|
307
327
|
yolo,
|
|
308
328
|
auto=auto,
|
|
309
329
|
runtime_auto=runtime_auto,
|
|
330
|
+
no_yolo=no_yolo,
|
|
310
331
|
skills_dirs=skills_dirs,
|
|
311
332
|
scratchpad_section=scratchpad_section,
|
|
312
333
|
)
|
|
@@ -783,6 +804,14 @@ class PythinkerCLI:
|
|
|
783
804
|
if branch_name:
|
|
784
805
|
welcome_info.append(WelcomeInfoItem(name="Branch", value=branch_name))
|
|
785
806
|
welcome_info.append(WelcomeInfoItem(name="Session", value=self._runtime.session.id))
|
|
807
|
+
if notice := _resumed_unsupervised_notice(
|
|
808
|
+
resumed=self._runtime.resumed,
|
|
809
|
+
yolo=self._runtime.approval.is_yolo(),
|
|
810
|
+
auto=self._runtime.approval.is_auto(),
|
|
811
|
+
):
|
|
812
|
+
welcome_info.append(
|
|
813
|
+
WelcomeInfoItem(name="Mode", value=notice, level=WelcomeInfoItem.Level.WARN)
|
|
814
|
+
)
|
|
786
815
|
try:
|
|
787
816
|
auto_save_path = str(
|
|
788
817
|
shorten_home(HostPath.unsafe_from_local_path(self._runtime.session.context_file))
|
|
@@ -378,6 +378,16 @@ def pythinker(
|
|
|
378
378
|
help="Automatically approve all actions. Default: no.",
|
|
379
379
|
),
|
|
380
380
|
] = False,
|
|
381
|
+
no_yolo: Annotated[
|
|
382
|
+
bool,
|
|
383
|
+
typer.Option(
|
|
384
|
+
"--no-yolo",
|
|
385
|
+
help=(
|
|
386
|
+
"Force yolo OFF for this run, overriding --yolo, config default_yolo, and "
|
|
387
|
+
"any persisted/resumed yolo state. Default: no."
|
|
388
|
+
),
|
|
389
|
+
),
|
|
390
|
+
] = False,
|
|
381
391
|
plan: Annotated[
|
|
382
392
|
bool,
|
|
383
393
|
typer.Option(
|
|
@@ -390,9 +400,11 @@ def pythinker(
|
|
|
390
400
|
typer.Option(
|
|
391
401
|
"--auto",
|
|
392
402
|
help=(
|
|
393
|
-
"Run in auto mode: no user is present
|
|
394
|
-
"
|
|
395
|
-
"
|
|
403
|
+
"Run in auto mode: no user is present and AskUserQuestion is "
|
|
404
|
+
"auto-dismissed. Tool calls are auto-approved only when current "
|
|
405
|
+
"trust/safe-mode policy permits; otherwise approval-required actions "
|
|
406
|
+
"fail closed. Use when running unattended (scripts, CI, scheduled jobs). "
|
|
407
|
+
"Default: no."
|
|
396
408
|
),
|
|
397
409
|
),
|
|
398
410
|
] = False,
|
|
@@ -412,7 +424,9 @@ def pythinker(
|
|
|
412
424
|
"--print",
|
|
413
425
|
help=(
|
|
414
426
|
"Run in print mode (non-interactive). Print mode auto-dismisses "
|
|
415
|
-
"AskUserQuestion and
|
|
427
|
+
"AskUserQuestion and enables invocation-only auto mode; approval-required "
|
|
428
|
+
"tool calls still follow trust/safe-mode policy and fail closed when "
|
|
429
|
+
"approval is unavailable."
|
|
416
430
|
),
|
|
417
431
|
),
|
|
418
432
|
] = False,
|
|
@@ -789,8 +803,20 @@ def pythinker(
|
|
|
789
803
|
render_scratchpad_section,
|
|
790
804
|
scratch_file_exists,
|
|
791
805
|
)
|
|
806
|
+
from pythinker_code.session_cleanup import (
|
|
807
|
+
sweep_old_plans,
|
|
808
|
+
sweep_old_sessions,
|
|
809
|
+
sweep_stale_work_dirs,
|
|
810
|
+
)
|
|
792
811
|
|
|
793
812
|
scratchpad_status = await ensure_git_excluded(work_dir)
|
|
813
|
+
|
|
814
|
+
# Sweep accumulated state on startup (best-effort, non-blocking).
|
|
815
|
+
# Mirrors Claude Code's cleanupPeriodDays=30 model.
|
|
816
|
+
_retention = config.session_retention_days if isinstance(config, Config) else 30
|
|
817
|
+
await asyncio.to_thread(sweep_old_sessions, _retention)
|
|
818
|
+
await asyncio.to_thread(sweep_old_plans, _retention)
|
|
819
|
+
await asyncio.to_thread(sweep_stale_work_dirs)
|
|
794
820
|
scratch_exists_before_start = scratch_file_exists(work_dir)
|
|
795
821
|
if scratchpad_status.available:
|
|
796
822
|
session_source = "resume" if resumed else "startup"
|
|
@@ -840,6 +866,7 @@ def pythinker(
|
|
|
840
866
|
thinking=thinking,
|
|
841
867
|
thinking_effort=normalized_thinking_effort,
|
|
842
868
|
yolo=yolo,
|
|
869
|
+
no_yolo=no_yolo,
|
|
843
870
|
auto=auto,
|
|
844
871
|
runtime_auto=ui == "print",
|
|
845
872
|
plan_mode=plan,
|
|
@@ -328,6 +328,39 @@ class TUIConfig(BaseModel):
|
|
|
328
328
|
default=True,
|
|
329
329
|
description="Show a compact recap line after completed interactive shell turns.",
|
|
330
330
|
)
|
|
331
|
+
code_theme: str = Field(
|
|
332
|
+
default="pythinker-ansi",
|
|
333
|
+
description=(
|
|
334
|
+
"Syntax-highlighting theme for assistant code blocks. Default "
|
|
335
|
+
"'pythinker-ansi' keeps the terminal-adaptive, transparent look. "
|
|
336
|
+
"Set to any Pygments style name (e.g. 'monokai', 'material', "
|
|
337
|
+
"'dracula', 'one-dark') to render code fences with that style on a "
|
|
338
|
+
"solid dark background block."
|
|
339
|
+
),
|
|
340
|
+
)
|
|
341
|
+
smooth_streaming: bool = Field(
|
|
342
|
+
default=True,
|
|
343
|
+
description=(
|
|
344
|
+
"Pace streamed assistant text so it reveals smoothly instead of "
|
|
345
|
+
"landing in bursty delta-sized clumps. Keeps up with the model "
|
|
346
|
+
"(bounded catch-up). Set false to reveal each delta immediately."
|
|
347
|
+
),
|
|
348
|
+
)
|
|
349
|
+
|
|
350
|
+
@field_validator("code_theme")
|
|
351
|
+
@classmethod
|
|
352
|
+
def _validate_code_theme(cls, value: str) -> str:
|
|
353
|
+
from pythinker_code.utils.rich.syntax import available_code_themes
|
|
354
|
+
|
|
355
|
+
allowed = available_code_themes()
|
|
356
|
+
if value in allowed:
|
|
357
|
+
return value
|
|
358
|
+
if value.lower() in allowed:
|
|
359
|
+
return value.lower()
|
|
360
|
+
raise ValueError(
|
|
361
|
+
f"Unknown code_theme {value!r}. Choose 'pythinker-ansi' or a Pygments "
|
|
362
|
+
f"style name. Available: {', '.join(allowed)}"
|
|
363
|
+
)
|
|
331
364
|
|
|
332
365
|
|
|
333
366
|
class MCPConfig(BaseModel):
|
|
@@ -374,11 +407,17 @@ class Config(BaseModel):
|
|
|
374
407
|
description=(
|
|
375
408
|
"Controls AskUserQuestion behavior: always ask, ask except in auto mode, "
|
|
376
409
|
"never pause (best judgment), or auto_deliberate (in auto mode, run an "
|
|
377
|
-
"advisor-assisted self-decision instead of dismissing
|
|
378
|
-
"destructive actions once for deliberation)."
|
|
410
|
+
"advisor-assisted self-decision instead of dismissing)."
|
|
379
411
|
),
|
|
380
412
|
)
|
|
381
413
|
)
|
|
414
|
+
auto_deliberate_destructive_actions: bool = Field(
|
|
415
|
+
default=False,
|
|
416
|
+
description=(
|
|
417
|
+
"When true, destructive auto-approved actions are bounced once for agent "
|
|
418
|
+
"deliberation before running. This is independent of AskUserQuestion policy."
|
|
419
|
+
),
|
|
420
|
+
)
|
|
382
421
|
skip_auto_prompt_injection: bool = Field(
|
|
383
422
|
default=False,
|
|
384
423
|
description=(
|
|
@@ -458,6 +497,15 @@ class Config(BaseModel):
|
|
|
458
497
|
"Enable anonymous telemetry to help improve pythinker-code. Set to false to opt out."
|
|
459
498
|
),
|
|
460
499
|
)
|
|
500
|
+
session_retention_days: int = Field(
|
|
501
|
+
default=30,
|
|
502
|
+
ge=0,
|
|
503
|
+
description=(
|
|
504
|
+
"Archived session directories in ~/.pythinker/sessions/ older than this many days "
|
|
505
|
+
"are removed on startup. Plan files older than this many days are also pruned. "
|
|
506
|
+
"0 disables cleanup."
|
|
507
|
+
),
|
|
508
|
+
)
|
|
461
509
|
|
|
462
510
|
@model_validator(mode="after")
|
|
463
511
|
def validate_model(self) -> Self:
|
|
@@ -481,12 +529,10 @@ class Config(BaseModel):
|
|
|
481
529
|
if "default_yolo" not in fields_set:
|
|
482
530
|
self.default_yolo = True
|
|
483
531
|
if "ask_user_question_policy" not in fields_set:
|
|
484
|
-
#
|
|
485
|
-
# that is only safe once the profile also enables auto mode (so
|
|
486
|
-
# AskUserQuestion's Entry A self-decision engages and never blocks a
|
|
487
|
-
# headless run waiting for an absent user). Until that auto-from-
|
|
488
|
-
# profile path exists, keep the robust "never" (always dismiss).
|
|
532
|
+
# Preserve no-human AskUserQuestion behavior for headless autonomy.
|
|
489
533
|
self.ask_user_question_policy = "never"
|
|
534
|
+
if "auto_deliberate_destructive_actions" not in fields_set:
|
|
535
|
+
self.auto_deliberate_destructive_actions = True
|
|
490
536
|
elif profile == "plan_only":
|
|
491
537
|
if "default_plan_mode" not in fields_set:
|
|
492
538
|
self.default_plan_mode = True
|