pythinker-code 0.51.0__tar.gz → 0.52.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.51.0 → pythinker_code-0.52.0}/PKG-INFO +20 -20
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/README.md +19 -19
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/pyproject.toml +1 -1
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/CHANGELOG.md +59 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/agent.yaml +1 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/judge.yaml +2 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/system.md +4 -0
- pythinker_code-0.52.0/src/pythinker_code/skills/judge-minimum-diff/SKILL.md +104 -0
- pythinker_code-0.52.0/src/pythinker_code/skills/judge-overengineering-review/SKILL.md +104 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/toolset.py +47 -4
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/agent/__init__.py +511 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/__init__.py +19 -1
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/prompt.py +32 -11
- pythinker_code-0.52.0/src/pythinker_code/web/static/assets/architecture-7EHR7CIX-Dt5rHq4t.js +1 -0
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-X_oHUYO1.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-BQq04AbG.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-2zLgN0bS.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-B5uPJ_UU.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/bootstrap-BSt4IsKh.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/bootstrap-BTuyuHCn.js +5 -5
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-DzBGLsx8.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-C0oljTpw.js +1 -1
- pythinker_code-0.52.0/src/pythinker_code/web/static/assets/channel-BHdUUNg9.js +1 -0
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-FPSU5QaJ.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-Bh03mn97.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-3OPIFGDE-D_AIrjRF.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-3OPIFGDE-p49QbF5n.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-5ZQYHXKU-CkynCyNs.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-5ZQYHXKU-D24JztdW.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-Dr6tFoBV.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-DvsJAMSH.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-Bj1KY-58.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-BGK0b4L5.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-CSCIHK7Q-D38wt_PS.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-CSCIHK7Q-UyPTw_C_.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-JAPRZBRM-YeVubvkM.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-JAPRZBRM-C3a-j1pU.js +4 -4
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-KSCS5N6A-DrGH79o7.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-KSCS5N6A-zOmK4SEq.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-L5ZTLDWV-J3LkyD5q.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-L5ZTLDWV-D7vmhaHy.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-LZXEDZCA-CKgXoi0f.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-LZXEDZCA-DIytSV-G.js +2 -2
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-DHx_WFtN.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-dMP6GnnN.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-NZK2D7GU-DSLSgJfA.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-NZK2D7GU-MzC07Ck8.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-O5CBEL6O-wpjhg9ym.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-O5CBEL6O-Bjr3USpF.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-WU5MYG2G-BLq7E7Qg.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/chunk-WU5MYG2G-zmGggQfv.js +1 -1
- pythinker_code-0.52.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-IqKZfE80.js +1 -0
- pythinker_code-0.52.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-IqKZfE80.js +1 -0
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-Dx4cRVQ_.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-CjfuKqHz.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-DRlm8MQJ.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-DSxhJzhl.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-BEfjBQLI.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-D41jRPTV.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL-Ci0HEJWT.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL-DtdiESjn.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-zYONKSY6.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-Ay9KiJfd.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-DQ4T4lCx.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-BGD4oJCE.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-CrV-9Ra-.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-CoPSsn3G.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/dist-npKuNvtv.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/dist-R93fLvno.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-0lIyRbv9.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-Cw60gIq3.js +1 -1
- pythinker_code-0.52.0/src/pythinker_code/web/static/assets/eventmodeling-FCH6USID-D6UmO-TF.js +1 -0
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-86rTWOtS.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-DCw4plvQ.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-DIe58hAf.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-BXc1awqv.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/gitGraph-WXDBUCRP-MrGKOHQS.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/gitGraph-WXDBUCRP-DoAkzbS0.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-CbxdWdr-.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-D5TMwllB.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/index-Csj5xlwo.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/index-DFOXSy3h.js +2 -2
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/info-J43DQDTF-ICUzUEU3.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/info-J43DQDTF-EJcPqD24.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-DJXqNoxd.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-BE5xCvsg.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-1JFbxySp.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-DmrUIPq0.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-COQF3o6_.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-D4-7Iilc.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-D423FO9N.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-DRyfqyv1.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/line-u46X678h.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/line-DRRHWkdU.js +1 -1
- pythinker_code-0.52.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-GJVL9tJM.js +1 -0
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/mermaid-parser.core-C9rzL2kO.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/mermaid-parser.core-DDaUpkka.js +2 -2
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/mermaid.core-9_tLDRHh.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/mermaid.core-BBnTQc5N.js +3 -3
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-DTtZqqkw.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-BPqdxPri.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/packet-YPE3B663-B6LMWa1u.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/packet-YPE3B663-CjVjaXUE.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/pie-LRSECV5Y-CMHowp3u.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/pie-LRSECV5Y-B4rXtv6i.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-B01DYhfB.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-DFwqAhb0.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-C66dg48I.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-DikE1PFE.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/radar-GUYGQ44K-DTCBzdz2.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/radar-GUYGQ44K-DC8IqVvg.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-nNGWXMs_.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-BSZHI8JW.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-Qb_nK7Gb.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-BbpTVe9o.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-z3RBHyMA.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-DH7jddAt.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-C-G3lcYY.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-m7P-6acX.js +1 -1
- pythinker_code-0.52.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-CoAJxqPU.js +1 -0
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-DXVndtCG.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-DLivSUwm.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/treeView-BLDUP644-CSfnlEh1.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/treeView-BLDUP644-Bt80xUUZ.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/treemap-LRROVOQU-DSDCVrgU.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/treemap-LRROVOQU-Dhwhsr3A.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-B0Ef6p6-.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-BDhEA7T2.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-wr5KeEdQ.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-xhnHNDqM.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-B3B0a_Mc.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-DsiJx-ji.js +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-CsHCuQhe.js → pythinker_code-0.52.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-DBDBt_GI.js +1 -1
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/index.html +1 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/architecture-7EHR7CIX-BAIjZ1OY.js +0 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/channel-CmYAmtsI.js +0 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-DcdRX25I.js +0 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-DcdRX25I.js +0 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/eventmodeling-FCH6USID-D8j82yTe.js +0 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-69jhIuwd.js +0 -1
- pythinker_code-0.51.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-BSsLK9GJ.js +0 -1
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/LICENSE +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/NOTICE +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/__main__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/AGENTS.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/convert.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/host.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/mcp.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/server.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/session.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/tools.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/types.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/acp/version.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/ask.yaml +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/debug.yaml +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/planner.yaml +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/review.yaml +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/scout.yaml +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agentspec.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/app.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/approval_runtime/models.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/alibaba.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/browser_login_page.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/deepseek.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/github_feedback.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/kimi.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/lm_studio.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/minimax.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/moonshot.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/oauth.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/ollama.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openai/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openai/_shared.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openai/browser_flow.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openai/catalog.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openai/config_apply.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openai/constants.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openai/login.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openai/models.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openai/oauth_client.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/opencode_go.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/openrouter.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/platforms.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/auth/z_ai.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/background/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/background/agent_runner.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/background/ids.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/background/manager.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/background/models.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/background/store.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/background/summary.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/background/worker.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/__main__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/dashboard.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/debug.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/export.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/info.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/mcp.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/plugin.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/review.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/secscan.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/security_scan.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/skill.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/system_prompt.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/toad.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/update.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/cli/web.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/config.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/constant.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/api/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/api/sessions.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/api/statistics.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/api/system.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/app.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/highlighted-body-OFNGDK62-BxVUIXn9.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/index-DAN_VzOP.css +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/index-DYyxzHPY.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/assets/mermaid-GHXKKRXX-BR6KjYwB.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/dashboard/static/index.html +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/events.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/exception.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/execution_profiles.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/extensions.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/feedback.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/feedback_repo.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/file_restore.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/hooks/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/hooks/config.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/hooks/engine.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/hooks/events.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/hooks/runner.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/llm.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/client.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/diagnostics.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/framing.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/instance.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/manager.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/plugin_servers.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/protocol.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/recommend.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/lsp/service.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/memory/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/memory/consolidation.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/memory/harvest.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/memory/recall.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/memory/recap.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/memory/retriever.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/memory/sanitize.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/metadata.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/models_dev.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/native.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/notifications/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/notifications/llm.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/notifications/manager.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/notifications/models.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/notifications/notifier.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/notifications/store.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/notifications/wire.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/artifacts.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/dependency.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/directories.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/install.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/installed.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/integration.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/loader.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/manager.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/manifest.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/marketplace.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/options.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/policy.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/plugin/tool.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/project_memory.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/project_trust.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/prompt_templates.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/prompts/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/prompts/best_practices.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/prompts/compact.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/prompts/goal_continuation.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/prompts/goal_set.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/prompts/goal_wrap_up.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/prompts/init.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/prompts/learn.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/py.typed +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/scratchpad.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/session.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/session_cleanup.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/session_fork.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/session_recap.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/session_state.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/share.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skill/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skill/flow/d2.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skill/lockfile.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/agent-creator/SKILL.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/cleanup-audit/SKILL.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/customize-pythinker/SKILL.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/designer-skill/SKILL.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/agent.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/api_errors.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/approval.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/btw.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/compaction.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/context.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/deliberation.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/denwarenji.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/agent_list.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/git_status.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/goal_mode.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/inline_commands.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/lsp_diagnostics.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/model_defense.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/orchestration.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/permissions_state.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/flow_runner.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/live_tokens.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/message.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/permission.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/pythinkersoul.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/soul/slash.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/builder.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/codenames.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/core.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/discovery.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/git_context.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/models.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/output.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/registry.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/runner.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/store.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/usage.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/subagents/worktree.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/telemetry/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/telemetry/config.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/telemetry/crash.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/telemetry/errors.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/telemetry/metrics.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/telemetry/names.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/telemetry/otel.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/telemetry/sentry.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/telemetry/sink.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/thinking.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/AGENTS.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/agent/description.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/background/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/background/handoff.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/background/input.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/background/list.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/background/output.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/background/stop.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/display.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/glob.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/glob.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/grep.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/read.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/read.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/read_media.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/read_media.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/replace.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/replace.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/utils.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/write.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/file/write.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/goal/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/goal/update_goal.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/lsp/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/lsp/formatters.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/lsp/schemas.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/lsp/symbol_context.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/lsp/tool.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/lsp/tool.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/mcp_resource/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/mcp_resource/list_description.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/mcp_resource/prompt_description.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/mcp_resource/read_description.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/memory/memory.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/memory/routing_guard.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/plan/description.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/plan/enter.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/progress/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/progress/description.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/recall/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/recall/description.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/shell/bash.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/skill/_mcp_bridge.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/skill/description.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/suggest/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/suggest/description.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/test.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/think/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/think/think.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/tool_search/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/tool_search/tool_search.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/utils.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/web/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/web/fetch.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/web/fetch.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/web/search.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/web/search.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/worktree/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/worktree/enter_worktree.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/tools/worktree/exit_worktree.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/color_utils.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/print/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/print/visualize.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/markdown.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/report.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/report_prose_blocks.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/report_update.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/console.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/debug.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/echo.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/glyphs.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/markdown/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/markdown/audit.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/markdown/elements.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/markdown/fences.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/markdown/normalizers.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/markdown/renderer.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/markdown/streaming.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/motion.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/replay.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/selector.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/selectors/code_theme.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/setup.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/slash.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/startup.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/stats.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/stats_collector.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/stats_pricing.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/statusline.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/sync_output.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tips.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/lsp.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/mcp_resource.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/memory.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/read_media.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/skill.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/smart_search.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/tool_search.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/worktree.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/update.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/update_orchestrator.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_activity.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/alibaba.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_diff_live.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/terminal_background.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/terminal_capabilities.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/adapters/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/adapters/markdown.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/adapters/task_browser.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/capabilities.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/palettes.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/pythinker_themes.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/registry.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/resolver.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/theme/spec.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/ui/tui_config.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/update_policy.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/aiohttp.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/aioqueue.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/artifacts.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/broadcast.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/changelog.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/clipboard.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/datetime.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/diff.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/editor.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/environment.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/envvar.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/export.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/file_filter.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/file_read_cache.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/frontmatter.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/gitignore.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/io.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/logging.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/mcp_names.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/media_limits.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/media_tags.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/message.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/path.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/proctitle.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/proxy.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/rich/columns.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/sensitive.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/server.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/signals.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/slashcmd.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/string.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/term.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/trust.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/utils/typing.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/api/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/api/config.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/api/open_in.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/api/sessions.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/app.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/auth.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/models.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/runner/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/runner/messages.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/runner/process.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/runner/worker.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/_headers +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/abap-CLvhMVsD.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/actionscript-3--17pq3dv.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ada-C5qYipkI.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/andromeeda-vGVdxbeo.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/angular-html-BKhkKBsm.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/angular-ts-CYPbMJCA.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/apache-U0d_L8uA.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/apex-CGTLDQj6.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/apl-D7bENxmy.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/applescript-CCn79oCD.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ara-4CJ0cIlV.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/arc-8BWbC-0s.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/array-BifhSqXX.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/asciidoc-DE70LPWp.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/asm-Cmm7eHzH.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/astro-B1l9MDUT.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/aurora-x-CDeNXAV0.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/awk-BWXHIvNe.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ayu-dark-DluEY0Gj.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ayu-light-C3h-C4tm.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ayu-mirage-Bqwy1Gya.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ballerina-B7ZEbQpA.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/bat-Bo4NYOV-.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/beancount-D-usSTwE.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/berry-DKpUyyne.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/bibtex-Ci_nEsc7.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/bicep-CUHmPFLl.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/bird2-C2hNVINV.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/blade-BlkqRXu6.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/bootstrap-BhLLvBaE.css +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/bsl-BkkzgIyY.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/c-PpPxyn8g.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/c3-CnJL0r0V.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/cadence-CQ2zXKGN.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/cairo-DLTphjLi.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-3VR1Za6u.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/catppuccin-latte-DwIHMF0Q.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DYnBP6_5.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-DYhrFGRu.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/character-entities-legacy-Wut6vMuj.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/chevrons-up-down-Dwo0Il5v.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-C0kf5ycP.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/chunk-55IACEB6-QyFAFTWp.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/chunk-BSJP7CBP-DIpfLhEz.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/chunk-Cyuzqnbw.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-C9D6P7Uq.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/chunk-NNHCCRGN-DmZbXBJw.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CyVdgm44.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/chunk-XPW4576I-ru3A962d.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/clarity-SemFz856.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/clojure-DqKBuwfJ.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/cmake-Bj61d0ZC.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/cobol-BoXxFQjh.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/codeowners-C8r90Shi.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/codeql-oeQT6MSM.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/coffee-B5TREocO.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/common-lisp-Cv5bFMCO.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/coq-BrsZFFmf.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-PjRvINHM.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/cpp-CVIk4zoB.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/crystal-CvUuUt6_.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/csharp-Ct8U2NOr.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/css-D7o5g6xi.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/csv-Dx-8-gkx.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/cue-CE9AQfxI.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/cypher-ClKdZ_lG.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/cytoscape.esm-jXPf2pm4.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/d-qD-0Kul2.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dagre-Uyq5yTtG.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dark-plus-Cs2F2srj.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dart-DkHntEIa.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dax-BkyTk9wS.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/defaultLocale-C8Fc0cco.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/desktop-Dlh5hvp9.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/diff-BDNflWRl.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/diff-Dvab7kiv.css +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/diff-woXpYk--.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dist-B7jLwIkG.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dist-D4B_Bs5p.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dist-reBDvVlc.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/docker-IyjqRm3v.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dotenv-_5a1GRtc.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dracula-BHWKrbxM.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dracula-soft-5eyTD99u.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/dream-maker-DW3nJb8Q.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/edge-CmXZi-az.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/elixir-BoRIkjDi.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/elm-Cm7sFdI1.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9PiwqqW.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/erb-DuMAGb6i.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/erlang-Cphh6RMH.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/everforest-dark-sB-x3p7T.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/everforest-light-Df2xbC6M.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/fennel-DQxkIbk2.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/fish-BJitypiv.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/fluent-C03EYrpw.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-DEKoE2YW.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/fortran-free-form-CYNrtFtB.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/fsharp-D13ZGOAj.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gdresource-C0sCabJj.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gdscript-Cp2uCuqX.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gdshader-CBce3t8t.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/genie-CV2tkWYe.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gherkin-DExj1W_8.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/git-commit-BSykSTBG.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/git-rebase-D2tSwjJb.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/github-dark-C-LZuMrd.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/github-dark-default-DXG-b-1a.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-Bx1FflLF.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-B_tTalzw.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/github-light-EUqPIrTm.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/github-light-default-BXViO-2h.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-B68TUdTA.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gleam-CSRkHgEL.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/glimmer-js--VVKNatA.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/glimmer-ts-Bfa_wiNC.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/glsl-MPwHyiXQ.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gn-ilITqXS6.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gnuplot-7GGW24-e.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/go-BJwz_mda.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/graphlib-C22s9MDV.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/graphql-NW854Khs.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/groovy-CacY0gHj.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-C820rvS2.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-BPjhmG05.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-MrdJrrXF.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-BC_s9l72.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-BAWPOn9u.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-BSMLrYjP.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/hack-CSl79E5u.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/haml-Dmb1YmHj.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/handlebars-Du8DtnRB.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/haskell-D8IpX4py.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/haxe-OTjmBuCE.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/hcl-Dh228itO.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/hjson-CxZEssPk.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/hlsl-Cvrh5tZx.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/horizon-CE9ld1lL.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/horizon-bright-Br1oVSNq.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/houston-CsvMBhTu.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/html-Kpl3bQKd.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/html-derivative-BEEWNZ8Y.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/http-HvMG3K54.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/hurl-CLh1t2ES.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/hxml-B0Qn7Nwc.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/hy-CZbG8q4J.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/imba-DsUTQ-LC.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ini-B5eOa1yu.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/init-D6jRqBbL.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/java-Cst_eZTE.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/javascript-i_rUTyCW.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/jinja-CaXggA6f.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/jison-D9Fg2JgN.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/json-DS5j4FfK.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/json5-BR5RXkoi.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/jsonc-CYpm1nAK.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/jsonl-CmCQp5Yx.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/jsonnet-CJTPZ8u_.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/jssm-DXw9l8Rf.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/jsx-CFyhNHav.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/jsx-runtime-wSvXh6gi.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/julia-R8NNmfP1.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/just-BhhHYlS8.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CXtmUGW6.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-BN08jTvb.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/kanagawa-wave-CTweb8Dz.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/katex-BGaDVET_.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/katex-BorAY7qD.css +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/kdl-CsD5j6eV.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/kotlin-DhhofPvG.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/kusto-BUv0MjJC.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/laserwave-C_8bwKvT.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/latex-D5k_uhWv.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/lean-CewbzKMR.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/less-DVTAwKKz.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/lib-BLxG8W6T.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/libesm-8-2luV-1.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/light-plus-DVQuIRkW.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/linear-BktLjFGX.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/liquid-Q0_hzjly.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/llvm-Cm23YOpf.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/log-BNLmms1o.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/logo-Cluzi2Zq.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/lua-VoGSg0xb.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/luau-CNKltnaQ.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/make-Dixweg8N.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/markdown-BYOwaDjH.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/marked.esm-DLdcrU5H.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/marko-D_aeUD__.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/material-theme-Bm3Qr25_.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/material-theme-darker-2IIEA8gg.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/material-theme-lighter-uhdI0v04.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CHQ94UKr.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/material-theme-palenight-B5W6OYN7.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/matlab-D7qyCx1q.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/mdc-BSifqehP.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/mdx-DQZ5AkYe.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/mermaid-Bk4SNUv9.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/min-dark-BSWPekZh.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/min-light-DDpmG2fV.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/mipsasm-BMqwQI7S.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/mojo-BgCJLMeH.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/monokai-CdkpiU2Y.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/moonbit-CaWjb8XO.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/move-B1IS1UjX.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/narrat-_X_XdTYD.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/nextflow-Bbiyy34d.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/nextflow-groovy-Dc_ddanL.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/nginx-CgHaWcsO.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/night-owl-DhmEMT88.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/night-owl-light-eJ-hLW7d.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/nim-BuixXxPS.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/nix-IvuFDN5E.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/nord-Cb4Vim4T.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/nushell-DcLAeLz5.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/objective-c-D1A_Heim.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/objective-cpp-BsSzOQcm.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ocaml-O90oeIOV.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/odin-B1RWQWA5.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/one-dark-pro-CLwyXe_n.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/one-light-D7Lr4KcI.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/openscad-BUDT5pXO.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ordinal-hYBb2elL.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/pascal-4ZHwLPI5.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/path-BWPyau1x.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/perl-BLMySlFJ.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/php-Czf_fybR.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/pkl-ot-7Btpt.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/plastic-DQwYfKfQ.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/plsql-DGHpHOYJ.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/po-BiJDBrnU.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/poimandres-DRFjx7u4.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/polar-C7UOKdEL.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/postcss-BXeXVLqQ.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/powerquery-DNMTfnFr.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/powershell-DshXNtvi.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/prisma-BsRQq5mF.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/prolog-iXnhIJG7.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/proto-DB4EqR-F.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/pug-CsZglf8T.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/puppet-CDv2pdJW.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/purescript-9MfHhQsQ.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/python-gzcpVVnB.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/qml-DcW_sT3t.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/qmldir-DCQb3MpD.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/qss-Fe1Jh2GI.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/r-D2d3McyU.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/racket-DcIDlBhZ.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/raku-B3gFvitq.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/razor-oFpUW61Z.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/red-CJ3rzSJv.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/reg-CRGYupPL.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/regexp-Bu0flJgP.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/rel-BtDbiS_P.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/riscv-Ckw8ddFX.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ron-VUp2lXgN.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/rose-pine-BthvhNj6.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-Dg85fqjY.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/rose-pine-moon-hon4tzzS.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/rosmsg-CAekHB0j.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/rough.esm-CSKSodPl.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/rst-U6Eu7ipE.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ruby-CUQsVT6d.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/rust-Cfkwpbl8.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/sas-CNBFrLhc.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/sass-DXrisJhu.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/scala-DKOlJaKm.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/scheme-DQCgrYNe.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/scss-CPnU-uuv.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/sdbl-bTVj8UrX.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/shaderlab-TOUzSsQk.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/shellscript-BbTp1yjG.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/shellsession-BmAC8SMF.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/slack-dark-DnToyrRv.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/slack-ochin-B2OO5cIa.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/smalltalk-B16xEiuN.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/snazzy-light-4G7pJPwS.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/solarized-dark-DV17i1UV.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/solarized-light-DSh2HLQt.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/solidity-CKzVLygQ.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/soy-CdbyEXp6.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/space-separated-tokens-DpjE5PGy.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/sparql-D_iOobhT.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/splunk-BC2Px7Mm.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/sql-hpBkusIy.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/src-D-NMWEou.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ssh-config-BgfXC-Er.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/stata-DVbvk3qH.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/stylus-B6D30XZt.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/surrealql-DxccxuMd.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/svelte-DzNm5V2w.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/swift-DonLKvLd.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/synthwave-84-nFMaYfgc.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/system-verilog-DJ5XKQeo.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/systemd-BxMlprV5.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/talonscript-CohzipZa.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/tasl-DMoTqEGO.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/tcl-CZd0xW_V.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/templ-CsM0tTsw.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/terraform-DswuEJGm.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/tex-B0f_hYr8.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/tokyo-night-oM2G3aXe.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/toml-CcmNWLt0.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/ts-tags-Bf-FGGvT.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/tsv-sltzmVWM.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/tsx-DFvk7AwW.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/turtle-ByJddavk.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/twig-VJ4-Ntm0.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/typescript-DHTLvXzV.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/typespec-B88KGewJ.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/typst-DI99ib-x.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/v-DETTlOr0.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/v4-DqR3yzBO.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vala-zf12oZj6.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vb-Djn5o6TS.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/verilog-CiiDBU1e.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vesper-D5bVUKB1.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vhdl-BroJfC0k.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/viml-DvXPmvsu.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vitesse-black-fwtXNY1n.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vitesse-dark-BZCL-v6S.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vitesse-light-VbXTXTou.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vue-D3dSYZKz.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vue-html-DQch_7VQ.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vue-vine-B67Dz05t.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/vyper-CgoNMtux.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/wasm-BnjxR4X6.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/wasm-ByWQv1Qj.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/wenyan-C8pVoKbM.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/wgsl-BsKzXJz4.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/wikitext-ClFFjSW2.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/wit-DdvCle-K.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/wolfram-DLL8P-h_.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/xml-C33zriiW.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/xsl-BFS2wyMt.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/yaml-w0rMsuN4.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/zenscript-BnlCZFoB.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/assets/zig-CMLA9XwU.js +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/install.ps1 +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/install.sh +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/static/logo.png +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/store/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/web/store/sessions.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/wire/__init__.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/wire/file.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/wire/protocol.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/wire/root_hub.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/wire/serde.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/wire/server.py +0 -0
- {pythinker_code-0.51.0 → pythinker_code-0.52.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.52.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,7 +115,7 @@ 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.52.0
|
|
119
119
|
|
|
120
120
|
- **Model-aware thinking levels.** The thinking selector and Shift+Tab cycle now scope reasoning effort to what the active GPT-5-family model accepts; unsupported persisted levels are clamped before the API call.
|
|
121
121
|
- **Cleaner diff cards.** Diff syntax highlighting no longer paints an opaque code-theme background over green/red row tints — tints show through on every terminal.
|
|
@@ -124,7 +124,7 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
124
124
|
- **Update notice moved to footer.** The persistent "Restart to apply" / "Update available" line renders below the status/clock row, clear of the input box.
|
|
125
125
|
- **Safer Homebrew self-upgrades.** Silent `brew upgrade` runs with cleanup/auto-update disabled so the in-use Cellar version isn't deleted mid-session.
|
|
126
126
|
|
|
127
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
127
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.52.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
128
128
|
|
|
129
129
|
|
|
130
130
|
---
|
|
@@ -214,7 +214,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
|
|
|
214
214
|
|
|
215
215
|
| Platform | Recommended install | Artifact source |
|
|
216
216
|
|---|---|---|
|
|
217
|
-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.
|
|
217
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.52.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
218
218
|
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <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) |
|
|
219
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 |
|
|
220
220
|
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
|
|
@@ -242,7 +242,7 @@ pythinker # start the interactive TUI
|
|
|
242
242
|
|
|
243
243
|
### 🪟 Windows — native installer
|
|
244
244
|
|
|
245
|
-
`PythinkerSetup-0.
|
|
245
|
+
`PythinkerSetup-0.52.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
246
246
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
247
247
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
248
248
|
the change. **No UAC prompt.**
|
|
@@ -253,13 +253,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
253
253
|
|
|
254
254
|
# Or manually download the installer + checksum from the Releases page,
|
|
255
255
|
# verify with Get-FileHash, then run:
|
|
256
|
-
.\PythinkerSetup-0.
|
|
256
|
+
.\PythinkerSetup-0.52.0.exe
|
|
257
257
|
|
|
258
258
|
# Open a fresh PowerShell
|
|
259
259
|
pythinker --version
|
|
260
260
|
```
|
|
261
261
|
|
|
262
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
262
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.52.0.exe /ALLUSERS`
|
|
263
263
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
264
264
|
|
|
265
265
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -317,26 +317,26 @@ attached to every GitHub Release.
|
|
|
317
317
|
|
|
318
318
|
```sh
|
|
319
319
|
# Debian / Ubuntu (x86_64)
|
|
320
|
-
sudo dpkg -i pythinker-code_0.
|
|
320
|
+
sudo dpkg -i pythinker-code_0.52.0_amd64.deb
|
|
321
321
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
322
322
|
|
|
323
323
|
# Debian / Ubuntu (ARM64)
|
|
324
|
-
sudo dpkg -i pythinker-code_0.
|
|
324
|
+
sudo dpkg -i pythinker-code_0.52.0_arm64.deb
|
|
325
325
|
|
|
326
326
|
# Fedora / RHEL / openSUSE (x86_64)
|
|
327
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
328
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
329
|
-
sha256sum -c pythinker-code-0.
|
|
327
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.52.0/pythinker-code-0.52.0.x86_64.rpm
|
|
328
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.52.0/pythinker-code-0.52.0.x86_64.rpm.sha256
|
|
329
|
+
sha256sum -c pythinker-code-0.52.0.x86_64.rpm.sha256
|
|
330
330
|
# Fedora / RHEL:
|
|
331
|
-
sudo dnf install ./pythinker-code-0.
|
|
331
|
+
sudo dnf install ./pythinker-code-0.52.0.x86_64.rpm
|
|
332
332
|
# openSUSE:
|
|
333
|
-
sudo zypper install ./pythinker-code-0.
|
|
333
|
+
sudo zypper install ./pythinker-code-0.52.0.x86_64.rpm
|
|
334
334
|
|
|
335
335
|
# Fedora / RHEL (aarch64)
|
|
336
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
337
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
338
|
-
sha256sum -c pythinker-code-0.
|
|
339
|
-
sudo dnf install ./pythinker-code-0.
|
|
336
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.52.0/pythinker-code-0.52.0.aarch64.rpm
|
|
337
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.52.0/pythinker-code-0.52.0.aarch64.rpm.sha256
|
|
338
|
+
sha256sum -c pythinker-code-0.52.0.aarch64.rpm.sha256
|
|
339
|
+
sudo dnf install ./pythinker-code-0.52.0.aarch64.rpm
|
|
340
340
|
```
|
|
341
341
|
|
|
342
342
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -345,8 +345,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
345
345
|
**Verify before install:**
|
|
346
346
|
|
|
347
347
|
```sh
|
|
348
|
-
sha256sum -c pythinker-code_0.
|
|
349
|
-
sha256sum -c pythinker-code-0.
|
|
348
|
+
sha256sum -c pythinker-code_0.52.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
349
|
+
sha256sum -c pythinker-code-0.52.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
350
350
|
```
|
|
351
351
|
|
|
352
352
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -50,7 +50,7 @@ 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.52.0
|
|
54
54
|
|
|
55
55
|
- **Model-aware thinking levels.** The thinking selector and Shift+Tab cycle now scope reasoning effort to what the active GPT-5-family model accepts; unsupported persisted levels are clamped before the API call.
|
|
56
56
|
- **Cleaner diff cards.** Diff syntax highlighting no longer paints an opaque code-theme background over green/red row tints — tints show through on every terminal.
|
|
@@ -59,7 +59,7 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
59
59
|
- **Update notice moved to footer.** The persistent "Restart to apply" / "Update available" line renders below the status/clock row, clear of the input box.
|
|
60
60
|
- **Safer Homebrew self-upgrades.** Silent `brew upgrade` runs with cleanup/auto-update disabled so the in-use Cellar version isn't deleted mid-session.
|
|
61
61
|
|
|
62
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
62
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.52.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
---
|
|
@@ -149,7 +149,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
|
|
|
149
149
|
|
|
150
150
|
| Platform | Recommended install | Artifact source |
|
|
151
151
|
|---|---|---|
|
|
152
|
-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.
|
|
152
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.52.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
153
153
|
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <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) |
|
|
154
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 |
|
|
155
155
|
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
|
|
@@ -177,7 +177,7 @@ pythinker # start the interactive TUI
|
|
|
177
177
|
|
|
178
178
|
### 🪟 Windows — native installer
|
|
179
179
|
|
|
180
|
-
`PythinkerSetup-0.
|
|
180
|
+
`PythinkerSetup-0.52.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
181
181
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
182
182
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
183
183
|
the change. **No UAC prompt.**
|
|
@@ -188,13 +188,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
188
188
|
|
|
189
189
|
# Or manually download the installer + checksum from the Releases page,
|
|
190
190
|
# verify with Get-FileHash, then run:
|
|
191
|
-
.\PythinkerSetup-0.
|
|
191
|
+
.\PythinkerSetup-0.52.0.exe
|
|
192
192
|
|
|
193
193
|
# Open a fresh PowerShell
|
|
194
194
|
pythinker --version
|
|
195
195
|
```
|
|
196
196
|
|
|
197
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
197
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.52.0.exe /ALLUSERS`
|
|
198
198
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
199
199
|
|
|
200
200
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -252,26 +252,26 @@ attached to every GitHub Release.
|
|
|
252
252
|
|
|
253
253
|
```sh
|
|
254
254
|
# Debian / Ubuntu (x86_64)
|
|
255
|
-
sudo dpkg -i pythinker-code_0.
|
|
255
|
+
sudo dpkg -i pythinker-code_0.52.0_amd64.deb
|
|
256
256
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
257
257
|
|
|
258
258
|
# Debian / Ubuntu (ARM64)
|
|
259
|
-
sudo dpkg -i pythinker-code_0.
|
|
259
|
+
sudo dpkg -i pythinker-code_0.52.0_arm64.deb
|
|
260
260
|
|
|
261
261
|
# Fedora / RHEL / openSUSE (x86_64)
|
|
262
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
263
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
264
|
-
sha256sum -c pythinker-code-0.
|
|
262
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.52.0/pythinker-code-0.52.0.x86_64.rpm
|
|
263
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.52.0/pythinker-code-0.52.0.x86_64.rpm.sha256
|
|
264
|
+
sha256sum -c pythinker-code-0.52.0.x86_64.rpm.sha256
|
|
265
265
|
# Fedora / RHEL:
|
|
266
|
-
sudo dnf install ./pythinker-code-0.
|
|
266
|
+
sudo dnf install ./pythinker-code-0.52.0.x86_64.rpm
|
|
267
267
|
# openSUSE:
|
|
268
|
-
sudo zypper install ./pythinker-code-0.
|
|
268
|
+
sudo zypper install ./pythinker-code-0.52.0.x86_64.rpm
|
|
269
269
|
|
|
270
270
|
# Fedora / RHEL (aarch64)
|
|
271
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
272
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
273
|
-
sha256sum -c pythinker-code-0.
|
|
274
|
-
sudo dnf install ./pythinker-code-0.
|
|
271
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.52.0/pythinker-code-0.52.0.aarch64.rpm
|
|
272
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.52.0/pythinker-code-0.52.0.aarch64.rpm.sha256
|
|
273
|
+
sha256sum -c pythinker-code-0.52.0.aarch64.rpm.sha256
|
|
274
|
+
sudo dnf install ./pythinker-code-0.52.0.aarch64.rpm
|
|
275
275
|
```
|
|
276
276
|
|
|
277
277
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -280,8 +280,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
280
280
|
**Verify before install:**
|
|
281
281
|
|
|
282
282
|
```sh
|
|
283
|
-
sha256sum -c pythinker-code_0.
|
|
284
|
-
sha256sum -c pythinker-code-0.
|
|
283
|
+
sha256sum -c pythinker-code_0.52.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
284
|
+
sha256sum -c pythinker-code-0.52.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
285
285
|
```
|
|
286
286
|
|
|
287
287
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -15,6 +15,65 @@ GitHub Releases page; `0.8.0` is the new starting line.
|
|
|
15
15
|
|
|
16
16
|
## Unreleased
|
|
17
17
|
|
|
18
|
+
## 0.52.0 (2026-06-23)
|
|
19
|
+
|
|
20
|
+
- **`InvalidToolError` now names the failing tool and the reason.** A bad
|
|
21
|
+
tool path in `agent.yaml` (typo, missing class, or — most commonly — a
|
|
22
|
+
`pythinker` binary built before the tool was added) used to surface as a
|
|
23
|
+
bare `Invalid tools: ['pythinker_code.tools.agent:ImplementAndJudge']`
|
|
24
|
+
with the actual reason buried in the log file. The aggregated error now
|
|
25
|
+
lists each bad tool with the per-tool reason, and a class-name miss logs
|
|
26
|
+
a `Did you mean '<Closest>'?` hint. A constructor exception on one tool
|
|
27
|
+
is caught per-tool so the user gets one clear error instead of a
|
|
28
|
+
traceback. Rebuild the binary (`make build-bin`) if the new error names
|
|
29
|
+
a tool that exists in the working tree.
|
|
30
|
+
- **Auto-chain `implementer` → `judge` for non-trivial scoped edits.** The new
|
|
31
|
+
`ImplementAndJudge` tool runs `implementer` once, hands the artifact to
|
|
32
|
+
`judge`, and on `NEEDS_WORK` re-invokes `implementer` once with the
|
|
33
|
+
judge's `REQUIRED FIXES` under a `## Revision brief` section before
|
|
34
|
+
re-judging. Two implementer invocations is the hard cap — a
|
|
35
|
+
still-`NEEDS_WORK` after revision surfaces the contradiction and stops.
|
|
36
|
+
Parent agents should call `ImplementAndJudge` instead of `Agent:
|
|
37
|
+
implementer` + `Agent: judge`; bare `judge` calls remain the right shape
|
|
38
|
+
for non-implementation reviews (reports, audits, severity-scored
|
|
39
|
+
findings).
|
|
40
|
+
- **Judge adopts the minimum-diff rubric dimension.** Every non-trivial diff
|
|
41
|
+
the judge reviews is now checked against the reduction ladder
|
|
42
|
+
(skip-need → reuse-stdlib → use-native → use-installed-dep → one-line →
|
|
43
|
+
minimum) and the minimum-diff rubric (no abstractions, no new deps
|
|
44
|
+
without justification, no new config keys without a consumer, no
|
|
45
|
+
reformatting churn outside the changed lines). The judge applies the full
|
|
46
|
+
ladder uniformly — there is no mode switch on the judge.
|
|
47
|
+
- **Bundled judge-branded skills.** `judge-minimum-diff` (the rubric
|
|
48
|
+
applied as a judge dimension) and `judge-overengineering-review` (the
|
|
49
|
+
parent-facing review checklist) ship as static default skills, replacing
|
|
50
|
+
ad-hoc prose in the system prompt with explicit, versionable content.
|
|
51
|
+
- **Fix OpenAI Responses requests that could still send `role="system"` after
|
|
52
|
+
switching to a newer Pythinker catalog model (gpt-5.5, gpt-5.3-codex,
|
|
53
|
+
gpt-5.3-codex-spark, or any user-defined fine-tune).** Pythinker observed
|
|
54
|
+
OpenAI returning `System messages are not allowed` on this path, but the
|
|
55
|
+
`system→developer` conversion was previously gated on the openai SDK's
|
|
56
|
+
`ResponsesModel` literal, which lags Pythinker's own model catalog. The
|
|
57
|
+
conversion now runs unconditionally in `OpenAIResponses`, so all local
|
|
58
|
+
system messages are normalized before sending. Also fixes the model-switch
|
|
59
|
+
carry-over path (`_carry_context_to_session`) whose seeded `role="system"`
|
|
60
|
+
summary message was sent verbatim on the first request after a switch.
|
|
61
|
+
- **Background bash tasks (npm dev, docker run) no longer show the agent
|
|
62
|
+
verb spinner.** Pure-bash background work now shows a fixed "Running in
|
|
63
|
+
background…" label instead of "Composing…/Brewing…" verbs, which read as
|
|
64
|
+
agent activity. Mixed bash+agent background work keeps the verb spinner
|
|
65
|
+
while the agent is actively producing tokens.
|
|
66
|
+
- **Quiet background tasks no longer force a 0.1s prompt repaint.** When a
|
|
67
|
+
background task has produced no output for 2 seconds, the refresh loop
|
|
68
|
+
drops to the idle 1.0s interval instead of spinning the braille marker at
|
|
69
|
+
12.5 fps — fixing the "stuck spinner" look for long-running dev servers
|
|
70
|
+
on Windows VS Code.
|
|
71
|
+
- **Welcome banner no longer shows a stale "Update available" chip after a
|
|
72
|
+
successful /update.** The banner chip now mirrors the under-input notice:
|
|
73
|
+
when the update has landed this session (state=UPDATED, smoke check passed),
|
|
74
|
+
it shows "Updated X → vY. Restart to apply." instead of telling the user
|
|
75
|
+
to re-run an update that already completed.
|
|
76
|
+
|
|
18
77
|
## 0.51.0 (2026-06-22)
|
|
19
78
|
|
|
20
79
|
- **Reasoning levels now match each GPT model.** The thinking selector and
|
{pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/agent.yaml
RENAMED
|
@@ -7,6 +7,7 @@ agent:
|
|
|
7
7
|
tools:
|
|
8
8
|
- "pythinker_code.tools.agent:Agent"
|
|
9
9
|
- "pythinker_code.tools.agent:RunAgents"
|
|
10
|
+
- "pythinker_code.tools.agent:ImplementAndJudge"
|
|
10
11
|
- "pythinker_code.tools.skill:ReadSkill"
|
|
11
12
|
# - "pythinker_code.tools.dmail:SendDMail"
|
|
12
13
|
# - "pythinker_code.tools.think:Think"
|
{pythinker_code-0.51.0 → pythinker_code-0.52.0}/src/pythinker_code/agents/default/judge.yaml
RENAMED
|
@@ -18,6 +18,7 @@ agent:
|
|
|
18
18
|
|
|
19
19
|
## Context Gate
|
|
20
20
|
- Require the parent's packet: the original request, the diff or changed files, the commands actually run with their results, residual risks, and the draft final answer. If a load-bearing piece is missing, verdict BLOCKED and name it.
|
|
21
|
+
- When judging a code-change summary produced by `implementer`, require the implementer's `<coding_artifact>` block in the packet; if it is missing for a non-trivial code change, verdict BLOCKED and name it.
|
|
21
22
|
|
|
22
23
|
## External Claims (offline gate)
|
|
23
24
|
You run offline by design — the verify profile blocks network and doc-lookup tools, so you never go online. External claims are judged by the parent's evidence, never by your own research or training-cutoff memory:
|
|
@@ -39,6 +40,7 @@ agent:
|
|
|
39
40
|
- Safety and scope: no unsafe or destructive action, no secret or PII exposure, no scope creep beyond the request.
|
|
40
41
|
- 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.
|
|
41
42
|
- Findings quality: for reports, each finding is actionable, anchored to evidence, and severity-ranked consistently with the base prompt's severity rubric (critical/high/medium/low/info).
|
|
43
|
+
- Minimum-diff: the diff takes the smallest rung of the reduction ladder (skip-need → reuse-stdlib → use-native → use-installed-dep → one-line → minimum) before adding new code; no abstractions, dependencies, config keys, files, or error paths that the brief did not ask for. New dependencies require a one-line justification; new config keys require a one-line consumer. The ladder applies uniformly — judge once, not per-mode.
|
|
42
44
|
|
|
43
45
|
## Role Exit Checklist
|
|
44
46
|
- PASS: sound; at most minor wording nits remain.
|
|
@@ -97,6 +97,8 @@ Build only after requirements are understood (ask if unclear) and evidence is ga
|
|
|
97
97
|
|
|
98
98
|
For refactors, update every call site the interface change touches, and do not alter existing logic — especially in tests — beyond what the change requires. For features, add tests if the project already has tests. Migrations go additive before destructive, reversible where the framework allows; never edit a migration that already shipped. Identify the synchronization model in use and conform to it; explicitly flag any new lock, atomic, or async-boundary change. Update comments, docstrings, and README snippets your change makes false — stale documentation is a bug you just wrote.
|
|
99
99
|
|
|
100
|
+
**Default to `ImplementAndJudge` for non-trivial scoped edits** instead of calling `implementer` and `judge` separately. The chain runs `implementer` first, hands the artifact to `judge`, and on `NEEDS_WORK` re-invokes `implementer` once with the judge's `REQUIRED FIXES` under a `## Revision brief` section before re-judging. The implementer cap is two invocations total — a still-`NEEDS_WORK` after revision surfaces the contradiction to you and stops. Pass `scope` so the judge can `git diff` only the allowed paths; pass `acceptance` to give the judge concrete pass conditions beyond the rubric.
|
|
101
|
+
|
|
100
102
|
### 4.5 Research & file generation
|
|
101
103
|
|
|
102
104
|
For research or multimedia tasks (images, video, PDFs, docs, spreadsheets, presentations): clarify requirements first, plan before deep or wide research, design search queries deliberately. Detect tools already in the environment before installing anything; third-party installs go in an isolated/virtual environment. After generating or editing any media file, read it back to confirm the content. Never install to or delete from outside the working directory without confirmation.
|
|
@@ -121,6 +123,8 @@ For research or multimedia tasks (images, video, PDFs, docs, spreadsheets, prese
|
|
|
121
123
|
|
|
122
124
|
**Judge gate.** Before delivering high-stakes or hard-to-reverse work, run an independent `judge` subagent as the last step when available. Triggers — any one suffices: a change spanning multiple files or touching production guardrail surfaces (§6); a deliverable the user will merge, deploy, publish, or act on; a security audit or any severity-scored findings report; a release or destructive action. When unsure whether work is high-stakes, treat it as high-stakes; skip it for low-stakes, reversible, or trivial work. Hand the judge a tight packet: original request, the diff or changed files, the commands actually run with their results, residual risks, and your draft answer. It is one cheap spot-checking pass that gates your evidence — it does not redo work or replace deterministic tests and lint, so run those first. Treat `NEEDS_WORK` or `BLOCKED` as a stop: fix or revise, re-judge only if the change was material. When the judge is unavailable, walk the same checklist yourself, lead with the same `PASS`/`NEEDS_WORK`/`BLOCKED` verdict, state what verification actually ran, and put any missing packet element under **BLOCKERS**.
|
|
123
125
|
|
|
126
|
+
Default to `ImplementAndJudge` for non-trivial scoped edits (see §4.4); reserve a bare `judge` call for non-implementation reviews — reports, audits, severity-scored findings, or answers that don't ship code.
|
|
127
|
+
|
|
124
128
|
**Background shell** (root agent only). Launch long-running commands via `Shell` with `run_in_background=true` and a short `description`; the system notifies you at terminal states. `TaskList` re-enumerates active tasks (especially after context compaction); `TaskOutput` gives non-blocking snapshots (`block=true` only to intentionally wait); `TaskStop` cancels. After starting a background task, default to returning control to the user. The only task-management slash command for users is `/task` — never invent subcommands like `/task list` or `/tasks`. Subagents and sessions without these tools must not assume background-task control.
|
|
125
129
|
|
|
126
130
|
**Skills (`ReadSkill`).** Load a skill's exact instructions before applying its workflow — mandatory for `review-pr`, `diagnose-ci-failures`, `fix-errors`, `implement-specs`, `spec-driven-implementation`, `check-impl-against-spec`, `resolve-merge-conflicts`, and `create-pr`. Read skill details only when needed, to conserve context. Catalog and scope precedence in §12.
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: judge-minimum-diff
|
|
3
|
+
description: Reduction-ladder and minimum-diff checks the Pythinker judge subagent applies to every non-trivial diff.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Judge Minimum-Diff Lens
|
|
7
|
+
|
|
8
|
+
Use when judging a code change, diff, or implementation report. This is the
|
|
9
|
+
rubric dimension the Pythinker judge subagent applies to every non-trivial
|
|
10
|
+
diff — the same ladder that lives in the base system prompt's §6 (Code
|
|
11
|
+
Standards), surfaced here as an explicit rubric so the judge, an
|
|
12
|
+
implementer doing pre-flight, or a reviewer running the over-engineering
|
|
13
|
+
skill apply it uniformly.
|
|
14
|
+
|
|
15
|
+
The judge applies the full ladder. There is no mode switch on the judge
|
|
16
|
+
(`lite` / `full` / `ultra`); the implementer is the role that would carry a
|
|
17
|
+
mode toggle if one is ever introduced.
|
|
18
|
+
|
|
19
|
+
## The ladder — walk it before writing code; stop at the first rung that holds
|
|
20
|
+
|
|
21
|
+
1. **Does this need to exist at all?** A speculative need is skipped, said so
|
|
22
|
+
in one line. YAGNI is the highest rung.
|
|
23
|
+
2. **Does the standard library do it?** Use it.
|
|
24
|
+
3. **Does a native platform or framework feature cover it?** A database
|
|
25
|
+
constraint over an app-level check, a built-in form control over a picker
|
|
26
|
+
library, the language's own construct over a hand-rolled one — use it.
|
|
27
|
+
4. **Does a dependency already in the manifest solve it?** Use it; never add
|
|
28
|
+
a new dependency for what a few lines cover.
|
|
29
|
+
5. **Can it be one line?** Make it one line.
|
|
30
|
+
6. **Only then** write the minimum code that works.
|
|
31
|
+
|
|
32
|
+
When two rungs both hold, take the higher one and move on. The ladder is a
|
|
33
|
+
reflex, not a research project. None of this overrides the guards below:
|
|
34
|
+
trust-boundary validation, error handling that prevents data loss, security,
|
|
35
|
+
and accessibility stay in even at rung 5.
|
|
36
|
+
|
|
37
|
+
## Minimum-diff rubric
|
|
38
|
+
|
|
39
|
+
A diff passes the minimum-diff check when **all** of these hold:
|
|
40
|
+
|
|
41
|
+
- The change takes the smallest rung of the ladder above before adding new
|
|
42
|
+
code.
|
|
43
|
+
- There are **no abstractions** (no interface with one implementation, no
|
|
44
|
+
factory for one product, no config layer for a value that never changes)
|
|
45
|
+
that the brief did not ask for.
|
|
46
|
+
- There are **no new dependencies** unless the brief asked for one; when one
|
|
47
|
+
is added, a one-line justification names why an already-installed
|
|
48
|
+
dependency or the standard library couldn't cover it.
|
|
49
|
+
- There are **no new config keys** unless a consumer is named in the same
|
|
50
|
+
diff (a value with no consumer is over-engineering).
|
|
51
|
+
- There are **no new files** unless the brief asked for them; reuse the
|
|
52
|
+
nearest neighbor's module.
|
|
53
|
+
- There are **no error paths for impossible scenarios**; validate at
|
|
54
|
+
boundaries, not deep in business logic.
|
|
55
|
+
- There is **no reformatting, renaming, or wrapping churn** outside the
|
|
56
|
+
changed lines. Formatting churn is scope creep.
|
|
57
|
+
- **Comments only where they earn their keep**: non-obvious algorithms,
|
|
58
|
+
deliberate simplifications whose ceiling matters, business rules, or
|
|
59
|
+
genuine `TODO:` technical debt. No self-evident comments.
|
|
60
|
+
|
|
61
|
+
When a deliberate simplification has a known ceiling (a coarse lock, an
|
|
62
|
+
O(n²) scan, a naive heuristic), mark it with a `judge:` comment naming the
|
|
63
|
+
ceiling and the upgrade path. The judge reads these comments as evidence,
|
|
64
|
+
not as license.
|
|
65
|
+
|
|
66
|
+
## When NOT to be lazy
|
|
67
|
+
|
|
68
|
+
Never simplify away:
|
|
69
|
+
|
|
70
|
+
- Input validation at trust boundaries.
|
|
71
|
+
- Error handling that prevents data loss (rollback, idempotency, atomic
|
|
72
|
+
state, listener cleanup).
|
|
73
|
+
- Security measures (parameterized SQL, canonicalized paths, encoded output,
|
|
74
|
+
hand-off-crypto, secret hygiene).
|
|
75
|
+
- Accessibility basics (semantic HTML, alt text, focus order, keyboard
|
|
76
|
+
reachability, contrast).
|
|
77
|
+
- Anything the user explicitly requested.
|
|
78
|
+
|
|
79
|
+
A junior-friendly check: would a senior engineer call this over-engineered?
|
|
80
|
+
If yes, simplify. If no, the diff is at the right rung.
|
|
81
|
+
|
|
82
|
+
## How the judge applies this rubric
|
|
83
|
+
|
|
84
|
+
When the judge receives an `implementer` packet:
|
|
85
|
+
|
|
86
|
+
- **Evidence**: the implementer's `<coding_artifact>` block is the
|
|
87
|
+
implementer's claim; the judge verifies it against the diff.
|
|
88
|
+
- **Currency / Fidelity / Verification / Safety / Scope / Production
|
|
89
|
+
guardrails / Findings quality**: per the standard judge rubric in the base
|
|
90
|
+
prompt.
|
|
91
|
+
- **Minimum-diff** (this rubric): the judge checks every bullet under
|
|
92
|
+
*Minimum-diff rubric* above. A NEEDS_WORK verdict is required when the
|
|
93
|
+
diff adds any of the over-engineering shapes, even if the change works.
|
|
94
|
+
|
|
95
|
+
The verdict contract is unchanged: `PASS` / `NEEDS_WORK` / `BLOCKED` as the
|
|
96
|
+
first word of SUMMARY. The chain tool parses the verdict verbatim and
|
|
97
|
+
optionally re-invokes the implementer once on `NEEDS_WORK`.
|
|
98
|
+
|
|
99
|
+
## Hardware and physical-world caveat
|
|
100
|
+
|
|
101
|
+
Hardware is never the ideal on paper: a real clock drifts, a real sensor
|
|
102
|
+
reads off, a PCA9685 runs a few percent fast. Leave the calibration knob,
|
|
103
|
+
not just less code. The physical world needs tuning a minimal model can't
|
|
104
|
+
see.
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: judge-overengineering-review
|
|
3
|
+
description: Over-engineering review checklist the parent runs before declaring non-trivial code changes done.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Judge Over-Engineering Review
|
|
7
|
+
|
|
8
|
+
Use when reviewing a non-trivial diff for over-engineering before declaring
|
|
9
|
+
the work done. This skill is the parent-facing companion to the
|
|
10
|
+
`judge-minimum-diff` rubric — the parent runs it as a pre-flight pass, and
|
|
11
|
+
the `judge` subagent applies the same rubric as a quality-gate dimension.
|
|
12
|
+
|
|
13
|
+
## When to run
|
|
14
|
+
|
|
15
|
+
- Before declaring any non-trivial code change complete.
|
|
16
|
+
- During code review of a pull request that touches more than one file or
|
|
17
|
+
introduces new abstractions.
|
|
18
|
+
- When a previous implementer or coder's diff feels heavier than the
|
|
19
|
+
brief required.
|
|
20
|
+
|
|
21
|
+
For trivial one-line fixes or pure typo corrections, skip this skill —
|
|
22
|
+
YAGNI applies to review overhead too.
|
|
23
|
+
|
|
24
|
+
## Workflow
|
|
25
|
+
|
|
26
|
+
1. **Read the brief** the implementer was given. Note the explicit asks and
|
|
27
|
+
the explicit non-goals.
|
|
28
|
+
2. **Read the diff** scoped to the allowed paths. Note every new file, new
|
|
29
|
+
abstraction, new dependency, and new config key.
|
|
30
|
+
3. **Walk the reduction ladder** from `judge-minimum-diff`:
|
|
31
|
+
|
|
32
|
+
- Did the diff take the highest rung that holds?
|
|
33
|
+
- Is there stdlib / native / installed-dep reuse the diff missed?
|
|
34
|
+
- Could the change be one line and isn't?
|
|
35
|
+
|
|
36
|
+
4. **Score each finding** under the rubric below.
|
|
37
|
+
5. **Report** in the parent-facing review block format: `path:line` for
|
|
38
|
+
every finding, severity per §4.1 of the base prompt, the suggested
|
|
39
|
+
smallest fix.
|
|
40
|
+
|
|
41
|
+
## Review checklist
|
|
42
|
+
|
|
43
|
+
A diff fails the over-engineering review when it has **any** of:
|
|
44
|
+
|
|
45
|
+
- **Speculative abstraction.** Interface with one implementation, factory
|
|
46
|
+
for one product, abstract base class with one subclass, config layer for
|
|
47
|
+
a value that never varies.
|
|
48
|
+
- **New dependency without justification.** The standard library, a
|
|
49
|
+
native platform feature, or an already-installed dependency could have
|
|
50
|
+
covered it. A new dep needs a one-line justification in the diff or PR
|
|
51
|
+
body.
|
|
52
|
+
- **New config key without a consumer in the same diff.** A new key with no
|
|
53
|
+
reader is dead configuration.
|
|
54
|
+
- **New file without brief backing.** A new module/folder the brief did not
|
|
55
|
+
ask for, even if "tidier". Reuse the nearest neighbor first.
|
|
56
|
+
- **Error handling for impossible scenarios.** Validating deep in business
|
|
57
|
+
logic for inputs the boundary already filtered; re-validating after a
|
|
58
|
+
function the caller controls.
|
|
59
|
+
- **Boilerplate scaffolding "for later".** TODOs that fill a stub, fixtures
|
|
60
|
+
the test doesn't use, helper modules with no callers yet.
|
|
61
|
+
- **Formatting churn outside the changed lines.** Reformat, rename, or
|
|
62
|
+
rewrap on lines the brief did not ask to change.
|
|
63
|
+
- **Self-evident comments.** Restating what the next line of code already
|
|
64
|
+
says. Comments only earn their keep when they document non-obvious
|
|
65
|
+
algorithms, deliberate simplifications with a known ceiling, business
|
|
66
|
+
rules, or genuine `TODO:` debt.
|
|
67
|
+
- **Clever over boring.** Clever is what someone decodes at 3am. Boring is
|
|
68
|
+
the default; clever needs justification.
|
|
69
|
+
- **Length-as-quality.** A 500-line diff to replace a 50-line problem is a
|
|
70
|
+
finding, not an accomplishment.
|
|
71
|
+
|
|
72
|
+
A diff **passes** when none of the above apply, every non-trivial design
|
|
73
|
+
choice has a one-line reason in the diff or PR body, and the deliberate
|
|
74
|
+
simplifications (if any) carry a `judge:` comment naming the ceiling.
|
|
75
|
+
|
|
76
|
+
## When NOT to flag
|
|
77
|
+
|
|
78
|
+
- **Trust-boundary validation.** Always keep — never call this
|
|
79
|
+
over-engineering.
|
|
80
|
+
- **Error handling that prevents data loss** (rollback, idempotency,
|
|
81
|
+
atomic state, listener cleanup). Always keep.
|
|
82
|
+
- **Security measures** (parameterized SQL, canonicalized paths, encoded
|
|
83
|
+
output, secret hygiene). Always keep.
|
|
84
|
+
- **Accessibility basics**. Always keep.
|
|
85
|
+
- **User-explicit asks.** If the brief says "add a factory", add the
|
|
86
|
+
factory. Don't second-guess explicit requirements.
|
|
87
|
+
|
|
88
|
+
## Output
|
|
89
|
+
|
|
90
|
+
A parent-facing review block:
|
|
91
|
+
|
|
92
|
+
```text
|
|
93
|
+
SUMMARY
|
|
94
|
+
OVER-ENGINEERING FINDINGS
|
|
95
|
+
- severity: path:line — what + why + smallest fix
|
|
96
|
+
NOT OVER-ENGINEERED (deliberate)
|
|
97
|
+
- path:line — why this is at the right rung
|
|
98
|
+
VERDICT
|
|
99
|
+
PASS | NEEDS_WORK | BLOCKED
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
`PASS` = diff is at the right rung; ship it. `NEEDS_WORK` = at least one
|
|
103
|
+
finding above applies; revise and re-review. `BLOCKED` = the brief and the
|
|
104
|
+
diff disagree about scope; clarify with the user before continuing.
|
|
@@ -1203,10 +1203,14 @@ class PythinkerToolset:
|
|
|
1203
1203
|
|
|
1204
1204
|
Raises:
|
|
1205
1205
|
InvalidToolError(PythinkerCLIException, ValueError): When any tool cannot be loaded.
|
|
1206
|
+
The message lists each bad tool with the actual failure reason
|
|
1207
|
+
(module missing, class missing, or constructor exception) so a
|
|
1208
|
+
stale-binary or typo case is diagnosable from the traceback
|
|
1209
|
+
without grepping the log file.
|
|
1206
1210
|
"""
|
|
1207
1211
|
|
|
1208
1212
|
good_tools: list[str] = []
|
|
1209
|
-
bad_tools: list[str] = []
|
|
1213
|
+
bad_tools: list[tuple[str, str]] = []
|
|
1210
1214
|
|
|
1211
1215
|
for tool_path in tool_paths:
|
|
1212
1216
|
if ":" not in tool_path:
|
|
@@ -1220,14 +1224,41 @@ class PythinkerToolset:
|
|
|
1220
1224
|
except SkipThisTool:
|
|
1221
1225
|
logger.info("Skipping tool: {tool_path}", tool_path=tool_path)
|
|
1222
1226
|
continue
|
|
1227
|
+
except Exception as exc: # noqa: BLE001 - aggregate per-tool failures, re-raise below
|
|
1228
|
+
# A constructor error (missing dep, type mismatch, binary built
|
|
1229
|
+
# before the tool was added) is a per-tool configuration bug.
|
|
1230
|
+
# Catch it here so the aggregated error names which tool failed
|
|
1231
|
+
# and why, instead of bubbling a bare traceback out of agent
|
|
1232
|
+
# load. The whole load still aborts on any failure — agent.yaml
|
|
1233
|
+
# tool references are hard requirements — but the user now gets
|
|
1234
|
+
# a one-line pointer to the offending tool.
|
|
1235
|
+
reason = f"{type(exc).__name__}: {exc}"
|
|
1236
|
+
# logger.exception keeps the full traceback in the log next to
|
|
1237
|
+
# the aggregated error, so a stale-binary / import-time
|
|
1238
|
+
# constructor failure stays diagnosable (the aggregated
|
|
1239
|
+
# InvalidToolError carries only the one-line reason).
|
|
1240
|
+
logger.exception(
|
|
1241
|
+
"Tool load failed: {tool_path}: {reason}",
|
|
1242
|
+
tool_path=tool_path,
|
|
1243
|
+
reason=reason,
|
|
1244
|
+
)
|
|
1245
|
+
bad_tools.append((tool_path, reason))
|
|
1246
|
+
continue
|
|
1223
1247
|
if tool:
|
|
1224
1248
|
self.add(tool)
|
|
1225
1249
|
good_tools.append(tool_path)
|
|
1226
1250
|
else:
|
|
1227
|
-
|
|
1251
|
+
# _load_tool returns None only for the known import / class
|
|
1252
|
+
# miss paths, both already logged with a reason. Surface a
|
|
1253
|
+
# generic placeholder so the aggregated error still names
|
|
1254
|
+
# the tool.
|
|
1255
|
+
bad_tools.append((tool_path, "class or module not found"))
|
|
1228
1256
|
logger.info("Loaded tools: {good_tools}", good_tools=good_tools)
|
|
1229
1257
|
if bad_tools:
|
|
1230
|
-
|
|
1258
|
+
lines = ["Invalid tools:"]
|
|
1259
|
+
for path, reason in bad_tools:
|
|
1260
|
+
lines.append(f" - {path}: {reason}")
|
|
1261
|
+
raise InvalidToolError("\n".join(lines))
|
|
1231
1262
|
|
|
1232
1263
|
@staticmethod
|
|
1233
1264
|
def _load_tool(tool_path: str, dependencies: dict[type[Any], Any]) -> ToolType | None:
|
|
@@ -1244,10 +1275,22 @@ class PythinkerToolset:
|
|
|
1244
1275
|
return None
|
|
1245
1276
|
tool_cls = getattr(module, class_name, None)
|
|
1246
1277
|
if tool_cls is None:
|
|
1278
|
+
# Best-effort "did you mean" — points users at the actual class
|
|
1279
|
+
# name when they typo'd it. Only attach to the warning, not the
|
|
1280
|
+
# aggregated error, so the log search stays one line per failure.
|
|
1281
|
+
suggestion = ""
|
|
1282
|
+
try:
|
|
1283
|
+
available = [n for n in dir(module) if not n.startswith("_")]
|
|
1284
|
+
matches = difflib.get_close_matches(class_name, available, n=1, cutoff=0.6)
|
|
1285
|
+
if matches:
|
|
1286
|
+
suggestion = f" Did you mean {matches[0]!r}?"
|
|
1287
|
+
except Exception: # noqa: BLE001 - dir() / difflib can't realistically fail, fail open
|
|
1288
|
+
suggestion = ""
|
|
1247
1289
|
logger.warning(
|
|
1248
|
-
"Tool class not found: {class_name} in {module_name}",
|
|
1290
|
+
"Tool class not found: {class_name} in {module_name}{suggestion}",
|
|
1249
1291
|
class_name=class_name,
|
|
1250
1292
|
module_name=module_name,
|
|
1293
|
+
suggestion=suggestion,
|
|
1251
1294
|
)
|
|
1252
1295
|
return None
|
|
1253
1296
|
args: list[Any] = []
|