pythinker-code 2.2.1__tar.gz → 2.4.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-2.2.1 → pythinker_code-2.4.0}/PKG-INFO +29 -5
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/README.md +26 -2
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/pyproject.toml +4 -4
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/CHANGELOG.md +35 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/acp/host.py +3 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/acp/session.py +7 -1
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/agents/default/agent.yaml +9 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/agents/default/coder.yaml +16 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/agents/default/explore.yaml +14 -2
- pythinker_code-2.4.0/src/pythinker_code/agents/default/implementer.yaml +45 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/agents/default/plan.yaml +15 -4
- pythinker_code-2.4.0/src/pythinker_code/agents/default/review.yaml +46 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/agents/default/system.md +17 -1
- pythinker_code-2.4.0/src/pythinker_code/agents/default/verifier.yaml +45 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/auth/oauth.py +18 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/auth/openai.py +12 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/auth/platforms.py +9 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/hooks/engine.py +13 -1
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/hooks/runner.py +3 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/llm.py +33 -6
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/soul/btw.py +6 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/soul/pythinkersoul.py +34 -4
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/soul/toolset.py +42 -13
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/subagents/runner.py +7 -1
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/telemetry/config.py +29 -0
- pythinker_code-2.4.0/src/pythinker_code/telemetry/errors.py +107 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/telemetry/otel.py +24 -2
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/agent/__init__.py +3 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/agent/description.md +11 -4
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/ask_user/__init__.py +4 -1
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/file/glob.py +3 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/file/grep_local.py +225 -12
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/file/read.py +3 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/file/read_media.py +3 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/file/replace.py +3 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/file/write.py +3 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/plan/__init__.py +4 -1
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/plan/enter.py +4 -1
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/shell/__init__.py +6 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/slash.py +121 -0
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/_baseUniq-D7qiASUy.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/_baseUniq-CnjLtNBK.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/arc-G4WaEU6H.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/arc-p8Zl45yf.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-CcYeuWPi.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-Lxm5mR82.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-DWIqpSyD.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-B7qw0bmu.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-BLk0cKfQ.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-CdgJaayE.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/channel-BZBK5lN6.js +1 -0
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-ChVR7Ju_.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DNr_hwHQ.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/chunk-55IACEB6-DEiz531X.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-BWRJeLuP.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-QjrqjAAP.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-BRveHO02.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-Bw4GqGyI.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-CC8092Ai.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-bEv-7epi.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-BWlTTg4C.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/chunk-QN33PNHL-DOmXNpah.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-CQB7XXqV.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-D-6zUU9h.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-DR05TXzx.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-CfuYCubo.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-BooWpSCF.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-BpVZZpbi.js +1 -0
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-BpVZZpbi.js +1 -0
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/clone-C-R24ClB.js +1 -0
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DsAmzUoy.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-C0nbBxoU.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-aT1O0X9J.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A---Tl6BDU.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/cytoscape.esm-B4IyJ4dz.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/cytoscape.esm-Dlvswyl5.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-DaTedwqX.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-CXURVXMQ.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-BykkJf3F.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-DqPWQvWf.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-Dui_gc9d.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-XG4wk_zx.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-B7DmELTs.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-sNvTPY2M.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-C_CHmY_j.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-BOJaQQQU.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-BLZZYAxJ.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-CbfuToSV.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-Cb4lBZT4.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-ulVOoUco.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-BrRnu-oS.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-D2qIB9v4.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/graph-Cdru59AN.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/graph-CMrFXUW3.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/index-Ix9ej5i-.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/index-BORZhTVE.js +2 -2
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/index-CHZz2B-g.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/index-Cw0e9z0j.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/index-B9rDlDTV.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/index-nZJqxMTn.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-BWbx2G71.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-B-DtK8KA.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-e5r2mFfX.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-CVpxG_1t.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-Cw-5DMZz.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-DsoNxPLk.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/layout-Bz5NLD6Y.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/layout-C-IPsObI.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/linear-C6xei9WU.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/linear-BoIapCU_.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B2s4EhdL.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-BNd1nBm2.js +7 -7
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/mermaid.core-DE-3B90d.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/mermaid.core-CiwyVvHW.js +5 -5
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/min-DIq8zNFr.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/min-BCUh9ALv.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-CRmn6NBA.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-CjwMDCnL.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-xaDAWjUB.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-fDnq6EaG.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-DL9984Cg.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-DyHz9xJE.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-DMnNecbQ.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-CtnhMmz_.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-BhFUMQqC.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-DBjlbTUH.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-Da3-18pZ.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-B8vAgUxw.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-D-vEOsdI.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-CKckm--Z.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-DFvB4bvk.js +1 -0
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-jjwwP1hV.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-ByteGYaR.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-CsfY6M0V.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-CBb0li3c.js +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-Dk2xKhgL.js → pythinker_code-2.4.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-E_ri2DuP.js +1 -1
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/index.html +1 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/channel-N3T2k8B2.js +0 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-mMiORCnw.js +0 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-mMiORCnw.js +0 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/clone-hquVYw4G.js +0 -1
- pythinker_code-2.2.1/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-CsiNChEg.js +0 -1
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/LICENSE +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/NOTICE +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/__main__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/acp/AGENTS.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/acp/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/acp/convert.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/acp/mcp.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/acp/server.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/acp/tools.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/acp/types.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/acp/version.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/agentspec.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/app.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/approval_runtime/models.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/auth/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/auth/deepseek.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/auth/lm_studio.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/auth/minimax.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/auth/ollama.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/auth/opencode_go.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/auth/openrouter.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/background/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/background/agent_runner.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/background/ids.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/background/manager.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/background/models.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/background/store.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/background/summary.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/background/worker.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/cli/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/cli/__main__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/cli/export.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/cli/info.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/cli/mcp.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/cli/plugin.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/cli/toad.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/cli/update.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/cli/vis.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/cli/web.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/config.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/constant.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/events.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/exception.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/extensions.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/hooks/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/hooks/config.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/hooks/events.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/metadata.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/notifications/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/notifications/llm.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/notifications/manager.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/notifications/models.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/notifications/notifier.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/notifications/store.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/notifications/wire.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/plugin/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/plugin/manager.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/plugin/tool.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/prompt_templates.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/prompts/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/prompts/compact.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/prompts/init.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/py.typed +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/session.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/session_fork.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/session_state.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/share.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/skill/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/skill/flow/d2.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/soul/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/soul/agent.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/soul/approval.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/soul/compaction.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/soul/context.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/soul/denwarenji.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/soul/message.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/soul/slash.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/subagents/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/subagents/builder.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/subagents/core.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/subagents/git_context.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/subagents/models.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/subagents/output.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/subagents/registry.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/subagents/store.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/telemetry/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/telemetry/crash.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/telemetry/metrics.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/telemetry/sentry.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/telemetry/sink.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/AGENTS.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/background/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/background/list.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/background/output.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/background/stop.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/display.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/file/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/file/glob.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/file/grep.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/file/read.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/file/read_media.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/file/replace.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/file/utils.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/file/write.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/plan/description.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/shell/bash.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/test.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/think/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/think/think.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/utils.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/web/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/web/fetch.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/web/fetch.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/web/search.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/tools/web/search.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/print/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/print/visualize.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/console.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/debug.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/echo.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/prompt.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/replay.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/selector.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/setup.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/startup.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/update.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/usage.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/theme.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/ui/tui_config.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/aiohttp.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/aioqueue.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/broadcast.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/changelog.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/clipboard.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/datetime.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/diff.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/editor.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/environment.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/envvar.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/export.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/file_filter.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/frontmatter.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/io.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/logging.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/media_tags.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/message.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/path.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/proctitle.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/proxy.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/rich/columns.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/sensitive.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/server.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/signals.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/slashcmd.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/string.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/term.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/utils/typing.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/vis/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/vis/api/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/vis/api/sessions.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/vis/api/statistics.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/vis/api/system.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/vis/app.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-D2MTYyJz.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/vis/static/assets/index-CezafTt_.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/vis/static/index.html +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/api/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/api/config.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/api/open_in.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/api/sessions.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/app.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/auth.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/models.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/runner/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/runner/messages.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/runner/process.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/runner/worker.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B2P5VJ9v.css +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/static/logo.png +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/store/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/web/store/sessions.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/wire/__init__.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/wire/file.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/wire/protocol.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/wire/root_hub.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/wire/serde.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/wire/server.py +0 -0
- {pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/wire/types.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pythinker-code
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.4.0
|
|
4
4
|
Summary: Pythinker Code is your next CLI agent.
|
|
5
5
|
Keywords: cli,agent,ai,coding-assistant,llm,claude,openai,terminal
|
|
6
6
|
Author: Mohamed Elkholy
|
|
@@ -33,9 +33,9 @@ Requires-Dist: ripgrepy==2.2.0
|
|
|
33
33
|
Requires-Dist: streamingjson==0.0.5
|
|
34
34
|
Requires-Dist: trafilatura==2.0.0
|
|
35
35
|
Requires-Dist: lxml==6.0.2
|
|
36
|
-
Requires-Dist: tenacity==9.1.
|
|
36
|
+
Requires-Dist: tenacity==9.1.4
|
|
37
37
|
Requires-Dist: fastmcp==2.12.5
|
|
38
|
-
Requires-Dist: pydantic==2.
|
|
38
|
+
Requires-Dist: pydantic==2.13.4
|
|
39
39
|
Requires-Dist: httpx[socks]==0.28.1
|
|
40
40
|
Requires-Dist: pythinker-host==1.0.0
|
|
41
41
|
Requires-Dist: batrachian-toad==0.5.23 ; python_full_version >= '3.14'
|
|
@@ -110,6 +110,32 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
110
110
|
|
|
111
111
|
---
|
|
112
112
|
|
|
113
|
+
## 🆕 What's New in 2.4.0
|
|
114
|
+
|
|
115
|
+
Subagent roles overhaul, Moonshot/Kimi K2 provider support, and a ripgrep-free Grep fallback.
|
|
116
|
+
|
|
117
|
+
- **New subagents** — `implementer` (scoped edits + verification), `review` (severity-scored read-only review), and `verifier` (`PASS` / `FAIL` / `FLAKY` validation runner). Join the existing `coder` / `explore` / `plan` roster.
|
|
118
|
+
- **Structured subagent output** — every default agent now answers with `### SUMMARY / EVIDENCE / CHANGES / RISKS / BLOCKERS`, so the parent agent can consume results without re-parsing prose. New recommended flow: **Scout → Plan → Implement → Review → Verify** (review and verify can run in parallel).
|
|
119
|
+
- **Kimi K2.5 / K2.6 (Moonshot) support** — `--thinking` is routed via the provider-specific `thinking.type` body field, and assistant tool-call replays always carry `reasoning_content` so multi-step tool flows stop tripping Moonshot's strict thinking-replay check. Same hardening applied to DeepSeek's strict mode.
|
|
120
|
+
- **`Grep` works without `rg`** — pure-Python fallback honors `pattern` / `glob` / `type` / `ignore_case` / `multiline` / `context` / `output_mode` / `offset` / `head_limit` and respects `.gitignore`. The downloader also retries against the upstream GitHub releases mirror and accepts `PYTHINKER_RG_PATH=/absolute/path` plus extra discovery paths (`~/.cargo/bin`, `~/.local/bin`, `~/.pi/agent/bin`, `/usr/bin`, `/usr/local/bin`).
|
|
121
|
+
- **`AGENTS.md` rewritten** to match the new roster, and `tools/agent/description.md` documents the parallel-review and cross-check patterns.
|
|
122
|
+
|
|
123
|
+
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==2.4.0`.
|
|
124
|
+
|
|
125
|
+
### What was new in 2.3.0
|
|
126
|
+
|
|
127
|
+
## 🆕 What's New in 2.3.0
|
|
128
|
+
|
|
129
|
+
Telemetry & observability audit on top of 2.2.1.
|
|
130
|
+
|
|
131
|
+
- **38 silent-catch sites instrumented** — tool failures, OAuth errors, MCP hiccups, hook callbacks, subagent crashes now surface in Bugsink + SigNoz.
|
|
132
|
+
- **`/report-error` slash command** — user-invoked complement to automatic capture.
|
|
133
|
+
- **OTel trace sampling tunable** — `PYTHINKER_OTEL_TRACE_SAMPLE_RATE` for operators running their own collector.
|
|
134
|
+
- **`pythinker.mcp.call` span** with `mcp.server` attribute.
|
|
135
|
+
- **`docs/en/reference/telemetry.md`** documents the full contract.
|
|
136
|
+
|
|
137
|
+
### What was new in 2.2.1
|
|
138
|
+
|
|
113
139
|
## 🆕 What's New in 2.2.1
|
|
114
140
|
|
|
115
141
|
CI hardening on top of 2.2.0.
|
|
@@ -117,8 +143,6 @@ CI hardening on top of 2.2.0.
|
|
|
117
143
|
- **macOS binary build is now optional-codesign** — the release workflow detects whether `APPLE_CERTIFICATE_P12` / `APPLE_NOTARIZATION_KEY_P8` repo secrets are set. When they aren't (the v2.2.0 case), it ships an ad-hoc-signed PyInstaller binary instead of failing the whole release. PyPI install (`pip install pythinker-code`) is unaffected.
|
|
118
144
|
- **PyPI publish is idempotent** — `pypa/gh-action-pypi-publish` now runs with `skip-existing: true`, so re-running the release workflow against an already-published version is a no-op.
|
|
119
145
|
|
|
120
|
-
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==2.2.1`.
|
|
121
|
-
|
|
122
146
|
### What was new in 2.2.0
|
|
123
147
|
|
|
124
148
|
Animated installer + Windows PATH automation, on top of 2.1.2.
|
|
@@ -48,6 +48,32 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
48
48
|
|
|
49
49
|
---
|
|
50
50
|
|
|
51
|
+
## 🆕 What's New in 2.4.0
|
|
52
|
+
|
|
53
|
+
Subagent roles overhaul, Moonshot/Kimi K2 provider support, and a ripgrep-free Grep fallback.
|
|
54
|
+
|
|
55
|
+
- **New subagents** — `implementer` (scoped edits + verification), `review` (severity-scored read-only review), and `verifier` (`PASS` / `FAIL` / `FLAKY` validation runner). Join the existing `coder` / `explore` / `plan` roster.
|
|
56
|
+
- **Structured subagent output** — every default agent now answers with `### SUMMARY / EVIDENCE / CHANGES / RISKS / BLOCKERS`, so the parent agent can consume results without re-parsing prose. New recommended flow: **Scout → Plan → Implement → Review → Verify** (review and verify can run in parallel).
|
|
57
|
+
- **Kimi K2.5 / K2.6 (Moonshot) support** — `--thinking` is routed via the provider-specific `thinking.type` body field, and assistant tool-call replays always carry `reasoning_content` so multi-step tool flows stop tripping Moonshot's strict thinking-replay check. Same hardening applied to DeepSeek's strict mode.
|
|
58
|
+
- **`Grep` works without `rg`** — pure-Python fallback honors `pattern` / `glob` / `type` / `ignore_case` / `multiline` / `context` / `output_mode` / `offset` / `head_limit` and respects `.gitignore`. The downloader also retries against the upstream GitHub releases mirror and accepts `PYTHINKER_RG_PATH=/absolute/path` plus extra discovery paths (`~/.cargo/bin`, `~/.local/bin`, `~/.pi/agent/bin`, `/usr/bin`, `/usr/local/bin`).
|
|
59
|
+
- **`AGENTS.md` rewritten** to match the new roster, and `tools/agent/description.md` documents the parallel-review and cross-check patterns.
|
|
60
|
+
|
|
61
|
+
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==2.4.0`.
|
|
62
|
+
|
|
63
|
+
### What was new in 2.3.0
|
|
64
|
+
|
|
65
|
+
## 🆕 What's New in 2.3.0
|
|
66
|
+
|
|
67
|
+
Telemetry & observability audit on top of 2.2.1.
|
|
68
|
+
|
|
69
|
+
- **38 silent-catch sites instrumented** — tool failures, OAuth errors, MCP hiccups, hook callbacks, subagent crashes now surface in Bugsink + SigNoz.
|
|
70
|
+
- **`/report-error` slash command** — user-invoked complement to automatic capture.
|
|
71
|
+
- **OTel trace sampling tunable** — `PYTHINKER_OTEL_TRACE_SAMPLE_RATE` for operators running their own collector.
|
|
72
|
+
- **`pythinker.mcp.call` span** with `mcp.server` attribute.
|
|
73
|
+
- **`docs/en/reference/telemetry.md`** documents the full contract.
|
|
74
|
+
|
|
75
|
+
### What was new in 2.2.1
|
|
76
|
+
|
|
51
77
|
## 🆕 What's New in 2.2.1
|
|
52
78
|
|
|
53
79
|
CI hardening on top of 2.2.0.
|
|
@@ -55,8 +81,6 @@ CI hardening on top of 2.2.0.
|
|
|
55
81
|
- **macOS binary build is now optional-codesign** — the release workflow detects whether `APPLE_CERTIFICATE_P12` / `APPLE_NOTARIZATION_KEY_P8` repo secrets are set. When they aren't (the v2.2.0 case), it ships an ad-hoc-signed PyInstaller binary instead of failing the whole release. PyPI install (`pip install pythinker-code`) is unaffected.
|
|
56
82
|
- **PyPI publish is idempotent** — `pypa/gh-action-pypi-publish` now runs with `skip-existing: true`, so re-running the release workflow against an already-published version is a no-op.
|
|
57
83
|
|
|
58
|
-
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==2.2.1`.
|
|
59
|
-
|
|
60
84
|
### What was new in 2.2.0
|
|
61
85
|
|
|
62
86
|
Animated installer + Windows PATH automation, on top of 2.1.2.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "pythinker-code"
|
|
3
|
-
version = "2.
|
|
3
|
+
version = "2.4.0"
|
|
4
4
|
description = "Pythinker Code is your next CLI agent."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -38,9 +38,9 @@ dependencies = [
|
|
|
38
38
|
"trafilatura==2.0.0",
|
|
39
39
|
# lxml is used by trafilatura/htmldate/justext; keep pinned for binary wheels.
|
|
40
40
|
"lxml==6.0.2",
|
|
41
|
-
"tenacity==9.1.
|
|
41
|
+
"tenacity==9.1.4",
|
|
42
42
|
"fastmcp==2.12.5",
|
|
43
|
-
"pydantic==2.
|
|
43
|
+
"pydantic==2.13.4",
|
|
44
44
|
"httpx[socks]==0.28.1",
|
|
45
45
|
"pythinker-host==1.0.0",
|
|
46
46
|
"batrachian-toad==0.5.23; python_version >= \"3.14\"",
|
|
@@ -73,7 +73,7 @@ dev = [
|
|
|
73
73
|
]
|
|
74
74
|
|
|
75
75
|
[build-system]
|
|
76
|
-
requires = ["uv_build>=0.8.5,<0.
|
|
76
|
+
requires = ["uv_build>=0.8.5,<0.12.0"]
|
|
77
77
|
build-backend = "uv_build"
|
|
78
78
|
|
|
79
79
|
[tool.uv.build-backend]
|
|
@@ -2,6 +2,41 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 2.4.0 (2026-05-11)
|
|
6
|
+
|
|
7
|
+
Subagent roles overhaul, Moonshot/Kimi K2 provider support, and a ripgrep-free Grep fallback.
|
|
8
|
+
|
|
9
|
+
- New built-in subagents under `src/pythinker_code/agents/default/`:
|
|
10
|
+
- `implementer.yaml` — scoped code changes with minimum surrounding edits and a quick verification pass.
|
|
11
|
+
- `review.yaml` — read-only code review with severity-scored findings (BLOCKER / MAJOR / MINOR / NIT).
|
|
12
|
+
- `verifier.yaml` — read-only validation runner that reports `PASS` / `FAIL` / `FLAKY` without applying fixes.
|
|
13
|
+
- `coder.yaml`, `explore.yaml`, and `plan.yaml` now emit a standard `### SUMMARY / EVIDENCE / CHANGES / RISKS / BLOCKERS` response contract so the parent agent can consume subagent output without re-parsing prose.
|
|
14
|
+
- `agent.yaml` registers the three new roles; `tools/agent/description.md` documents the Scout → Plan → Implement → Review → Verify workflow and the parallel review/verification pattern.
|
|
15
|
+
- `agents/default/system.md`: adds decomposition guidance (preview → todo list → parallel chunks), enforces post-tool-call verification before acting on results, and tells the agent to cross-check at least one load-bearing subagent finding before editing from it.
|
|
16
|
+
- Kimi K2.5 / K2.6 (Moonshot) and other strict interleaved-thinking providers:
|
|
17
|
+
- `packages/pythinker-core/.../chat_provider/pythinker.py`: always emit `reasoning_content` on assistant tool-call replays so Moonshot's "thinking is enabled but reasoning_content is missing in assistant tool call message at index N" error no longer trips multi-step tool flows.
|
|
18
|
+
- `packages/pythinker-core/.../contrib/chat_provider/openai_legacy.py`: replay reasoning metadata on every assistant turn for `kimi-k2*` / `deepseek*` models (falls back to the assistant text or `"[reasoning unavailable]"` when reasoning content was not retained).
|
|
19
|
+
- `src/pythinker_code/llm.py`: route Kimi K2 thinking through the provider-specific `extra_body={"thinking": {"type": "enabled"|"disabled"}}` body field instead of OpenAI's `reasoning_effort` (which Kimi ignores), and persist `LLM.thinking` across `clone_llm_with_model_alias` so model switches preserve the user's thinking choice.
|
|
20
|
+
- `tools/file/grep_local.py`:
|
|
21
|
+
- Pure-Python `rg`-free fallback (`_python_grep`) honoring `pattern`, `path`, `glob`, `type` (bash / c / cpp / go / java / js / json / md / py / rust / sh / toml / ts / txt / yaml / zsh), `ignore_case`, `multiline`, `context` / `before_context` / `after_context`, `line_number`, `output_mode` (`content` / `files_with_matches` / `count_matches`), `offset`, `head_limit`, and the standard sensitive-file redaction. `.gitignore` / `.ignore` and the VCS metadata directories (`.git`, `.svn`, `.hg`, `.bzr`, `.jj`, `.sl`) are respected unless `include_ignored=true`.
|
|
22
|
+
- `_find_existing_rg` now honors `PYTHINKER_RG_PATH` and additionally probes `/usr/bin`, `/usr/local/bin`, `~/.cargo/bin`, `~/.local/bin`, and `~/.pi/agent/bin` before falling through to download.
|
|
23
|
+
- Downloader retries against the upstream GitHub releases mirror (`https://github.com/BurntSushi/ripgrep/releases/download/<version>/...`) when the CDN mirror is unreachable, and the failure path now degrades into the Python fallback instead of raising.
|
|
24
|
+
- `.gitignore`: ignore `graphify-out*/`, `.graphify_*.json`, `.graphify_*.txt`, and the local `blackbox/` scratch area.
|
|
25
|
+
- `AGENTS.md` rewritten to reflect the new subagent roster and workflow.
|
|
26
|
+
|
|
27
|
+
## 2.3.0 (2026-05-09)
|
|
28
|
+
|
|
29
|
+
Telemetry & observability audit.
|
|
30
|
+
|
|
31
|
+
- New `pythinker_code/telemetry/errors.py` helper `report_handled_error(exc, *, site, tool=None, **attrs)` forwards caught-and-rendered exceptions to both Sentry/Bugsink and the OTel `error` event stream. Both forwarding paths are `contextlib.suppress`-wrapped so monitoring can never break the host program.
|
|
32
|
+
- 38 silent-catch sites instrumented across `tools/`, `auth/`, `soul/`, `acp/`, `hooks/`, `subagents/`. Tool failures, OAuth errors, MCP server hiccups, hook callback failures, and subagent crashes now reach Bugsink and SigNoz.
|
|
33
|
+
- `pythinker_code/telemetry/otel.py`: TracerProvider now uses `ParentBased(TraceIdRatioBased(rate))` driven by `PYTHINKER_OTEL_TRACE_SAMPLE_RATE` (default 1.0).
|
|
34
|
+
- New `pythinker.mcp.call` span around every MCPTool RPC.
|
|
35
|
+
- New `/report-error` slash command (aliases `/report`, `/report-error`).
|
|
36
|
+
- `docs/en/reference/telemetry.md` documents the full telemetry contract.
|
|
37
|
+
- `chore(test)`: updated google-genai snapshot for pydantic 2.13.4 + google-genai 2.0.0.
|
|
38
|
+
|
|
39
|
+
|
|
5
40
|
## 2.2.1 (2026-05-09)
|
|
6
41
|
|
|
7
42
|
CI hardening: macOS binary build is now optional-codesign.
|
|
@@ -148,6 +148,9 @@ class ACPProcess:
|
|
|
148
148
|
)
|
|
149
149
|
self._feed_output(final_output)
|
|
150
150
|
except Exception as exc:
|
|
151
|
+
from pythinker_code.telemetry.errors import report_handled_error
|
|
152
|
+
|
|
153
|
+
report_handled_error(exc, site="acp.host.terminal")
|
|
151
154
|
error_note = f"[acp terminal error] {exc}\n"
|
|
152
155
|
self._stdout.feed_data(error_note.encode("utf-8", "replace"))
|
|
153
156
|
if exit_code is None:
|
|
@@ -233,6 +233,9 @@ class ACPSession:
|
|
|
233
233
|
logger.info("Prompt cancelled by user")
|
|
234
234
|
return acp.PromptResponse(stop_reason="cancelled")
|
|
235
235
|
except Exception as e:
|
|
236
|
+
from pythinker_code.telemetry.errors import report_handled_error
|
|
237
|
+
|
|
238
|
+
report_handled_error(e, site="acp.session.prompt")
|
|
236
239
|
logger.exception("Unexpected error during prompt:")
|
|
237
240
|
raise acp.RequestError.internal_error({"error": str(e)}) from e
|
|
238
241
|
finally:
|
|
@@ -461,7 +464,10 @@ class ACPSession:
|
|
|
461
464
|
# cancelled
|
|
462
465
|
logger.debug("Permission request cancelled for: {action}", action=request.action)
|
|
463
466
|
request.resolve("reject")
|
|
464
|
-
except Exception:
|
|
467
|
+
except Exception as exc:
|
|
468
|
+
from pythinker_code.telemetry.errors import report_handled_error
|
|
469
|
+
|
|
470
|
+
report_handled_error(exc, site="acp.session.approval")
|
|
465
471
|
logger.exception("Error handling approval request:")
|
|
466
472
|
# On error, reject the request
|
|
467
473
|
request.resolve("reject")
|
|
@@ -34,3 +34,12 @@ agent:
|
|
|
34
34
|
plan:
|
|
35
35
|
path: ./plan.yaml
|
|
36
36
|
description: "Read-only implementation planning and architecture design."
|
|
37
|
+
review:
|
|
38
|
+
path: ./review.yaml
|
|
39
|
+
description: "Read-only code review with severity-scored findings."
|
|
40
|
+
implementer:
|
|
41
|
+
path: ./implementer.yaml
|
|
42
|
+
description: "Scoped implementation with minimal edits and verification."
|
|
43
|
+
verifier:
|
|
44
|
+
path: ./verifier.yaml
|
|
45
|
+
description: "Read-only validation runner for tests, lint, and builds."
|
|
@@ -4,6 +4,22 @@ agent:
|
|
|
4
4
|
system_prompt_args:
|
|
5
5
|
ROLE_ADDITIONAL: |
|
|
6
6
|
You are now running as a subagent. All the `user` messages are sent by the main agent. The main agent cannot see your context, it can only see your last message when you finish the task. You must treat the parent agent as your caller. Do not directly ask the end user questions. If something is unclear, explain the ambiguity in your final summary to the parent agent.
|
|
7
|
+
|
|
8
|
+
Stay tightly scoped to exactly what the parent assigned. Do not expand into adjacent cleanup or refactors. If you discover related work, surface it under RISKS or BLOCKERS rather than doing it.
|
|
9
|
+
|
|
10
|
+
Before editing, read the target files and confirm the line ranges/patterns you will change. Prefer the minimum edit that satisfies the brief. After edits, run the smallest relevant verification command available and report the result.
|
|
11
|
+
|
|
12
|
+
Final response contract:
|
|
13
|
+
### SUMMARY
|
|
14
|
+
One paragraph with what you did and the outcome.
|
|
15
|
+
### EVIDENCE
|
|
16
|
+
Bullet list of concrete file paths, command results, or observed errors that support the outcome.
|
|
17
|
+
### CHANGES
|
|
18
|
+
Bullet list of every file you modified, or `None.` if read-only.
|
|
19
|
+
### RISKS
|
|
20
|
+
Bullet list of remaining risks or `None observed.`.
|
|
21
|
+
### BLOCKERS
|
|
22
|
+
Bullet list of anything that stopped completion, or `None.`.
|
|
7
23
|
when_to_use: |
|
|
8
24
|
Use this agent for non-trivial software engineering work that may require reading files, editing code, running commands, and returning a compact but technically complete summary to the parent agent.
|
|
9
25
|
allowed_tools:
|
{pythinker_code-2.2.1 → pythinker_code-2.4.0}/src/pythinker_code/agents/default/explore.yaml
RENAMED
|
@@ -5,7 +5,7 @@ agent:
|
|
|
5
5
|
ROLE_ADDITIONAL: |
|
|
6
6
|
You are now running as a subagent. All the `user` messages are sent by the main agent. The main agent cannot see your context, it can only see your last message when you finish the task. You must treat the parent agent as your caller. Do not directly ask the end user questions. If something is unclear, explain the ambiguity in your final summary to the parent agent.
|
|
7
7
|
|
|
8
|
-
You are a codebase exploration specialist. Your role is EXCLUSIVELY to search, read, and analyze existing code and resources. You do NOT have access to file editing tools.
|
|
8
|
+
You are a codebase exploration specialist. Your role is EXCLUSIVELY to search, read, and analyze existing code and resources. You do NOT have access to file editing tools. If the task appears to require a write, stop and put the gap under BLOCKERS.
|
|
9
9
|
|
|
10
10
|
Your strengths:
|
|
11
11
|
- Rapidly finding files using glob patterns
|
|
@@ -24,7 +24,19 @@ agent:
|
|
|
24
24
|
|
|
25
25
|
If the prompt includes a <git-context> block, use it to orient yourself about the repository state before starting your investigation.
|
|
26
26
|
|
|
27
|
-
You are meant to be a fast agent. Complete the search request efficiently and report your findings clearly in a structured format.
|
|
27
|
+
You are meant to be a fast agent. Complete the search request efficiently and report your findings clearly in a structured format. EVIDENCE is the load-bearing section: cite each important finding as `path:line-range` when possible, and stop once you have enough evidence rather than exhaustively reading the whole repository.
|
|
28
|
+
|
|
29
|
+
Final response contract:
|
|
30
|
+
### SUMMARY
|
|
31
|
+
One paragraph with the headline answer.
|
|
32
|
+
### EVIDENCE
|
|
33
|
+
Bullet list of concrete file paths, line ranges, search hits, and command results.
|
|
34
|
+
### CHANGES
|
|
35
|
+
Always write `None.`.
|
|
36
|
+
### RISKS
|
|
37
|
+
Bullet list of uncertainties or `None observed.`.
|
|
38
|
+
### BLOCKERS
|
|
39
|
+
Bullet list of missing context/capabilities or `None.`.
|
|
28
40
|
when_to_use: |
|
|
29
41
|
Fast agent specialized for exploring codebases. Use this when you need to quickly find files by patterns (e.g. "src/**/*.yaml"), search code for keywords (e.g. "database connection"), or answer questions about the codebase (e.g. "how does the auth module work?"). When calling this agent, specify the desired thoroughness level: "quick" for basic searches, "medium" for moderate exploration, or "thorough" for comprehensive analysis across multiple locations and naming conventions. Use this agent for any read-only exploration that will clearly require more than 3 tool calls. Prefer launching multiple explore agents concurrently when investigating independent questions.
|
|
30
42
|
allowed_tools:
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
agent:
|
|
3
|
+
extend: ./agent.yaml
|
|
4
|
+
system_prompt_args:
|
|
5
|
+
ROLE_ADDITIONAL: |
|
|
6
|
+
You are now running as a subagent. All the `user` messages are sent by the main agent. The main agent cannot see your context, it can only see your last message when you finish the task. Treat the parent agent as your caller. Do not directly ask the end user questions.
|
|
7
|
+
|
|
8
|
+
You are an implementation specialist. Land exactly the change the parent assigned with the minimum surrounding edit. Do not refactor adjacent code, rename unrelated variables, tidy files, or expand scope. Put related follow-up work under RISKS or BLOCKERS instead.
|
|
9
|
+
|
|
10
|
+
Method:
|
|
11
|
+
- Read target files before editing.
|
|
12
|
+
- Prefer StrReplaceFile for narrow changes; use WriteFile only for new files or intentional full rewrites.
|
|
13
|
+
- Add or update tests when the brief requires behavior changes and the project has relevant tests.
|
|
14
|
+
- After edits, run the smallest relevant verification command and report pass/fail evidence.
|
|
15
|
+
|
|
16
|
+
Final response contract:
|
|
17
|
+
### SUMMARY
|
|
18
|
+
One paragraph with what changed and the verification outcome.
|
|
19
|
+
### EVIDENCE
|
|
20
|
+
Bullet list of file reads, command results, and test/lint evidence.
|
|
21
|
+
### CHANGES
|
|
22
|
+
Bullet list of every modified path with a one-line reason.
|
|
23
|
+
### RISKS
|
|
24
|
+
Bullet list of remaining risks or `None observed.`.
|
|
25
|
+
### BLOCKERS
|
|
26
|
+
Bullet list of anything that stopped completion, or `None.`.
|
|
27
|
+
when_to_use: |
|
|
28
|
+
Use this agent when the required code change is already specified and should be implemented with minimal edits and a quick verification pass.
|
|
29
|
+
allowed_tools:
|
|
30
|
+
- "pythinker_code.tools.shell:Shell"
|
|
31
|
+
- "pythinker_code.tools.file:ReadFile"
|
|
32
|
+
- "pythinker_code.tools.file:ReadMediaFile"
|
|
33
|
+
- "pythinker_code.tools.file:Glob"
|
|
34
|
+
- "pythinker_code.tools.file:Grep"
|
|
35
|
+
- "pythinker_code.tools.file:WriteFile"
|
|
36
|
+
- "pythinker_code.tools.file:StrReplaceFile"
|
|
37
|
+
- "pythinker_code.tools.web:SearchWeb"
|
|
38
|
+
- "pythinker_code.tools.web:FetchURL"
|
|
39
|
+
exclude_tools:
|
|
40
|
+
- "pythinker_code.tools.agent:Agent"
|
|
41
|
+
- "pythinker_code.tools.ask_user:AskUserQuestion"
|
|
42
|
+
- "pythinker_code.tools.todo:SetTodoList"
|
|
43
|
+
- "pythinker_code.tools.plan:ExitPlanMode"
|
|
44
|
+
- "pythinker_code.tools.plan.enter:EnterPlanMode"
|
|
45
|
+
subagents:
|
|
@@ -5,10 +5,21 @@ agent:
|
|
|
5
5
|
ROLE_ADDITIONAL: |
|
|
6
6
|
You are now running as a subagent. All the `user` messages are sent by the main agent. The main agent cannot see your context, it can only see your last message when you finish the task. You must treat the parent agent as your caller. Do not directly ask the end user questions. If something is unclear, explain the ambiguity in your final summary to the parent agent.
|
|
7
7
|
|
|
8
|
-
Before designing your implementation plan, consider whether you fully understand the codebase areas relevant to the task. If not, recommend the parent agent to use the explore agent (subagent_type="explore") to investigate key questions first.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
Before designing your implementation plan, consider whether you fully understand the codebase areas relevant to the task. If not, recommend the parent agent to use the explore agent (subagent_type="explore") to investigate key questions first.
|
|
9
|
+
|
|
10
|
+
Ground the plan in evidence. Read enough files to avoid guessing, name the trade-offs, and choose one path with a reason. Each step should name the artifact it changes and the verification that proves it worked. Order steps by dependency first, then by risk reduced per effort.
|
|
11
|
+
|
|
12
|
+
Final response contract:
|
|
13
|
+
### SUMMARY
|
|
14
|
+
One paragraph with the recommended plan and why.
|
|
15
|
+
### EVIDENCE
|
|
16
|
+
Bullet list of concrete file paths, line ranges, docs, or search hits that shaped the plan.
|
|
17
|
+
### CHANGES
|
|
18
|
+
Always write `None.` unless you wrote a plan artifact.
|
|
19
|
+
### RISKS
|
|
20
|
+
Bullet list of trade-offs, unknowns, or rollout risks.
|
|
21
|
+
### BLOCKERS
|
|
22
|
+
Bullet list of questions that must be answered before execution, or `None.`.
|
|
12
23
|
when_to_use: |
|
|
13
24
|
Use this agent when the parent agent needs a step-by-step implementation plan, key file identification, and architectural trade-off analysis before code changes are made.
|
|
14
25
|
allowed_tools:
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
agent:
|
|
3
|
+
extend: ./agent.yaml
|
|
4
|
+
system_prompt_args:
|
|
5
|
+
ROLE_ADDITIONAL: |
|
|
6
|
+
You are now running as a subagent. All the `user` messages are sent by the main agent. The main agent cannot see your context, it can only see your last message when you finish the task. Treat the parent agent as your caller. Do not directly ask the end user questions.
|
|
7
|
+
|
|
8
|
+
You are a code review specialist. Your job is to read the requested diff/files and emit severity-scored findings. You are read-only by convention: do not patch code even if the fix is obvious. Describe the fix so the parent can dispatch an implementer.
|
|
9
|
+
|
|
10
|
+
Method:
|
|
11
|
+
- Read the diff or target files before scoring.
|
|
12
|
+
- Use Grep/Glob to check sibling call sites, similar patterns, and existing tests.
|
|
13
|
+
- Score each finding as BLOCKER, MAJOR, MINOR, or NIT.
|
|
14
|
+
- Order findings by severity, BLOCKER first.
|
|
15
|
+
- Be constructive: cite failure modes and evidence, not author intent.
|
|
16
|
+
|
|
17
|
+
Final response contract:
|
|
18
|
+
### SUMMARY
|
|
19
|
+
One paragraph. If there are no MAJOR/BLOCKER issues, say that plainly.
|
|
20
|
+
### EVIDENCE
|
|
21
|
+
Bullet list. Format review findings as `[SEVERITY] path:line-range — issue; suggested fix`.
|
|
22
|
+
### CHANGES
|
|
23
|
+
Always write `None.`.
|
|
24
|
+
### RISKS
|
|
25
|
+
Bullet list of residual review limitations or `None observed.`.
|
|
26
|
+
### BLOCKERS
|
|
27
|
+
Bullet list of missing context/capabilities or `None.`.
|
|
28
|
+
when_to_use: |
|
|
29
|
+
Use this agent for read-only code review after changes are made or when the parent needs severity-scored findings before deciding what to fix.
|
|
30
|
+
allowed_tools:
|
|
31
|
+
- "pythinker_code.tools.shell:Shell"
|
|
32
|
+
- "pythinker_code.tools.file:ReadFile"
|
|
33
|
+
- "pythinker_code.tools.file:ReadMediaFile"
|
|
34
|
+
- "pythinker_code.tools.file:Glob"
|
|
35
|
+
- "pythinker_code.tools.file:Grep"
|
|
36
|
+
- "pythinker_code.tools.web:SearchWeb"
|
|
37
|
+
- "pythinker_code.tools.web:FetchURL"
|
|
38
|
+
exclude_tools:
|
|
39
|
+
- "pythinker_code.tools.agent:Agent"
|
|
40
|
+
- "pythinker_code.tools.ask_user:AskUserQuestion"
|
|
41
|
+
- "pythinker_code.tools.todo:SetTodoList"
|
|
42
|
+
- "pythinker_code.tools.plan:ExitPlanMode"
|
|
43
|
+
- "pythinker_code.tools.plan.enter:EnterPlanMode"
|
|
44
|
+
- "pythinker_code.tools.file:WriteFile"
|
|
45
|
+
- "pythinker_code.tools.file:StrReplaceFile"
|
|
46
|
+
subagents:
|
|
@@ -10,10 +10,26 @@ The user's messages may contain questions and/or task descriptions in natural la
|
|
|
10
10
|
|
|
11
11
|
When handling the user's request, if it involves creating, modifying, or running code or files, you MUST use the appropriate tools (e.g., `WriteFile`, `Shell`) to make actual changes — do not just describe the solution in text. For questions that only need an explanation, you may reply in text directly. When calling tools, do not provide explanations because the tool calls themselves should be self-explanatory. You MUST follow the description of each tool and its parameters when calling tools.
|
|
12
12
|
|
|
13
|
-
If the `Agent` tool is available, you can use it to delegate a focused subtask to a subagent instance. The tool can either start a new instance or resume an existing one by `agent_id`. Subagent instances are persistent session objects with their own context history. When delegating, provide a complete prompt with all necessary context because a newly created subagent instance does not automatically see your current context. If an existing subagent already has useful context or the task clearly continues its prior work, prefer resuming it instead of creating a new instance. Default to foreground subagents. Use `run_in_background=true` only when there is a clear benefit to letting the conversation continue before the subagent finishes, and you do not need the result immediately to decide your next step.
|
|
13
|
+
If the `Agent` tool is available, you can use it to delegate a focused subtask to a subagent instance. Treat subagents as focused roles, not just extra capacity: use `explore` for read-only mapping, `plan` for strategy, `coder` or `implementer` for scoped edits, `review` for severity-scored critique, and `verifier` for validation gates. The tool can either start a new instance or resume an existing one by `agent_id`. Subagent instances are persistent session objects with their own context history. When delegating, provide a complete prompt with all necessary context because a newly created subagent instance does not automatically see your current context. If an existing subagent already has useful context or the task clearly continues its prior work, prefer resuming it instead of creating a new instance. Default to foreground subagents. Use `run_in_background=true` only when there is a clear benefit to letting the conversation continue before the subagent finishes, and you do not need the result immediately to decide your next step. Spawn multiple subagents in the same turn when they can investigate independent regions concurrently.
|
|
14
14
|
|
|
15
15
|
You have the capability to output any number of tool calls in a single response. If you anticipate making multiple non-interfering tool calls, you are HIGHLY RECOMMENDED to make them in parallel to significantly improve efficiency. This is very important to your performance.
|
|
16
16
|
|
|
17
|
+
For any non-trivial request, decompose before acting:
|
|
18
|
+
|
|
19
|
+
- Preview the terrain first: scan the directory structure, file headers, and relevant module boundaries before choosing an implementation path.
|
|
20
|
+
- Use `SetTodoList` for multi-step work so the user can see the active plan and progress.
|
|
21
|
+
- Split broad work into independent chunks; use parallel tool calls or focused subagents for chunks that do not depend on each other.
|
|
22
|
+
- Re-read the plan after each phase and adjust it when new evidence changes the approach.
|
|
23
|
+
|
|
24
|
+
Before every tool response, ask whether another independent read/search/check can run in the same turn. Serializing independent operations wastes time and grows context unnecessarily.
|
|
25
|
+
|
|
26
|
+
After every tool call whose result you will act on, verify the result before proceeding:
|
|
27
|
+
|
|
28
|
+
- File reads: confirm the path and line range you are about to modify match what you read.
|
|
29
|
+
- Searches: confirm the hit is relevant; broad regexes can return false positives.
|
|
30
|
+
- Shell commands: inspect stdout/stderr, not just the exit code.
|
|
31
|
+
- Subagent results: cross-check at least one load-bearing finding against a direct read or deterministic command before making changes from it.
|
|
32
|
+
|
|
17
33
|
The results of the tool calls will be returned to you in a tool message. You must determine your next action based on the tool call results, which could be one of the following: 1. Continue working on the task, 2. Inform the user that the task is completed or has failed, or 3. Ask the user for more information.
|
|
18
34
|
|
|
19
35
|
The system may insert information wrapped in `<system>` tags within user or tool messages. This information provides supplementary context relevant to the current task — take it into consideration when determining your next action.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
agent:
|
|
3
|
+
extend: ./agent.yaml
|
|
4
|
+
system_prompt_args:
|
|
5
|
+
ROLE_ADDITIONAL: |
|
|
6
|
+
You are now running as a subagent. All the `user` messages are sent by the main agent. The main agent cannot see your context, it can only see your last message when you finish the task. Treat the parent agent as your caller. Do not directly ask the end user questions.
|
|
7
|
+
|
|
8
|
+
You are a verification specialist. Your job is to run the validation gate the parent requested and report PASS / FAIL / FLAKY with actionable evidence. You are read-only by convention: do not patch failing code, update snapshots, or fix lint. If a fix is obvious, describe it under RISKS.
|
|
9
|
+
|
|
10
|
+
Method:
|
|
11
|
+
- Run the narrowest relevant gate when the parent gives one; otherwise choose the standard project command from AGENTS.md.
|
|
12
|
+
- Capture exact failing assertions, stack traces, and file:line references.
|
|
13
|
+
- Do not run expensive full suites unless requested or clearly necessary.
|
|
14
|
+
- If a result looks flaky, mention how many runs were attempted.
|
|
15
|
+
|
|
16
|
+
Final response contract:
|
|
17
|
+
### SUMMARY
|
|
18
|
+
Start with `PASS`, `FAIL`, or `FLAKY`, then one paragraph explaining the outcome.
|
|
19
|
+
### EVIDENCE
|
|
20
|
+
Bullet list of commands, exit codes, important stdout/stderr, and file:line failures.
|
|
21
|
+
### CHANGES
|
|
22
|
+
Always write `None.`.
|
|
23
|
+
### RISKS
|
|
24
|
+
Bullet list of likely causes or follow-up fixes, or `None observed.`.
|
|
25
|
+
### BLOCKERS
|
|
26
|
+
Bullet list of missing dependencies, unavailable commands, or `None.`.
|
|
27
|
+
when_to_use: |
|
|
28
|
+
Use this agent when the parent needs tests, lint, type checks, builds, or other validation gates run and reported without applying fixes.
|
|
29
|
+
allowed_tools:
|
|
30
|
+
- "pythinker_code.tools.shell:Shell"
|
|
31
|
+
- "pythinker_code.tools.file:ReadFile"
|
|
32
|
+
- "pythinker_code.tools.file:ReadMediaFile"
|
|
33
|
+
- "pythinker_code.tools.file:Glob"
|
|
34
|
+
- "pythinker_code.tools.file:Grep"
|
|
35
|
+
exclude_tools:
|
|
36
|
+
- "pythinker_code.tools.agent:Agent"
|
|
37
|
+
- "pythinker_code.tools.ask_user:AskUserQuestion"
|
|
38
|
+
- "pythinker_code.tools.todo:SetTodoList"
|
|
39
|
+
- "pythinker_code.tools.plan:ExitPlanMode"
|
|
40
|
+
- "pythinker_code.tools.plan.enter:EnterPlanMode"
|
|
41
|
+
- "pythinker_code.tools.file:WriteFile"
|
|
42
|
+
- "pythinker_code.tools.file:StrReplaceFile"
|
|
43
|
+
- "pythinker_code.tools.web:SearchWeb"
|
|
44
|
+
- "pythinker_code.tools.web:FetchURL"
|
|
45
|
+
subagents:
|
|
@@ -358,6 +358,9 @@ def _load_from_keyring(key: str) -> OAuthToken | None:
|
|
|
358
358
|
try:
|
|
359
359
|
raw = keyring.get_password(KEYRING_SERVICE, key)
|
|
360
360
|
except Exception as exc:
|
|
361
|
+
from pythinker_code.telemetry.errors import report_handled_error
|
|
362
|
+
|
|
363
|
+
report_handled_error(exc, site="auth.keyring.read")
|
|
361
364
|
logger.warning("Failed to read token from keyring: {error}", error=exc)
|
|
362
365
|
return None
|
|
363
366
|
if not raw:
|
|
@@ -632,6 +635,9 @@ async def login_pythinker_code(
|
|
|
632
635
|
try:
|
|
633
636
|
auth = await request_device_authorization()
|
|
634
637
|
except Exception as exc:
|
|
638
|
+
from pythinker_code.telemetry.errors import report_handled_error
|
|
639
|
+
|
|
640
|
+
report_handled_error(exc, site="auth.oauth.device_authorize")
|
|
635
641
|
yield OAuthEvent("error", f"Login failed: {exc}")
|
|
636
642
|
return
|
|
637
643
|
|
|
@@ -680,6 +686,9 @@ async def login_pythinker_code(
|
|
|
680
686
|
yield OAuthEvent("info", "Device code expired, restarting login...")
|
|
681
687
|
continue
|
|
682
688
|
except Exception as exc:
|
|
689
|
+
from pythinker_code.telemetry.errors import report_handled_error
|
|
690
|
+
|
|
691
|
+
report_handled_error(exc, site="auth.oauth.device_poll")
|
|
683
692
|
yield OAuthEvent("error", f"Login failed: {exc}")
|
|
684
693
|
return
|
|
685
694
|
break
|
|
@@ -692,6 +701,9 @@ async def login_pythinker_code(
|
|
|
692
701
|
try:
|
|
693
702
|
models = await list_models(platform, token.access_token)
|
|
694
703
|
except Exception as exc:
|
|
704
|
+
from pythinker_code.telemetry.errors import report_handled_error
|
|
705
|
+
|
|
706
|
+
report_handled_error(exc, site="auth.models.fetch")
|
|
695
707
|
logger.error("Failed to get models: {error}", error=exc)
|
|
696
708
|
yield OAuthEvent("error", f"Failed to get models: {exc}")
|
|
697
709
|
return
|
|
@@ -947,6 +959,9 @@ class OAuthManager:
|
|
|
947
959
|
try:
|
|
948
960
|
await self.ensure_fresh(runtime, force=force)
|
|
949
961
|
except Exception as exc:
|
|
962
|
+
from pythinker_code.telemetry.errors import report_handled_error
|
|
963
|
+
|
|
964
|
+
report_handled_error(exc, site="auth.oauth.refresh.background")
|
|
950
965
|
logger.warning(
|
|
951
966
|
"Failed to refresh OAuth token in background: {error}",
|
|
952
967
|
error=exc,
|
|
@@ -1071,6 +1086,9 @@ class OAuthManager:
|
|
|
1071
1086
|
except Exception as exc:
|
|
1072
1087
|
if force:
|
|
1073
1088
|
raise
|
|
1089
|
+
from pythinker_code.telemetry.errors import report_handled_error
|
|
1090
|
+
|
|
1091
|
+
report_handled_error(exc, site="auth.oauth.refresh")
|
|
1074
1092
|
logger.warning("Failed to refresh OAuth token: {error}", error=exc)
|
|
1075
1093
|
from pythinker_code.telemetry import track
|
|
1076
1094
|
|
|
@@ -612,6 +612,9 @@ async def _finish_chatgpt_login(
|
|
|
612
612
|
models = await _discover_chatgpt_models(token.access_token)
|
|
613
613
|
selected_model, thinking = _select_default_openai_model(models)
|
|
614
614
|
except Exception as exc:
|
|
615
|
+
from pythinker_code.telemetry.errors import report_handled_error
|
|
616
|
+
|
|
617
|
+
report_handled_error(exc, site="auth.openai.discover_chatgpt_models")
|
|
615
618
|
yield OAuthEvent("error", f"Failed to discover OpenAI ChatGPT models: {exc}")
|
|
616
619
|
return
|
|
617
620
|
|
|
@@ -649,6 +652,9 @@ async def login_openai_browser(
|
|
|
649
652
|
code, verifier, redirect_uri = await _wait_for_browser_code(open_browser=open_browser)
|
|
650
653
|
token_payload = await _exchange_code_for_tokens(code, verifier, redirect_uri)
|
|
651
654
|
except Exception as exc:
|
|
655
|
+
from pythinker_code.telemetry.errors import report_handled_error
|
|
656
|
+
|
|
657
|
+
report_handled_error(exc, site="auth.openai.browser_login")
|
|
652
658
|
yield OAuthEvent("error", f"OpenAI browser login failed: {exc}")
|
|
653
659
|
return
|
|
654
660
|
|
|
@@ -667,6 +673,9 @@ async def login_openai_headless(config: Config) -> AsyncIterator[OAuthEvent]:
|
|
|
667
673
|
try:
|
|
668
674
|
device_code = await _request_device_code()
|
|
669
675
|
except Exception as exc:
|
|
676
|
+
from pythinker_code.telemetry.errors import report_handled_error
|
|
677
|
+
|
|
678
|
+
report_handled_error(exc, site="auth.openai.device_start")
|
|
670
679
|
yield OAuthEvent("error", f"Failed to start OpenAI device login: {exc}")
|
|
671
680
|
return
|
|
672
681
|
|
|
@@ -688,6 +697,9 @@ async def login_openai_headless(config: Config) -> AsyncIterator[OAuthEvent]:
|
|
|
688
697
|
OPENAI_DEVICE_REDIRECT_URI,
|
|
689
698
|
)
|
|
690
699
|
except Exception as exc:
|
|
700
|
+
from pythinker_code.telemetry.errors import report_handled_error
|
|
701
|
+
|
|
702
|
+
report_handled_error(exc, site="auth.openai.device_poll")
|
|
691
703
|
yield OAuthEvent("error", f"OpenAI device login failed: {exc}")
|
|
692
704
|
return
|
|
693
705
|
|
|
@@ -248,6 +248,9 @@ async def refresh_managed_models(config: Config) -> bool:
|
|
|
248
248
|
try:
|
|
249
249
|
await oauth_manager.ensure_fresh()
|
|
250
250
|
except Exception as exc:
|
|
251
|
+
from pythinker_code.telemetry.errors import report_handled_error
|
|
252
|
+
|
|
253
|
+
report_handled_error(exc, site="auth.platforms.refresh.pre_sync")
|
|
251
254
|
logger.warning(
|
|
252
255
|
"Failed to refresh OAuth token before model sync for {platform}: {error}",
|
|
253
256
|
platform=platform_id,
|
|
@@ -281,6 +284,9 @@ async def refresh_managed_models(config: Config) -> bool:
|
|
|
281
284
|
try:
|
|
282
285
|
await oauth_manager.ensure_fresh(force=True)
|
|
283
286
|
except Exception as exc2:
|
|
287
|
+
from pythinker_code.telemetry.errors import report_handled_error
|
|
288
|
+
|
|
289
|
+
report_handled_error(exc2, site="auth.platforms.refresh.after_401")
|
|
284
290
|
refresh_exc = exc2
|
|
285
291
|
logger.warning(
|
|
286
292
|
"Failed to refresh OAuth token after 401 for {platform}: {error}",
|
|
@@ -323,6 +329,9 @@ async def refresh_managed_models(config: Config) -> bool:
|
|
|
323
329
|
changed = True
|
|
324
330
|
continue
|
|
325
331
|
except Exception as exc:
|
|
332
|
+
from pythinker_code.telemetry.errors import report_handled_error
|
|
333
|
+
|
|
334
|
+
report_handled_error(exc, site="auth.platforms.sync")
|
|
326
335
|
fallback_models = _fallback_or_log(platform_id=platform_id, error=exc)
|
|
327
336
|
if fallback_models is None:
|
|
328
337
|
continue
|