pythinker-code 0.35.0__tar.gz → 0.37.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.37.0}/PKG-INFO +26 -23
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/README.md +25 -22
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/pyproject.toml +1 -1
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/CHANGELOG.md +19 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/agent.yaml +6 -0
- pythinker_code-0.37.0/src/pythinker_code/agents/default/ask.yaml +62 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/code_reviewer.yaml +2 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/coder.yaml +15 -0
- pythinker_code-0.37.0/src/pythinker_code/agents/default/debug.yaml +67 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/judge.yaml +1 -0
- pythinker_code-0.37.0/src/pythinker_code/agents/default/planner.yaml +44 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/review.yaml +2 -0
- pythinker_code-0.37.0/src/pythinker_code/agents/default/scout.yaml +55 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/security_reviewer.yaml +1 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/system.md +26 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/verifier.yaml +11 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/agentspec.py +32 -1
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/alibaba.py +188 -37
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/__init__.py +11 -2
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/llm.py +40 -5
- pythinker_code-0.37.0/src/pythinker_code/prompts/compact.md +51 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/agent.py +11 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/pythinkersoul.py +4 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/toolset.py +60 -3
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/read.py +4 -3
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/web/fetch.py +4 -3
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/oauth.py +18 -1
- pythinker_code-0.37.0/src/pythinker_code/utils/artifacts.py +97 -0
- pythinker_code-0.37.0/src/pythinker_code/utils/trust.py +23 -0
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/_baseUniq-B_sfgqJM.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/_baseUniq-rFto-eyR.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/arc-dFVv02zZ.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/arc-CdMQnDXw.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-CIcgZF5w.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-DCNIO25e.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-BmYJXAqv.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-DV4drAaI.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-YnKp21FA.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-BtAg1Zl9.js +1 -1
- pythinker_code-0.37.0/src/pythinker_code/web/static/assets/channel-qpt7XUXw.js +1 -0
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-CQnTiP79.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-D2ejrCds.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-apvR2VoF.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-BmSORZMZ.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-B74BZH6K.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-D-5sSKEk.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-BVkmq2EG.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-BLDxXqS1.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-D08cGgDe.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-DqbdShlY.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-C9SfiJab.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-Byme_vwF.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-DfSiobbw.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-Bct-_CkM.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-iuq7D6DV.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-DUdXVwI0.js +1 -1
- pythinker_code-0.37.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-DpsBv1PV.js +1 -0
- pythinker_code-0.37.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-DpsBv1PV.js +1 -0
- pythinker_code-0.37.0/src/pythinker_code/web/static/assets/clone-CIyLass1.js +1 -0
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-i2PAaa1c.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-BxezgptM.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-BSTkJSW6.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-BkS_yy5Q.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/cytoscape.esm-CLxuMbJE.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/cytoscape.esm-D8tXqheh.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-D0ObwdaZ.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-BH_fVKlE.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-o6f23QZ-.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-DOYEXuA-.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-BEu-Xy1X.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-wVuqO334.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-OT_llpCZ.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-B9XL_8QF.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-CxfB8gMW.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-BPVevlAq.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-siBmGcqK.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-Ciyhvsb-.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-BSh7JKYl.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-Dh0oyhrR.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-ZoEZoveZ.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-CXHaL-YZ.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/graph-SCgu3H27.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/graph-TD3vr6xg.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/index-CmjiyXmN.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/index-BdNVBp2k.js +2 -2
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/index-DCpeE67T.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/index-CenJZaSp.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/index-djWYEeWa.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/index-SBxoponV.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-C10bRgiz.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-D5BYT4oh.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-B-N1AcXv.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-Zpn0sf9-.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-B-Ipy8Ht.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-DtxGDGjW.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/layout-DFldfSdi.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/layout-DdbLR-yH.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/linear-DrW8yFhe.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/linear-DGs0uozR.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-CjBi5M3a.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DccQM9It.js +7 -7
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/mermaid.core-yPQjNNeZ.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/mermaid.core-CrH_OUva.js +5 -5
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/min-Drj8Up5U.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/min-eQ2Kg90V.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-BHTeAlyQ.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-BWdfnhI0.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-BDOSWW7m.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-BOjN8K0d.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-COcgUb-I.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-DTXx1spJ.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-BEr77buj.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-C1fueAhg.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-BBTyvcFE.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-BSLuceH4.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-CkjkIIyC.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-xcbbjK9h.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-DWw44z2d.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-BjTr1gKn.js +1 -1
- pythinker_code-0.37.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-DNj8DWQe.js +1 -0
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-_gAsz3PV.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-CDpaG8Uu.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-DKdCSQqJ.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-CMtpwAx0.js +1 -1
- pythinker_code-0.35.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-Ba7lWqD4.js → pythinker_code-0.37.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-PseE95Fp.js +1 -1
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/index.html +1 -1
- pythinker_code-0.35.0/src/pythinker_code/prompts/compact.md +0 -73
- 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.37.0}/LICENSE +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/NOTICE +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/__main__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/AGENTS.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/convert.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/host.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/mcp.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/server.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/session.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/tools.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/types.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/acp/version.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/app.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/approval_runtime/models.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/browser_login_page.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/deepseek.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/github_feedback.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/lm_studio.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/minimax.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/moonshot.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/oauth.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/ollama.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/openai.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/opencode_go.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/openrouter.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/platforms.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/auth/z_ai.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/background/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/background/agent_runner.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/background/ids.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/background/manager.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/background/models.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/background/store.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/background/summary.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/background/worker.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/__main__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/debug.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/export.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/info.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/mcp.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/plugin.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/review.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/secscan.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/security_scan.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/skill.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/toad.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/update.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/vis.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/cli/web.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/config.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/constant.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/events.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/exception.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/execution_profiles.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/extensions.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/feedback.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/feedback_repo.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/file_restore.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/hooks/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/hooks/config.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/hooks/engine.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/hooks/events.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/hooks/runner.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/memory/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/memory/consolidation.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/memory/harvest.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/memory/recall.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/memory/recap.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/memory/retriever.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/memory/sanitize.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/metadata.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/native.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/notifications/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/notifications/llm.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/notifications/manager.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/notifications/models.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/notifications/notifier.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/notifications/store.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/notifications/wire.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/plugin/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/plugin/manager.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/plugin/tool.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/project_memory.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/prompt_templates.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/prompts/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/prompts/init.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/py.typed +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/scratchpad.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/session.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/session_cleanup.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/session_fork.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/session_recap.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/session_state.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/share.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/skill/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/skill/flow/d2.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/skill/lockfile.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/approval.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/btw.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/compaction.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/context.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/deliberation.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/denwarenji.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/message.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/permission.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/soul/slash.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/builder.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/core.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/discovery.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/git_context.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/models.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/output.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/registry.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/runner.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/subagents/store.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/telemetry/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/telemetry/config.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/telemetry/crash.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/telemetry/errors.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/telemetry/metrics.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/telemetry/otel.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/telemetry/sentry.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/telemetry/sink.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/thinking.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/AGENTS.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/agent/description.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/background/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/background/handoff.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/background/input.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/background/list.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/background/output.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/background/stop.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/display.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/glob.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/glob.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/grep.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/read.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/read_media.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/read_media.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/replace.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/replace.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/utils.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/write.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/file/write.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/memory/memory.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/plan/description.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/plan/enter.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/shell/bash.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/skill/description.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/test.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/think/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/think/think.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/utils.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/web/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/web/fetch.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/web/search.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/tools/web/search.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/print/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/print/visualize.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/markdown.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/report.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/console.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/debug.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/echo.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/glyphs.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/motion.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/prompt.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/replay.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/selector.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/setup.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/slash.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/startup.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/stats.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/stats_collector.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/stats_pricing.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tips.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/skill.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/update.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/update_orchestrator.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/terminal_capabilities.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/theme.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/ui/tui_config.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/aiohttp.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/aioqueue.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/broadcast.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/changelog.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/clipboard.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/datetime.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/diff.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/editor.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/environment.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/envvar.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/export.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/file_filter.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/frontmatter.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/gitignore.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/io.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/logging.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/media_tags.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/message.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/path.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/proctitle.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/proxy.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/rich/columns.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/sensitive.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/server.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/signals.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/slashcmd.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/string.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/term.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/utils/typing.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/api/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/api/sessions.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/api/statistics.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/api/system.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/app.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.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.37.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/vis/static/index.html +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/api/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/api/config.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/api/open_in.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/api/sessions.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/app.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/auth.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/models.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/runner/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/runner/messages.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/runner/process.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/runner/worker.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/_headers +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.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.37.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-YVZJy7__.css +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/install.ps1 +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/install.sh +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/static/logo.png +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/store/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/web/store/sessions.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/wire/__init__.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/wire/file.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/wire/protocol.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/wire/root_hub.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/wire/serde.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.0}/src/pythinker_code/wire/server.py +0 -0
- {pythinker_code-0.35.0 → pythinker_code-0.37.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.37.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,16 @@ 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.37.0
|
|
119
119
|
|
|
120
|
-
-
|
|
121
|
-
- **
|
|
122
|
-
- **
|
|
120
|
+
- **Agent runtime tool visibility hardening.** `PythinkerToolset` now gates tool advertisements by execution policy, permission profile, root/subagent role, and plan-mode state — execution-time guards remain as defense in depth.
|
|
121
|
+
- **Agent design upgrades.** New `ask` and `debug` primary agents selectable with `--agent`, a `scout` subagent for docs/API freshness research, richer spec metadata, and stable compaction summaries.
|
|
122
|
+
- **Prompt-injection defense: `UntrustedData` wrapper.** External file and web content is wrapped in signed `<untrusted_data>` tags before reaching the LLM, with breakout-prevention escaping.
|
|
123
|
+
- **Agent boundary artifacts.** Typed `CodingArtifact`/`VerificationResult` and `VulnerabilityArtifact`/`AuditVerdict` dataclasses enforce a strict information barrier between coder and verifier subagents.
|
|
124
|
+
- **Recon-first `planner` subagent.** New read-only planner decomposes tasks into parallel seed descriptions via `<recon_seeds>` JSON for structured fan-out before workers start.
|
|
125
|
+
- **`coder` artifact contract.** Structured `<coding_artifact>` handoff block at end of every coder response enables direct consumption by the `verifier` subagent.
|
|
123
126
|
|
|
124
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
127
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.37.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
125
128
|
|
|
126
129
|
|
|
127
130
|
---
|
|
@@ -211,7 +214,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
|
|
|
211
214
|
|
|
212
215
|
| Platform | Recommended install | Artifact source |
|
|
213
216
|
|---|---|---|
|
|
214
|
-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.
|
|
217
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.37.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
215
218
|
| **<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
219
|
| **<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
220
|
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
|
|
@@ -239,7 +242,7 @@ pythinker # start the interactive TUI
|
|
|
239
242
|
|
|
240
243
|
### 🪟 Windows — native installer
|
|
241
244
|
|
|
242
|
-
`PythinkerSetup-0.
|
|
245
|
+
`PythinkerSetup-0.37.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
243
246
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
244
247
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
245
248
|
the change. **No UAC prompt.**
|
|
@@ -250,13 +253,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
250
253
|
|
|
251
254
|
# Or manually download the installer + checksum from the Releases page,
|
|
252
255
|
# verify with Get-FileHash, then run:
|
|
253
|
-
.\PythinkerSetup-0.
|
|
256
|
+
.\PythinkerSetup-0.37.0.exe
|
|
254
257
|
|
|
255
258
|
# Open a fresh PowerShell
|
|
256
259
|
pythinker --version
|
|
257
260
|
```
|
|
258
261
|
|
|
259
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
262
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.37.0.exe /ALLUSERS`
|
|
260
263
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
261
264
|
|
|
262
265
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -307,26 +310,26 @@ attached to every GitHub Release.
|
|
|
307
310
|
|
|
308
311
|
```sh
|
|
309
312
|
# Debian / Ubuntu (x86_64)
|
|
310
|
-
sudo dpkg -i pythinker-code_0.
|
|
313
|
+
sudo dpkg -i pythinker-code_0.37.0_amd64.deb
|
|
311
314
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
312
315
|
|
|
313
316
|
# Debian / Ubuntu (ARM64)
|
|
314
|
-
sudo dpkg -i pythinker-code_0.
|
|
317
|
+
sudo dpkg -i pythinker-code_0.37.0_arm64.deb
|
|
315
318
|
|
|
316
319
|
# 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.
|
|
320
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.37.0/pythinker-code-0.37.0.x86_64.rpm
|
|
321
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.37.0/pythinker-code-0.37.0.x86_64.rpm.sha256
|
|
322
|
+
sha256sum -c pythinker-code-0.37.0.x86_64.rpm.sha256
|
|
320
323
|
# Fedora / RHEL:
|
|
321
|
-
sudo dnf install ./pythinker-code-0.
|
|
324
|
+
sudo dnf install ./pythinker-code-0.37.0.x86_64.rpm
|
|
322
325
|
# openSUSE:
|
|
323
|
-
sudo zypper install ./pythinker-code-0.
|
|
326
|
+
sudo zypper install ./pythinker-code-0.37.0.x86_64.rpm
|
|
324
327
|
|
|
325
328
|
# 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.
|
|
329
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.37.0/pythinker-code-0.37.0.aarch64.rpm
|
|
330
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.37.0/pythinker-code-0.37.0.aarch64.rpm.sha256
|
|
331
|
+
sha256sum -c pythinker-code-0.37.0.aarch64.rpm.sha256
|
|
332
|
+
sudo dnf install ./pythinker-code-0.37.0.aarch64.rpm
|
|
330
333
|
```
|
|
331
334
|
|
|
332
335
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -335,8 +338,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
335
338
|
**Verify before install:**
|
|
336
339
|
|
|
337
340
|
```sh
|
|
338
|
-
sha256sum -c pythinker-code_0.
|
|
339
|
-
sha256sum -c pythinker-code-0.
|
|
341
|
+
sha256sum -c pythinker-code_0.37.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
342
|
+
sha256sum -c pythinker-code-0.37.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
340
343
|
```
|
|
341
344
|
|
|
342
345
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -50,13 +50,16 @@ 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.37.0
|
|
54
54
|
|
|
55
|
-
-
|
|
56
|
-
- **
|
|
57
|
-
- **
|
|
55
|
+
- **Agent runtime tool visibility hardening.** `PythinkerToolset` now gates tool advertisements by execution policy, permission profile, root/subagent role, and plan-mode state — execution-time guards remain as defense in depth.
|
|
56
|
+
- **Agent design upgrades.** New `ask` and `debug` primary agents selectable with `--agent`, a `scout` subagent for docs/API freshness research, richer spec metadata, and stable compaction summaries.
|
|
57
|
+
- **Prompt-injection defense: `UntrustedData` wrapper.** External file and web content is wrapped in signed `<untrusted_data>` tags before reaching the LLM, with breakout-prevention escaping.
|
|
58
|
+
- **Agent boundary artifacts.** Typed `CodingArtifact`/`VerificationResult` and `VulnerabilityArtifact`/`AuditVerdict` dataclasses enforce a strict information barrier between coder and verifier subagents.
|
|
59
|
+
- **Recon-first `planner` subagent.** New read-only planner decomposes tasks into parallel seed descriptions via `<recon_seeds>` JSON for structured fan-out before workers start.
|
|
60
|
+
- **`coder` artifact contract.** Structured `<coding_artifact>` handoff block at end of every coder response enables direct consumption by the `verifier` subagent.
|
|
58
61
|
|
|
59
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
62
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.37.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
60
63
|
|
|
61
64
|
|
|
62
65
|
---
|
|
@@ -146,7 +149,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
|
|
|
146
149
|
|
|
147
150
|
| Platform | Recommended install | Artifact source |
|
|
148
151
|
|---|---|---|
|
|
149
|
-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.
|
|
152
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.37.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
150
153
|
| **<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
154
|
| **<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
155
|
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
|
|
@@ -174,7 +177,7 @@ pythinker # start the interactive TUI
|
|
|
174
177
|
|
|
175
178
|
### 🪟 Windows — native installer
|
|
176
179
|
|
|
177
|
-
`PythinkerSetup-0.
|
|
180
|
+
`PythinkerSetup-0.37.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
178
181
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
179
182
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
180
183
|
the change. **No UAC prompt.**
|
|
@@ -185,13 +188,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
185
188
|
|
|
186
189
|
# Or manually download the installer + checksum from the Releases page,
|
|
187
190
|
# verify with Get-FileHash, then run:
|
|
188
|
-
.\PythinkerSetup-0.
|
|
191
|
+
.\PythinkerSetup-0.37.0.exe
|
|
189
192
|
|
|
190
193
|
# Open a fresh PowerShell
|
|
191
194
|
pythinker --version
|
|
192
195
|
```
|
|
193
196
|
|
|
194
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
197
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.37.0.exe /ALLUSERS`
|
|
195
198
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
196
199
|
|
|
197
200
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -242,26 +245,26 @@ attached to every GitHub Release.
|
|
|
242
245
|
|
|
243
246
|
```sh
|
|
244
247
|
# Debian / Ubuntu (x86_64)
|
|
245
|
-
sudo dpkg -i pythinker-code_0.
|
|
248
|
+
sudo dpkg -i pythinker-code_0.37.0_amd64.deb
|
|
246
249
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
247
250
|
|
|
248
251
|
# Debian / Ubuntu (ARM64)
|
|
249
|
-
sudo dpkg -i pythinker-code_0.
|
|
252
|
+
sudo dpkg -i pythinker-code_0.37.0_arm64.deb
|
|
250
253
|
|
|
251
254
|
# 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.
|
|
255
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.37.0/pythinker-code-0.37.0.x86_64.rpm
|
|
256
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.37.0/pythinker-code-0.37.0.x86_64.rpm.sha256
|
|
257
|
+
sha256sum -c pythinker-code-0.37.0.x86_64.rpm.sha256
|
|
255
258
|
# Fedora / RHEL:
|
|
256
|
-
sudo dnf install ./pythinker-code-0.
|
|
259
|
+
sudo dnf install ./pythinker-code-0.37.0.x86_64.rpm
|
|
257
260
|
# openSUSE:
|
|
258
|
-
sudo zypper install ./pythinker-code-0.
|
|
261
|
+
sudo zypper install ./pythinker-code-0.37.0.x86_64.rpm
|
|
259
262
|
|
|
260
263
|
# 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.
|
|
264
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.37.0/pythinker-code-0.37.0.aarch64.rpm
|
|
265
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.37.0/pythinker-code-0.37.0.aarch64.rpm.sha256
|
|
266
|
+
sha256sum -c pythinker-code-0.37.0.aarch64.rpm.sha256
|
|
267
|
+
sudo dnf install ./pythinker-code-0.37.0.aarch64.rpm
|
|
265
268
|
```
|
|
266
269
|
|
|
267
270
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -270,8 +273,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
270
273
|
**Verify before install:**
|
|
271
274
|
|
|
272
275
|
```sh
|
|
273
|
-
sha256sum -c pythinker-code_0.
|
|
274
|
-
sha256sum -c pythinker-code-0.
|
|
276
|
+
sha256sum -c pythinker-code_0.37.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
277
|
+
sha256sum -c pythinker-code-0.37.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
275
278
|
```
|
|
276
279
|
|
|
277
280
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -15,6 +15,25 @@ GitHub Releases page; `0.8.0` is the new starting line.
|
|
|
15
15
|
|
|
16
16
|
## Unreleased
|
|
17
17
|
|
|
18
|
+
## 0.37.0 (2026-06-07)
|
|
19
|
+
|
|
20
|
+
- **Agent runtime tool visibility hardening.** `PythinkerToolset` now filters the tools advertised to the model by active execution policy, permission profile, root/subagent role, and plan-mode state while preserving execution-time guards as defense in depth.
|
|
21
|
+
- **Agent design upgrades.** Agent specs now carry mode/hidden/step/model-parameter metadata, built-in `ask` and `debug` primary agents are selectable with `--agent`, the new `scout` subagent handles external docs/API freshness research, and compaction summaries use a stable handoff-oriented structure.
|
|
22
|
+
- **Prompt-injection defense: `UntrustedData` wrapper.** All external content returned by `ReadFile` and `FetchURL` is now wrapped in `<untrusted_data id="NONCE">…</untrusted_data>` tags before being passed to the LLM, providing a clear boundary between trusted instructions and untrusted file/web content. The `UntrustedData` primitive escapes embedded closing tags to prevent breakout attacks.
|
|
23
|
+
- **Agent boundary artifacts.** New `CodingArtifact` / `VerificationResult` and `VulnerabilityArtifact` / `AuditVerdict` frozen dataclasses in `pythinker_code.utils.artifacts` enforce a typed information barrier between coder and verifier subagents.
|
|
24
|
+
- **Recon-first `planner` subagent.** A new read-only `planner` built-in agent type decomposes open-ended tasks into distinct parallel seed descriptions emitted as `<recon_seeds>` JSON, enabling structured fan-out before parallel workers start.
|
|
25
|
+
- **Coder artifact contract.** The `coder` subagent now emits a `<coding_artifact>` JSON block at the end of every response, providing structured handoff data (`files_changed`, `test_command`, `expected_behavior`, optional `edge_cases_claimed`) that the `verifier` subagent can consume directly.
|
|
26
|
+
|
|
27
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.37.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
28
|
+
|
|
29
|
+
## 0.36.0 (2026-06-05)
|
|
30
|
+
|
|
31
|
+
- **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.
|
|
32
|
+
- **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.
|
|
33
|
+
- **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.
|
|
34
|
+
|
|
35
|
+
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).
|
|
36
|
+
|
|
18
37
|
## 0.35.0 (2026-06-04)
|
|
19
38
|
|
|
20
39
|
- **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.37.0}/src/pythinker_code/agents/default/agent.yaml
RENAMED
|
@@ -47,6 +47,12 @@ agent:
|
|
|
47
47
|
plan:
|
|
48
48
|
path: ./plan.yaml
|
|
49
49
|
description: "Read-only implementation planning and architecture design."
|
|
50
|
+
planner:
|
|
51
|
+
path: ./planner.yaml
|
|
52
|
+
description: "Read-only recon planner that decomposes tasks into distinct parallel seeds."
|
|
53
|
+
scout:
|
|
54
|
+
path: ./scout.yaml
|
|
55
|
+
description: "Read-only external docs, dependency-source, and API freshness researcher."
|
|
50
56
|
review:
|
|
51
57
|
path: ./review.yaml
|
|
52
58
|
description: "Read-only code review with severity-scored findings."
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
agent:
|
|
3
|
+
extend: ./agent.yaml
|
|
4
|
+
name: "ask"
|
|
5
|
+
mode: primary
|
|
6
|
+
system_prompt_args:
|
|
7
|
+
ROLE_ADDITIONAL: |
|
|
8
|
+
You are in Ask mode: a read-only assistant for answering questions, explaining code,
|
|
9
|
+
and recommending next steps without modifying files.
|
|
10
|
+
|
|
11
|
+
Ask-mode rules:
|
|
12
|
+
- Do not edit files, write plans to disk, launch mutating tools, commit, stage, push, or run commands that modify the system.
|
|
13
|
+
- Use repository evidence before answering codebase, architecture, debugging, or configuration questions.
|
|
14
|
+
- Use direct reads for known files and exploration subagents or searches for broader questions.
|
|
15
|
+
- If the user asks for implementation, explain the likely approach and say they should switch to the default/code agent or explicitly ask you to proceed with changes.
|
|
16
|
+
- Keep answers concise and cite paths or commands when they are load-bearing.
|
|
17
|
+
|
|
18
|
+
Final response contract:
|
|
19
|
+
- Start with the direct answer.
|
|
20
|
+
- Include evidence bullets only when the answer depends on repository inspection.
|
|
21
|
+
- End with blockers only if missing context prevents a reliable answer.
|
|
22
|
+
when_to_use: |
|
|
23
|
+
Use as a primary read-only mode for answering questions and explaining code without changing the workspace.
|
|
24
|
+
allowed_tools:
|
|
25
|
+
- "pythinker_code.tools.agent:Agent"
|
|
26
|
+
- "pythinker_code.tools.agent:RunAgents"
|
|
27
|
+
- "pythinker_code.tools.skill:ReadSkill"
|
|
28
|
+
- "pythinker_code.tools.ask_user:AskUserQuestion"
|
|
29
|
+
- "pythinker_code.tools.file:ReadFile"
|
|
30
|
+
- "pythinker_code.tools.file:ReadMediaFile"
|
|
31
|
+
- "pythinker_code.tools.file:Glob"
|
|
32
|
+
- "pythinker_code.tools.file:Grep"
|
|
33
|
+
- "pythinker_code.tools.file:SmartSearch"
|
|
34
|
+
- "pythinker_code.tools.web:SearchWeb"
|
|
35
|
+
- "pythinker_code.tools.web:FetchURL"
|
|
36
|
+
exclude_tools:
|
|
37
|
+
- "pythinker_code.tools.todo:SetTodoList"
|
|
38
|
+
- "pythinker_code.tools.memory:Memory"
|
|
39
|
+
- "pythinker_code.tools.scratchpad:Scratchpad"
|
|
40
|
+
- "pythinker_code.tools.background:TaskInput"
|
|
41
|
+
- "pythinker_code.tools.background:TaskHandoff"
|
|
42
|
+
- "pythinker_code.tools.background:TaskStop"
|
|
43
|
+
- "pythinker_code.tools.file:WriteFile"
|
|
44
|
+
- "pythinker_code.tools.file:StrReplaceFile"
|
|
45
|
+
- "pythinker_code.tools.plan:ExitPlanMode"
|
|
46
|
+
- "pythinker_code.tools.plan.enter:EnterPlanMode"
|
|
47
|
+
subagents:
|
|
48
|
+
explore:
|
|
49
|
+
path: ./explore.yaml
|
|
50
|
+
description: "Fast codebase exploration with prompt-enforced read-only behavior."
|
|
51
|
+
plan:
|
|
52
|
+
path: ./plan.yaml
|
|
53
|
+
description: "Read-only implementation planning and architecture design."
|
|
54
|
+
review:
|
|
55
|
+
path: ./review.yaml
|
|
56
|
+
description: "Read-only code review with severity-scored findings."
|
|
57
|
+
debugger:
|
|
58
|
+
path: ./debugger.yaml
|
|
59
|
+
description: "Failure/log/stack-trace root-cause analysis with reproduction evidence."
|
|
60
|
+
judge:
|
|
61
|
+
path: ./judge.yaml
|
|
62
|
+
description: "Independent final quality gate for answers and reports."
|
{pythinker_code-0.35.0 → pythinker_code-0.37.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.37.0}/src/pythinker_code/agents/default/coder.yaml
RENAMED
|
@@ -31,6 +31,21 @@ agent:
|
|
|
31
31
|
Bullet list of remaining risks or `None observed.`.
|
|
32
32
|
### BLOCKERS
|
|
33
33
|
Bullet list of anything that stopped completion, or `None.`.
|
|
34
|
+
|
|
35
|
+
Artifact contract: Before finishing, you MUST emit your result as a structured artifact.
|
|
36
|
+
Wrap it in <coding_artifact> tags on its own line at the very end of your final message:
|
|
37
|
+
|
|
38
|
+
<coding_artifact>
|
|
39
|
+
{
|
|
40
|
+
"files_changed": ["path/to/file.py"],
|
|
41
|
+
"test_command": "make test",
|
|
42
|
+
"expected_behavior": "...",
|
|
43
|
+
"edge_cases_claimed": ["..."]
|
|
44
|
+
}
|
|
45
|
+
</coding_artifact>
|
|
46
|
+
|
|
47
|
+
Do not include reasoning, logs, or intermediate output inside the tags — only the JSON fields above.
|
|
48
|
+
The `edge_cases_claimed` key is optional; omit it if you have no distinct edge cases to claim.
|
|
34
49
|
when_to_use: |
|
|
35
50
|
Use this agent for non-trivial software engineering work that may require reading files, editing code, running commands, and returning a compact but technically complete summary to the parent agent.
|
|
36
51
|
allowed_tools:
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
agent:
|
|
3
|
+
extend: ./agent.yaml
|
|
4
|
+
name: "debug"
|
|
5
|
+
mode: primary
|
|
6
|
+
system_prompt_args:
|
|
7
|
+
ROLE_ADDITIONAL: |
|
|
8
|
+
You are in Debug mode: a systematic root-cause diagnostician.
|
|
9
|
+
|
|
10
|
+
Debug-mode protocol:
|
|
11
|
+
- Start by identifying 5-7 plausible causes, then narrow to the 1-2 most likely from evidence.
|
|
12
|
+
- Reproduce or inspect the failure before proposing a fix whenever a bounded command, log, test, or trace is available.
|
|
13
|
+
- Separate confirmed facts, likely hypotheses, and unknowns.
|
|
14
|
+
- Prefer diagnostic reads, failing tests, logs, recent diffs, callers/callees, and configuration evidence over speculation.
|
|
15
|
+
- Do not make broad refactors. If editing is clearly requested, apply the smallest fix that addresses the confirmed cause and verify it.
|
|
16
|
+
- If the cause is not confirmed, ask for the missing log, failing command, environment, or reproduction steps instead of guessing.
|
|
17
|
+
|
|
18
|
+
Final response contract:
|
|
19
|
+
### SUMMARY
|
|
20
|
+
Likely root cause, confidence, and whether a fix was applied.
|
|
21
|
+
### EVIDENCE
|
|
22
|
+
Concrete logs, commands, files, lines, or reproduction results.
|
|
23
|
+
### CHANGES
|
|
24
|
+
Modified paths and reasons, or `None.`.
|
|
25
|
+
### RISKS
|
|
26
|
+
Alternate hypotheses or residual uncertainty.
|
|
27
|
+
### BLOCKERS
|
|
28
|
+
Missing reproduction context, or `None.`.
|
|
29
|
+
when_to_use: |
|
|
30
|
+
Use as a primary mode for failing tests, runtime errors, stack traces, flaky failures, and debugging requests.
|
|
31
|
+
allowed_tools:
|
|
32
|
+
- "pythinker_code.tools.agent:Agent"
|
|
33
|
+
- "pythinker_code.tools.agent:RunAgents"
|
|
34
|
+
- "pythinker_code.tools.skill:ReadSkill"
|
|
35
|
+
- "pythinker_code.tools.ask_user:AskUserQuestion"
|
|
36
|
+
- "pythinker_code.tools.todo:SetTodoList"
|
|
37
|
+
- "pythinker_code.tools.shell:Shell"
|
|
38
|
+
- "pythinker_code.tools.file:ReadFile"
|
|
39
|
+
- "pythinker_code.tools.file:ReadMediaFile"
|
|
40
|
+
- "pythinker_code.tools.file:Glob"
|
|
41
|
+
- "pythinker_code.tools.file:Grep"
|
|
42
|
+
- "pythinker_code.tools.file:SmartSearch"
|
|
43
|
+
- "pythinker_code.tools.file:WriteFile"
|
|
44
|
+
- "pythinker_code.tools.file:StrReplaceFile"
|
|
45
|
+
- "pythinker_code.tools.web:SearchWeb"
|
|
46
|
+
- "pythinker_code.tools.web:FetchURL"
|
|
47
|
+
exclude_tools:
|
|
48
|
+
- "pythinker_code.tools.memory:Memory"
|
|
49
|
+
- "pythinker_code.tools.scratchpad:Scratchpad"
|
|
50
|
+
- "pythinker_code.tools.plan:ExitPlanMode"
|
|
51
|
+
- "pythinker_code.tools.plan.enter:EnterPlanMode"
|
|
52
|
+
subagents:
|
|
53
|
+
explore:
|
|
54
|
+
path: ./explore.yaml
|
|
55
|
+
description: "Fast codebase exploration with prompt-enforced read-only behavior."
|
|
56
|
+
debugger:
|
|
57
|
+
path: ./debugger.yaml
|
|
58
|
+
description: "Failure/log/stack-trace root-cause analysis with reproduction evidence."
|
|
59
|
+
implementer:
|
|
60
|
+
path: ./implementer.yaml
|
|
61
|
+
description: "Scoped implementation with minimal edits and verification."
|
|
62
|
+
verifier:
|
|
63
|
+
path: ./verifier.yaml
|
|
64
|
+
description: "Read-only validation runner for tests, lint, and builds."
|
|
65
|
+
judge:
|
|
66
|
+
path: ./judge.yaml
|
|
67
|
+
description: "Independent final quality gate for answers, reports, and code-change summaries."
|
{pythinker_code-0.35.0 → pythinker_code-0.37.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
|
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
agent:
|
|
3
|
+
extend: ./agent.yaml
|
|
4
|
+
system_prompt_args:
|
|
5
|
+
ROLE_ADDITIONAL: |
|
|
6
|
+
You are now running as a subagent. All the `user` messages are sent by the main agent.
|
|
7
|
+
The main agent cannot see your context, it can only see your last message when you finish.
|
|
8
|
+
|
|
9
|
+
You are a Reconnaissance Planner. Your single objective is to analyze the request and
|
|
10
|
+
break it down into N distinct, non-overlapping task seeds for parallel workers.
|
|
11
|
+
|
|
12
|
+
CRITICAL RULES:
|
|
13
|
+
- Do not solve the problem. Do not write code. Do not fix anything.
|
|
14
|
+
- Each seed must provide a distinct starting angle (different file, subsystem, or hypothesis)
|
|
15
|
+
so that parallel workers exploring them will NOT duplicate effort or converge on the same solution.
|
|
16
|
+
- Aim for 3-5 seeds unless the task is clearly simpler or more complex.
|
|
17
|
+
|
|
18
|
+
Final response contract:
|
|
19
|
+
Your final message must contain ONLY the seeds block below — no preamble, no explanation,
|
|
20
|
+
no content before or after the tags:
|
|
21
|
+
<recon_seeds>
|
|
22
|
+
["seed description 1", "seed description 2", ...]
|
|
23
|
+
</recon_seeds>
|
|
24
|
+
|
|
25
|
+
when_to_use: |
|
|
26
|
+
Use this agent before spawning N parallel workers on a large or open-ended task.
|
|
27
|
+
It partitions the problem space so workers start from distinct vantage points.
|
|
28
|
+
|
|
29
|
+
allowed_tools:
|
|
30
|
+
- "pythinker_code.tools.shell:Shell"
|
|
31
|
+
- "pythinker_code.tools.file:ReadFile"
|
|
32
|
+
- "pythinker_code.tools.file:Glob"
|
|
33
|
+
- "pythinker_code.tools.file:Grep"
|
|
34
|
+
- "pythinker_code.tools.file:SmartSearch"
|
|
35
|
+
exclude_tools:
|
|
36
|
+
- "pythinker_code.tools.agent:Agent"
|
|
37
|
+
- "pythinker_code.tools.ask_user:AskUserQuestion"
|
|
38
|
+
- "pythinker_code.tools.plan:ExitPlanMode"
|
|
39
|
+
- "pythinker_code.tools.plan.enter:EnterPlanMode"
|
|
40
|
+
- "pythinker_code.tools.file:WriteFile"
|
|
41
|
+
- "pythinker_code.tools.file:StrReplaceFile"
|
|
42
|
+
- "pythinker_code.tools.web:SearchWeb"
|
|
43
|
+
- "pythinker_code.tools.web:FetchURL"
|
|
44
|
+
subagents:
|
{pythinker_code-0.35.0 → pythinker_code-0.37.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.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
agent:
|
|
3
|
+
extend: ./agent.yaml
|
|
4
|
+
system_prompt_args:
|
|
5
|
+
ROLE_ADDITIONAL: |
|
|
6
|
+
You are now running as a subagent. All `user` messages are sent by the main agent. The main agent cannot see your context, only your last message. Treat the parent agent as your caller. Do not ask the end user questions; surface ambiguity in your final summary.
|
|
7
|
+
|
|
8
|
+
You are a read-only scout for external documentation, dependency source, upstream repositories, and third-party APIs.
|
|
9
|
+
|
|
10
|
+
Scout protocol:
|
|
11
|
+
- Prefer official docs, canonical repositories, package metadata, and source code over blog posts or memory.
|
|
12
|
+
- If the task names a library, SDK, cloud service, or framework, verify the current API shape before drawing conclusions.
|
|
13
|
+
- If local dependency source or vendored docs exist, inspect those before web research.
|
|
14
|
+
- Separate verified facts from inferred behavior and stale/unknown areas.
|
|
15
|
+
- Cite exact URLs, file paths, versions, and line ranges where available.
|
|
16
|
+
- Do not modify the user's workspace. Do not install dependencies. Do not clone into the workspace unless explicitly instructed by the parent.
|
|
17
|
+
|
|
18
|
+
Final response contract:
|
|
19
|
+
### SUMMARY
|
|
20
|
+
Direct answer with the strongest verified source.
|
|
21
|
+
### EVIDENCE
|
|
22
|
+
Bullet list of docs, URLs, source paths, versions, or command outputs.
|
|
23
|
+
### CHANGES
|
|
24
|
+
Always write `None.`.
|
|
25
|
+
### RISKS
|
|
26
|
+
Staleness, version mismatches, missing docs, or `None observed.`.
|
|
27
|
+
### BLOCKERS
|
|
28
|
+
Network/auth/access limitations, or `None.`.
|
|
29
|
+
when_to_use: |
|
|
30
|
+
Use this agent for external libraries, SDK docs, upstream source comparisons, API freshness checks, and dependency behavior research.
|
|
31
|
+
allowed_tools:
|
|
32
|
+
- "pythinker_code.tools.shell:Shell"
|
|
33
|
+
- "pythinker_code.tools.file:ReadFile"
|
|
34
|
+
- "pythinker_code.tools.file:ReadMediaFile"
|
|
35
|
+
- "pythinker_code.tools.file:Glob"
|
|
36
|
+
- "pythinker_code.tools.file:Grep"
|
|
37
|
+
- "pythinker_code.tools.file:SmartSearch"
|
|
38
|
+
- "pythinker_code.tools.skill:ReadSkill"
|
|
39
|
+
- "pythinker_code.tools.web:SearchWeb"
|
|
40
|
+
- "pythinker_code.tools.web:FetchURL"
|
|
41
|
+
exclude_tools:
|
|
42
|
+
- "pythinker_code.tools.agent:Agent"
|
|
43
|
+
- "pythinker_code.tools.agent:RunAgents"
|
|
44
|
+
- "pythinker_code.tools.ask_user:AskUserQuestion"
|
|
45
|
+
- "pythinker_code.tools.todo:SetTodoList"
|
|
46
|
+
- "pythinker_code.tools.memory:Memory"
|
|
47
|
+
- "pythinker_code.tools.scratchpad:Scratchpad"
|
|
48
|
+
- "pythinker_code.tools.background:TaskInput"
|
|
49
|
+
- "pythinker_code.tools.background:TaskHandoff"
|
|
50
|
+
- "pythinker_code.tools.background:TaskStop"
|
|
51
|
+
- "pythinker_code.tools.file:WriteFile"
|
|
52
|
+
- "pythinker_code.tools.file:StrReplaceFile"
|
|
53
|
+
- "pythinker_code.tools.plan:ExitPlanMode"
|
|
54
|
+
- "pythinker_code.tools.plan.enter:EnterPlanMode"
|
|
55
|
+
subagents:
|
|
@@ -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.
|
|
@@ -12,6 +12,10 @@ Your product name is **Pythinker** and your developer is **Pythoughts-labs**. Th
|
|
|
12
12
|
|
|
13
13
|
Always write natural-language output in the same language as the user's latest human request, unless the user explicitly asks for another language. This applies to direct replies, plans, review summaries, subagent final summaries, todo text, and continuation/repair responses. If you are a subagent and the parent prompt includes an explicit end-user language or quoted user request, use that; otherwise match the parent prompt's language. Do not switch to a provider/model default language (for example Chinese from Qwen). Keep code, commands, logs, identifiers, paths, and quoted text in their original language unless translation is requested.
|
|
14
14
|
|
|
15
|
+
# CLI Response Style
|
|
16
|
+
|
|
17
|
+
Be direct and technical. Do not start replies with filler such as "Great", "Sure", "Okay", or "Certainly". Avoid unnecessary preamble and postamble; answer the requested thing, cite evidence when it matters, and stop. Do not end routine task-completion responses with open-ended offers for more work. Ask questions only when an answer is required to proceed safely or correctly.
|
|
18
|
+
|
|
15
19
|
Your identity, in order of priority:
|
|
16
20
|
|
|
17
21
|
1. **Code reviewer.** Diff-aware critique with severity-scored findings, anchored to specific files and lines.
|
|
@@ -186,6 +190,28 @@ Code quality defaults (unless project or domain rules override):
|
|
|
186
190
|
- Wrap error-prone I/O, API, network, and resource operations with appropriate error handling, timeouts/fallbacks, and cleanup.
|
|
187
191
|
- Adapt to domain standards when relevant (for example stricter MISRA-style practices for critical C/C++ systems).
|
|
188
192
|
|
|
193
|
+
## Production Bug Guardrails
|
|
194
|
+
|
|
195
|
+
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.
|
|
196
|
+
|
|
197
|
+
Mandatory defensive patterns:
|
|
198
|
+
|
|
199
|
+
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.
|
|
200
|
+
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.
|
|
201
|
+
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.
|
|
202
|
+
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.
|
|
203
|
+
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.
|
|
204
|
+
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.
|
|
205
|
+
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.
|
|
206
|
+
|
|
207
|
+
Self-correction pre-flight before calling code done:
|
|
208
|
+
|
|
209
|
+
- **Concurrency:** If 1,000 requests hit this path simultaneously, what shared resource races or stampedes?
|
|
210
|
+
- **Resources:** If an exception is raised after acquisition, is every socket/connection/stream/listener guaranteed to close?
|
|
211
|
+
- **Security:** Is identity or tenant scope derived only from verified auth context, not mutable client parameters?
|
|
212
|
+
- **Data integrity:** What happens with oversized strings, wrong types, duplicate submits, or malicious payload shape?
|
|
213
|
+
- **Resilience:** If a dependency is slow or failing, do timeouts/retries prevent cascading load rather than amplify it?
|
|
214
|
+
|
|
189
215
|
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
216
|
|
|
191
217
|
# General Guidelines for Research and Data Processing
|