pythinker-code 2.4.0__tar.gz → 2.6.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.4.0 → pythinker_code-2.6.0}/PKG-INFO +38 -2
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/README.md +36 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/pyproject.toml +2 -2
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/CHANGELOG.md +80 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/acp/tools.py +7 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/agents/default/agent.yaml +1 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/agents/default/coder.yaml +1 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/agents/default/explore.yaml +1 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/agents/default/implementer.yaml +1 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/agents/default/plan.yaml +1 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/agents/default/review.yaml +1 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/agents/default/verifier.yaml +1 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/app.py +18 -10
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/background/manager.py +22 -4
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/background/models.py +14 -1
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/background/store.py +7 -1
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/config.py +30 -2
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/llm.py +3 -1
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/plugin/manager.py +19 -6
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/soul/agent.py +1 -1
- pythinker_code-2.6.0/src/pythinker_code/soul/permission.py +341 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/soul/pythinkersoul.py +104 -65
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/soul/toolset.py +35 -31
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/subagents/builder.py +1 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/subagents/models.py +2 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/subagents/runner.py +16 -8
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/subagents/store.py +4 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/telemetry/config.py +27 -4
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/telemetry/crash.py +15 -2
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/telemetry/otel.py +2 -1
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/telemetry/sentry.py +46 -1
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/agent/__init__.py +47 -1
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/file/__init__.py +2 -1
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/file/grep_local.py +103 -1
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/file/replace.py +6 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/file/write.py +6 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/plan/__init__.py +32 -0
- pythinker_code-2.6.0/src/pythinker_code/tools/plan/handoff.py +69 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/shell/__init__.py +4 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/web/fetch.py +74 -2
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/__init__.py +8 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/prompt.py +27 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/slash.py +49 -32
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/update.py +116 -2
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/vis/api/sessions.py +9 -6
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/vis/app.py +26 -2
- pythinker_code-2.4.0/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-D2MTYyJz.js → pythinker_code-2.6.0/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/vis/static/assets/index-CezafTt_.js → pythinker_code-2.6.0/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +70 -70
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/vis/static/index.html +1 -1
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/api/open_in.py +34 -19
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/api/sessions.py +18 -13
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/app.py +2 -4
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/_baseUniq-CnjLtNBK.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/_baseUniq-xopHfKWX.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/arc-p8Zl45yf.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/arc-BBJ7V9Gp.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-Lxm5mR82.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-DwGo6qSm.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-B7qw0bmu.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-B96wqtrk.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-CdgJaayE.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-BAv4oGOt.js +1 -1
- pythinker_code-2.6.0/src/pythinker_code/web/static/assets/channel-BMhsY12h.js +1 -0
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DNr_hwHQ.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-xvC1-2wn.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-BWRJeLuP.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-Ci3UbC9h.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-BRveHO02.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-YlIqOoyf.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-CC8092Ai.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-CiKvkLSV.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-BWlTTg4C.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-6L3DZcgX.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-CQB7XXqV.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL--uAxWJyr.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-DR05TXzx.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-BgsfDfGl.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-BooWpSCF.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-CmVX5blB.js +1 -1
- pythinker_code-2.6.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-xLNcUMaH.js +1 -0
- pythinker_code-2.6.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-xLNcUMaH.js +1 -0
- pythinker_code-2.6.0/src/pythinker_code/web/static/assets/clone-D4ji5nla.js +1 -0
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-C0nbBxoU.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DOvUTd9H.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A---Tl6BDU.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-CnxamR9p.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/cytoscape.esm-Dlvswyl5.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/cytoscape.esm-JliMJb2r.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-CXURVXMQ.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-CZPQL3_X.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-DqPWQvWf.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-BdkuXkbh.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-XG4wk_zx.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-B_gzBcDN.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-sNvTPY2M.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-C9KMyyaT.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-BOJaQQQU.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-BMG5oLO5.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-CbfuToSV.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-ByMcd6Qs.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-ulVOoUco.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-uIly3nqs.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-D2qIB9v4.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-DMlBqiTw.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/graph-CMrFXUW3.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/graph-B2e5iBNo.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/index-nZJqxMTn.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/index-ChRG_K1c.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/index-BORZhTVE.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/index-DgWvtkAz.js +2 -2
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/index-Cw0e9z0j.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/index-XVss4lOI.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-B-DtK8KA.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-CihjcIPb.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-CVpxG_1t.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-D8UHxaOf.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-DsoNxPLk.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-DMJJ5np4.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/layout-C-IPsObI.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/layout-DCD-kyE5.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/linear-BoIapCU_.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/linear-D32cHhqF.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-BNd1nBm2.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-BdQ-I_9q.js +7 -7
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/mermaid.core-CiwyVvHW.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/mermaid.core-TDrBZ18i.js +5 -5
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/min-BCUh9ALv.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/min-BLYTe2ei.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-CjwMDCnL.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-D4dVU6Wl.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-fDnq6EaG.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-BPhhXGkK.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-DyHz9xJE.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-Bw33P7le.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-CtnhMmz_.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-BJhppvmZ.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-DBjlbTUH.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-B2QsrhB7.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-B8vAgUxw.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-D-zE9VAU.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-CKckm--Z.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-fXBn8fR5.js +1 -1
- pythinker_code-2.6.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-Uh1qibgy.js +1 -0
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-ByteGYaR.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-QJcB1GYA.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-CBb0li3c.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-BIsZeCJI.js +1 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-E_ri2DuP.js → pythinker_code-2.6.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-D23m9ArK.js +1 -1
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/index.html +1 -1
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/wire/server.py +16 -13
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/channel-BZBK5lN6.js +0 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-BpVZZpbi.js +0 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-BpVZZpbi.js +0 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/clone-C-R24ClB.js +0 -1
- pythinker_code-2.4.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-DFvB4bvk.js +0 -1
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/LICENSE +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/NOTICE +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/__main__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/acp/AGENTS.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/acp/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/acp/convert.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/acp/host.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/acp/mcp.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/acp/server.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/acp/session.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/acp/types.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/acp/version.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/agents/default/system.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/agentspec.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/approval_runtime/models.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/auth/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/auth/deepseek.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/auth/lm_studio.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/auth/minimax.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/auth/oauth.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/auth/ollama.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/auth/openai.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/auth/opencode_go.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/auth/openrouter.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/auth/platforms.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/background/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/background/agent_runner.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/background/ids.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/background/summary.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/background/worker.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/cli/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/cli/__main__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/cli/export.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/cli/info.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/cli/mcp.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/cli/plugin.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/cli/toad.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/cli/update.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/cli/vis.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/cli/web.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/constant.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/events.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/exception.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/extensions.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/hooks/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/hooks/config.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/hooks/engine.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/hooks/events.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/hooks/runner.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/metadata.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/notifications/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/notifications/llm.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/notifications/manager.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/notifications/models.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/notifications/notifier.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/notifications/store.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/notifications/wire.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/plugin/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/plugin/tool.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/prompt_templates.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/prompts/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/prompts/compact.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/prompts/init.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/py.typed +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/session.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/session_fork.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/session_state.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/share.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/skill/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/skill/flow/d2.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/soul/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/soul/approval.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/soul/btw.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/soul/compaction.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/soul/context.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/soul/denwarenji.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/soul/message.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/soul/slash.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/subagents/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/subagents/core.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/subagents/git_context.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/subagents/output.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/subagents/registry.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/telemetry/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/telemetry/errors.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/telemetry/metrics.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/telemetry/sink.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/AGENTS.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/agent/description.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/background/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/background/list.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/background/output.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/background/stop.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/display.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/file/glob.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/file/glob.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/file/grep.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/file/read.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/file/read.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/file/read_media.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/file/read_media.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/file/replace.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/file/utils.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/file/write.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/plan/description.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/plan/enter.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/shell/bash.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/test.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/think/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/think/think.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/utils.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/web/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/web/fetch.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/web/search.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/tools/web/search.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/print/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/print/visualize.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/console.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/debug.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/echo.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/replay.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/selector.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/setup.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/startup.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/usage.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/theme.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/ui/tui_config.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/aiohttp.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/aioqueue.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/broadcast.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/changelog.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/clipboard.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/datetime.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/diff.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/editor.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/environment.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/envvar.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/export.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/file_filter.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/frontmatter.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/io.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/logging.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/media_tags.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/message.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/path.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/proctitle.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/proxy.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/rich/columns.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/sensitive.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/server.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/signals.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/slashcmd.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/string.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/term.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/utils/typing.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/vis/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/vis/api/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/vis/api/statistics.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/vis/api/system.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/api/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/api/config.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/auth.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/models.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/runner/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/runner/messages.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/runner/process.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/runner/worker.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B2P5VJ9v.css +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/static/logo.png +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/store/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/web/store/sessions.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/wire/__init__.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/wire/file.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/wire/protocol.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/wire/root_hub.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/wire/serde.py +0 -0
- {pythinker_code-2.4.0 → pythinker_code-2.6.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.6.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
|
|
@@ -23,7 +23,7 @@ Requires-Dist: agent-client-protocol==0.8.0
|
|
|
23
23
|
Requires-Dist: aiofiles>=24.0,<26.0
|
|
24
24
|
Requires-Dist: aiohttp==3.13.3
|
|
25
25
|
Requires-Dist: typer==0.21.1
|
|
26
|
-
Requires-Dist: pythinker-core[contrib]==1.
|
|
26
|
+
Requires-Dist: pythinker-core[contrib]==1.1.0
|
|
27
27
|
Requires-Dist: loguru>=0.6.0,<0.7
|
|
28
28
|
Requires-Dist: prompt-toolkit==3.0.52
|
|
29
29
|
Requires-Dist: pillow==12.1.0
|
|
@@ -110,6 +110,42 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
110
110
|
|
|
111
111
|
---
|
|
112
112
|
|
|
113
|
+
## 🆕 What's New in 2.6.0
|
|
114
|
+
|
|
115
|
+
> **Hotfix release for Kimi K2.x and DeepSeek users on PyPI.**
|
|
116
|
+
|
|
117
|
+
The runtime fix for Moonshot's `thinking is enabled but reasoning_content is missing in assistant tool call message at index N` rejection was in the `pythinker-core` source since 2.4.0, but the published `pythinker-core==1.0.0` on PyPI predates it — so installs of `pythinker-code` 2.4.0 / 2.5.0 from PyPI kept hitting the bug on Kimi K2.5, K2.6, and DeepSeek (including through OpenCode Go). Reported in [#37](https://github.com/mohamed-elkholy95/Pythinker-Code/issues/37).
|
|
118
|
+
|
|
119
|
+
2.6.0 bumps the pinned dep:
|
|
120
|
+
|
|
121
|
+
- **`pythinker-core` 1.0.0 → 1.1.0** (published independently to PyPI) — strict-interleaved providers (`kimi-k2*`, `deepseek*`) now always emit `reasoning_content` on assistant turns, with the fallback chain `ThinkPart → extract_text() → "[reasoning unavailable]"`. Multi-step tool flows on Moonshot/Kimi/DeepSeek no longer trip the strict thinking-replay check.
|
|
122
|
+
- **Root pin** `pythinker-core[contrib]==1.0.0 → 1.1.0` — new installs of `pip install --upgrade pythinker-code==2.6.0` (and `uv tool install`/`upgrade`) pick up the fix automatically.
|
|
123
|
+
|
|
124
|
+
No app-level changes vs 2.5.0; everything from the 2.5.0 release is still present. **Existing 2.5.0 users on Kimi K2.x / DeepSeek must upgrade to 2.6.0.**
|
|
125
|
+
|
|
126
|
+
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==2.6.0`.
|
|
127
|
+
|
|
128
|
+
### What was new in 2.5.0
|
|
129
|
+
|
|
130
|
+
## 🆕 What's New in 2.5.0
|
|
131
|
+
|
|
132
|
+
Coding-agent runtime hardening: runtime-enforced permission profiles, FetchURL SSRF protection, a Windows self-upgrade fix, and a configurable feedback endpoint.
|
|
133
|
+
|
|
134
|
+
- **Runtime-enforced permission profiles** — every built-in role (`read-only` / `plan` / `ask` / `implement` / `review` / `verify`) is now backed by `src/pythinker_code/soul/permission.py`. Profiles are snapshot per LLM step so a mid-step model switch can't escalate. **Plan mode hard-denies** non-plan writes and dangerous shell mutations instead of relying on prompt-deny.
|
|
135
|
+
- **Plan → Implement handoff** — new `tools/plan/handoff.py` plus dynamic injection through `soul/dynamic_injections/plan_mode.py` carries the approved plan into implementation without re-priming the context.
|
|
136
|
+
- **FetchURL SSRF + size hardening** — `_validate_fetch_url` blocks private / loopback / link-local / multicast / reserved IPv4 + IPv6 ranges; rejects non-`http`/`https` schemes; non-host URLs. Responses are streamed with a hard **5 MB** ceiling honoring `Content-Length`.
|
|
137
|
+
- **Windows self-upgrade fixed** — `pythinker update` on Windows now spawns the upgrade in a **detached console** and exits the parent before `uv tool upgrade` runs, releasing the lock on the running `pythinker.exe`. Eliminates the `os error 32: The process cannot access the file because it is being used by another process` error.
|
|
138
|
+
- **Background recovery improved** — `recoverable` (resumable via stored `agent_id`) vs `lost` (worker gone, no resume target). Subagent instances are parked as `idle` when recoverable. `pythinker-host` subprocess teardown kills the entire child process tree and creates a new session group.
|
|
139
|
+
- **Feedback endpoint config** — new `feedback` config block (`endpoint_url`, `api_key`, `custom_headers`). The `/feedback` slash command now routes submissions to a user-configured HTTP endpoint instead of being a no-op.
|
|
140
|
+
- **Welcome-screen version banner** — installed Pythinker version is now visible up-front.
|
|
141
|
+
- **VS 2026 CI forward-compat probe** — non-blocking `windows-2025-vs2026` matrix entry on the host + cli builds validates MSVC v144 ahead of GitHub's eventual `windows-2022` deprecation.
|
|
142
|
+
- **anthropic 0.101 compat** — added fallbacks for the six new tool-result block types so `pyright` stays exhaustive.
|
|
143
|
+
- **Telemetry hygiene** — OTel `service.name` normalized to a stable value for SigNoz dashboards; Sentry filters drop test and shutdown noise.
|
|
144
|
+
|
|
145
|
+
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==2.5.0` (note: 2.5.0 PyPI installs are affected by [#37](https://github.com/mohamed-elkholy95/Pythinker-Code/issues/37) on Kimi/DeepSeek — see the 2.6.0 hotfix above).
|
|
146
|
+
|
|
147
|
+
### What was new in 2.4.0
|
|
148
|
+
|
|
113
149
|
## 🆕 What's New in 2.4.0
|
|
114
150
|
|
|
115
151
|
Subagent roles overhaul, Moonshot/Kimi K2 provider support, and a ripgrep-free Grep fallback.
|
|
@@ -48,6 +48,42 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
|
|
|
48
48
|
|
|
49
49
|
---
|
|
50
50
|
|
|
51
|
+
## 🆕 What's New in 2.6.0
|
|
52
|
+
|
|
53
|
+
> **Hotfix release for Kimi K2.x and DeepSeek users on PyPI.**
|
|
54
|
+
|
|
55
|
+
The runtime fix for Moonshot's `thinking is enabled but reasoning_content is missing in assistant tool call message at index N` rejection was in the `pythinker-core` source since 2.4.0, but the published `pythinker-core==1.0.0` on PyPI predates it — so installs of `pythinker-code` 2.4.0 / 2.5.0 from PyPI kept hitting the bug on Kimi K2.5, K2.6, and DeepSeek (including through OpenCode Go). Reported in [#37](https://github.com/mohamed-elkholy95/Pythinker-Code/issues/37).
|
|
56
|
+
|
|
57
|
+
2.6.0 bumps the pinned dep:
|
|
58
|
+
|
|
59
|
+
- **`pythinker-core` 1.0.0 → 1.1.0** (published independently to PyPI) — strict-interleaved providers (`kimi-k2*`, `deepseek*`) now always emit `reasoning_content` on assistant turns, with the fallback chain `ThinkPart → extract_text() → "[reasoning unavailable]"`. Multi-step tool flows on Moonshot/Kimi/DeepSeek no longer trip the strict thinking-replay check.
|
|
60
|
+
- **Root pin** `pythinker-core[contrib]==1.0.0 → 1.1.0` — new installs of `pip install --upgrade pythinker-code==2.6.0` (and `uv tool install`/`upgrade`) pick up the fix automatically.
|
|
61
|
+
|
|
62
|
+
No app-level changes vs 2.5.0; everything from the 2.5.0 release is still present. **Existing 2.5.0 users on Kimi K2.x / DeepSeek must upgrade to 2.6.0.**
|
|
63
|
+
|
|
64
|
+
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==2.6.0`.
|
|
65
|
+
|
|
66
|
+
### What was new in 2.5.0
|
|
67
|
+
|
|
68
|
+
## 🆕 What's New in 2.5.0
|
|
69
|
+
|
|
70
|
+
Coding-agent runtime hardening: runtime-enforced permission profiles, FetchURL SSRF protection, a Windows self-upgrade fix, and a configurable feedback endpoint.
|
|
71
|
+
|
|
72
|
+
- **Runtime-enforced permission profiles** — every built-in role (`read-only` / `plan` / `ask` / `implement` / `review` / `verify`) is now backed by `src/pythinker_code/soul/permission.py`. Profiles are snapshot per LLM step so a mid-step model switch can't escalate. **Plan mode hard-denies** non-plan writes and dangerous shell mutations instead of relying on prompt-deny.
|
|
73
|
+
- **Plan → Implement handoff** — new `tools/plan/handoff.py` plus dynamic injection through `soul/dynamic_injections/plan_mode.py` carries the approved plan into implementation without re-priming the context.
|
|
74
|
+
- **FetchURL SSRF + size hardening** — `_validate_fetch_url` blocks private / loopback / link-local / multicast / reserved IPv4 + IPv6 ranges; rejects non-`http`/`https` schemes; non-host URLs. Responses are streamed with a hard **5 MB** ceiling honoring `Content-Length`.
|
|
75
|
+
- **Windows self-upgrade fixed** — `pythinker update` on Windows now spawns the upgrade in a **detached console** and exits the parent before `uv tool upgrade` runs, releasing the lock on the running `pythinker.exe`. Eliminates the `os error 32: The process cannot access the file because it is being used by another process` error.
|
|
76
|
+
- **Background recovery improved** — `recoverable` (resumable via stored `agent_id`) vs `lost` (worker gone, no resume target). Subagent instances are parked as `idle` when recoverable. `pythinker-host` subprocess teardown kills the entire child process tree and creates a new session group.
|
|
77
|
+
- **Feedback endpoint config** — new `feedback` config block (`endpoint_url`, `api_key`, `custom_headers`). The `/feedback` slash command now routes submissions to a user-configured HTTP endpoint instead of being a no-op.
|
|
78
|
+
- **Welcome-screen version banner** — installed Pythinker version is now visible up-front.
|
|
79
|
+
- **VS 2026 CI forward-compat probe** — non-blocking `windows-2025-vs2026` matrix entry on the host + cli builds validates MSVC v144 ahead of GitHub's eventual `windows-2022` deprecation.
|
|
80
|
+
- **anthropic 0.101 compat** — added fallbacks for the six new tool-result block types so `pyright` stays exhaustive.
|
|
81
|
+
- **Telemetry hygiene** — OTel `service.name` normalized to a stable value for SigNoz dashboards; Sentry filters drop test and shutdown noise.
|
|
82
|
+
|
|
83
|
+
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==2.5.0` (note: 2.5.0 PyPI installs are affected by [#37](https://github.com/mohamed-elkholy95/Pythinker-Code/issues/37) on Kimi/DeepSeek — see the 2.6.0 hotfix above).
|
|
84
|
+
|
|
85
|
+
### What was new in 2.4.0
|
|
86
|
+
|
|
51
87
|
## 🆕 What's New in 2.4.0
|
|
52
88
|
|
|
53
89
|
Subagent roles overhaul, Moonshot/Kimi K2 provider support, and a ripgrep-free Grep fallback.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "pythinker-code"
|
|
3
|
-
version = "2.
|
|
3
|
+
version = "2.6.0"
|
|
4
4
|
description = "Pythinker Code is your next CLI agent."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -26,7 +26,7 @@ dependencies = [
|
|
|
26
26
|
"aiofiles>=24.0,<26.0",
|
|
27
27
|
"aiohttp==3.13.3",
|
|
28
28
|
"typer==0.21.1",
|
|
29
|
-
"pythinker-core[contrib]==1.
|
|
29
|
+
"pythinker-core[contrib]==1.1.0",
|
|
30
30
|
# notify-py (via batrachian-toad) caps loguru at <=0.6.0 on 3.14+.
|
|
31
31
|
"loguru>=0.6.0,<0.7",
|
|
32
32
|
"prompt-toolkit==3.0.52",
|
|
@@ -2,6 +2,86 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 2.6.0 (2026-05-13)
|
|
6
|
+
|
|
7
|
+
Packaging fix: pin `pythinker-core[contrib]==1.1.0` so the Kimi K2.x / DeepSeek strict-interleaved reasoning-replay fix reaches PyPI installs.
|
|
8
|
+
|
|
9
|
+
### Why 2.6.0 lands the same day as 2.5.0
|
|
10
|
+
|
|
11
|
+
The runtime fix for Moonshot's `thinking is enabled but reasoning_content is missing in assistant tool call message at index N` rejection landed in the `pythinker-core` source tree on 2026-05-11 (released in `pythinker-code` 2.4.0 source), but **the published `pythinker-core==1.0.0` on PyPI predates that change** (uploaded 2026-05-07). `pythinker-code` 2.4.0 and 2.5.0 both pinned `pythinker-core[contrib]==1.0.0`, so PyPI users on Kimi K2.5 / K2.6 / DeepSeek through OpenCode Go (and elsewhere) kept hitting the bug even on the latest CLI. Reported in [#37](https://github.com/mohamed-elkholy95/Pythinker-Code/issues/37).
|
|
12
|
+
|
|
13
|
+
### The fix
|
|
14
|
+
|
|
15
|
+
- **`pythinker-core` bumped to 1.1.0** (published independently on PyPI) — carries the strict-interleaved replay logic that emits `reasoning_content` on every assistant turn for `kimi-k2*` / `deepseek*` models, falling back to `extract_text()` then `"[reasoning unavailable]"` when no `ThinkPart` was captured.
|
|
16
|
+
- **Root pin updated to `pythinker-core[contrib]==1.1.0`** in `pyproject.toml`. New installs of `pip install --upgrade pythinker-code==2.6.0` (and `uv tool install`/`upgrade`) get the fix automatically.
|
|
17
|
+
- See `packages/pythinker-core/CHANGELOG.md` for the full pythinker-core 1.1.0 entry.
|
|
18
|
+
|
|
19
|
+
### No app-level behavior changes vs 2.5.0
|
|
20
|
+
|
|
21
|
+
Everything that landed in 2.5.0 is still there. The 2.6.0 diff is exclusively the version bump and the upstream-dep pin; existing 2.5.0 users **must** upgrade to 2.6.0 if they use Kimi K2.x, DeepSeek, or any other strict-interleaved-thinking model through an OpenAI-compatible provider.
|
|
22
|
+
|
|
23
|
+
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==2.6.0`.
|
|
24
|
+
|
|
25
|
+
## 2.5.0 (2026-05-13)
|
|
26
|
+
|
|
27
|
+
bk_box_main coding-agent runtime port, Windows self-upgrade fix, FetchURL SSRF hardening, and a broad reliability/security pass.
|
|
28
|
+
|
|
29
|
+
### Subagent runtime & permissions
|
|
30
|
+
|
|
31
|
+
- Runtime-enforced permission profiles for every built-in role: **read-only**, **plan**, **ask**, **implement**, **review**, **verify**. Profiles are snapshot per LLM step in the new `src/pythinker_code/soul/permission.py` so a mid-step model switch can't escalate. Plan mode now **hard-denies** non-plan writes and dangerous shell mutations instead of relying on prompt-deny.
|
|
32
|
+
- New plan-handoff workflow in `src/pythinker_code/tools/plan/handoff.py` with dynamic injection through `soul/dynamic_injections/plan_mode.py`. Smooth handoff from `plan` → `implement` without re-priming the context.
|
|
33
|
+
- New smart-search grep variant; new subagent metadata plumbing (`subagents/models.py`, `subagents/store.py`, `subagents/builder.py`, `subagents/runner.py`).
|
|
34
|
+
|
|
35
|
+
### Background tasks
|
|
36
|
+
|
|
37
|
+
- Recovery distinguishes **`recoverable`** (resumable via a stored `agent_id`) from **`lost`** (worker is gone with no resume target). Agent instances are parked as `idle` rather than failed when the underlying task is recoverable.
|
|
38
|
+
- Guards against overwriting terminal task states; subagent races on instance transitions closed.
|
|
39
|
+
- `pythinker-host`: subprocess teardown now kills the **entire child process tree** and creates a new session group, so background workers can no longer survive their parent on Linux/macOS.
|
|
40
|
+
|
|
41
|
+
### FetchURL — SSRF + resource-exhaustion hardening
|
|
42
|
+
|
|
43
|
+
- `pythinker_code.tools.web.fetch._validate_fetch_url` blocks **private, loopback, link-local, multicast, and reserved** IPv4/IPv6 ranges; rejects non-`http`/`https` schemes and host-less URLs up front.
|
|
44
|
+
- Responses are streamed with a hard **5 MB** ceiling (`_read_limited`) honoring `Content-Length`. Both the direct path and the configured fetch-service path enforce the same caps.
|
|
45
|
+
|
|
46
|
+
### Web / vis surface
|
|
47
|
+
|
|
48
|
+
- Upload limits, open-in path escaping, and vis auth all hardened (`src/pythinker_code/web/`, `src/pythinker_code/vis/`, `vis/src/lib/api.ts`).
|
|
49
|
+
|
|
50
|
+
### Plugin
|
|
51
|
+
|
|
52
|
+
- Plugin definitions no longer persist host credentials. Plugin **name validation** tightened to reject path-traversal and shell-meta characters.
|
|
53
|
+
|
|
54
|
+
### Telemetry & observability
|
|
55
|
+
|
|
56
|
+
- OTel `service.name` normalized to a stable value, decoupled from the configured display name, so SigNoz dashboards keep working across rebrands.
|
|
57
|
+
- Sentry filters drop test-process noise and benign shutdown errors; `pythinker_code/telemetry/config.py` and `pythinker_code/telemetry/crash.py` updated accordingly.
|
|
58
|
+
- New `tests/telemetry/test_otel_resource.py` asserts the resource identity used by the dashboards.
|
|
59
|
+
|
|
60
|
+
### Windows
|
|
61
|
+
|
|
62
|
+
- `pythinker update` on Windows now spawns the upgrade in a **detached console** and exits the parent process before `uv tool upgrade` runs, releasing the lock on the running `pythinker.exe`. Fixes the `os error 32: The process cannot access the file because it is being used by another process` error that blocked self-upgrade.
|
|
63
|
+
- New CI matrix entry on **`windows-2025-vs2026`** (experimental, non-blocking) for the pythinker-host and pythinker-cli build, validating Visual Studio 2026 / MSVC v144 forward-compat before GitHub eventually deprecates `windows-2022`.
|
|
64
|
+
|
|
65
|
+
### Feedback
|
|
66
|
+
|
|
67
|
+
- New `feedback` config block: `endpoint_url`, `api_key`, `custom_headers`. The `/feedback` slash command now routes user submissions to a user-configured HTTP endpoint instead of being a no-op.
|
|
68
|
+
|
|
69
|
+
### UI
|
|
70
|
+
|
|
71
|
+
- Pythinker version is shown on the welcome screen.
|
|
72
|
+
|
|
73
|
+
### CI
|
|
74
|
+
|
|
75
|
+
- Pre-push hooks mirror CI's `check` target (`ruff format --check`, `ruff check`, `pyright`) so local pushes catch the same regressions CI does.
|
|
76
|
+
- README + CHANGELOG release-validate gate hardened; the GitHub Release publish step is now resilient to transient upstream failures.
|
|
77
|
+
- Spell-check vocabulary fix in `soul/permission.py` for an internal error string the typos crate flagged; experimental `windows-2025-vs2026` build no longer collides with `windows-2022` on the shared `pythinker-x86_64-pc-windows-msvc` artifact name.
|
|
78
|
+
|
|
79
|
+
### Compatibility
|
|
80
|
+
|
|
81
|
+
- `pythinker_core.contrib.chat_provider.anthropic`: handle the six new tool-result block types added by anthropic SDK 0.101 (`web_fetch_tool_result`, `code_execution_tool_result`, `bash_code_execution_tool_result`, `text_editor_code_execution_tool_result`, `tool_search_tool_result`, `container_upload`). pyright is exhaustive again.
|
|
82
|
+
|
|
83
|
+
Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==2.5.0`.
|
|
84
|
+
|
|
5
85
|
## 2.4.0 (2026-05-11)
|
|
6
86
|
|
|
7
87
|
Subagent roles overhaul, Moonshot/Kimi K2 provider support, and a ripgrep-free Grep fallback.
|
|
@@ -8,6 +8,7 @@ from pythinker_host.local import local_host
|
|
|
8
8
|
|
|
9
9
|
from pythinker_code.soul.agent import Runtime
|
|
10
10
|
from pythinker_code.soul.approval import Approval
|
|
11
|
+
from pythinker_code.soul.permission import check_shell_command_allowed
|
|
11
12
|
from pythinker_code.soul.toolset import PythinkerToolset
|
|
12
13
|
from pythinker_code.tools.shell import Params as ShellParams
|
|
13
14
|
from pythinker_code.tools.shell import Shell
|
|
@@ -35,6 +36,7 @@ def replace_tools(
|
|
|
35
36
|
acp_conn,
|
|
36
37
|
acp_session_id,
|
|
37
38
|
runtime.approval,
|
|
39
|
+
runtime,
|
|
38
40
|
)
|
|
39
41
|
)
|
|
40
42
|
|
|
@@ -52,6 +54,7 @@ class Terminal(CallableTool2[ShellParams]):
|
|
|
52
54
|
acp_conn: acp.Client,
|
|
53
55
|
acp_session_id: str,
|
|
54
56
|
approval: Approval,
|
|
57
|
+
runtime: Runtime,
|
|
55
58
|
) -> None:
|
|
56
59
|
# Use the `name`, `description`, and `params` from the existing Shell tool,
|
|
57
60
|
# so that when this is added to the toolset, it replaces the original Shell tool.
|
|
@@ -59,6 +62,7 @@ class Terminal(CallableTool2[ShellParams]):
|
|
|
59
62
|
self._acp_conn = acp_conn
|
|
60
63
|
self._acp_session_id = acp_session_id
|
|
61
64
|
self._approval = approval
|
|
65
|
+
self._runtime = runtime
|
|
62
66
|
|
|
63
67
|
async def __call__(self, params: ShellParams) -> ToolReturnValue:
|
|
64
68
|
from pythinker_code.acp.session import get_current_acp_tool_call_id_or_none
|
|
@@ -71,6 +75,9 @@ class Terminal(CallableTool2[ShellParams]):
|
|
|
71
75
|
if not params.command:
|
|
72
76
|
return builder.error("Command cannot be empty.", brief="Empty command")
|
|
73
77
|
|
|
78
|
+
if err := check_shell_command_allowed(self._runtime, params.command):
|
|
79
|
+
return err
|
|
80
|
+
|
|
74
81
|
approval_result = await self._approval.request(
|
|
75
82
|
self.name,
|
|
76
83
|
"run shell command",
|
|
@@ -18,6 +18,7 @@ agent:
|
|
|
18
18
|
- "pythinker_code.tools.file:ReadMediaFile"
|
|
19
19
|
- "pythinker_code.tools.file:Glob"
|
|
20
20
|
- "pythinker_code.tools.file:Grep"
|
|
21
|
+
- "pythinker_code.tools.file:SmartSearch"
|
|
21
22
|
- "pythinker_code.tools.file:WriteFile"
|
|
22
23
|
- "pythinker_code.tools.file:StrReplaceFile"
|
|
23
24
|
- "pythinker_code.tools.web:SearchWeb"
|
|
@@ -28,6 +28,7 @@ agent:
|
|
|
28
28
|
- "pythinker_code.tools.file:ReadMediaFile"
|
|
29
29
|
- "pythinker_code.tools.file:Glob"
|
|
30
30
|
- "pythinker_code.tools.file:Grep"
|
|
31
|
+
- "pythinker_code.tools.file:SmartSearch"
|
|
31
32
|
- "pythinker_code.tools.file:WriteFile"
|
|
32
33
|
- "pythinker_code.tools.file:StrReplaceFile"
|
|
33
34
|
- "pythinker_code.tools.web:SearchWeb"
|
{pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/agents/default/explore.yaml
RENAMED
|
@@ -45,6 +45,7 @@ agent:
|
|
|
45
45
|
- "pythinker_code.tools.file:ReadMediaFile"
|
|
46
46
|
- "pythinker_code.tools.file:Glob"
|
|
47
47
|
- "pythinker_code.tools.file:Grep"
|
|
48
|
+
- "pythinker_code.tools.file:SmartSearch"
|
|
48
49
|
- "pythinker_code.tools.web:SearchWeb"
|
|
49
50
|
- "pythinker_code.tools.web:FetchURL"
|
|
50
51
|
exclude_tools:
|
{pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/agents/default/implementer.yaml
RENAMED
|
@@ -32,6 +32,7 @@ agent:
|
|
|
32
32
|
- "pythinker_code.tools.file:ReadMediaFile"
|
|
33
33
|
- "pythinker_code.tools.file:Glob"
|
|
34
34
|
- "pythinker_code.tools.file:Grep"
|
|
35
|
+
- "pythinker_code.tools.file:SmartSearch"
|
|
35
36
|
- "pythinker_code.tools.file:WriteFile"
|
|
36
37
|
- "pythinker_code.tools.file:StrReplaceFile"
|
|
37
38
|
- "pythinker_code.tools.web:SearchWeb"
|
|
@@ -27,6 +27,7 @@ agent:
|
|
|
27
27
|
- "pythinker_code.tools.file:ReadMediaFile"
|
|
28
28
|
- "pythinker_code.tools.file:Glob"
|
|
29
29
|
- "pythinker_code.tools.file:Grep"
|
|
30
|
+
- "pythinker_code.tools.file:SmartSearch"
|
|
30
31
|
- "pythinker_code.tools.web:SearchWeb"
|
|
31
32
|
- "pythinker_code.tools.web:FetchURL"
|
|
32
33
|
exclude_tools:
|
|
@@ -33,6 +33,7 @@ agent:
|
|
|
33
33
|
- "pythinker_code.tools.file:ReadMediaFile"
|
|
34
34
|
- "pythinker_code.tools.file:Glob"
|
|
35
35
|
- "pythinker_code.tools.file:Grep"
|
|
36
|
+
- "pythinker_code.tools.file:SmartSearch"
|
|
36
37
|
- "pythinker_code.tools.web:SearchWeb"
|
|
37
38
|
- "pythinker_code.tools.web:FetchURL"
|
|
38
39
|
exclude_tools:
|
{pythinker_code-2.4.0 → pythinker_code-2.6.0}/src/pythinker_code/agents/default/verifier.yaml
RENAMED
|
@@ -32,6 +32,7 @@ agent:
|
|
|
32
32
|
- "pythinker_code.tools.file:ReadMediaFile"
|
|
33
33
|
- "pythinker_code.tools.file:Glob"
|
|
34
34
|
- "pythinker_code.tools.file:Grep"
|
|
35
|
+
- "pythinker_code.tools.file:SmartSearch"
|
|
35
36
|
exclude_tools:
|
|
36
37
|
- "pythinker_code.tools.agent:Agent"
|
|
37
38
|
- "pythinker_code.tools.ask_user:AskUserQuestion"
|
|
@@ -38,6 +38,9 @@ if TYPE_CHECKING:
|
|
|
38
38
|
from fastmcp.mcp_config import MCPConfig
|
|
39
39
|
|
|
40
40
|
|
|
41
|
+
_CWD_LOCK = asyncio.Lock()
|
|
42
|
+
|
|
43
|
+
|
|
41
44
|
def _patch_session_id(record: dict[str, Any]) -> None:
|
|
42
45
|
"""Inject the current session ID (from ContextVar) into log records."""
|
|
43
46
|
try:
|
|
@@ -522,15 +525,16 @@ class PythinkerCLI:
|
|
|
522
525
|
|
|
523
526
|
@contextlib.asynccontextmanager
|
|
524
527
|
async def _env(self) -> AsyncGenerator[None]:
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
528
|
+
async with _CWD_LOCK:
|
|
529
|
+
original_cwd = HostPath.cwd()
|
|
530
|
+
await pythinker_host.chdir(self._runtime.session.work_dir)
|
|
531
|
+
try:
|
|
532
|
+
# to ignore possible warnings from dateparser
|
|
533
|
+
warnings.filterwarnings("ignore", category=DeprecationWarning)
|
|
534
|
+
async with self._runtime.oauth.refreshing(self._runtime):
|
|
535
|
+
yield
|
|
536
|
+
finally:
|
|
537
|
+
await pythinker_host.chdir(original_cwd)
|
|
534
538
|
|
|
535
539
|
async def run(
|
|
536
540
|
self,
|
|
@@ -703,9 +707,13 @@ class PythinkerCLI:
|
|
|
703
707
|
from pythinker_code.ui.shell import Shell, WelcomeInfoItem
|
|
704
708
|
|
|
705
709
|
if command is None:
|
|
706
|
-
from pythinker_code.ui.shell.update import
|
|
710
|
+
from pythinker_code.ui.shell.update import (
|
|
711
|
+
print_update_banner,
|
|
712
|
+
schedule_auto_update_check,
|
|
713
|
+
)
|
|
707
714
|
|
|
708
715
|
print_update_banner()
|
|
716
|
+
schedule_auto_update_check()
|
|
709
717
|
|
|
710
718
|
welcome_info = [
|
|
711
719
|
WelcomeInfoItem(
|
|
@@ -215,6 +215,9 @@ class BackgroundTaskManager:
|
|
|
215
215
|
model_override: str | None,
|
|
216
216
|
timeout_s: int | None = None,
|
|
217
217
|
resumed: bool = False,
|
|
218
|
+
dependencies: list[str] | None = None,
|
|
219
|
+
budget_seconds: int | None = None,
|
|
220
|
+
isolation: str | None = None,
|
|
218
221
|
) -> TaskView:
|
|
219
222
|
from .agent_runner import BackgroundAgentRunner
|
|
220
223
|
|
|
@@ -244,12 +247,19 @@ class BackgroundTaskManager:
|
|
|
244
247
|
# an explicit per-agent timeout instead of always falling back to
|
|
245
248
|
# ``config.background.agent_task_timeout_s``.
|
|
246
249
|
timeout_s=effective_timeout,
|
|
250
|
+
dependencies=list(dependencies or ()),
|
|
251
|
+
budget_seconds=budget_seconds,
|
|
252
|
+
synthesis_state="pending",
|
|
253
|
+
isolation=isolation,
|
|
247
254
|
kind_payload={
|
|
248
255
|
"agent_id": agent_id,
|
|
249
256
|
"subagent_type": subagent_type,
|
|
250
257
|
"prompt": prompt,
|
|
251
258
|
"model_override": model_override,
|
|
252
259
|
"launch_mode": "background",
|
|
260
|
+
"dependencies": list(dependencies or ()),
|
|
261
|
+
"budget_seconds": budget_seconds,
|
|
262
|
+
"isolation": isolation,
|
|
253
263
|
},
|
|
254
264
|
)
|
|
255
265
|
self._store.create_task(spec)
|
|
@@ -427,10 +437,15 @@ class BackgroundTaskManager:
|
|
|
427
437
|
runtime = view.runtime.model_copy()
|
|
428
438
|
runtime.finished_at = now
|
|
429
439
|
runtime.updated_at = now
|
|
430
|
-
runtime.status = "lost"
|
|
431
|
-
runtime.failure_reason = "In-process background agent is no longer running"
|
|
432
|
-
self._store.write_runtime(view.spec.id, runtime)
|
|
433
440
|
agent_id = (view.spec.kind_payload or {}).get("agent_id")
|
|
441
|
+
runtime.status = "recoverable" if isinstance(agent_id, str) else "lost"
|
|
442
|
+
runtime.failure_reason = (
|
|
443
|
+
"In-process background agent is no longer running; resume the stored agent "
|
|
444
|
+
f"instance {agent_id} to continue."
|
|
445
|
+
if isinstance(agent_id, str)
|
|
446
|
+
else "In-process background agent is no longer running"
|
|
447
|
+
)
|
|
448
|
+
self._store.write_runtime(view.spec.id, runtime)
|
|
434
449
|
if (
|
|
435
450
|
isinstance(agent_id, str)
|
|
436
451
|
and self._runtime is not None
|
|
@@ -438,7 +453,7 @@ class BackgroundTaskManager:
|
|
|
438
453
|
):
|
|
439
454
|
record = self._runtime.subagent_store.get_instance(agent_id)
|
|
440
455
|
if record is not None and record.status == "running_background":
|
|
441
|
-
self._runtime.subagent_store.update_instance(agent_id, status="
|
|
456
|
+
self._runtime.subagent_store.update_instance(agent_id, status="idle")
|
|
442
457
|
continue
|
|
443
458
|
last_progress_at = (
|
|
444
459
|
view.runtime.heartbeat_at
|
|
@@ -506,6 +521,9 @@ class BackgroundTaskManager:
|
|
|
506
521
|
case "lost":
|
|
507
522
|
severity = "warning"
|
|
508
523
|
title = f"Background task lost: {view.spec.description}"
|
|
524
|
+
case "recoverable":
|
|
525
|
+
severity = "warning"
|
|
526
|
+
title = f"Background task recoverable: {view.spec.description}"
|
|
509
527
|
case _:
|
|
510
528
|
severity = "info"
|
|
511
529
|
title = f"Background task updated: {view.spec.description}"
|
|
@@ -15,10 +15,17 @@ type TaskStatus = Literal[
|
|
|
15
15
|
"failed",
|
|
16
16
|
"killed",
|
|
17
17
|
"lost",
|
|
18
|
+
"recoverable",
|
|
18
19
|
]
|
|
19
20
|
type TaskOwnerRole = Literal["root", "subagent"]
|
|
20
21
|
|
|
21
|
-
TERMINAL_TASK_STATUSES: tuple[TaskStatus, ...] = (
|
|
22
|
+
TERMINAL_TASK_STATUSES: tuple[TaskStatus, ...] = (
|
|
23
|
+
"completed",
|
|
24
|
+
"failed",
|
|
25
|
+
"killed",
|
|
26
|
+
"lost",
|
|
27
|
+
"recoverable",
|
|
28
|
+
)
|
|
22
29
|
|
|
23
30
|
|
|
24
31
|
def is_terminal_status(status: TaskStatus) -> bool:
|
|
@@ -50,6 +57,12 @@ class TaskSpec(BaseModel):
|
|
|
50
57
|
shell_path: str | None = None
|
|
51
58
|
cwd: str | None = None
|
|
52
59
|
timeout_s: int | None = None
|
|
60
|
+
parent_task_id: str | None = None
|
|
61
|
+
child_task_ids: list[str] = Field(default_factory=list)
|
|
62
|
+
dependencies: list[str] = Field(default_factory=list)
|
|
63
|
+
budget_seconds: int | None = None
|
|
64
|
+
synthesis_state: str | None = None
|
|
65
|
+
isolation: str | None = None
|
|
53
66
|
kind_payload: dict[str, Any] | None = None
|
|
54
67
|
|
|
55
68
|
|
|
@@ -17,6 +17,7 @@ from .models import (
|
|
|
17
17
|
TaskSpec,
|
|
18
18
|
TaskStatus,
|
|
19
19
|
TaskView,
|
|
20
|
+
is_terminal_status,
|
|
20
21
|
)
|
|
21
22
|
|
|
22
23
|
_VALID_TASK_ID = re.compile(r"^[a-z0-9][a-z0-9\-]{1,24}$")
|
|
@@ -101,7 +102,12 @@ class BackgroundTaskStore:
|
|
|
101
102
|
return TaskSpec.model_validate_json(self.spec_path(task_id).read_text(encoding="utf-8"))
|
|
102
103
|
|
|
103
104
|
def write_runtime(self, task_id: str, runtime: TaskRuntime) -> None:
|
|
104
|
-
|
|
105
|
+
path = self.runtime_path(task_id)
|
|
106
|
+
if path.exists():
|
|
107
|
+
current = self.read_runtime(task_id)
|
|
108
|
+
if is_terminal_status(current.status) and not is_terminal_status(runtime.status):
|
|
109
|
+
return
|
|
110
|
+
atomic_json_write(runtime.model_dump(mode="json"), path)
|
|
105
111
|
|
|
106
112
|
def read_runtime(self, task_id: str) -> TaskRuntime:
|
|
107
113
|
path = self.runtime_path(task_id)
|
|
@@ -168,6 +168,30 @@ class Services(BaseModel):
|
|
|
168
168
|
"""Pythinker AI Fetch configuration."""
|
|
169
169
|
|
|
170
170
|
|
|
171
|
+
class FeedbackConfig(BaseModel):
|
|
172
|
+
"""User-submitted feedback endpoint configuration."""
|
|
173
|
+
|
|
174
|
+
endpoint_url: str = Field(
|
|
175
|
+
default="",
|
|
176
|
+
description=(
|
|
177
|
+
"Full URL for the /feedback slash command. Overrides the built-in "
|
|
178
|
+
"Pythinker platform endpoint when set."
|
|
179
|
+
),
|
|
180
|
+
)
|
|
181
|
+
api_key: SecretStr | None = Field(
|
|
182
|
+
default=None,
|
|
183
|
+
description="Optional bearer token for the feedback endpoint.",
|
|
184
|
+
)
|
|
185
|
+
custom_headers: dict[str, str] | None = Field(
|
|
186
|
+
default=None,
|
|
187
|
+
description="Optional extra headers for feedback endpoint requests.",
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
@field_serializer("api_key", when_used="json")
|
|
191
|
+
def dump_secret(self, v: SecretStr | None):
|
|
192
|
+
return v.get_secret_value() if v is not None else None
|
|
193
|
+
|
|
194
|
+
|
|
171
195
|
class MCPClientConfig(BaseModel):
|
|
172
196
|
"""MCP client configuration."""
|
|
173
197
|
|
|
@@ -251,6 +275,10 @@ class Config(BaseModel):
|
|
|
251
275
|
default_factory=NotificationConfig, description="Notification configuration"
|
|
252
276
|
)
|
|
253
277
|
services: Services = Field(default_factory=Services, description="Services configuration")
|
|
278
|
+
feedback: FeedbackConfig = Field(
|
|
279
|
+
default_factory=FeedbackConfig,
|
|
280
|
+
description="User-submitted feedback endpoint configuration",
|
|
281
|
+
)
|
|
254
282
|
mcp: MCPConfig = Field(default_factory=MCPConfig, description="MCP configuration")
|
|
255
283
|
tui: TUIConfig = Field(default_factory=TUIConfig, description="TUI rendering configuration")
|
|
256
284
|
hooks: list[HookDef] = Field(default_factory=list, description="Hook definitions") # pyright: ignore[reportUnknownVariableType]
|
|
@@ -274,9 +302,9 @@ class Config(BaseModel):
|
|
|
274
302
|
),
|
|
275
303
|
)
|
|
276
304
|
telemetry: bool = Field(
|
|
277
|
-
default=
|
|
305
|
+
default=True,
|
|
278
306
|
description=(
|
|
279
|
-
"Enable anonymous telemetry to help improve pythinker-code. Set to
|
|
307
|
+
"Enable anonymous telemetry to help improve pythinker-code. Set to false to opt out."
|
|
280
308
|
),
|
|
281
309
|
)
|
|
282
310
|
|
|
@@ -371,6 +371,7 @@ def clone_llm_with_model_alias(
|
|
|
371
371
|
*,
|
|
372
372
|
session_id: str,
|
|
373
373
|
oauth: OAuthManager | None,
|
|
374
|
+
thinking: bool | None = None,
|
|
374
375
|
) -> LLM | None:
|
|
375
376
|
if model_alias is None:
|
|
376
377
|
return llm
|
|
@@ -378,7 +379,8 @@ def clone_llm_with_model_alias(
|
|
|
378
379
|
raise KeyError(f"Unknown model alias: {model_alias}")
|
|
379
380
|
model = config.models[model_alias]
|
|
380
381
|
provider = config.providers[model.provider]
|
|
381
|
-
thinking
|
|
382
|
+
if thinking is None and llm is not None:
|
|
383
|
+
thinking = llm.thinking
|
|
382
384
|
if thinking is None and llm is not None:
|
|
383
385
|
effort = getattr(llm.chat_provider, "thinking_effort", None)
|
|
384
386
|
if effort is not None:
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import re
|
|
5
6
|
import shutil
|
|
6
7
|
import tempfile
|
|
7
8
|
from pathlib import Path
|
|
@@ -12,7 +13,6 @@ from pythinker_code.plugin import (
|
|
|
12
13
|
PluginError,
|
|
13
14
|
PluginRuntime,
|
|
14
15
|
PluginSpec,
|
|
15
|
-
inject_config,
|
|
16
16
|
parse_plugin_json,
|
|
17
17
|
write_runtime,
|
|
18
18
|
)
|
|
@@ -51,14 +51,26 @@ def collect_host_values(config: Config, oauth: OAuthManager) -> dict[str, str]:
|
|
|
51
51
|
return values
|
|
52
52
|
|
|
53
53
|
|
|
54
|
+
_PLUGIN_NAME_RE = re.compile(r"^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$")
|
|
55
|
+
|
|
56
|
+
|
|
54
57
|
def _validate_name(name: str, plugins_dir: Path) -> Path:
|
|
55
58
|
"""Resolve and validate plugin name, returning the safe destination path."""
|
|
59
|
+
if not _PLUGIN_NAME_RE.fullmatch(name):
|
|
60
|
+
raise PluginError(f"Invalid plugin name: {name}")
|
|
56
61
|
dest = (plugins_dir / name).resolve()
|
|
57
|
-
|
|
62
|
+
plugins_root = plugins_dir.resolve()
|
|
63
|
+
if dest == plugins_root or not dest.is_relative_to(plugins_root):
|
|
58
64
|
raise PluginError(f"Invalid plugin name: {name}")
|
|
59
65
|
return dest
|
|
60
66
|
|
|
61
67
|
|
|
68
|
+
def _validate_inject_values(spec: PluginSpec, host_values: dict[str, str]) -> None:
|
|
69
|
+
for source_key in spec.inject.values():
|
|
70
|
+
if source_key not in host_values:
|
|
71
|
+
raise PluginError(f"Host does not provide required inject key '{source_key}'")
|
|
72
|
+
|
|
73
|
+
|
|
62
74
|
def install_plugin(
|
|
63
75
|
*,
|
|
64
76
|
source: Path,
|
|
@@ -87,8 +99,9 @@ def install_plugin(
|
|
|
87
99
|
staging_plugin = staging / spec.name
|
|
88
100
|
shutil.copytree(source, staging_plugin)
|
|
89
101
|
|
|
90
|
-
#
|
|
91
|
-
|
|
102
|
+
# Validate required host values, but do not persist credentials into plugin files.
|
|
103
|
+
# Plugin tools receive fresh credentials through environment variables at runtime.
|
|
104
|
+
_validate_inject_values(spec, host_values)
|
|
92
105
|
runtime = PluginRuntime(host=host_name, host_version=host_version)
|
|
93
106
|
write_runtime(staging_plugin, runtime)
|
|
94
107
|
|
|
@@ -123,8 +136,8 @@ def refresh_plugin_configs(plugins_dir: Path, host_values: dict[str, str]) -> No
|
|
|
123
136
|
continue
|
|
124
137
|
try:
|
|
125
138
|
spec = parse_plugin_json(plugin_json)
|
|
126
|
-
if spec.inject
|
|
127
|
-
|
|
139
|
+
if spec.inject:
|
|
140
|
+
_validate_inject_values(spec, host_values)
|
|
128
141
|
except Exception:
|
|
129
142
|
continue
|
|
130
143
|
|