pythinker-code 0.41.0__tar.gz → 0.42.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.41.0 → pythinker_code-0.42.0}/PKG-INFO +33 -25
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/README.md +32 -24
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/pyproject.toml +1 -1
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/CHANGELOG.md +21 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/host.py +4 -2
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/tools.py +8 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/system.md +2 -2
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/app.py +26 -2
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/background/agent_runner.py +78 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/background/manager.py +1 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/config.py +188 -5
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/llm.py +1 -1
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/plugin/tool.py +13 -1
- pythinker_code-0.42.0/src/pythinker_code/project_trust.py +157 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/agent.py +40 -6
- pythinker_code-0.42.0/src/pythinker_code/soul/api_errors.py +61 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/approval.py +8 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/compaction.py +115 -23
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/context.py +62 -1
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/dynamic_injections/inline_commands.py +9 -5
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/dynamic_injections/model_defense.py +2 -2
- pythinker_code-0.42.0/src/pythinker_code/soul/dynamic_injections/orchestration.py +129 -0
- pythinker_code-0.42.0/src/pythinker_code/soul/dynamic_injections/permissions_state.py +100 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +27 -2
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/flow_runner.py +1 -1
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/permission.py +189 -8
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/pythinkersoul.py +102 -53
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/slash.py +3 -7
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/toolset.py +220 -21
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/builder.py +16 -0
- pythinker_code-0.42.0/src/pythinker_code/subagents/core.py +173 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/git_context.py +28 -3
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/runner.py +28 -0
- pythinker_code-0.42.0/src/pythinker_code/subagents/worktree.py +165 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/thinking.py +2 -2
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/agent/__init__.py +51 -11
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/background/__init__.py +2 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/glob.py +1 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/grep_local.py +2 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/read.py +8 -1
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/read_media.py +1 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/replace.py +122 -1
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/write.py +8 -1
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/mcp_resource/__init__.py +2 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/memory/__init__.py +1 -1
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/recall/__init__.py +3 -2
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/shell/__init__.py +42 -16
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/think/__init__.py +1 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/todo/__init__.py +2 -2
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/web/fetch.py +14 -4
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/web/search.py +1 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/print/__init__.py +50 -8
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/__init__.py +73 -7
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/bash_execution.py +1 -1
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/markdown.py +2 -2
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/render_utils.py +1 -1
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/mcp_status.py +7 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/prompt.py +1 -1
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/slash.py +73 -3
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/spinner_words.py +5 -5
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/stats_pricing.py +1 -1
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tips.py +1 -1
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/update.py +138 -32
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +13 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +1 -1
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +21 -2
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/export.py +8 -2
- pythinker_code-0.42.0/src/pythinker_code/utils/sensitive.py +104 -0
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/arc-Bq1ATrqd.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/arc-CJHzrKlH.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-DTprl7ZG.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-DNC_zoAn.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-r3XPfPkk.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-B8cK1eXd.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-cPPpW6xv.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-BB57yVeM.js +1 -1
- pythinker_code-0.42.0/src/pythinker_code/web/static/assets/channel-DAFbWj2j.js +1 -0
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-zRVGxC0q.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-CGMsIeP3.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-Df3UXYL-.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-Dw9eayK9.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-BhlNOYb-.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-CFBqBKAl.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-CzIeTXuz.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-BAZYOPOM.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-Dgpkacqq.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-B9ZVJUy1.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-BjcsjcLg.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-DDbJIEeu.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-DAeOipxY.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-FGNVk4We.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-yGHvHknR.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-Py4-vxnG.js +1 -1
- pythinker_code-0.42.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-CcSvd4Qw.js +1 -0
- pythinker_code-0.42.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-CcSvd4Qw.js +1 -0
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DYXvo0FV.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-C1IrEtmM.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-DVVn2pTZ.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-ulfskTKs.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/cytoscape.esm-CUFrfDxQ.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/cytoscape.esm-CKJzb6jC.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-D2YXTLlG.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-DDOrrUUp.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-INpKnNH3.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-omiVVlh-.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL-BksnalpB.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL--WZ-sbyB.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-DB2x9kaC.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-DuJkH_Dp.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-D6pxKOq8.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-Dwh8l5yN.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-CIJx3svR.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-BBESBcOZ.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-CUh8dOLf.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-C6A8f555.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-BlQ_sCWm.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-DrG2uPK8.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-DHevRSWI.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-CzTDX_le.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-CB8ALgrH.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-Mfvyr5ag.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/graph-DF8UbLYG.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/graph-DWkqPwS6.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/index-CmNjQYCu.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/index-B9YPynda.js +2 -2
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/index-DlMxD2kw.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/index-CrbQ2iCP.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/index-CvBMXPz4.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/index-DFGZedSa.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-1K-WkM8D.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-DpW1lQOl.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-BYwQF8M6.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-oSY-FAVt.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-Dh25bGE8.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-BwYhSdLB.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-BcReiEP0.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-CG-YrkGS.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/layout-CJzXa1Ed.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/layout-D0mYdmsS.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/linear-p3G2bC46.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/linear-iesh3Eu0.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DOGBldyD.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DWNL9FgP.js +7 -7
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/mermaid.core-_-S_2Yi-.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/mermaid.core-DhY_x5WF.js +5 -5
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-VUOLy8fG.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-DsOe4v7I.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-Bi91s1ny.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-CGyoRO4_.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-CAf-Hn6l.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-Cj2chRtB.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-CCeiXrEd.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-DVv27OEE.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-B73Lr4Ze.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-BQILqDse.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-BXl-fQnH.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-6egz85VI.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-DfMe08Zi.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-DBJgV7Cm.js +1 -1
- pythinker_code-0.42.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-CQRzQ8b4.js +1 -0
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-_AdPAzzm.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-le8BJ0A-.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-CUN2oJ2s.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-Bjl4nmfL.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-CNtCn056.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-CQ9olIGT.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-CoQZgADy.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-COpN0Kqp.js +1 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-CbezmMpk.js → pythinker_code-0.42.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-DLwkPLC8.js +1 -1
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/index.html +1 -1
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/wire/types.py +2 -0
- pythinker_code-0.41.0/src/pythinker_code/subagents/core.py +0 -103
- pythinker_code-0.41.0/src/pythinker_code/utils/sensitive.py +0 -55
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/channel-5SEz47Z3.js +0 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-B_fsYv4N.js +0 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-B_fsYv4N.js +0 -1
- pythinker_code-0.41.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-DBt1mpR0.js +0 -1
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/LICENSE +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/NOTICE +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/__main__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/AGENTS.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/convert.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/mcp.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/server.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/session.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/types.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/acp/version.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/ask.yaml +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/debug.yaml +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/judge.yaml +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/planner.yaml +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/review.yaml +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/scout.yaml +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/agentspec.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/approval_runtime/models.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/alibaba.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/browser_login_page.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/deepseek.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/github_feedback.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/lm_studio.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/minimax.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/moonshot.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/oauth.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/ollama.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openai/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openai/_shared.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openai/browser_flow.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openai/catalog.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openai/config_apply.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openai/constants.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openai/login.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openai/models.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openai/oauth_client.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/opencode_go.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/openrouter.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/platforms.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/auth/z_ai.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/background/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/background/ids.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/background/models.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/background/store.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/background/summary.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/background/worker.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/__main__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/debug.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/export.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/info.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/mcp.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/plugin.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/review.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/secscan.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/security_scan.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/skill.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/toad.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/update.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/vis.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/cli/web.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/constant.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/events.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/exception.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/execution_profiles.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/extensions.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/feedback.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/feedback_repo.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/file_restore.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/hooks/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/hooks/config.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/hooks/engine.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/hooks/events.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/hooks/runner.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/memory/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/memory/consolidation.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/memory/harvest.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/memory/recall.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/memory/recap.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/memory/retriever.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/memory/sanitize.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/metadata.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/models_dev.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/native.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/notifications/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/notifications/llm.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/notifications/manager.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/notifications/models.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/notifications/notifier.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/notifications/store.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/notifications/wire.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/plugin/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/plugin/manager.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/project_memory.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/prompt_templates.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/prompts/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/prompts/best_practices.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/prompts/compact.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/prompts/goal_continuation.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/prompts/goal_set.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/prompts/goal_wrap_up.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/prompts/init.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/prompts/learn.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/py.typed +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/scratchpad.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/session.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/session_cleanup.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/session_fork.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/session_recap.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/session_state.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/share.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skill/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skill/flow/d2.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skill/lockfile.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/agent-creator/SKILL.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/customize-pythinker/SKILL.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/btw.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/deliberation.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/denwarenji.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/dynamic_injections/goal_mode.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/soul/message.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/codenames.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/discovery.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/models.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/output.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/registry.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/store.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/subagents/usage.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/telemetry/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/telemetry/config.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/telemetry/crash.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/telemetry/errors.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/telemetry/metrics.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/telemetry/otel.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/telemetry/sentry.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/telemetry/sink.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/AGENTS.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/agent/description.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/background/handoff.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/background/input.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/background/list.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/background/output.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/background/stop.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/display.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/glob.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/grep.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/read.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/read_media.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/replace.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/utils.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/file/write.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/goal/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/goal/update_goal.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/mcp_resource/list_description.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/mcp_resource/read_description.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/memory/memory.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/plan/description.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/plan/enter.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/progress/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/progress/description.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/recall/description.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/shell/bash.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/skill/description.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/suggest/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/suggest/description.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/test.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/think/think.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/utils.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/web/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/web/fetch.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/tools/web/search.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/color_utils.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/print/visualize.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/report.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/console.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/debug.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/echo.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/glyphs.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/motion.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/replay.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selector.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/setup.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/startup.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/stats.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/stats_collector.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/statusline.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/sync_output.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/skill.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/update_orchestrator.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/alibaba.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/terminal_background.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/terminal_capabilities.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/theme.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/ui/tui_config.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/aiohttp.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/aioqueue.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/artifacts.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/broadcast.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/changelog.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/clipboard.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/datetime.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/diff.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/editor.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/environment.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/envvar.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/file_filter.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/frontmatter.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/gitignore.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/io.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/logging.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/media_tags.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/message.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/path.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/proctitle.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/proxy.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/rich/columns.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/server.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/signals.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/slashcmd.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/string.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/term.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/trust.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/utils/typing.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/api/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/api/sessions.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/api/statistics.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/api/system.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/app.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/vis/static/index.html +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/api/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/api/config.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/api/open_in.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/api/sessions.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/app.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/auth.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/models.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/runner/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/runner/messages.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/runner/process.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/runner/worker.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/_headers +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-YVZJy7__.css +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/install.ps1 +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/install.sh +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/static/logo.png +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/store/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/web/store/sessions.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/wire/__init__.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/wire/file.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/wire/protocol.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/wire/root_hub.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/wire/serde.py +0 -0
- {pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/wire/server.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pythinker-code
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.42.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,14 +115,15 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
115
115
|
|
|
116
116
|
---
|
|
117
117
|
|
|
118
|
-
## 🆕 What's New in 0.
|
|
118
|
+
## 🆕 What's New in 0.42.0
|
|
119
119
|
|
|
120
|
-
- **
|
|
121
|
-
- **
|
|
122
|
-
- **
|
|
123
|
-
- **
|
|
120
|
+
- **Parallel coding agents are truly isolated.** `isolation="worktree"` is now enforced, not just recorded: each background write agent runs in its own git worktree of HEAD and reports its worktree path with a diff summary so changes merge deliberately, while foreground shell commands and relative-path edits resolve against the agent's own work dir. Worktrees with commits ahead of their base are retained instead of orphaned, and worktree add/remove serializes per repo.
|
|
121
|
+
- **The agent knows its own permission posture — and stops asking when it shouldn't.** A live permissions-state reminder renders the enforced profile, safe-mode/yolo/auto flags, mutation/network allowances, and shell-gate rules, re-emitted exactly when the posture changes. Provably read-only commands (`ls`, `git status`) no longer interrupt the root agent with an approval dialog, via a fail-closed positive allowlist.
|
|
122
|
+
- **Edits recover from whitespace and smart-punctuation drift.** `StrReplaceFile` no longer hard-fails when the only mismatch is trailing whitespace, indentation, or smart quotes/dashes — a graduated line-window ladder relocates the edit, preserves CRLF endings, and names the relaxation it used. Ambiguous fuzzy matches still error rather than silently resolving.
|
|
123
|
+
- **MCP servers are controllable.** Per-server `enabledTools`/`disabledTools` arrays in `mcp.json` scope a noisy server down to the tools you want, and a new `mcp.client.startup_timeout_ms` (default 30s) means a hung server can no longer stall every turn — `/mcp` now shows one actionable line per failed server.
|
|
124
|
+
- **Quality of life.** `/model` switches now carry the conversation forward via a plain-text summary instead of starting fresh; typo'd config keys warn with their dotted path and source file (`PYTHINKER_STRICT_CONFIG=1` escalates to a startup error); project-scope hooks load only after `/trust`; the in-app updater recovers from Homebrew's untrusted-tap refusal; `/export` redacts secret-named values; inline `/command` references get acted on; and the thinking shimmer no longer animates while a foreground command runs.
|
|
124
125
|
|
|
125
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
126
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.42.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
126
127
|
|
|
127
128
|
|
|
128
129
|
---
|
|
@@ -212,7 +213,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
|
|
|
212
213
|
|
|
213
214
|
| Platform | Recommended install | Artifact source |
|
|
214
215
|
|---|---|---|
|
|
215
|
-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.
|
|
216
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.42.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
216
217
|
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
217
218
|
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
|
|
218
219
|
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
|
|
@@ -240,7 +241,7 @@ pythinker # start the interactive TUI
|
|
|
240
241
|
|
|
241
242
|
### 🪟 Windows — native installer
|
|
242
243
|
|
|
243
|
-
`PythinkerSetup-0.
|
|
244
|
+
`PythinkerSetup-0.42.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
244
245
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
245
246
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
246
247
|
the change. **No UAC prompt.**
|
|
@@ -251,13 +252,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
251
252
|
|
|
252
253
|
# Or manually download the installer + checksum from the Releases page,
|
|
253
254
|
# verify with Get-FileHash, then run:
|
|
254
|
-
.\PythinkerSetup-0.
|
|
255
|
+
.\PythinkerSetup-0.42.0.exe
|
|
255
256
|
|
|
256
257
|
# Open a fresh PowerShell
|
|
257
258
|
pythinker --version
|
|
258
259
|
```
|
|
259
260
|
|
|
260
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
261
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.42.0.exe /ALLUSERS`
|
|
261
262
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
262
263
|
|
|
263
264
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -279,6 +280,8 @@ the files and the PATH edit.
|
|
|
279
280
|
```sh
|
|
280
281
|
# 1. Install
|
|
281
282
|
brew install Pythoughts-labs/pythinker/pythinker-code
|
|
283
|
+
# Homebrew ≥ 5 may refuse the untrusted tap; trust it once, then re-run:
|
|
284
|
+
# brew trust pythoughts-labs/pythinker
|
|
282
285
|
|
|
283
286
|
# 2. Verify
|
|
284
287
|
pythinker --version
|
|
@@ -294,6 +297,11 @@ latest version.
|
|
|
294
297
|
**Upgrade:** `brew upgrade pythinker-code` (Homebrew packages don't
|
|
295
298
|
auto-update; run this whenever you want the latest).
|
|
296
299
|
|
|
300
|
+
> **Untrusted-tap refusal** — Homebrew ≥ 5 (with `HOMEBREW_REQUIRE_TAP_TRUST`)
|
|
301
|
+
> refuses third-party taps until you trust them once:
|
|
302
|
+
> `brew trust pythoughts-labs/pythinker`. The in-app updater detects the
|
|
303
|
+
> refusal and offers to run it for you.
|
|
304
|
+
|
|
297
305
|
**Uninstall:** `brew uninstall pythinker-code && brew untap Pythoughts-labs/pythinker`.
|
|
298
306
|
|
|
299
307
|
> The tap repo is [Pythoughts-labs/homebrew-pythinker](https://github.com/Pythoughts-labs/homebrew-pythinker)
|
|
@@ -308,26 +316,26 @@ attached to every GitHub Release.
|
|
|
308
316
|
|
|
309
317
|
```sh
|
|
310
318
|
# Debian / Ubuntu (x86_64)
|
|
311
|
-
sudo dpkg -i pythinker-code_0.
|
|
319
|
+
sudo dpkg -i pythinker-code_0.42.0_amd64.deb
|
|
312
320
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
313
321
|
|
|
314
322
|
# Debian / Ubuntu (ARM64)
|
|
315
|
-
sudo dpkg -i pythinker-code_0.
|
|
323
|
+
sudo dpkg -i pythinker-code_0.42.0_arm64.deb
|
|
316
324
|
|
|
317
325
|
# Fedora / RHEL / openSUSE (x86_64)
|
|
318
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
319
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
320
|
-
sha256sum -c pythinker-code-0.
|
|
326
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.x86_64.rpm
|
|
327
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.x86_64.rpm.sha256
|
|
328
|
+
sha256sum -c pythinker-code-0.42.0.x86_64.rpm.sha256
|
|
321
329
|
# Fedora / RHEL:
|
|
322
|
-
sudo dnf install ./pythinker-code-0.
|
|
330
|
+
sudo dnf install ./pythinker-code-0.42.0.x86_64.rpm
|
|
323
331
|
# openSUSE:
|
|
324
|
-
sudo zypper install ./pythinker-code-0.
|
|
332
|
+
sudo zypper install ./pythinker-code-0.42.0.x86_64.rpm
|
|
325
333
|
|
|
326
334
|
# Fedora / RHEL (aarch64)
|
|
327
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
328
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
329
|
-
sha256sum -c pythinker-code-0.
|
|
330
|
-
sudo dnf install ./pythinker-code-0.
|
|
335
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.aarch64.rpm
|
|
336
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.aarch64.rpm.sha256
|
|
337
|
+
sha256sum -c pythinker-code-0.42.0.aarch64.rpm.sha256
|
|
338
|
+
sudo dnf install ./pythinker-code-0.42.0.aarch64.rpm
|
|
331
339
|
```
|
|
332
340
|
|
|
333
341
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -336,8 +344,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
336
344
|
**Verify before install:**
|
|
337
345
|
|
|
338
346
|
```sh
|
|
339
|
-
sha256sum -c pythinker-code_0.
|
|
340
|
-
sha256sum -c pythinker-code-0.
|
|
347
|
+
sha256sum -c pythinker-code_0.42.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
348
|
+
sha256sum -c pythinker-code-0.42.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
341
349
|
```
|
|
342
350
|
|
|
343
351
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -620,7 +628,7 @@ Pythinker loads [Model Context Protocol](https://modelcontextprotocol.io/) tools
|
|
|
620
628
|
### 🛠️ Manage persistent MCP servers
|
|
621
629
|
|
|
622
630
|
```sh
|
|
623
|
-
# 📚 Context7 stdio server (
|
|
631
|
+
# 📚 Context7 stdio server (positional form: NAME -- COMMAND)
|
|
624
632
|
pythinker mcp add context7 -- npx -y @upstash/context7-mcp --api-key YOUR-API-KEY
|
|
625
633
|
# Added MCP server 'context7' to ~/.pythinker/mcp.json
|
|
626
634
|
|
|
@@ -50,14 +50,15 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
53
|
-
## 🆕 What's New in 0.
|
|
53
|
+
## 🆕 What's New in 0.42.0
|
|
54
54
|
|
|
55
|
-
- **
|
|
56
|
-
- **
|
|
57
|
-
- **
|
|
58
|
-
- **
|
|
55
|
+
- **Parallel coding agents are truly isolated.** `isolation="worktree"` is now enforced, not just recorded: each background write agent runs in its own git worktree of HEAD and reports its worktree path with a diff summary so changes merge deliberately, while foreground shell commands and relative-path edits resolve against the agent's own work dir. Worktrees with commits ahead of their base are retained instead of orphaned, and worktree add/remove serializes per repo.
|
|
56
|
+
- **The agent knows its own permission posture — and stops asking when it shouldn't.** A live permissions-state reminder renders the enforced profile, safe-mode/yolo/auto flags, mutation/network allowances, and shell-gate rules, re-emitted exactly when the posture changes. Provably read-only commands (`ls`, `git status`) no longer interrupt the root agent with an approval dialog, via a fail-closed positive allowlist.
|
|
57
|
+
- **Edits recover from whitespace and smart-punctuation drift.** `StrReplaceFile` no longer hard-fails when the only mismatch is trailing whitespace, indentation, or smart quotes/dashes — a graduated line-window ladder relocates the edit, preserves CRLF endings, and names the relaxation it used. Ambiguous fuzzy matches still error rather than silently resolving.
|
|
58
|
+
- **MCP servers are controllable.** Per-server `enabledTools`/`disabledTools` arrays in `mcp.json` scope a noisy server down to the tools you want, and a new `mcp.client.startup_timeout_ms` (default 30s) means a hung server can no longer stall every turn — `/mcp` now shows one actionable line per failed server.
|
|
59
|
+
- **Quality of life.** `/model` switches now carry the conversation forward via a plain-text summary instead of starting fresh; typo'd config keys warn with their dotted path and source file (`PYTHINKER_STRICT_CONFIG=1` escalates to a startup error); project-scope hooks load only after `/trust`; the in-app updater recovers from Homebrew's untrusted-tap refusal; `/export` redacts secret-named values; inline `/command` references get acted on; and the thinking shimmer no longer animates while a foreground command runs.
|
|
59
60
|
|
|
60
|
-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.
|
|
61
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.42.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
61
62
|
|
|
62
63
|
|
|
63
64
|
---
|
|
@@ -147,7 +148,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
|
|
|
147
148
|
|
|
148
149
|
| Platform | Recommended install | Artifact source |
|
|
149
150
|
|---|---|---|
|
|
150
|
-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.
|
|
151
|
+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.42.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
151
152
|
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
|
|
152
153
|
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
|
|
153
154
|
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
|
|
@@ -175,7 +176,7 @@ pythinker # start the interactive TUI
|
|
|
175
176
|
|
|
176
177
|
### 🪟 Windows — native installer
|
|
177
178
|
|
|
178
|
-
`PythinkerSetup-0.
|
|
179
|
+
`PythinkerSetup-0.42.0.exe` is a signed* Inno Setup wizard. Installs per-user
|
|
179
180
|
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
|
|
180
181
|
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
|
|
181
182
|
the change. **No UAC prompt.**
|
|
@@ -186,13 +187,13 @@ irm https://pythinker.com/install.ps1 | iex
|
|
|
186
187
|
|
|
187
188
|
# Or manually download the installer + checksum from the Releases page,
|
|
188
189
|
# verify with Get-FileHash, then run:
|
|
189
|
-
.\PythinkerSetup-0.
|
|
190
|
+
.\PythinkerSetup-0.42.0.exe
|
|
190
191
|
|
|
191
192
|
# Open a fresh PowerShell
|
|
192
193
|
pythinker --version
|
|
193
194
|
```
|
|
194
195
|
|
|
195
|
-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.
|
|
196
|
+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.42.0.exe /ALLUSERS`
|
|
196
197
|
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
|
|
197
198
|
|
|
198
199
|
**Upgrade:** `pythinker update` from inside the running app — it downloads
|
|
@@ -214,6 +215,8 @@ the files and the PATH edit.
|
|
|
214
215
|
```sh
|
|
215
216
|
# 1. Install
|
|
216
217
|
brew install Pythoughts-labs/pythinker/pythinker-code
|
|
218
|
+
# Homebrew ≥ 5 may refuse the untrusted tap; trust it once, then re-run:
|
|
219
|
+
# brew trust pythoughts-labs/pythinker
|
|
217
220
|
|
|
218
221
|
# 2. Verify
|
|
219
222
|
pythinker --version
|
|
@@ -229,6 +232,11 @@ latest version.
|
|
|
229
232
|
**Upgrade:** `brew upgrade pythinker-code` (Homebrew packages don't
|
|
230
233
|
auto-update; run this whenever you want the latest).
|
|
231
234
|
|
|
235
|
+
> **Untrusted-tap refusal** — Homebrew ≥ 5 (with `HOMEBREW_REQUIRE_TAP_TRUST`)
|
|
236
|
+
> refuses third-party taps until you trust them once:
|
|
237
|
+
> `brew trust pythoughts-labs/pythinker`. The in-app updater detects the
|
|
238
|
+
> refusal and offers to run it for you.
|
|
239
|
+
|
|
232
240
|
**Uninstall:** `brew uninstall pythinker-code && brew untap Pythoughts-labs/pythinker`.
|
|
233
241
|
|
|
234
242
|
> The tap repo is [Pythoughts-labs/homebrew-pythinker](https://github.com/Pythoughts-labs/homebrew-pythinker)
|
|
@@ -243,26 +251,26 @@ attached to every GitHub Release.
|
|
|
243
251
|
|
|
244
252
|
```sh
|
|
245
253
|
# Debian / Ubuntu (x86_64)
|
|
246
|
-
sudo dpkg -i pythinker-code_0.
|
|
254
|
+
sudo dpkg -i pythinker-code_0.42.0_amd64.deb
|
|
247
255
|
sudo apt-get install -f # only if dpkg reports missing deps
|
|
248
256
|
|
|
249
257
|
# Debian / Ubuntu (ARM64)
|
|
250
|
-
sudo dpkg -i pythinker-code_0.
|
|
258
|
+
sudo dpkg -i pythinker-code_0.42.0_arm64.deb
|
|
251
259
|
|
|
252
260
|
# Fedora / RHEL / openSUSE (x86_64)
|
|
253
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
254
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
255
|
-
sha256sum -c pythinker-code-0.
|
|
261
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.x86_64.rpm
|
|
262
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.x86_64.rpm.sha256
|
|
263
|
+
sha256sum -c pythinker-code-0.42.0.x86_64.rpm.sha256
|
|
256
264
|
# Fedora / RHEL:
|
|
257
|
-
sudo dnf install ./pythinker-code-0.
|
|
265
|
+
sudo dnf install ./pythinker-code-0.42.0.x86_64.rpm
|
|
258
266
|
# openSUSE:
|
|
259
|
-
sudo zypper install ./pythinker-code-0.
|
|
267
|
+
sudo zypper install ./pythinker-code-0.42.0.x86_64.rpm
|
|
260
268
|
|
|
261
269
|
# Fedora / RHEL (aarch64)
|
|
262
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
263
|
-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.
|
|
264
|
-
sha256sum -c pythinker-code-0.
|
|
265
|
-
sudo dnf install ./pythinker-code-0.
|
|
270
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.aarch64.rpm
|
|
271
|
+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.aarch64.rpm.sha256
|
|
272
|
+
sha256sum -c pythinker-code-0.42.0.aarch64.rpm.sha256
|
|
273
|
+
sudo dnf install ./pythinker-code-0.42.0.aarch64.rpm
|
|
266
274
|
```
|
|
267
275
|
|
|
268
276
|
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
|
|
@@ -271,8 +279,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
|
|
|
271
279
|
**Verify before install:**
|
|
272
280
|
|
|
273
281
|
```sh
|
|
274
|
-
sha256sum -c pythinker-code_0.
|
|
275
|
-
sha256sum -c pythinker-code-0.
|
|
282
|
+
sha256sum -c pythinker-code_0.42.0_amd64.deb.sha256 # Debian/Ubuntu
|
|
283
|
+
sha256sum -c pythinker-code-0.42.0.x86_64.rpm.sha256 # Fedora/RHEL
|
|
276
284
|
```
|
|
277
285
|
|
|
278
286
|
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
|
|
@@ -555,7 +563,7 @@ Pythinker loads [Model Context Protocol](https://modelcontextprotocol.io/) tools
|
|
|
555
563
|
### 🛠️ Manage persistent MCP servers
|
|
556
564
|
|
|
557
565
|
```sh
|
|
558
|
-
# 📚 Context7 stdio server (
|
|
566
|
+
# 📚 Context7 stdio server (positional form: NAME -- COMMAND)
|
|
559
567
|
pythinker mcp add context7 -- npx -y @upstash/context7-mcp --api-key YOUR-API-KEY
|
|
560
568
|
# Added MCP server 'context7' to ~/.pythinker/mcp.json
|
|
561
569
|
|
|
@@ -15,6 +15,27 @@ GitHub Releases page; `0.8.0` is the new starting line.
|
|
|
15
15
|
|
|
16
16
|
## Unreleased
|
|
17
17
|
|
|
18
|
+
## 0.42.0 (2026-06-12)
|
|
19
|
+
|
|
20
|
+
- **Adversarial branch review hardening.** A multi-agent review pass confirmed and fixed: committed-but-clean isolation worktrees are now retained (commits ahead of the creation base count as changes — they were previously orphaned on cleanup); foreground shell commands and relative-path file edits now resolve against the agent's work dir, so worktree isolation actually binds them (host exec gained a `cwd` argument); safe mode now also disables the read-only-command prompt elision; locally parallel-safe MCP/tools run in parallel in the same-step gate; worktree add/remove serializes per repo. Behavior notes: same-step tool calls without `supports_parallel` now serialize deterministically (previously fully concurrent), and text-mode error diagnostics moved to stderr — capture `2>&1` or use `--output-format stream-json` if you scraped stdout.
|
|
21
|
+
- **The agent now knows its own permission posture.** A live permissions-state reminder renders the enforced profile, safe-mode/yolo/auto flags, mutation/network allowances, session-approved actions, and the shell gate's command-shaping rules — re-emitted exactly when the posture changes (/yolo, /auto, /trust, new approvals) instead of the model discovering policy through denied tool calls.
|
|
22
|
+
- **Edits recover from whitespace and smart-punctuation drift.** StrReplaceFile no longer hard-fails with "old string not found" when the only mismatch is trailing whitespace, indentation, or smart quotes/dashes: a graduated line-window ladder relocates the edit, replaces the actual file slice (preserving CRLF endings), and names the relaxation it used in the tool message. Multiple fuzzy hits without replace_all still error, so ambiguity is never silently resolved.
|
|
23
|
+
- **`isolation="worktree"` is now enforced for background write agents.** Previously it only recorded intent, so parallel coders shared one working tree and could clobber each other. A write-profile child now runs in its own git worktree of HEAD; its final report names the worktree path with a diff summary so changes merge deliberately, clean worktrees are removed, non-git roots fail with an actionable error, and read-profile children ignore the request.
|
|
24
|
+
- **MCP servers can be scoped to specific tools.** Optional `enabledTools` (exclusive allowlist) and `disabledTools` (denylist, wins on conflict) arrays per server in `mcp.json` keep a noisy server from flooding the model's tool list — filtered tools are never registered, and a call-time re-check guards shared tool maps.
|
|
25
|
+
- **A hung MCP server can no longer stall the whole session.** Server connects are bounded by a new `mcp.client.startup_timeout_ms` (default 30s) — previously a hung connect blocked every agent turn. `/mcp` now shows one actionable line per failed server (timeout → the config knob, 401 → the exact auth command, missing binary → the command path) instead of a bare "failed".
|
|
26
|
+
- **Provably read-only commands no longer prompt for approval.** The first `ls` or `git status` of a session used to interrupt with an approval dialog. A tight positive allowlist (read-only binaries and git subcommands, with hidden-command, write-redirection, wrapper, and fake-path rejections, fail closed) now elides the prompt in the root agent; subagents keep requesting approval as their unattended defense surface, and deny-profile decisions are never overridden.
|
|
27
|
+
- **Switching models keeps your conversation.** `/model` used to start a fresh session, discarding all context. The switch now seeds the new session with a plain-text summary written by the outgoing model (so provider-specific message formats never cross the boundary), falling back to the old fresh start if summarization fails; disable with `model_switch_carryover = false`.
|
|
28
|
+
- **Typo'd config keys are no longer silently ignored.** Loading now diffs the merged config against the model schema and warns with the dotted path and originating scope file for every unrecognized key (`default_yolo_typo = true` names itself and its file instead of silently changing nothing); `PYTHINKER_STRICT_CONFIG=1` escalates the findings to a startup error for CI.
|
|
29
|
+
- **Project-scope hooks now require trusting the project.** A cloned repository's `.pythinker/config.toml` could previously auto-execute its shell hooks at session start. Hooks from project and local scopes now load only after `/trust` records a durable per-project decision (stored user-side in `trusted_projects.json`, keyed by the resolved repo root); until then they are stripped with a warning naming the fix. Broken TOML in an untrusted project no longer blocks startup — the scope is treated as empty with a warning, while trusted projects keep the loud error.
|
|
30
|
+
- **Agent orchestration guidance is sharper for substantial tasks.** The default prompt now sharpens work-shaping guidance, and a new root-only runtime reminder nudges substantial normal-mode tasks toward the lightest effective path — direct tools, `SetTodoList`, foreground `RunAgents`, or verification — while backing off for plan mode, `/goal`, auto mode, and subagents.
|
|
31
|
+
- **The in-app updater recovers from Homebrew's untrusted-tap refusal.** Homebrew 5.0 (`HOMEBREW_REQUIRE_TAP_TRUST`) refuses to load formulas from third-party taps until `brew trust <tap>` is run once, which made the in-app `brew upgrade` fail with only a generic "run manually" hint. The updater now detects both the hard `Refusing to load … from untrusted tap` refusal and the soft `Skipping … not trusted` warning, offers to run `brew trust pythoughts-labs/pythinker` and retry the upgrade once on an interactive terminal, and otherwise prints the exact remediation. It also catches the silent no-op where an untrusted tap is skipped during `brew update` and `brew upgrade` exits 0 without advancing the version.
|
|
32
|
+
- **Session exports redact secrets surfaced by tool output.** A tool result (e.g. `grep`/`cat` over a `.env`) could write a secret value into an exported transcript in plaintext. `/export` now redacts the value of secret-named keys (`password`, `token`, `api_key`, `secret`, …) to `[REDACTED]` in both the markdown and YAML formats, while leaving non-secret keys such as `token_count`, usernames, and ports intact.
|
|
33
|
+
- **The welcome logo's antenna blinks a fixed number of times on launch, then settles.** Replaces the terminal's indefinite slow-blink with a bounded boot animation — the antenna ball blinks seven times after the banner prints and then holds steady. It is skipped under reduced motion, on non-interactive output, and when the terminal is too short to keep the antenna row on screen.
|
|
34
|
+
- **Inline `/command` references get acted on, not just explained away.** When a message mentions a slash command mid-sentence (e.g. "your `/goal` today is to `/plan` and build the page"), the command doesn't auto-run — but the agent no longer leads its reply by reporting it as failed. The per-turn reminder and the system prompt now steer the agent to act on the intent: call the real `EnterPlanMode` tool for `/plan` (clarified as a genuine, callable tool so models stop doubting it exists), pursue the described objective for `/goal`, load `/skill:<name>` via `ReadSkill`, and apply equivalent guidance for other commands — only surfacing how to invoke the literal command when genuinely needed.
|
|
35
|
+
- **The "thinking" shimmer no longer runs while a foreground command does.** When the agent started a long-running foreground process — a dev server via `npm`/`docker`, a watch task — the shimmering verb spinner ("Working…/Thinking…") kept animating for the whole turn, implying the agent was busy when it was really just awaiting the subprocess. The spinner is now suppressed while any foreground tool is mid-execution; the tool card's own animated running marker (and its streaming output) carries the liveness, so the shimmer means "the agent is thinking" again and reappears the moment the command returns.
|
|
36
|
+
|
|
37
|
+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.42.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
|
|
38
|
+
|
|
18
39
|
## 0.41.0 (2026-06-11)
|
|
19
40
|
|
|
20
41
|
- **New `/goal` command — goal-driven execution that loops until verified.** `/goal <objective>` sets a persistent thread goal the agent pursues across turns, restarts, and context compaction until it is verifiably complete. It kicks off immediately with a success-criteria derivation prompt and is re-injected each turn with fidelity rules (no scope-shrinking, no easier-to-test substitutes) and an evidence-based completion audit — completion may only be claimed after every requirement is proven against current state. The new root-only `UpdateGoal` tool marks the goal `complete` (after that audit) or `blocked` (after a strict three-strike audit) and stops the reminders; opt-in `goal.auto_continue` (new config table, default off, `max_continuations` 1–10, capped at 3) drives automatic continuation turns toward the goal until it is marked, a tool call is rejected, or the cap is reached, with a wrap-up instruction on the final continuation. Subcommands: `view`, `pause`, `resume`, `clear`. Objectives are injected as untrusted data, never as higher-priority instructions.
|
|
@@ -296,8 +296,10 @@ class ACPHost:
|
|
|
296
296
|
) -> None:
|
|
297
297
|
await self._fallback.mkdir(path, parents=parents, exist_ok=exist_ok)
|
|
298
298
|
|
|
299
|
-
async def exec(
|
|
300
|
-
|
|
299
|
+
async def exec(
|
|
300
|
+
self, *args: str, env: Mapping[str, str] | None = None, cwd: str | None = None
|
|
301
|
+
) -> HostProcess:
|
|
302
|
+
return await self._fallback.exec(*args, env=env, cwd=cwd)
|
|
301
303
|
|
|
302
304
|
def _abs_path(self, path: StrOrHostPath) -> str:
|
|
303
305
|
host_path = path if isinstance(path, HostPath) else HostPath(path)
|
|
@@ -10,6 +10,7 @@ from pythinker_code.soul.agent import Runtime
|
|
|
10
10
|
from pythinker_code.soul.approval import Approval
|
|
11
11
|
from pythinker_code.soul.permission import check_shell_command_allowed
|
|
12
12
|
from pythinker_code.soul.toolset import PythinkerToolset
|
|
13
|
+
from pythinker_code.tools.ask_user import AskUserQuestion
|
|
13
14
|
from pythinker_code.tools.shell import Params as ShellParams
|
|
14
15
|
from pythinker_code.tools.shell import Shell
|
|
15
16
|
from pythinker_code.tools.utils import ToolResultBuilder
|
|
@@ -28,6 +29,11 @@ def replace_tools(
|
|
|
28
29
|
# Only replace tools when running locally or under ACPHost.
|
|
29
30
|
return
|
|
30
31
|
|
|
32
|
+
# ACP clients get no interactive question UI (the session loop signals
|
|
33
|
+
# QuestionNotSupported), so don't advertise the tool — a hallucinated call
|
|
34
|
+
# still resolves through the registered tool's graceful fallback.
|
|
35
|
+
toolset.hide(AskUserQuestion.name)
|
|
36
|
+
|
|
31
37
|
if client_capabilities.terminal and (shell_tool := toolset.find(Shell)):
|
|
32
38
|
# Replace the Shell tool with the ACP Terminal tool if supported.
|
|
33
39
|
toolset.add(
|
|
@@ -48,6 +54,8 @@ class HideOutputDisplayBlock(DisplayBlock):
|
|
|
48
54
|
|
|
49
55
|
|
|
50
56
|
class Terminal(CallableTool2[ShellParams]):
|
|
57
|
+
emits_tool_execution_started_after_approval = True
|
|
58
|
+
|
|
51
59
|
def __init__(
|
|
52
60
|
self,
|
|
53
61
|
shell_tool: Shell,
|
|
@@ -105,7 +105,7 @@ For research or multimedia tasks (images, video, PDFs, docs, spreadsheets, prese
|
|
|
105
105
|
|
|
106
106
|
**Act with tools; prose is not action.** Code that appears only in your reply is not saved — use `WriteFile` to create or overwrite, `StrReplaceFile` to edit, `Shell` to run and verify; iterate on failures. Follow each tool's parameter spec exactly. Don't narrate routine tool calls. Do not re-read a file after a successful edit tool call.
|
|
107
107
|
|
|
108
|
-
**Parallelize.** Before every tool response, ask whether another independent read/search/check can run in the same turn — you may emit any number of tool calls in one response; batch non-interfering calls. Serializing independent operations wastes time and grows context. This is very important to your performance.
|
|
108
|
+
**Parallelize.** Before every tool response, ask whether another independent read/search/check can run in the same turn — you may emit any number of tool calls in one response; batch non-interfering calls. Choose the lightest effective work shape: direct tools for known-path checks, `SetTodoList` once a substantial approach is clear, foreground `RunAgents` when independent children feed immediate synthesis, and background agents only when you can make other progress while they run. Serializing independent operations wastes time and grows context. This is very important to your performance.
|
|
109
109
|
|
|
110
110
|
**Spend context deliberately.** The context window is a finite budget: read targeted ranges instead of whole files when the region is known, distill long command output to what the task needs, and push bulky exploration into subagents that return summaries rather than raw dumps.
|
|
111
111
|
|
|
@@ -125,7 +125,7 @@ For research or multimedia tasks (images, video, PDFs, docs, spreadsheets, prese
|
|
|
125
125
|
|
|
126
126
|
**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.
|
|
127
127
|
|
|
128
|
-
**Inline `/command` references.** Slash commands execute only as their own message starting with `/`. A `/command` or `/skill:<name>` mentioned mid-message did not run
|
|
128
|
+
**Inline `/command` references.** Slash commands execute only as their own message starting with `/`. A `/command` or `/skill:<name>` mentioned mid-message did not auto-run, but it still expresses intent — act on it rather than leading your reply by reporting it as failed. For `/plan`, call `EnterPlanMode` (a real tool in your toolset, not just prose); for `/goal`, pursue the described objective until it is verifiably done; for `/skill:<name>`, load it via `ReadSkill` and apply it; for other guidance commands, apply the equivalent guidance yourself. Mention invoking the real command only when genuinely needed. Never silently drop such a reference.
|
|
129
129
|
|
|
130
130
|
**MCP.** Connected MCP servers expose their capabilities as ordinary tools already in your toolset (descriptions name the server). To *use* one, invoke its tools directly — never pip-install the server, import it as a module, or search the repo for its config. If a named server has no tools present, it is not connected (loading, failed, or unauthorized), not missing: point the user to `/mcp` for status, and to `pythinker mcp auth <server_name>` for an unauthorized OAuth server.
|
|
131
131
|
|
|
@@ -388,6 +388,30 @@ class PythinkerCLI:
|
|
|
388
388
|
from pythinker_code.hooks.engine import HookEngine
|
|
389
389
|
|
|
390
390
|
hook_engine = HookEngine(config.hooks, cwd=str(session.work_dir))
|
|
391
|
+
if config.disabled_project_hooks:
|
|
392
|
+
# The load-time logger.warning only reaches shell users; publish a
|
|
393
|
+
# notification so web/ACP frontends also learn why their project
|
|
394
|
+
# hooks did not run and how to enable them.
|
|
395
|
+
from pythinker_code.notifications.models import NotificationEvent
|
|
396
|
+
|
|
397
|
+
runtime.notifications.publish(
|
|
398
|
+
NotificationEvent(
|
|
399
|
+
id=f"project-hooks-disabled:{session.id}",
|
|
400
|
+
category="system",
|
|
401
|
+
type="project_hooks_disabled",
|
|
402
|
+
source_kind="config",
|
|
403
|
+
source_id="project_trust",
|
|
404
|
+
title="Project hooks disabled (untrusted project)",
|
|
405
|
+
body=(
|
|
406
|
+
"Hooks defined in "
|
|
407
|
+
+ ", ".join(config.disabled_project_hooks)
|
|
408
|
+
+ " are disabled until you trust this project. Run /trust to "
|
|
409
|
+
"enable them (takes effect on /reload or next start)."
|
|
410
|
+
),
|
|
411
|
+
severity="warning",
|
|
412
|
+
dedupe_key=f"project-hooks-disabled:{session.id}",
|
|
413
|
+
)
|
|
414
|
+
)
|
|
391
415
|
soul.set_hook_engine(hook_engine)
|
|
392
416
|
runtime.hook_engine = hook_engine
|
|
393
417
|
|
|
@@ -603,7 +627,7 @@ class PythinkerCLI:
|
|
|
603
627
|
async def _env(self) -> AsyncGenerator[None]:
|
|
604
628
|
async with _CWD_LOCK:
|
|
605
629
|
original_cwd = HostPath.cwd()
|
|
606
|
-
await pythinker_host.chdir(self._runtime.
|
|
630
|
+
await pythinker_host.chdir(self._runtime.work_dir)
|
|
607
631
|
try:
|
|
608
632
|
# to ignore possible warnings from dateparser
|
|
609
633
|
warnings.filterwarnings("ignore", category=DeprecationWarning)
|
|
@@ -782,7 +806,7 @@ class PythinkerCLI:
|
|
|
782
806
|
"""Run the Pythinker CLI instance with shell UI."""
|
|
783
807
|
from pythinker_code.ui.shell import Shell, WelcomeInfoItem
|
|
784
808
|
|
|
785
|
-
work_dir = self._runtime.
|
|
809
|
+
work_dir = self._runtime.work_dir
|
|
786
810
|
welcome_info = [
|
|
787
811
|
WelcomeInfoItem(name="Directory", value=str(shorten_home(work_dir))),
|
|
788
812
|
]
|
{pythinker_code-0.41.0 → pythinker_code-0.42.0}/src/pythinker_code/background/agent_runner.py
RENAMED
|
@@ -4,8 +4,11 @@ from __future__ import annotations
|
|
|
4
4
|
import asyncio
|
|
5
5
|
import contextlib
|
|
6
6
|
from dataclasses import replace
|
|
7
|
+
from pathlib import Path
|
|
7
8
|
from typing import TYPE_CHECKING
|
|
8
9
|
|
|
10
|
+
from pythinker_host.path import HostPath
|
|
11
|
+
|
|
9
12
|
from pythinker_code.approval_runtime import (
|
|
10
13
|
ApprovalSource,
|
|
11
14
|
reset_current_approval_source,
|
|
@@ -64,6 +67,7 @@ class BackgroundAgentRunner:
|
|
|
64
67
|
model_override: str | None,
|
|
65
68
|
timeout_s: int | None = None,
|
|
66
69
|
resumed: bool = False,
|
|
70
|
+
isolation: str | None = None,
|
|
67
71
|
) -> None:
|
|
68
72
|
self._runtime = runtime
|
|
69
73
|
self._manager = manager
|
|
@@ -74,6 +78,8 @@ class BackgroundAgentRunner:
|
|
|
74
78
|
self._model_override = model_override
|
|
75
79
|
self._timeout_s = timeout_s
|
|
76
80
|
self._resumed = resumed
|
|
81
|
+
self._isolation = isolation
|
|
82
|
+
self._worktree_path: Path | None = None
|
|
77
83
|
self._builder = SubagentBuilder(runtime)
|
|
78
84
|
self._approval_update_tasks: set[asyncio.Task[None]] = set()
|
|
79
85
|
|
|
@@ -131,11 +137,13 @@ class BackgroundAgentRunner:
|
|
|
131
137
|
output.error(
|
|
132
138
|
_timeout_recovery_message(timeout_s=self._timeout_s, agent_id=self._agent_id)
|
|
133
139
|
)
|
|
140
|
+
self._note_retained_worktree(output)
|
|
134
141
|
else:
|
|
135
142
|
# Internal timeout (e.g. aiohttp request) — treat as generic failure
|
|
136
143
|
logger.exception("Background agent runner failed")
|
|
137
144
|
self._finalize_safely(outcome="failed", reason=str(exc))
|
|
138
145
|
output.error(_failure_recovery_message(reason=str(exc), agent_id=self._agent_id))
|
|
146
|
+
self._note_retained_worktree(output)
|
|
139
147
|
except asyncio.CancelledError:
|
|
140
148
|
self._finalize_safely(outcome="killed", reason="Stopped by TaskStop")
|
|
141
149
|
output.stage("cancelled")
|
|
@@ -150,6 +158,7 @@ class BackgroundAgentRunner:
|
|
|
150
158
|
logger.exception("Background agent runner failed")
|
|
151
159
|
self._finalize_safely(outcome="failed", reason=str(exc))
|
|
152
160
|
output.error(_failure_recovery_message(reason=str(exc), agent_id=self._agent_id))
|
|
161
|
+
self._note_retained_worktree(output)
|
|
153
162
|
finally:
|
|
154
163
|
# Whatever happens in approval cleanup below, the dict pop must
|
|
155
164
|
# run — it is the *only* place that removes this task from
|
|
@@ -184,12 +193,14 @@ class BackgroundAgentRunner:
|
|
|
184
193
|
effective_model=self._model_override,
|
|
185
194
|
)
|
|
186
195
|
|
|
196
|
+
work_dir_override = await self._prepare_isolation_worktree(output)
|
|
187
197
|
spec = SubagentRunSpec(
|
|
188
198
|
agent_id=self._agent_id,
|
|
189
199
|
type_def=type_def,
|
|
190
200
|
launch_spec=launch_spec,
|
|
191
201
|
prompt=self._prompt,
|
|
192
202
|
resumed=self._resumed,
|
|
203
|
+
work_dir_override=work_dir_override,
|
|
193
204
|
)
|
|
194
205
|
soul, prompt = await prepare_soul(
|
|
195
206
|
spec,
|
|
@@ -220,6 +231,7 @@ class BackgroundAgentRunner:
|
|
|
220
231
|
if failure is not None:
|
|
221
232
|
self._finalize_safely(outcome="failed", reason=failure.message)
|
|
222
233
|
output.error(_failure_recovery_message(reason=failure.message, agent_id=self._agent_id))
|
|
234
|
+
self._note_retained_worktree(output)
|
|
223
235
|
output.stage(f"failed: {failure.brief}")
|
|
224
236
|
return
|
|
225
237
|
output.stage("run_soul_finished")
|
|
@@ -228,6 +240,7 @@ class BackgroundAgentRunner:
|
|
|
228
240
|
self._finalize_safely(
|
|
229
241
|
outcome="failed", reason="Agent completed but produced no output."
|
|
230
242
|
)
|
|
243
|
+
self._note_retained_worktree(output)
|
|
231
244
|
output.stage("failed: empty output")
|
|
232
245
|
return
|
|
233
246
|
# Surface this child's total LLM spend so the orchestrating parent can budget a
|
|
@@ -235,9 +248,74 @@ class BackgroundAgentRunner:
|
|
|
235
248
|
# runner. Background results are read later via TaskOutput, so the spend rides in
|
|
236
249
|
# the written transcript rather than the immediate (launch-stub) tool return.
|
|
237
250
|
output.usage(format_usage_lines("child", soul.cumulative_usage, soul.model_name))
|
|
251
|
+
final_response = await self._append_worktree_report(final_response)
|
|
238
252
|
output.summary(final_response)
|
|
239
253
|
self._finalize_safely(outcome="completed")
|
|
240
254
|
|
|
255
|
+
async def _prepare_isolation_worktree(self, output: SubagentOutputWriter) -> HostPath | None:
|
|
256
|
+
"""Honor isolation='worktree' for write-profile children.
|
|
257
|
+
|
|
258
|
+
Read-profile children gain nothing from isolation (they cannot
|
|
259
|
+
mutate), so the request is logged and skipped rather than failing
|
|
260
|
+
the task. Raises WorktreeError for non-git roots — actionable, and
|
|
261
|
+
better surfaced before any model spend.
|
|
262
|
+
"""
|
|
263
|
+
if self._isolation != "worktree":
|
|
264
|
+
return None
|
|
265
|
+
from pythinker_code.soul.permission import subagent_type_allows_file_mutation
|
|
266
|
+
from pythinker_code.subagents.worktree import create_agent_worktree
|
|
267
|
+
|
|
268
|
+
if not subagent_type_allows_file_mutation(self._subagent_type):
|
|
269
|
+
logger.info(
|
|
270
|
+
"isolation='worktree' ignored for read-profile subagent type {t}",
|
|
271
|
+
t=self._subagent_type,
|
|
272
|
+
)
|
|
273
|
+
return None
|
|
274
|
+
worktree = Path(str(self._runtime.session.dir)) / "worktrees" / self._agent_id
|
|
275
|
+
await create_agent_worktree(Path(str(self._runtime.work_dir)), worktree)
|
|
276
|
+
self._worktree_path = worktree
|
|
277
|
+
output.stage(f"worktree_created: {worktree}")
|
|
278
|
+
return HostPath.unsafe_from_local_path(worktree)
|
|
279
|
+
|
|
280
|
+
def _note_retained_worktree(self, output: SubagentOutputWriter) -> None:
|
|
281
|
+
"""Name the retained worktree on failure/timeout paths.
|
|
282
|
+
|
|
283
|
+
Retention on failure is deliberate — resume reuses the worktree and a
|
|
284
|
+
post-mortem may need its state — but it must never be silent.
|
|
285
|
+
"""
|
|
286
|
+
if self._worktree_path is None:
|
|
287
|
+
return
|
|
288
|
+
output.stage(
|
|
289
|
+
f"worktree_retained: {self._worktree_path} (resume reuses it; remove with "
|
|
290
|
+
f"`git worktree remove {self._worktree_path}`)"
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
async def _append_worktree_report(self, final_response: str) -> str:
|
|
294
|
+
"""Tell the orchestrator where the isolated changes live.
|
|
295
|
+
|
|
296
|
+
Changes are never auto-merged; the report carries the worktree path
|
|
297
|
+
and a diff summary so merging stays a deliberate decision. Clean
|
|
298
|
+
worktrees are removed.
|
|
299
|
+
"""
|
|
300
|
+
if self._worktree_path is None:
|
|
301
|
+
return final_response
|
|
302
|
+
from pythinker_code.subagents.worktree import (
|
|
303
|
+
cleanup_agent_worktree,
|
|
304
|
+
worktree_change_summary,
|
|
305
|
+
)
|
|
306
|
+
|
|
307
|
+
summary = await worktree_change_summary(self._worktree_path)
|
|
308
|
+
disposition = await cleanup_agent_worktree(
|
|
309
|
+
Path(str(self._runtime.work_dir)),
|
|
310
|
+
self._worktree_path,
|
|
311
|
+
has_changes=bool(summary),
|
|
312
|
+
)
|
|
313
|
+
return (
|
|
314
|
+
f"{final_response}\n\n## Isolation worktree\n"
|
|
315
|
+
f"Path: {self._worktree_path} ({disposition})\n"
|
|
316
|
+
f"{summary or 'No changes were made.'}"
|
|
317
|
+
)
|
|
318
|
+
|
|
241
319
|
def _on_approval_runtime_event(self, event: ApprovalRuntimeEvent) -> None:
|
|
242
320
|
request = event.request
|
|
243
321
|
if request.source.kind != "background_agent" or request.source.id != self._task_id:
|