pythinker-code 0.35.0__tar.gz → 0.36.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.35.0 → pythinker_code-0.36.0}/PKG-INFO +23 -23
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/README.md +22 -22
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/pyproject.toml +1 -1
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/CHANGELOG.md +8 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/agents/default/code_reviewer.yaml +2 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/agents/default/judge.yaml +1 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/agents/default/review.yaml +2 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/agents/default/security_reviewer.yaml +1 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/agents/default/system.md +22 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/auth/alibaba.py +188 -37
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/llm.py +40 -5
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/oauth.py +18 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/_baseUniq-B_sfgqJM.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/_baseUniq-RGEFphr7.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/arc-dFVv02zZ.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/arc-9K0m44ch.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-CIcgZF5w.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-C0nvy1hG.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-BmYJXAqv.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-DmYV0ieN.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-YnKp21FA.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-Dz3SYodh.js +1 -1
- pythinker_code-0.36.0/src/pythinker_code/web/static/assets/channel-B7BYgmgq.js +1 -0
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-CQnTiP79.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-BX1gBkhF.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-apvR2VoF.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-CqjtvEue.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-B74BZH6K.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-DhPpx0aL.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-BVkmq2EG.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-CyWNNc9t.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-D08cGgDe.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-V88CphNu.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-C9SfiJab.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-C-ULFL_Y.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-DfSiobbw.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-JtgNqNWl.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-iuq7D6DV.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-CjMgcyz8.js +1 -1
- pythinker_code-0.36.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-77NIBCwu.js +1 -0
- pythinker_code-0.36.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-77NIBCwu.js +1 -0
- pythinker_code-0.36.0/src/pythinker_code/web/static/assets/clone-DyMU09Zo.js +1 -0
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-i2PAaa1c.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DuDOLcG7.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-BSTkJSW6.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-CzvOsRUc.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/cytoscape.esm-CLxuMbJE.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/cytoscape.esm-DeuJvyQ8.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-D0ObwdaZ.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-B0x5PJqt.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-o6f23QZ-.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CiZD-Kr6.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-BEu-Xy1X.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-C5aGMgVW.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-OT_llpCZ.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-CK1tBLlx.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-CxfB8gMW.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-CZcEYunb.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-siBmGcqK.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-BTwLgJ1W.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-BSh7JKYl.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-CG-h-rFD.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-ZoEZoveZ.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-Dboe-8V6.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/graph-SCgu3H27.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/graph-tZ08HzZK.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/index-djWYEeWa.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/index-7bl4QiO-.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/index-CmjiyXmN.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/index-D-5_8ubL.js +2 -2
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/index-DCpeE67T.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/index-nZn6VWSI.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-C10bRgiz.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-DPDBxfuh.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-B-N1AcXv.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-DvsTXFGC.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-B-Ipy8Ht.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-D5-VFkqZ.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/layout-DFldfSdi.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/layout-BEBRMmSj.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/linear-DrW8yFhe.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/linear-BvgwzI0z.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-CjBi5M3a.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-Da46mOn1.js +7 -7
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/mermaid.core-yPQjNNeZ.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/mermaid.core-Qo_GUYb1.js +5 -5
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/min-Drj8Up5U.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/min-BZ6414pQ.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-BHTeAlyQ.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-oDcN0Um4.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-BDOSWW7m.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-COleeNW3.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-COcgUb-I.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-Z_hPRdQB.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-BEr77buj.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-B1Wue_A0.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-BBTyvcFE.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-Cf_-8OQi.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-CkjkIIyC.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-DCdMybhM.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-DWw44z2d.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-CDtEvTSy.js +1 -1
- pythinker_code-0.36.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-DTR50mz5.js +1 -0
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-_gAsz3PV.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-L4SN0Qzd.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-DKdCSQqJ.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-CRV86YVy.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-Ba7lWqD4.js → pythinker_code-0.36.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-B7g7WH25.js +1 -1
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/index.html +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/channel-CPPYYlzu.js +0 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-SWYv9j-w.js +0 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-SWYv9j-w.js +0 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/clone-B9c3yV2l.js +0 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-BSwidB9Y.js +0 -1
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/LICENSE +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/NOTICE +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/__main__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/acp/AGENTS.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/acp/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/acp/convert.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/acp/host.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/acp/mcp.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/acp/server.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/acp/session.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/acp/tools.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/acp/types.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/acp/version.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/agentspec.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/app.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/approval_runtime/models.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/auth/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/auth/browser_login_page.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/auth/deepseek.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/auth/github_feedback.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/auth/lm_studio.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/auth/minimax.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/auth/moonshot.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/auth/oauth.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/auth/ollama.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/auth/openai.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/auth/opencode_go.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/auth/openrouter.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/auth/platforms.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/auth/z_ai.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/background/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/background/agent_runner.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/background/ids.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/background/manager.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/background/models.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/background/store.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/background/summary.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/background/worker.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/cli/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/cli/__main__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/cli/debug.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/cli/export.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/cli/info.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/cli/mcp.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/cli/plugin.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/cli/review.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/cli/secscan.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/cli/security_scan.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/cli/skill.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/cli/toad.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/cli/update.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/cli/vis.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/cli/web.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/config.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/constant.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/events.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/exception.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/execution_profiles.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/extensions.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/feedback.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/feedback_repo.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/file_restore.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/hooks/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/hooks/config.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/hooks/engine.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/hooks/events.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/hooks/runner.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/memory/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/memory/consolidation.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/memory/harvest.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/memory/recall.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/memory/recap.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/memory/retriever.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/memory/sanitize.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/metadata.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/native.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/notifications/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/notifications/llm.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/notifications/manager.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/notifications/models.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/notifications/notifier.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/notifications/store.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/notifications/wire.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/plugin/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/plugin/manager.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/plugin/tool.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/project_memory.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/prompt_templates.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/prompts/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/prompts/compact.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/prompts/init.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/py.typed +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/scratchpad.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/session.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/session_cleanup.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/session_fork.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/session_recap.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/session_state.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/share.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/skill/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/skill/flow/d2.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/skill/lockfile.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/soul/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/soul/agent.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/soul/approval.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/soul/btw.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/soul/compaction.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/soul/context.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/soul/deliberation.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/soul/denwarenji.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/soul/message.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/soul/permission.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/soul/pythinkersoul.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/soul/slash.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/soul/toolset.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/subagents/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/subagents/builder.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/subagents/core.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/subagents/discovery.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/subagents/git_context.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/subagents/models.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/subagents/output.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/subagents/registry.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/subagents/runner.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/subagents/store.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/telemetry/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/telemetry/config.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/telemetry/crash.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/telemetry/errors.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/telemetry/metrics.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/telemetry/otel.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/telemetry/sentry.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/telemetry/sink.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/thinking.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/AGENTS.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/agent/description.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/background/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/background/handoff.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/background/input.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/background/list.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/background/output.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/background/stop.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/display.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/file/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/file/glob.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/file/glob.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/file/grep.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/file/read.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/file/read.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/file/read_media.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/file/read_media.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/file/replace.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/file/replace.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/file/utils.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/file/write.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/file/write.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/memory/memory.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/plan/description.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/plan/enter.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/shell/bash.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/skill/description.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/test.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/think/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/think/think.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/utils.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/web/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/web/fetch.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/web/fetch.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/web/search.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/tools/web/search.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/print/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/print/visualize.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/components/markdown.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/components/report.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/console.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/debug.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/echo.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/glyphs.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/motion.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/prompt.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/replay.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/selector.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/setup.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/slash.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/startup.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/stats.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/stats_collector.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/stats_pricing.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/tips.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/tool_renderers/skill.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/update.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/update_orchestrator.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/usage.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/terminal_capabilities.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/theme.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/ui/tui_config.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/aiohttp.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/aioqueue.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/broadcast.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/changelog.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/clipboard.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/datetime.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/diff.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/editor.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/environment.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/envvar.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/export.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/file_filter.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/frontmatter.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/gitignore.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/io.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/logging.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/media_tags.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/message.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/path.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/proctitle.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/proxy.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/rich/columns.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/sensitive.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/server.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/signals.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/slashcmd.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/string.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/term.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/utils/typing.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/vis/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/vis/api/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/vis/api/sessions.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/vis/api/statistics.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/vis/api/system.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/vis/app.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/vis/static/index.html +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/api/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/api/config.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/api/open_in.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/api/sessions.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/app.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/auth.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/models.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/runner/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/runner/messages.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/runner/process.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/runner/worker.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/_headers +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-YVZJy7__.css +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/install.ps1 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/install.sh +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/static/logo.png +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/store/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/web/store/sessions.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/wire/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/wire/file.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/wire/protocol.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/wire/root_hub.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/wire/serde.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/wire/server.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.36.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.36.0
|
|
4
4
|
Summary: Pythinker — an agentic CLI developed by Pythoughts-labs.
|
|
5
5
|
Keywords: cli,agent,ai,coding-assistant,llm,claude,openai,terminal
|
|
6
6
|
Author: Pythoughts-labs
|
|
@@ -115,13 +115,13 @@ 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.36.0
|
|
119
119
|
|
|
120
|
-
-
|
|
121
|
-
- **
|
|
122
|
-
- **
|
|
120
|
+
- **Alibaba DashScope multi-region fallback.** China-region keys now auto-detect the endpoint mismatch and reconfigure correctly instead of showing a misleading "API key is wrong" error.
|
|
121
|
+
- **Alibaba Token Plan compatibility (`sk-ws-`).** `/login alibaba` now asks for the dedicated workspace endpoint, avoids unroutable Kimi entries on those endpoints, and uses DeepSeek V3.2's working non-streaming mode.
|
|
122
|
+
- **Alibaba model catalog refresh.** Qwen3.7 Plus, Qwen3 Coder Plus, and Qwen3 Coder Flash added; deprecated `kimi-k2.5`, `glm-5`, and `MiniMax-M2.5` removed.
|
|
123
123
|
|
|
124
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
124
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.36.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
125
125
|
|
|
126
126
|
|
|
127
127
|
---
|
|
@@ -211,7 +211,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
|
|
|
211
211
|
|
|
212
212
|
| Platform | Recommended install | Artifact source |
|
|
213
213
|
|---|---|---|
|
|
214
|
-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.
|
|
214
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.36.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
215
215
|
| **<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) |
|
|
216
216
|
| **<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 |
|
|
217
217
|
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
|
|
@@ -239,7 +239,7 @@ pythinker # start the interactive TUI
|
|
|
239
239
|
|
|
240
240
|
### 🪟 Windows — native installer
|
|
241
241
|
|
|
242
|
-
`PythinkerSetup-0.
|
|
242
|
+
`PythinkerSetup-0.36.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
243
243
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
244
244
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
245
245
|
the change. **No UAC prompt.**
|
|
@@ -250,13 +250,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
250
250
|
|
|
251
251
|
# Or manually download the installer + checksum from the Releases page,
|
|
252
252
|
# verify with Get-FileHash, then run:
|
|
253
|
-
.\PythinkerSetup-0.
|
|
253
|
+
.\PythinkerSetup-0.36.0.exe
|
|
254
254
|
|
|
255
255
|
# Open a fresh PowerShell
|
|
256
256
|
pythinker --version
|
|
257
257
|
```
|
|
258
258
|
|
|
259
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
259
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.36.0.exe /ALLUSERS`
|
|
260
260
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
261
261
|
|
|
262
262
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -307,26 +307,26 @@ attached to every GitHub Release.
|
|
|
307
307
|
|
|
308
308
|
```sh
|
|
309
309
|
# Debian / Ubuntu (x86_64)
|
|
310
|
-
sudo dpkg -i pythinker-code_0.
|
|
310
|
+
sudo dpkg -i pythinker-code_0.36.0_amd64.deb
|
|
311
311
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
312
312
|
|
|
313
313
|
# Debian / Ubuntu (ARM64)
|
|
314
|
-
sudo dpkg -i pythinker-code_0.
|
|
314
|
+
sudo dpkg -i pythinker-code_0.36.0_arm64.deb
|
|
315
315
|
|
|
316
316
|
# Fedora / RHEL / openSUSE (x86_64)
|
|
317
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
318
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
319
|
-
sha256sum -c pythinker-code-0.
|
|
317
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.36.0/pythinker-code-0.36.0.x86_64.rpm
|
|
318
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.36.0/pythinker-code-0.36.0.x86_64.rpm.sha256
|
|
319
|
+
sha256sum -c pythinker-code-0.36.0.x86_64.rpm.sha256
|
|
320
320
|
# Fedora / RHEL:
|
|
321
|
-
sudo dnf install ./pythinker-code-0.
|
|
321
|
+
sudo dnf install ./pythinker-code-0.36.0.x86_64.rpm
|
|
322
322
|
# openSUSE:
|
|
323
|
-
sudo zypper install ./pythinker-code-0.
|
|
323
|
+
sudo zypper install ./pythinker-code-0.36.0.x86_64.rpm
|
|
324
324
|
|
|
325
325
|
# Fedora / RHEL (aarch64)
|
|
326
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
327
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
328
|
-
sha256sum -c pythinker-code-0.
|
|
329
|
-
sudo dnf install ./pythinker-code-0.
|
|
326
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.36.0/pythinker-code-0.36.0.aarch64.rpm
|
|
327
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.36.0/pythinker-code-0.36.0.aarch64.rpm.sha256
|
|
328
|
+
sha256sum -c pythinker-code-0.36.0.aarch64.rpm.sha256
|
|
329
|
+
sudo dnf install ./pythinker-code-0.36.0.aarch64.rpm
|
|
330
330
|
```
|
|
331
331
|
|
|
332
332
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -335,8 +335,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
335
335
|
**Verify before install:**
|
|
336
336
|
|
|
337
337
|
```sh
|
|
338
|
-
sha256sum -c pythinker-code_0.
|
|
339
|
-
sha256sum -c pythinker-code-0.
|
|
338
|
+
sha256sum -c pythinker-code_0.36.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
339
|
+
sha256sum -c pythinker-code-0.36.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
340
340
|
```
|
|
341
341
|
|
|
342
342
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -50,13 +50,13 @@ 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.36.0
|
|
54
54
|
|
|
55
|
-
-
|
|
56
|
-
- **
|
|
57
|
-
- **
|
|
55
|
+
- **Alibaba DashScope multi-region fallback.** China-region keys now auto-detect the endpoint mismatch and reconfigure correctly instead of showing a misleading "API key is wrong" error.
|
|
56
|
+
- **Alibaba Token Plan compatibility (`sk-ws-`).** `/login alibaba` now asks for the dedicated workspace endpoint, avoids unroutable Kimi entries on those endpoints, and uses DeepSeek V3.2's working non-streaming mode.
|
|
57
|
+
- **Alibaba model catalog refresh.** Qwen3.7 Plus, Qwen3 Coder Plus, and Qwen3 Coder Flash added; deprecated `kimi-k2.5`, `glm-5`, and `MiniMax-M2.5` removed.
|
|
58
58
|
|
|
59
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
59
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.36.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
---
|
|
@@ -146,7 +146,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
|
|
|
146
146
|
|
|
147
147
|
| Platform | Recommended install | Artifact source |
|
|
148
148
|
|---|---|---|
|
|
149
|
-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.
|
|
149
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.36.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
150
150
|
| **<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) |
|
|
151
151
|
| **<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 |
|
|
152
152
|
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
|
|
@@ -174,7 +174,7 @@ pythinker # start the interactive TUI
|
|
|
174
174
|
|
|
175
175
|
### 🪟 Windows — native installer
|
|
176
176
|
|
|
177
|
-
`PythinkerSetup-0.
|
|
177
|
+
`PythinkerSetup-0.36.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
178
178
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
179
179
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
180
180
|
the change. **No UAC prompt.**
|
|
@@ -185,13 +185,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
185
185
|
|
|
186
186
|
# Or manually download the installer + checksum from the Releases page,
|
|
187
187
|
# verify with Get-FileHash, then run:
|
|
188
|
-
.\PythinkerSetup-0.
|
|
188
|
+
.\PythinkerSetup-0.36.0.exe
|
|
189
189
|
|
|
190
190
|
# Open a fresh PowerShell
|
|
191
191
|
pythinker --version
|
|
192
192
|
```
|
|
193
193
|
|
|
194
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
194
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.36.0.exe /ALLUSERS`
|
|
195
195
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
196
196
|
|
|
197
197
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -242,26 +242,26 @@ attached to every GitHub Release.
|
|
|
242
242
|
|
|
243
243
|
```sh
|
|
244
244
|
# Debian / Ubuntu (x86_64)
|
|
245
|
-
sudo dpkg -i pythinker-code_0.
|
|
245
|
+
sudo dpkg -i pythinker-code_0.36.0_amd64.deb
|
|
246
246
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
247
247
|
|
|
248
248
|
# Debian / Ubuntu (ARM64)
|
|
249
|
-
sudo dpkg -i pythinker-code_0.
|
|
249
|
+
sudo dpkg -i pythinker-code_0.36.0_arm64.deb
|
|
250
250
|
|
|
251
251
|
# Fedora / RHEL / openSUSE (x86_64)
|
|
252
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
253
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
254
|
-
sha256sum -c pythinker-code-0.
|
|
252
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.36.0/pythinker-code-0.36.0.x86_64.rpm
|
|
253
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.36.0/pythinker-code-0.36.0.x86_64.rpm.sha256
|
|
254
|
+
sha256sum -c pythinker-code-0.36.0.x86_64.rpm.sha256
|
|
255
255
|
# Fedora / RHEL:
|
|
256
|
-
sudo dnf install ./pythinker-code-0.
|
|
256
|
+
sudo dnf install ./pythinker-code-0.36.0.x86_64.rpm
|
|
257
257
|
# openSUSE:
|
|
258
|
-
sudo zypper install ./pythinker-code-0.
|
|
258
|
+
sudo zypper install ./pythinker-code-0.36.0.x86_64.rpm
|
|
259
259
|
|
|
260
260
|
# Fedora / RHEL (aarch64)
|
|
261
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
262
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
263
|
-
sha256sum -c pythinker-code-0.
|
|
264
|
-
sudo dnf install ./pythinker-code-0.
|
|
261
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.36.0/pythinker-code-0.36.0.aarch64.rpm
|
|
262
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.36.0/pythinker-code-0.36.0.aarch64.rpm.sha256
|
|
263
|
+
sha256sum -c pythinker-code-0.36.0.aarch64.rpm.sha256
|
|
264
|
+
sudo dnf install ./pythinker-code-0.36.0.aarch64.rpm
|
|
265
265
|
```
|
|
266
266
|
|
|
267
267
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -270,8 +270,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
270
270
|
**Verify before install:**
|
|
271
271
|
|
|
272
272
|
```sh
|
|
273
|
-
sha256sum -c pythinker-code_0.
|
|
274
|
-
sha256sum -c pythinker-code-0.
|
|
273
|
+
sha256sum -c pythinker-code_0.36.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
274
|
+
sha256sum -c pythinker-code-0.36.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
275
275
|
```
|
|
276
276
|
|
|
277
277
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -15,6 +15,14 @@ GitHub Releases page; `0.8.0` is the new starting line.
|
|
|
15
15
|
|
|
16
16
|
## Unreleased
|
|
17
17
|
|
|
18
|
+
## 0.36.0 (2026-06-05)
|
|
19
|
+
|
|
20
|
+
- **Alibaba DashScope multi-region fallback.** Logging in with a China-region key (`dashscope.aliyuncs.com`) against the default US Virginia endpoint now auto-detects the mismatch and reconfigures for the correct endpoint rather than failing with a misleading "API key is wrong" error.
|
|
21
|
+
- **Alibaba Token Plan compatibility (`sk-ws-`).** `/login alibaba` now requires the dedicated workspace Base URL shown in the Token Plan console instead of accepting a public `/models` response as credential validation. Dedicated workspace endpoints hide Kimi K2.6 when Alibaba advertises it without a working route, and use non-streaming Chat Completions for DeepSeek V3.2 because those endpoints return an empty SSE stream. Kimi requests on other Alibaba routes use DashScope's `enable_thinking` parameter.
|
|
22
|
+
- **Alibaba model catalog refresh.** Added Qwen3.7 Plus (1M context), Qwen3 Coder Plus, and Qwen3 Coder Flash. Removed `kimi-k2.5`, `glm-5`, and `MiniMax-M2.5` (absent from the live endpoint). Corrected Qwen3.7 Max context window to 1M tokens.
|
|
23
|
+
|
|
24
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.36.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
25
|
+
|
|
18
26
|
## 0.35.0 (2026-06-04)
|
|
19
27
|
|
|
20
28
|
- **Alibaba DashScope provider and MiniMax M3 catalog.** `/login alibaba` now configures Alibaba Cloud Model Studio / DashScope Token Plan models, including workspace-compatible endpoints and native GLM thinking behavior. MiniMax API-key login now defaults to MiniMax M3 with its larger context and multimodal capabilities.
|
{pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/agents/default/code_reviewer.yaml
RENAMED
|
@@ -26,6 +26,8 @@ agent:
|
|
|
26
26
|
- 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.
|
|
27
27
|
- Flag only issues introduced or made reachable by the diff.
|
|
28
28
|
- Prefer no finding over vague speculation. Every finding must cite concrete evidence and a failure mode.
|
|
29
|
+
- Run the production guardrail gate before finalizing: check for cache stampedes, connection/resource leaks, missing boundary schemas, unhandled race conditions, naive retry loops, unbounded event callbacks/listeners, and IDOR/tenant-scope mistakes.
|
|
30
|
+
- Treat missing `finally` cleanup, absent schema validation at trust boundaries, unprotected shared-state mutation, non-jittered immediate retries, or identity from mutable client parameters as reject-level findings when reachable in the changed code.
|
|
29
31
|
|
|
30
32
|
Freshness check (run BEFORE flagging third-party library or framework misuse):
|
|
31
33
|
- For every third-party API, SDK call, framework primitive, or "best practice" the diff turns on, verify the current canonical usage. Prefer a context7 MCP query (e.g. `mcp__context7__query-docs` with the library id) when registered with the parent runtime; otherwise use `SearchWeb` to locate the official documentation and `FetchURL` to read the current page.
|
{pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/agents/default/judge.yaml
RENAMED
|
@@ -14,6 +14,7 @@ agent:
|
|
|
14
14
|
- Fidelity: the draft summary matches the actual diff and changes, with no overclaiming.
|
|
15
15
|
- Verification: the checks the parent ran are relevant to the change and actually ran, not assumed.
|
|
16
16
|
- Safety and scope: no unsafe or destructive action, no secret or PII exposure, no scope creep beyond the request.
|
|
17
|
+
- Production guardrails: changed code that touches caches, resources, trust boundaries, shared state, outbound requests, long-lived listeners, or authorization context has explicit defenses for stampedes, cleanup, schemas, races, retry storms, leaks, and IDOR risks.
|
|
17
18
|
- Findings quality: for reports, each finding is actionable, correctly severity-ranked, and anchored to evidence.
|
|
18
19
|
Do not rubber-stamp, and do not pad: prefer a few concrete blockers over broad style notes.
|
|
19
20
|
|
{pythinker_code-0.35.0 → pythinker_code-0.36.0}/src/pythinker_code/agents/default/review.yaml
RENAMED
|
@@ -16,6 +16,8 @@ agent:
|
|
|
16
16
|
- If `.pythinker/review-guidelines.md` exists, read it before scoring findings.
|
|
17
17
|
- Read the diff or target files before scoring.
|
|
18
18
|
- Use Grep/Glob to check sibling call sites, similar patterns, and existing tests.
|
|
19
|
+
- Apply the production guardrail gate: look specifically for cache stampedes, connection/resource leaks, missing boundary schemas, unhandled race conditions, naive retry loops, unbounded event callbacks/listeners, and IDOR/tenant-scope mistakes.
|
|
20
|
+
- Reject happy-path code as BLOCKER or MAJOR when the changed path mutates shared state, crosses a trust boundary, acquires resources, retries outbound calls, or registers long-lived callbacks without the matching defensive pattern.
|
|
19
21
|
- Score each finding as BLOCKER, MAJOR, MINOR, or NIT.
|
|
20
22
|
- Order findings by severity, BLOCKER first.
|
|
21
23
|
- Do not request tests unless they cover a distinct behavior or risk introduced by the change.
|
|
@@ -9,6 +9,7 @@ agent:
|
|
|
9
9
|
|
|
10
10
|
Security review discipline:
|
|
11
11
|
- Build a threat context before judging: changed trust boundaries, inputs/outputs, authz/authn, filesystem/network access, secrets, serialization, command execution, and persistence.
|
|
12
|
+
- Apply the production guardrail gate to security-relevant changes: reject missing boundary schemas, IDOR/tenant-scope mistakes, unprotected shared-state mutations, unsafe retries for non-idempotent outbound calls, and resource leaks that can become denial-of-service vectors.
|
|
12
13
|
- Report only reachable or plausibly reachable vulnerabilities backed by evidence. Prefer no finding over speculative risk.
|
|
13
14
|
- For each finding, include exploit preconditions, impact, severity rationale, and the smallest safe mitigation.
|
|
14
15
|
- Treat secrets/PII carefully: never print raw secret values; redact if needed.
|
|
@@ -186,6 +186,28 @@ Code quality defaults (unless project or domain rules override):
|
|
|
186
186
|
- Wrap error-prone I/O, API, network, and resource operations with appropriate error handling, timeouts/fallbacks, and cleanup.
|
|
187
187
|
- Adapt to domain standards when relevant (for example stricter MISRA-style practices for critical C/C++ systems).
|
|
188
188
|
|
|
189
|
+
## Production Bug Guardrails
|
|
190
|
+
|
|
191
|
+
When generating, changing, reviewing, or approving production-facing code, optimize for failure modes first: concurrency, resource cleanup, input boundaries, authorization context, data integrity, and retry behavior. Never assume single-threaded, trusted, or low-traffic execution when the code can run in a shared service.
|
|
192
|
+
|
|
193
|
+
Mandatory defensive patterns:
|
|
194
|
+
|
|
195
|
+
1. **Cache misses:** If adding cache-aside behavior, serialize identical misses with a local or distributed double-checked lock so concurrent misses do not stampede the backing store.
|
|
196
|
+
2. **Resource acquisition:** For database clients, transactions, streams, sockets, files, and connection pools, acquire immediately before a `try` block and guarantee release/close in `finally`. Transactions that fail must explicitly roll back before release.
|
|
197
|
+
3. **API and webhook boundaries:** Validate runtime inputs at the boundary with the project's schema/validation mechanism, strip or ignore unregistered fields, bound payload sizes/types where relevant, and never pass raw request bodies directly into persistence or business logic.
|
|
198
|
+
4. **State mutations and counters:** For increments, decrements, toggles, balances, inventory, likes, and unique relationships, use atomic conflict handling plus row-level serialization (`FOR UPDATE`) or optimistic version checks inside transactions.
|
|
199
|
+
5. **Outbound requests:** Use short explicit timeouts, exponential backoff with random jitter, and avoid retry storms. Non-idempotent outbound mutations need an idempotency key/header or an explicit reason they cannot safely be retried.
|
|
200
|
+
6. **Long-lived listeners:** Every subscription, event listener, websocket, interval, timer, and background callback needs symmetric cleanup (`unsubscribe`, `off`, `close`, `clearInterval`, or equivalent). Clean up empty maps/registries to avoid leaks.
|
|
201
|
+
7. **Authorization context:** Use verified cryptographic/session identity (`req.user`, validated token claims, server-side session) for user/account/tenant scope. Never trust mutable query/body/path parameters as the authority for identity when verified context exists.
|
|
202
|
+
|
|
203
|
+
Self-correction pre-flight before calling code done:
|
|
204
|
+
|
|
205
|
+
- **Concurrency:** If 1,000 requests hit this path simultaneously, what shared resource races or stampedes?
|
|
206
|
+
- **Resources:** If an exception is raised after acquisition, is every socket/connection/stream/listener guaranteed to close?
|
|
207
|
+
- **Security:** Is identity or tenant scope derived only from verified auth context, not mutable client parameters?
|
|
208
|
+
- **Data integrity:** What happens with oversized strings, wrong types, duplicate submits, or malicious payload shape?
|
|
209
|
+
- **Resilience:** If a dependency is slow or failing, do timeouts/retries prevent cascading load rather than amplify it?
|
|
210
|
+
|
|
189
211
|
DO NOT run `git commit`, `git push`, `git reset`, `git rebase` and/or do any other git mutations unless explicitly asked to do so. Ask for confirmation each time when you need to do git mutations, even if the user has confirmed in earlier conversations.
|
|
190
212
|
|
|
191
213
|
# General Guidelines for Research and Data Processing
|
|
@@ -4,6 +4,7 @@ import os
|
|
|
4
4
|
from collections.abc import AsyncIterator
|
|
5
5
|
from dataclasses import dataclass
|
|
6
6
|
from typing import Any, cast
|
|
7
|
+
from urllib.parse import urlparse
|
|
7
8
|
|
|
8
9
|
import aiohttp
|
|
9
10
|
from pydantic import SecretStr
|
|
@@ -17,6 +18,8 @@ from pythinker_code.thinking import apply_login_thinking_defaults
|
|
|
17
18
|
from pythinker_code.utils.aiohttp import new_client_session
|
|
18
19
|
|
|
19
20
|
ALIBABA_BASE_URL = "https://dashscope-us.aliyuncs.com/compatible-mode/v1"
|
|
21
|
+
ALIBABA_CHINA_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"
|
|
22
|
+
ALIBABA_CODING_PLAN_BASE_URL = "https://coding-intl.dashscope.aliyuncs.com/v1"
|
|
20
23
|
ALIBABA_PROVIDER_KEY = managed_provider_key(ALIBABA_PLATFORM_ID)
|
|
21
24
|
ALIBABA_DEFAULT_MODEL_ALIAS = f"{ALIBABA_PLATFORM_ID}/qwen3.6-plus"
|
|
22
25
|
ALIBABA_MODEL_DISCOVERY_TIMEOUT = aiohttp.ClientTimeout(total=15, sock_connect=8, sock_read=10)
|
|
@@ -41,8 +44,15 @@ ALIBABA_MODELS: tuple[AlibabaModel, ...] = (
|
|
|
41
44
|
model_id="qwen3.7-max",
|
|
42
45
|
alias_suffix="qwen3.7-max",
|
|
43
46
|
display_name="Qwen3.7 Max",
|
|
44
|
-
max_context_size=
|
|
45
|
-
capabilities=frozenset[ModelCapability]({"thinking"}),
|
|
47
|
+
max_context_size=1_000_000,
|
|
48
|
+
capabilities=frozenset[ModelCapability]({"thinking", "image_in"}),
|
|
49
|
+
),
|
|
50
|
+
AlibabaModel(
|
|
51
|
+
model_id="qwen3.7-plus",
|
|
52
|
+
alias_suffix="qwen3.7-plus",
|
|
53
|
+
display_name="Qwen3.7 Plus",
|
|
54
|
+
max_context_size=1_000_000,
|
|
55
|
+
capabilities=frozenset[ModelCapability]({"thinking", "image_in"}),
|
|
46
56
|
),
|
|
47
57
|
AlibabaModel(
|
|
48
58
|
model_id="qwen3.6-plus",
|
|
@@ -58,6 +68,20 @@ ALIBABA_MODELS: tuple[AlibabaModel, ...] = (
|
|
|
58
68
|
max_context_size=1_000_000,
|
|
59
69
|
capabilities=frozenset[ModelCapability]({"thinking", "image_in"}),
|
|
60
70
|
),
|
|
71
|
+
AlibabaModel(
|
|
72
|
+
model_id="qwen3-coder-plus",
|
|
73
|
+
alias_suffix="qwen3-coder-plus",
|
|
74
|
+
display_name="Qwen3 Coder Plus",
|
|
75
|
+
max_context_size=1_000_000,
|
|
76
|
+
capabilities=frozenset[ModelCapability]({"thinking"}),
|
|
77
|
+
),
|
|
78
|
+
AlibabaModel(
|
|
79
|
+
model_id="qwen3-coder-flash",
|
|
80
|
+
alias_suffix="qwen3-coder-flash",
|
|
81
|
+
display_name="Qwen3 Coder Flash",
|
|
82
|
+
max_context_size=1_000_000,
|
|
83
|
+
capabilities=frozenset[ModelCapability]({"thinking"}),
|
|
84
|
+
),
|
|
61
85
|
AlibabaModel(
|
|
62
86
|
model_id="deepseek-v4-pro",
|
|
63
87
|
alias_suffix="deepseek-v4-pro",
|
|
@@ -86,13 +110,6 @@ ALIBABA_MODELS: tuple[AlibabaModel, ...] = (
|
|
|
86
110
|
max_context_size=262_144,
|
|
87
111
|
capabilities=frozenset[ModelCapability]({"thinking", "image_in"}),
|
|
88
112
|
),
|
|
89
|
-
AlibabaModel(
|
|
90
|
-
model_id="kimi-k2.5",
|
|
91
|
-
alias_suffix="kimi-k2.5",
|
|
92
|
-
display_name="Kimi K2.5",
|
|
93
|
-
max_context_size=262_144,
|
|
94
|
-
capabilities=frozenset[ModelCapability]({"thinking", "image_in"}),
|
|
95
|
-
),
|
|
96
113
|
AlibabaModel(
|
|
97
114
|
model_id="glm-5.1",
|
|
98
115
|
alias_suffix="glm-5.1",
|
|
@@ -100,20 +117,6 @@ ALIBABA_MODELS: tuple[AlibabaModel, ...] = (
|
|
|
100
117
|
max_context_size=262_144,
|
|
101
118
|
capabilities=frozenset[ModelCapability]({"always_thinking"}),
|
|
102
119
|
),
|
|
103
|
-
AlibabaModel(
|
|
104
|
-
model_id="glm-5",
|
|
105
|
-
alias_suffix="glm-5",
|
|
106
|
-
display_name="GLM-5",
|
|
107
|
-
max_context_size=262_144,
|
|
108
|
-
capabilities=frozenset[ModelCapability]({"always_thinking"}),
|
|
109
|
-
),
|
|
110
|
-
AlibabaModel(
|
|
111
|
-
model_id="MiniMax-M2.5",
|
|
112
|
-
alias_suffix="minimax-m2.5",
|
|
113
|
-
display_name="MiniMax M2.5",
|
|
114
|
-
max_context_size=204_800,
|
|
115
|
-
capabilities=frozenset[ModelCapability]({"thinking"}),
|
|
116
|
-
),
|
|
117
120
|
)
|
|
118
121
|
|
|
119
122
|
|
|
@@ -125,12 +128,18 @@ def get_alibaba_api_key_from_env() -> str | None:
|
|
|
125
128
|
return None
|
|
126
129
|
|
|
127
130
|
|
|
128
|
-
def _normalize_alibaba_base_url(value: str) -> str:
|
|
131
|
+
def _normalize_alibaba_base_url(value: str, is_coding_plan: bool = False) -> str:
|
|
129
132
|
base_url = value.strip().rstrip("/")
|
|
130
133
|
if not base_url:
|
|
131
|
-
return ALIBABA_BASE_URL
|
|
134
|
+
return ALIBABA_CODING_PLAN_BASE_URL if is_coding_plan else ALIBABA_BASE_URL
|
|
132
135
|
if "://" not in base_url:
|
|
133
136
|
base_url = f"https://{base_url}"
|
|
137
|
+
|
|
138
|
+
if is_coding_plan:
|
|
139
|
+
if base_url.endswith("/v1"):
|
|
140
|
+
return base_url
|
|
141
|
+
return f"{base_url}/v1"
|
|
142
|
+
|
|
134
143
|
if base_url.endswith("/api/v1"):
|
|
135
144
|
return f"{base_url.removesuffix('/api/v1')}/compatible-mode/v1"
|
|
136
145
|
if base_url.endswith("/compatible-mode/v1"):
|
|
@@ -150,10 +159,11 @@ def _apply_alibaba_config(
|
|
|
150
159
|
config: Config,
|
|
151
160
|
api_key: SecretStr,
|
|
152
161
|
models: tuple[AlibabaModel, ...] = ALIBABA_MODELS,
|
|
162
|
+
base_url: str | None = None,
|
|
153
163
|
) -> None:
|
|
154
164
|
config.providers[ALIBABA_PROVIDER_KEY] = LLMProvider(
|
|
155
165
|
type="openai_legacy",
|
|
156
|
-
base_url=get_alibaba_base_url_from_env(),
|
|
166
|
+
base_url=base_url if base_url is not None else get_alibaba_base_url_from_env(),
|
|
157
167
|
api_key=api_key,
|
|
158
168
|
)
|
|
159
169
|
|
|
@@ -226,11 +236,16 @@ def _parse_discovered_models(data: object) -> tuple[AlibabaModel, ...]:
|
|
|
226
236
|
return tuple(results)
|
|
227
237
|
|
|
228
238
|
|
|
229
|
-
|
|
239
|
+
def _is_workspace_endpoint(base_url: str) -> bool:
|
|
240
|
+
hostname = urlparse(base_url).hostname or ""
|
|
241
|
+
return hostname.startswith("ws-") and hostname.endswith(".maas.aliyuncs.com")
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
async def _discover_alibaba_models(api_key: str, base_url: str) -> tuple[AlibabaModel, ...]:
|
|
230
245
|
async with (
|
|
231
246
|
new_client_session(timeout=ALIBABA_MODEL_DISCOVERY_TIMEOUT) as session,
|
|
232
247
|
session.get(
|
|
233
|
-
f"{
|
|
248
|
+
f"{base_url}/models",
|
|
234
249
|
headers={"Authorization": f"Bearer {api_key}"},
|
|
235
250
|
raise_for_status=True,
|
|
236
251
|
) as response,
|
|
@@ -240,7 +255,7 @@ async def _discover_alibaba_models(api_key: str) -> tuple[AlibabaModel, ...]:
|
|
|
240
255
|
|
|
241
256
|
|
|
242
257
|
async def login_alibaba_api_key(
|
|
243
|
-
config: Config, api_key: str | None = None
|
|
258
|
+
config: Config, api_key: str | None = None, base_url: str | None = None
|
|
244
259
|
) -> AsyncIterator[OAuthEvent]:
|
|
245
260
|
if not config.is_from_default_location:
|
|
246
261
|
yield OAuthEvent(
|
|
@@ -254,26 +269,162 @@ async def login_alibaba_api_key(
|
|
|
254
269
|
yield OAuthEvent("error", "Alibaba API key is required.")
|
|
255
270
|
return
|
|
256
271
|
|
|
272
|
+
is_coding_plan = resolved_key.startswith("sk-sp-")
|
|
273
|
+
is_token_plan = resolved_key.startswith("sk-ws-")
|
|
274
|
+
|
|
275
|
+
default_url = ALIBABA_CODING_PLAN_BASE_URL if is_coding_plan else ALIBABA_BASE_URL
|
|
276
|
+
china_url = (
|
|
277
|
+
"https://coding.dashscope.aliyuncs.com/v1" if is_coding_plan else ALIBABA_CHINA_BASE_URL
|
|
278
|
+
)
|
|
279
|
+
|
|
280
|
+
env_base_url = os.getenv("DASHSCOPE_BASE_URL") or os.getenv("ALIBABA_BASE_URL")
|
|
281
|
+
is_env_explicitly_set = bool(env_base_url)
|
|
282
|
+
|
|
283
|
+
if is_token_plan and not (base_url and base_url.strip()) and not is_env_explicitly_set:
|
|
284
|
+
yield OAuthEvent(
|
|
285
|
+
"error",
|
|
286
|
+
"Alibaba Token Plan workspace keys require the dedicated Base URL shown in "
|
|
287
|
+
"the Token Plan console. Enter it during /login or set DASHSCOPE_BASE_URL.",
|
|
288
|
+
)
|
|
289
|
+
return
|
|
290
|
+
|
|
291
|
+
if base_url and base_url.strip():
|
|
292
|
+
primary_url = _normalize_alibaba_base_url(base_url, is_coding_plan=is_coding_plan)
|
|
293
|
+
elif is_env_explicitly_set:
|
|
294
|
+
primary_url = _normalize_alibaba_base_url(env_base_url, is_coding_plan=is_coding_plan)
|
|
295
|
+
else:
|
|
296
|
+
primary_url = default_url
|
|
297
|
+
|
|
298
|
+
active_url = primary_url
|
|
257
299
|
models = ALIBABA_MODELS
|
|
300
|
+
|
|
258
301
|
try:
|
|
259
|
-
discovered = await _discover_alibaba_models(resolved_key)
|
|
302
|
+
discovered = await _discover_alibaba_models(resolved_key, primary_url)
|
|
260
303
|
if discovered:
|
|
261
304
|
models = discovered
|
|
262
305
|
except aiohttp.ClientResponseError as exc:
|
|
263
306
|
if exc.status in {401, 403}:
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
307
|
+
if is_token_plan:
|
|
308
|
+
yield OAuthEvent(
|
|
309
|
+
"error",
|
|
310
|
+
"Alibaba Token Plan API key was not accepted. Ensure the key is active "
|
|
311
|
+
"and assigned to a Token Plan seat. Set DASHSCOPE_BASE_URL only when "
|
|
312
|
+
"Alibaba provides a different endpoint for your plan.",
|
|
313
|
+
)
|
|
314
|
+
return
|
|
315
|
+
|
|
316
|
+
if is_coding_plan and primary_url == default_url:
|
|
317
|
+
try:
|
|
318
|
+
discovered = await _discover_alibaba_models(resolved_key, china_url)
|
|
319
|
+
active_url = china_url
|
|
320
|
+
if discovered:
|
|
321
|
+
models = discovered
|
|
322
|
+
yield OAuthEvent(
|
|
323
|
+
"info",
|
|
324
|
+
"Detected China-region Coding Plan key; configured for China endpoint.",
|
|
325
|
+
)
|
|
326
|
+
except aiohttp.ClientResponseError as china_exc:
|
|
327
|
+
if china_exc.status in {401, 403}:
|
|
328
|
+
yield OAuthEvent(
|
|
329
|
+
"error",
|
|
330
|
+
"Alibaba Coding Plan API key was not accepted. Ensure your key is "
|
|
331
|
+
"valid, active, and has the required model permissions in the "
|
|
332
|
+
"Coding Plan console.",
|
|
333
|
+
)
|
|
334
|
+
return
|
|
335
|
+
yield OAuthEvent(
|
|
336
|
+
"error",
|
|
337
|
+
"The default international endpoint rejected the key and the China "
|
|
338
|
+
"endpoint could not be reached. Check network access or set "
|
|
339
|
+
"DASHSCOPE_BASE_URL to the correct endpoint and try again.",
|
|
340
|
+
)
|
|
341
|
+
return
|
|
342
|
+
except (aiohttp.ClientError, TimeoutError, ValueError):
|
|
343
|
+
yield OAuthEvent(
|
|
344
|
+
"error",
|
|
345
|
+
"The default international endpoint rejected the key and the China "
|
|
346
|
+
"endpoint could not be reached. Check network access or set "
|
|
347
|
+
"DASHSCOPE_BASE_URL to the correct endpoint and try again.",
|
|
348
|
+
)
|
|
349
|
+
return
|
|
350
|
+
else:
|
|
351
|
+
if is_coding_plan:
|
|
352
|
+
if primary_url == china_url:
|
|
353
|
+
yield OAuthEvent(
|
|
354
|
+
"error",
|
|
355
|
+
"Alibaba Coding Plan API key was not accepted. Ensure your key is "
|
|
356
|
+
"valid, active, and has the required model permissions in the "
|
|
357
|
+
"Coding Plan console.",
|
|
358
|
+
)
|
|
359
|
+
else:
|
|
360
|
+
yield OAuthEvent(
|
|
361
|
+
"error",
|
|
362
|
+
"Alibaba Coding Plan API key was not accepted. Ensure your key is "
|
|
363
|
+
"valid, active, and has the required model permissions in the "
|
|
364
|
+
"Coding Plan console. If using the China region, set "
|
|
365
|
+
"DASHSCOPE_BASE_URL=https://coding.dashscope.aliyuncs.com/v1",
|
|
366
|
+
)
|
|
367
|
+
return
|
|
368
|
+
else:
|
|
369
|
+
if primary_url == default_url:
|
|
370
|
+
try:
|
|
371
|
+
discovered = await _discover_alibaba_models(resolved_key, china_url)
|
|
372
|
+
active_url = china_url
|
|
373
|
+
if discovered:
|
|
374
|
+
models = discovered
|
|
375
|
+
yield OAuthEvent(
|
|
376
|
+
"info",
|
|
377
|
+
"Detected China-region DashScope key; "
|
|
378
|
+
"configured for China (Beijing) endpoint.",
|
|
379
|
+
)
|
|
380
|
+
except aiohttp.ClientResponseError as china_exc:
|
|
381
|
+
if china_exc.status in {401, 403}:
|
|
382
|
+
yield OAuthEvent(
|
|
383
|
+
"error",
|
|
384
|
+
"Alibaba API key was not accepted. Ensure your key is valid "
|
|
385
|
+
"and "
|
|
386
|
+
"comes from the Alibaba Cloud Model Studio console "
|
|
387
|
+
"(https://bailian.console.aliyun.com). "
|
|
388
|
+
"Set DASHSCOPE_BASE_URL to override the endpoint if needed.",
|
|
389
|
+
)
|
|
390
|
+
return
|
|
391
|
+
yield OAuthEvent(
|
|
392
|
+
"error",
|
|
393
|
+
"The default US endpoint rejected the key and the China endpoint "
|
|
394
|
+
"could not be reached. Check network access or set "
|
|
395
|
+
"DASHSCOPE_BASE_URL to the correct endpoint and try again.",
|
|
396
|
+
)
|
|
397
|
+
return
|
|
398
|
+
except (aiohttp.ClientError, TimeoutError, ValueError):
|
|
399
|
+
yield OAuthEvent(
|
|
400
|
+
"error",
|
|
401
|
+
"The default US endpoint rejected the key and the China endpoint "
|
|
402
|
+
"could not be reached. Check network access or set "
|
|
403
|
+
"DASHSCOPE_BASE_URL to the correct endpoint and try again.",
|
|
404
|
+
)
|
|
405
|
+
return
|
|
406
|
+
else:
|
|
407
|
+
yield OAuthEvent(
|
|
408
|
+
"error",
|
|
409
|
+
"Alibaba API key was not accepted. Ensure your key is valid and "
|
|
410
|
+
"that DASHSCOPE_BASE_URL points to the correct endpoint.",
|
|
411
|
+
)
|
|
412
|
+
return
|
|
413
|
+
else:
|
|
414
|
+
yield OAuthEvent(
|
|
415
|
+
"info",
|
|
416
|
+
"Alibaba model listing is unavailable; using the built-in model list.",
|
|
417
|
+
)
|
|
270
418
|
except (aiohttp.ClientError, TimeoutError, ValueError):
|
|
271
419
|
yield OAuthEvent(
|
|
272
420
|
"info",
|
|
273
421
|
"Alibaba model listing is unavailable; using the built-in model list.",
|
|
274
422
|
)
|
|
275
423
|
|
|
276
|
-
|
|
424
|
+
if _is_workspace_endpoint(active_url):
|
|
425
|
+
models = tuple(model for model in models if model.model_id != "kimi-k2.6")
|
|
426
|
+
|
|
427
|
+
_apply_alibaba_config(config, SecretStr(resolved_key), models=models, base_url=active_url)
|
|
277
428
|
save_config(config)
|
|
278
429
|
yield OAuthEvent("success", f"Alibaba configured with model {config.default_model}.")
|
|
279
430
|
|