pythinker-code 0.40.1__tar.gz โ†’ 0.42.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1089) hide show
  1. pythinker_code-0.42.0/PKG-INFO +883 -0
  2. pythinker_code-0.42.0/README.md +818 -0
  3. pythinker_code-0.42.0/pyproject.toml +224 -0
  4. pythinker_code-0.42.0/src/pythinker_code/CHANGELOG.md +518 -0
  5. pythinker_code-0.42.0/src/pythinker_code/acp/host.py +306 -0
  6. pythinker_code-0.42.0/src/pythinker_code/acp/tools.py +184 -0
  7. pythinker_code-0.42.0/src/pythinker_code/agents/default/agent.yaml +76 -0
  8. pythinker_code-0.42.0/src/pythinker_code/agents/default/ask.yaml +92 -0
  9. pythinker_code-0.42.0/src/pythinker_code/agents/default/code_reviewer.yaml +112 -0
  10. pythinker_code-0.42.0/src/pythinker_code/agents/default/coder.yaml +117 -0
  11. pythinker_code-0.42.0/src/pythinker_code/agents/default/debug.yaml +113 -0
  12. pythinker_code-0.42.0/src/pythinker_code/agents/default/debugger.yaml +75 -0
  13. pythinker_code-0.42.0/src/pythinker_code/agents/default/explore.yaml +80 -0
  14. pythinker_code-0.42.0/src/pythinker_code/agents/default/implementer.yaml +102 -0
  15. pythinker_code-0.42.0/src/pythinker_code/agents/default/judge.yaml +83 -0
  16. pythinker_code-0.42.0/src/pythinker_code/agents/default/plan.yaml +88 -0
  17. pythinker_code-0.42.0/src/pythinker_code/agents/default/planner.yaml +68 -0
  18. pythinker_code-0.42.0/src/pythinker_code/agents/default/review.yaml +111 -0
  19. pythinker_code-0.42.0/src/pythinker_code/agents/default/scout.yaml +90 -0
  20. pythinker_code-0.42.0/src/pythinker_code/agents/default/security_reviewer.yaml +92 -0
  21. pythinker_code-0.42.0/src/pythinker_code/agents/default/system.md +267 -0
  22. pythinker_code-0.42.0/src/pythinker_code/agents/default/verifier.yaml +102 -0
  23. pythinker_code-0.42.0/src/pythinker_code/app.py +963 -0
  24. pythinker_code-0.42.0/src/pythinker_code/auth/openai/models.py +244 -0
  25. pythinker_code-0.42.0/src/pythinker_code/auth/openai/oauth_client.py +224 -0
  26. pythinker_code-0.42.0/src/pythinker_code/auth/platforms.py +571 -0
  27. pythinker_code-0.42.0/src/pythinker_code/background/agent_runner.py +355 -0
  28. pythinker_code-0.42.0/src/pythinker_code/background/ids.py +46 -0
  29. pythinker_code-0.42.0/src/pythinker_code/background/manager.py +1071 -0
  30. pythinker_code-0.42.0/src/pythinker_code/background/models.py +131 -0
  31. pythinker_code-0.42.0/src/pythinker_code/background/worker.py +276 -0
  32. pythinker_code-0.42.0/src/pythinker_code/cli/__init__.py +1621 -0
  33. pythinker_code-0.42.0/src/pythinker_code/config.py +1423 -0
  34. pythinker_code-0.42.0/src/pythinker_code/constant.py +70 -0
  35. pythinker_code-0.42.0/src/pythinker_code/hooks/runner.py +126 -0
  36. pythinker_code-0.42.0/src/pythinker_code/llm.py +527 -0
  37. pythinker_code-0.42.0/src/pythinker_code/plugin/tool.py +185 -0
  38. pythinker_code-0.42.0/src/pythinker_code/project_trust.py +157 -0
  39. pythinker_code-0.42.0/src/pythinker_code/prompts/__init__.py +11 -0
  40. pythinker_code-0.42.0/src/pythinker_code/prompts/best_practices.md +134 -0
  41. pythinker_code-0.42.0/src/pythinker_code/prompts/goal_continuation.md +46 -0
  42. pythinker_code-0.42.0/src/pythinker_code/prompts/goal_set.md +11 -0
  43. pythinker_code-0.42.0/src/pythinker_code/prompts/goal_wrap_up.md +1 -0
  44. pythinker_code-0.42.0/src/pythinker_code/prompts/learn.md +29 -0
  45. pythinker_code-0.42.0/src/pythinker_code/session_cleanup.py +258 -0
  46. pythinker_code-0.42.0/src/pythinker_code/session_state.py +160 -0
  47. pythinker_code-0.42.0/src/pythinker_code/soul/__init__.py +326 -0
  48. pythinker_code-0.42.0/src/pythinker_code/soul/agent.py +630 -0
  49. pythinker_code-0.42.0/src/pythinker_code/soul/api_errors.py +61 -0
  50. pythinker_code-0.42.0/src/pythinker_code/soul/approval.py +658 -0
  51. pythinker_code-0.42.0/src/pythinker_code/soul/compaction.py +330 -0
  52. pythinker_code-0.42.0/src/pythinker_code/soul/context.py +436 -0
  53. pythinker_code-0.42.0/src/pythinker_code/soul/dynamic_injections/auto_mode.py +108 -0
  54. pythinker_code-0.42.0/src/pythinker_code/soul/dynamic_injections/goal_mode.py +120 -0
  55. pythinker_code-0.42.0/src/pythinker_code/soul/dynamic_injections/inline_commands.py +110 -0
  56. pythinker_code-0.42.0/src/pythinker_code/soul/dynamic_injections/model_defense.py +107 -0
  57. pythinker_code-0.42.0/src/pythinker_code/soul/dynamic_injections/orchestration.py +129 -0
  58. pythinker_code-0.42.0/src/pythinker_code/soul/dynamic_injections/permissions_state.py +100 -0
  59. pythinker_code-0.42.0/src/pythinker_code/soul/dynamic_injections/plan_mode.py +278 -0
  60. pythinker_code-0.42.0/src/pythinker_code/soul/flow_runner.py +215 -0
  61. pythinker_code-0.42.0/src/pythinker_code/soul/permission.py +1558 -0
  62. pythinker_code-0.42.0/src/pythinker_code/soul/pythinkersoul.py +2439 -0
  63. pythinker_code-0.42.0/src/pythinker_code/soul/slash.py +491 -0
  64. pythinker_code-0.42.0/src/pythinker_code/soul/toolset.py +1529 -0
  65. pythinker_code-0.42.0/src/pythinker_code/subagents/builder.py +60 -0
  66. pythinker_code-0.42.0/src/pythinker_code/subagents/codenames.py +98 -0
  67. pythinker_code-0.42.0/src/pythinker_code/subagents/core.py +173 -0
  68. pythinker_code-0.42.0/src/pythinker_code/subagents/git_context.py +197 -0
  69. pythinker_code-0.42.0/src/pythinker_code/subagents/runner.py +551 -0
  70. pythinker_code-0.42.0/src/pythinker_code/subagents/usage.py +179 -0
  71. pythinker_code-0.42.0/src/pythinker_code/subagents/worktree.py +165 -0
  72. pythinker_code-0.42.0/src/pythinker_code/telemetry/config.py +155 -0
  73. pythinker_code-0.42.0/src/pythinker_code/telemetry/crash.py +195 -0
  74. pythinker_code-0.42.0/src/pythinker_code/telemetry/errors.py +192 -0
  75. pythinker_code-0.42.0/src/pythinker_code/telemetry/metrics.py +270 -0
  76. pythinker_code-0.42.0/src/pythinker_code/telemetry/otel.py +361 -0
  77. pythinker_code-0.42.0/src/pythinker_code/telemetry/sentry.py +257 -0
  78. pythinker_code-0.42.0/src/pythinker_code/thinking.py +164 -0
  79. pythinker_code-0.42.0/src/pythinker_code/tools/agent/__init__.py +902 -0
  80. pythinker_code-0.42.0/src/pythinker_code/tools/agent/description.md +86 -0
  81. pythinker_code-0.42.0/src/pythinker_code/tools/background/__init__.py +602 -0
  82. pythinker_code-0.42.0/src/pythinker_code/tools/file/glob.py +172 -0
  83. pythinker_code-0.42.0/src/pythinker_code/tools/file/grep_local.py +1058 -0
  84. pythinker_code-0.42.0/src/pythinker_code/tools/file/read.md +17 -0
  85. pythinker_code-0.42.0/src/pythinker_code/tools/file/read.py +339 -0
  86. pythinker_code-0.42.0/src/pythinker_code/tools/file/read_media.py +221 -0
  87. pythinker_code-0.42.0/src/pythinker_code/tools/file/replace.py +457 -0
  88. pythinker_code-0.42.0/src/pythinker_code/tools/file/write.py +209 -0
  89. pythinker_code-0.42.0/src/pythinker_code/tools/goal/__init__.py +66 -0
  90. pythinker_code-0.42.0/src/pythinker_code/tools/goal/update_goal.md +8 -0
  91. pythinker_code-0.42.0/src/pythinker_code/tools/mcp_resource/__init__.py +121 -0
  92. pythinker_code-0.42.0/src/pythinker_code/tools/memory/__init__.py +60 -0
  93. pythinker_code-0.42.0/src/pythinker_code/tools/recall/__init__.py +194 -0
  94. pythinker_code-0.42.0/src/pythinker_code/tools/shell/__init__.py +419 -0
  95. pythinker_code-0.42.0/src/pythinker_code/tools/think/__init__.py +22 -0
  96. pythinker_code-0.42.0/src/pythinker_code/tools/todo/__init__.py +283 -0
  97. pythinker_code-0.42.0/src/pythinker_code/tools/todo/set_todo_list.md +25 -0
  98. pythinker_code-0.42.0/src/pythinker_code/tools/utils.py +403 -0
  99. pythinker_code-0.42.0/src/pythinker_code/tools/web/fetch.py +368 -0
  100. pythinker_code-0.42.0/src/pythinker_code/tools/web/search.py +206 -0
  101. pythinker_code-0.42.0/src/pythinker_code/ui/color_utils.py +47 -0
  102. pythinker_code-0.42.0/src/pythinker_code/ui/print/__init__.py +528 -0
  103. pythinker_code-0.42.0/src/pythinker_code/ui/shell/__init__.py +2550 -0
  104. pythinker_code-0.42.0/src/pythinker_code/ui/shell/components/bash_execution.py +259 -0
  105. pythinker_code-0.42.0/src/pythinker_code/ui/shell/components/diff.py +344 -0
  106. pythinker_code-0.42.0/src/pythinker_code/ui/shell/components/markdown.py +902 -0
  107. pythinker_code-0.42.0/src/pythinker_code/ui/shell/components/render_utils.py +243 -0
  108. pythinker_code-0.42.0/src/pythinker_code/ui/shell/console.py +320 -0
  109. pythinker_code-0.42.0/src/pythinker_code/ui/shell/mcp_status.py +171 -0
  110. pythinker_code-0.42.0/src/pythinker_code/ui/shell/motion.py +354 -0
  111. pythinker_code-0.42.0/src/pythinker_code/ui/shell/prompt.py +3962 -0
  112. pythinker_code-0.42.0/src/pythinker_code/ui/shell/render_constants.py +59 -0
  113. pythinker_code-0.42.0/src/pythinker_code/ui/shell/setup.py +226 -0
  114. pythinker_code-0.42.0/src/pythinker_code/ui/shell/slash.py +2278 -0
  115. pythinker_code-0.42.0/src/pythinker_code/ui/shell/spinner_words.py +222 -0
  116. pythinker_code-0.42.0/src/pythinker_code/ui/shell/stats.py +343 -0
  117. pythinker_code-0.42.0/src/pythinker_code/ui/shell/stats_pricing.py +123 -0
  118. pythinker_code-0.42.0/src/pythinker_code/ui/shell/statusline.py +691 -0
  119. pythinker_code-0.42.0/src/pythinker_code/ui/shell/sync_output.py +52 -0
  120. pythinker_code-0.42.0/src/pythinker_code/ui/shell/tips.py +34 -0
  121. pythinker_code-0.42.0/src/pythinker_code/ui/shell/tool_renderers/agent.py +522 -0
  122. pythinker_code-0.42.0/src/pythinker_code/ui/shell/update.py +1511 -0
  123. pythinker_code-0.42.0/src/pythinker_code/ui/shell/usage.py +360 -0
  124. pythinker_code-0.42.0/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +265 -0
  125. pythinker_code-0.42.0/src/pythinker_code/ui/shell/visualize/__init__.py +184 -0
  126. pythinker_code-0.42.0/src/pythinker_code/ui/shell/visualize/_blocks.py +1468 -0
  127. pythinker_code-0.42.0/src/pythinker_code/ui/shell/visualize/_interactive.py +721 -0
  128. pythinker_code-0.42.0/src/pythinker_code/ui/shell/visualize/_live_view.py +1502 -0
  129. pythinker_code-0.42.0/src/pythinker_code/ui/shell/visualize/_worklog.py +287 -0
  130. pythinker_code-0.42.0/src/pythinker_code/ui/terminal_background.py +168 -0
  131. pythinker_code-0.42.0/src/pythinker_code/ui/terminal_capabilities.py +139 -0
  132. pythinker_code-0.42.0/src/pythinker_code/ui/theme.py +774 -0
  133. pythinker_code-0.42.0/src/pythinker_code/utils/export.py +858 -0
  134. pythinker_code-0.42.0/src/pythinker_code/utils/path.py +282 -0
  135. pythinker_code-0.42.0/src/pythinker_code/utils/rich/diff_render.py +498 -0
  136. pythinker_code-0.42.0/src/pythinker_code/utils/sensitive.py +104 -0
  137. pythinker_code-0.42.0/src/pythinker_code/utils/slashcmd.py +129 -0
  138. pythinker_code-0.42.0/src/pythinker_code/utils/subprocess_env.py +140 -0
  139. pythinker_code-0.42.0/src/pythinker_code/utils/term.py +211 -0
  140. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/arc-CJHzrKlH.js +1 -0
  141. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-DNC_zoAn.js +36 -0
  142. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-B8cK1eXd.js +132 -0
  143. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-BB57yVeM.js +10 -0
  144. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/channel-DAFbWj2j.js +1 -0
  145. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-CGMsIeP3.js +1 -0
  146. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-Dw9eayK9.js +1 -0
  147. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-CFBqBKAl.js +1 -0
  148. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-BAZYOPOM.js +206 -0
  149. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-B9ZVJUy1.js +231 -0
  150. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-DDbJIEeu.js +15 -0
  151. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-FGNVk4We.js +1 -0
  152. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-Py4-vxnG.js +1 -0
  153. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-CcSvd4Qw.js +1 -0
  154. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-CcSvd4Qw.js +1 -0
  155. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-C1IrEtmM.js +2 -0
  156. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-ulfskTKs.js +1 -0
  157. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/cytoscape.esm-CKJzb6jC.js +321 -0
  158. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-DDOrrUUp.js +4 -0
  159. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-omiVVlh-.js +43 -0
  160. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL--WZ-sbyB.js +10 -0
  161. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-DuJkH_Dp.js +3 -0
  162. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-Dwh8l5yN.js +24 -0
  163. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-BBESBcOZ.js +24 -0
  164. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-C6A8f555.js +85 -0
  165. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-DrG2uPK8.js +162 -0
  166. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-CzTDX_le.js +292 -0
  167. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-Mfvyr5ag.js +106 -0
  168. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/graph-DWkqPwS6.js +1 -0
  169. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/index-B9YPynda.js +2 -0
  170. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/index-CrbQ2iCP.js +5 -0
  171. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/index-DFGZedSa.js +153 -0
  172. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-DpW1lQOl.js +2 -0
  173. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-oSY-FAVt.js +70 -0
  174. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-BwYhSdLB.js +139 -0
  175. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-CG-YrkGS.js +89 -0
  176. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/layout-D0mYdmsS.js +1 -0
  177. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/linear-iesh3Eu0.js +1 -0
  178. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DWNL9FgP.js +465 -0
  179. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/mermaid.core-DhY_x5WF.js +244 -0
  180. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-DsOe4v7I.js +96 -0
  181. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-CGyoRO4_.js +30 -0
  182. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-Cj2chRtB.js +7 -0
  183. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-DVv27OEE.js +84 -0
  184. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-BQILqDse.js +40 -0
  185. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-6egz85VI.js +162 -0
  186. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-DBJgV7Cm.js +1 -0
  187. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-CQRzQ8b4.js +1 -0
  188. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-le8BJ0A-.js +120 -0
  189. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-Bjl4nmfL.js +34 -0
  190. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-CQ9olIGT.js +161 -0
  191. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-COpN0Kqp.js +78 -0
  192. pythinker_code-0.42.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-DLwkPLC8.js +7 -0
  193. pythinker_code-0.42.0/src/pythinker_code/web/static/index.html +15 -0
  194. pythinker_code-0.42.0/src/pythinker_code/wire/types.py +815 -0
  195. pythinker_code-0.40.1/PKG-INFO +0 -873
  196. pythinker_code-0.40.1/README.md +0 -808
  197. pythinker_code-0.40.1/pyproject.toml +0 -224
  198. pythinker_code-0.40.1/src/pythinker_code/CHANGELOG.md +0 -478
  199. pythinker_code-0.40.1/src/pythinker_code/acp/host.py +0 -304
  200. pythinker_code-0.40.1/src/pythinker_code/acp/tools.py +0 -174
  201. pythinker_code-0.40.1/src/pythinker_code/agents/default/agent.yaml +0 -75
  202. pythinker_code-0.40.1/src/pythinker_code/agents/default/ask.yaml +0 -70
  203. pythinker_code-0.40.1/src/pythinker_code/agents/default/code_reviewer.yaml +0 -74
  204. pythinker_code-0.40.1/src/pythinker_code/agents/default/coder.yaml +0 -88
  205. pythinker_code-0.40.1/src/pythinker_code/agents/default/debug.yaml +0 -81
  206. pythinker_code-0.40.1/src/pythinker_code/agents/default/debugger.yaml +0 -56
  207. pythinker_code-0.40.1/src/pythinker_code/agents/default/explore.yaml +0 -67
  208. pythinker_code-0.40.1/src/pythinker_code/agents/default/implementer.yaml +0 -70
  209. pythinker_code-0.40.1/src/pythinker_code/agents/default/judge.yaml +0 -69
  210. pythinker_code-0.40.1/src/pythinker_code/agents/default/plan.yaml +0 -77
  211. pythinker_code-0.40.1/src/pythinker_code/agents/default/planner.yaml +0 -42
  212. pythinker_code-0.40.1/src/pythinker_code/agents/default/review.yaml +0 -70
  213. pythinker_code-0.40.1/src/pythinker_code/agents/default/scout.yaml +0 -67
  214. pythinker_code-0.40.1/src/pythinker_code/agents/default/security_reviewer.yaml +0 -66
  215. pythinker_code-0.40.1/src/pythinker_code/agents/default/system.md +0 -359
  216. pythinker_code-0.40.1/src/pythinker_code/agents/default/verifier.yaml +0 -82
  217. pythinker_code-0.40.1/src/pythinker_code/app.py +0 -936
  218. pythinker_code-0.40.1/src/pythinker_code/auth/openai/models.py +0 -244
  219. pythinker_code-0.40.1/src/pythinker_code/auth/openai/oauth_client.py +0 -224
  220. pythinker_code-0.40.1/src/pythinker_code/auth/platforms.py +0 -571
  221. pythinker_code-0.40.1/src/pythinker_code/background/agent_runner.py +0 -277
  222. pythinker_code-0.40.1/src/pythinker_code/background/ids.py +0 -19
  223. pythinker_code-0.40.1/src/pythinker_code/background/manager.py +0 -1020
  224. pythinker_code-0.40.1/src/pythinker_code/background/models.py +0 -127
  225. pythinker_code-0.40.1/src/pythinker_code/background/worker.py +0 -276
  226. pythinker_code-0.40.1/src/pythinker_code/cli/__init__.py +0 -1605
  227. pythinker_code-0.40.1/src/pythinker_code/config.py +0 -1096
  228. pythinker_code-0.40.1/src/pythinker_code/constant.py +0 -43
  229. pythinker_code-0.40.1/src/pythinker_code/hooks/runner.py +0 -126
  230. pythinker_code-0.40.1/src/pythinker_code/llm.py +0 -527
  231. pythinker_code-0.40.1/src/pythinker_code/plugin/tool.py +0 -173
  232. pythinker_code-0.40.1/src/pythinker_code/prompts/__init__.py +0 -6
  233. pythinker_code-0.40.1/src/pythinker_code/session_cleanup.py +0 -259
  234. pythinker_code-0.40.1/src/pythinker_code/session_state.py +0 -147
  235. pythinker_code-0.40.1/src/pythinker_code/soul/__init__.py +0 -320
  236. pythinker_code-0.40.1/src/pythinker_code/soul/agent.py +0 -579
  237. pythinker_code-0.40.1/src/pythinker_code/soul/approval.py +0 -650
  238. pythinker_code-0.40.1/src/pythinker_code/soul/compaction.py +0 -236
  239. pythinker_code-0.40.1/src/pythinker_code/soul/context.py +0 -375
  240. pythinker_code-0.40.1/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -100
  241. pythinker_code-0.40.1/src/pythinker_code/soul/dynamic_injections/model_defense.py +0 -107
  242. pythinker_code-0.40.1/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -247
  243. pythinker_code-0.40.1/src/pythinker_code/soul/flow_runner.py +0 -215
  244. pythinker_code-0.40.1/src/pythinker_code/soul/permission.py +0 -973
  245. pythinker_code-0.40.1/src/pythinker_code/soul/pythinkersoul.py +0 -2316
  246. pythinker_code-0.40.1/src/pythinker_code/soul/slash.py +0 -352
  247. pythinker_code-0.40.1/src/pythinker_code/soul/toolset.py +0 -1081
  248. pythinker_code-0.40.1/src/pythinker_code/subagents/builder.py +0 -44
  249. pythinker_code-0.40.1/src/pythinker_code/subagents/core.py +0 -103
  250. pythinker_code-0.40.1/src/pythinker_code/subagents/git_context.py +0 -172
  251. pythinker_code-0.40.1/src/pythinker_code/subagents/runner.py +0 -523
  252. pythinker_code-0.40.1/src/pythinker_code/subagents/usage.py +0 -102
  253. pythinker_code-0.40.1/src/pythinker_code/telemetry/config.py +0 -121
  254. pythinker_code-0.40.1/src/pythinker_code/telemetry/crash.py +0 -191
  255. pythinker_code-0.40.1/src/pythinker_code/telemetry/errors.py +0 -113
  256. pythinker_code-0.40.1/src/pythinker_code/telemetry/metrics.py +0 -235
  257. pythinker_code-0.40.1/src/pythinker_code/telemetry/otel.py +0 -309
  258. pythinker_code-0.40.1/src/pythinker_code/telemetry/sentry.py +0 -257
  259. pythinker_code-0.40.1/src/pythinker_code/thinking.py +0 -164
  260. pythinker_code-0.40.1/src/pythinker_code/tools/agent/__init__.py +0 -795
  261. pythinker_code-0.40.1/src/pythinker_code/tools/agent/description.md +0 -85
  262. pythinker_code-0.40.1/src/pythinker_code/tools/background/__init__.py +0 -549
  263. pythinker_code-0.40.1/src/pythinker_code/tools/file/glob.py +0 -171
  264. pythinker_code-0.40.1/src/pythinker_code/tools/file/grep_local.py +0 -1044
  265. pythinker_code-0.40.1/src/pythinker_code/tools/file/read.md +0 -16
  266. pythinker_code-0.40.1/src/pythinker_code/tools/file/read.py +0 -323
  267. pythinker_code-0.40.1/src/pythinker_code/tools/file/read_media.py +0 -220
  268. pythinker_code-0.40.1/src/pythinker_code/tools/file/replace.py +0 -336
  269. pythinker_code-0.40.1/src/pythinker_code/tools/file/write.py +0 -202
  270. pythinker_code-0.40.1/src/pythinker_code/tools/mcp_resource/__init__.py +0 -119
  271. pythinker_code-0.40.1/src/pythinker_code/tools/memory/__init__.py +0 -60
  272. pythinker_code-0.40.1/src/pythinker_code/tools/recall/__init__.py +0 -193
  273. pythinker_code-0.40.1/src/pythinker_code/tools/shell/__init__.py +0 -337
  274. pythinker_code-0.40.1/src/pythinker_code/tools/think/__init__.py +0 -21
  275. pythinker_code-0.40.1/src/pythinker_code/tools/todo/__init__.py +0 -227
  276. pythinker_code-0.40.1/src/pythinker_code/tools/todo/set_todo_list.md +0 -23
  277. pythinker_code-0.40.1/src/pythinker_code/tools/utils.py +0 -383
  278. pythinker_code-0.40.1/src/pythinker_code/tools/web/fetch.py +0 -358
  279. pythinker_code-0.40.1/src/pythinker_code/tools/web/search.py +0 -205
  280. pythinker_code-0.40.1/src/pythinker_code/ui/color_utils.py +0 -48
  281. pythinker_code-0.40.1/src/pythinker_code/ui/print/__init__.py +0 -486
  282. pythinker_code-0.40.1/src/pythinker_code/ui/shell/__init__.py +0 -2316
  283. pythinker_code-0.40.1/src/pythinker_code/ui/shell/components/bash_execution.py +0 -259
  284. pythinker_code-0.40.1/src/pythinker_code/ui/shell/components/diff.py +0 -344
  285. pythinker_code-0.40.1/src/pythinker_code/ui/shell/components/markdown.py +0 -902
  286. pythinker_code-0.40.1/src/pythinker_code/ui/shell/components/render_utils.py +0 -243
  287. pythinker_code-0.40.1/src/pythinker_code/ui/shell/console.py +0 -123
  288. pythinker_code-0.40.1/src/pythinker_code/ui/shell/mcp_status.py +0 -154
  289. pythinker_code-0.40.1/src/pythinker_code/ui/shell/motion.py +0 -354
  290. pythinker_code-0.40.1/src/pythinker_code/ui/shell/prompt.py +0 -3627
  291. pythinker_code-0.40.1/src/pythinker_code/ui/shell/render_constants.py +0 -59
  292. pythinker_code-0.40.1/src/pythinker_code/ui/shell/setup.py +0 -226
  293. pythinker_code-0.40.1/src/pythinker_code/ui/shell/slash.py +0 -1927
  294. pythinker_code-0.40.1/src/pythinker_code/ui/shell/spinner_words.py +0 -222
  295. pythinker_code-0.40.1/src/pythinker_code/ui/shell/stats.py +0 -342
  296. pythinker_code-0.40.1/src/pythinker_code/ui/shell/stats_pricing.py +0 -123
  297. pythinker_code-0.40.1/src/pythinker_code/ui/shell/tips.py +0 -32
  298. pythinker_code-0.40.1/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -483
  299. pythinker_code-0.40.1/src/pythinker_code/ui/shell/update.py +0 -1405
  300. pythinker_code-0.40.1/src/pythinker_code/ui/shell/usage.py +0 -360
  301. pythinker_code-0.40.1/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -265
  302. pythinker_code-0.40.1/src/pythinker_code/ui/shell/visualize/__init__.py +0 -181
  303. pythinker_code-0.40.1/src/pythinker_code/ui/shell/visualize/_blocks.py +0 -1376
  304. pythinker_code-0.40.1/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -629
  305. pythinker_code-0.40.1/src/pythinker_code/ui/shell/visualize/_live_view.py +0 -1483
  306. pythinker_code-0.40.1/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -280
  307. pythinker_code-0.40.1/src/pythinker_code/ui/terminal_background.py +0 -169
  308. pythinker_code-0.40.1/src/pythinker_code/ui/terminal_capabilities.py +0 -125
  309. pythinker_code-0.40.1/src/pythinker_code/ui/theme.py +0 -673
  310. pythinker_code-0.40.1/src/pythinker_code/utils/export.py +0 -852
  311. pythinker_code-0.40.1/src/pythinker_code/utils/path.py +0 -251
  312. pythinker_code-0.40.1/src/pythinker_code/utils/rich/diff_render.py +0 -493
  313. pythinker_code-0.40.1/src/pythinker_code/utils/sensitive.py +0 -55
  314. pythinker_code-0.40.1/src/pythinker_code/utils/slashcmd.py +0 -124
  315. pythinker_code-0.40.1/src/pythinker_code/utils/subprocess_env.py +0 -83
  316. pythinker_code-0.40.1/src/pythinker_code/utils/term.py +0 -197
  317. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/arc-CCwEpTut.js +0 -1
  318. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-B2I1FV0L.js +0 -36
  319. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-DjB7MpAq.js +0 -132
  320. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-8W6Q9fal.js +0 -10
  321. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/channel-BixmdygP.js +0 -1
  322. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/chunk-2J33WTMH-mHrmTNuF.js +0 -1
  323. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-CaSbQmrO.js +0 -1
  324. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/chunk-55IACEB6-DS2mNMHf.js +0 -1
  325. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/chunk-727SXJPM-dvwQ03gg.js +0 -206
  326. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-16WQcU0f.js +0 -231
  327. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-DHU37rGy.js +0 -15
  328. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-zAUEevhe.js +0 -1
  329. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-BZDkHabl.js +0 -1
  330. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-abRBdx9C.js +0 -1
  331. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-abRBdx9C.js +0 -1
  332. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DhSPjzQ2.js +0 -2
  333. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-Cl9YHimz.js +0 -1
  334. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/cytoscape.esm-CTcJOrsw.js +0 -321
  335. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/dagre-BM42HDAG-C5e2KEop.js +0 -4
  336. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-CcPdj6aZ.js +0 -43
  337. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/diagram-5GNKFQAL-Bu6H27Z4.js +0 -10
  338. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-Cc-bapDN.js +0 -3
  339. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/diagram-LMA3HP47-B0_MMOrV.js +0 -24
  340. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-Bz2qPK_D.js +0 -24
  341. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-ChEyHw4e.js +0 -85
  342. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-DmJ7GTOY.js +0 -162
  343. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-J45DFSdx.js +0 -292
  344. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-ClQ-yJya.js +0 -106
  345. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/graph-BFejNkpu.js +0 -1
  346. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/index--Y0eLMjq.js +0 -5
  347. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/index-CFNdtT3u.js +0 -2
  348. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/index-D6c-tncZ.js +0 -153
  349. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-BEejj5fX.js +0 -2
  350. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-BQXS7nPV.js +0 -70
  351. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-Bx4jExB-.js +0 -139
  352. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-pdPxPIXQ.js +0 -89
  353. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/layout-CW3o9v0t.js +0 -1
  354. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/linear-DPUdhU3D.js +0 -1
  355. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-CuI6s5cP.js +0 -465
  356. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/mermaid.core-C1dKLTYx.js +0 -244
  357. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-BfBkbOlY.js +0 -96
  358. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-CA7evwXR.js +0 -30
  359. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-Bl-0mvk1.js +0 -7
  360. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-DCPvgUC0.js +0 -84
  361. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-C_ehiFJX.js +0 -40
  362. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-BI7Oqnz6.js +0 -162
  363. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-BJ7uKx5a.js +0 -1
  364. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-By4ZVUsp.js +0 -1
  365. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-D3u6luDJ.js +0 -120
  366. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-Cbat7L3i.js +0 -34
  367. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/wardley-L42UT6IY-DAJr01gG.js +0 -161
  368. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-_QrkCHDi.js +0 -78
  369. pythinker_code-0.40.1/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-DfppOp-O.js +0 -7
  370. pythinker_code-0.40.1/src/pythinker_code/web/static/index.html +0 -15
  371. pythinker_code-0.40.1/src/pythinker_code/wire/types.py +0 -813
  372. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/LICENSE +0 -0
  373. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/NOTICE +0 -0
  374. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/__init__.py +0 -0
  375. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/__main__.py +0 -0
  376. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  377. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/acp/__init__.py +0 -0
  378. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/acp/convert.py +0 -0
  379. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/acp/mcp.py +0 -0
  380. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/acp/server.py +0 -0
  381. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/acp/session.py +0 -0
  382. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/acp/types.py +0 -0
  383. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/acp/version.py +0 -0
  384. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  385. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/agentspec.py +0 -0
  386. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  387. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  388. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  389. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/__init__.py +0 -0
  390. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/alibaba.py +0 -0
  391. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  392. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/browser_login_page.py +0 -0
  393. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/deepseek.py +0 -0
  394. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  395. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  396. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/minimax.py +0 -0
  397. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/moonshot.py +0 -0
  398. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/oauth.py +0 -0
  399. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/ollama.py +0 -0
  400. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/openai/__init__.py +0 -0
  401. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/openai/_shared.py +0 -0
  402. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/openai/browser_flow.py +0 -0
  403. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/openai/catalog.py +0 -0
  404. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/openai/config_apply.py +0 -0
  405. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/openai/constants.py +0 -0
  406. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/openai/login.py +0 -0
  407. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  408. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/openrouter.py +0 -0
  409. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/auth/z_ai.py +0 -0
  410. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/background/__init__.py +0 -0
  411. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/background/store.py +0 -0
  412. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/background/summary.py +0 -0
  413. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/cli/__main__.py +0 -0
  414. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  415. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/cli/debug.py +0 -0
  416. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/cli/export.py +0 -0
  417. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/cli/info.py +0 -0
  418. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/cli/mcp.py +0 -0
  419. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/cli/plugin.py +0 -0
  420. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/cli/review.py +0 -0
  421. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/cli/secscan.py +0 -0
  422. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/cli/security_scan.py +0 -0
  423. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/cli/skill.py +0 -0
  424. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/cli/toad.py +0 -0
  425. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/cli/update.py +0 -0
  426. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/cli/vis.py +0 -0
  427. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/cli/web.py +0 -0
  428. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/events.py +0 -0
  429. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/exception.py +0 -0
  430. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/execution_profiles.py +0 -0
  431. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/extensions.py +0 -0
  432. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/feedback.py +0 -0
  433. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/feedback_repo.py +0 -0
  434. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/file_restore.py +0 -0
  435. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/hooks/__init__.py +0 -0
  436. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/hooks/config.py +0 -0
  437. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/hooks/engine.py +0 -0
  438. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/hooks/events.py +0 -0
  439. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/memory/__init__.py +0 -0
  440. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/memory/consolidation.py +0 -0
  441. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/memory/harvest.py +0 -0
  442. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/memory/recall.py +0 -0
  443. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/memory/recap.py +0 -0
  444. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/memory/retriever.py +0 -0
  445. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/memory/sanitize.py +0 -0
  446. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/metadata.py +0 -0
  447. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/models_dev.py +0 -0
  448. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/native.py +0 -0
  449. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/notifications/__init__.py +0 -0
  450. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/notifications/llm.py +0 -0
  451. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/notifications/manager.py +0 -0
  452. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/notifications/models.py +0 -0
  453. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/notifications/notifier.py +0 -0
  454. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/notifications/store.py +0 -0
  455. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/notifications/wire.py +0 -0
  456. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/plugin/__init__.py +0 -0
  457. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/plugin/manager.py +0 -0
  458. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/project_memory.py +0 -0
  459. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/prompt_templates.py +0 -0
  460. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/prompts/compact.md +0 -0
  461. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/prompts/init.md +0 -0
  462. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/py.typed +0 -0
  463. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/scratchpad.py +0 -0
  464. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/session.py +0 -0
  465. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/session_fork.py +0 -0
  466. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/session_recap.py +0 -0
  467. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/share.py +0 -0
  468. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skill/__init__.py +0 -0
  469. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  470. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  471. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  472. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skill/lockfile.py +0 -0
  473. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skills/agent-creator/SKILL.md +0 -0
  474. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
  475. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
  476. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skills/customize-pythinker/SKILL.md +0 -0
  477. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
  478. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
  479. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
  480. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
  481. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  482. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
  483. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
  484. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
  485. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  486. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
  487. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
  488. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
  489. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/soul/btw.py +0 -0
  490. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
  491. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/soul/deliberation.py +0 -0
  492. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  493. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  494. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  495. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/soul/message.py +0 -0
  496. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/subagents/__init__.py +0 -0
  497. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/subagents/discovery.py +0 -0
  498. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/subagents/models.py +0 -0
  499. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/subagents/output.py +0 -0
  500. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/subagents/registry.py +0 -0
  501. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/subagents/store.py +0 -0
  502. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  503. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/telemetry/sink.py +0 -0
  504. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  505. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/__init__.py +0 -0
  506. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
  507. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  508. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/background/handoff.md +0 -0
  509. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/background/input.md +0 -0
  510. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/background/list.md +0 -0
  511. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/background/output.md +0 -0
  512. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/background/stop.md +0 -0
  513. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/display.py +0 -0
  514. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  515. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  516. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  517. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/file/glob.md +0 -0
  518. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/file/grep.md +0 -0
  519. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  520. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  521. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/file/replace.md +0 -0
  522. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/file/utils.py +0 -0
  523. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/file/write.md +0 -0
  524. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/mcp_resource/list_description.md +0 -0
  525. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/mcp_resource/read_description.md +0 -0
  526. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/memory/memory.md +0 -0
  527. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  528. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/plan/description.md +0 -0
  529. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  530. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  531. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  532. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  533. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/progress/__init__.py +0 -0
  534. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/progress/description.md +0 -0
  535. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/recall/description.md +0 -0
  536. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
  537. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
  538. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  539. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  540. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
  541. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/skill/description.md +0 -0
  542. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/suggest/__init__.py +0 -0
  543. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/suggest/description.md +0 -0
  544. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/test.py +0 -0
  545. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/think/think.md +0 -0
  546. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  547. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
  548. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  549. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/tools/web/search.md +0 -0
  550. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/__init__.py +0 -0
  551. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  552. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  553. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  554. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  555. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
  556. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
  557. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  558. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
  559. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  560. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
  561. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/report.py +0 -0
  562. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  563. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  564. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
  565. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  566. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
  567. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/echo.py +0 -0
  568. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
  569. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/glyphs.py +0 -0
  570. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  571. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
  572. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
  573. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
  574. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  575. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  576. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selector.py +0 -0
  577. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  578. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  579. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  580. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
  581. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  582. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  583. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  584. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  585. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
  586. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  587. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/stats_collector.py +0 -0
  588. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  589. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
  590. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
  591. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
  592. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
  593. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
  594. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
  595. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
  596. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
  597. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
  598. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
  599. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  600. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
  601. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/skill.py +0 -0
  602. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
  603. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
  604. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
  605. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
  606. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/update_orchestrator.py +0 -0
  607. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  608. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/alibaba.py +0 -0
  609. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  610. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  611. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  612. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  613. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  614. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  615. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  616. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  617. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  618. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  619. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
  620. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
  621. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
  622. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
  623. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  624. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
  625. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
  626. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/ui/tui_config.py +0 -0
  627. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  628. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/__init__.py +0 -0
  629. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  630. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  631. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/artifacts.py +0 -0
  632. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/broadcast.py +0 -0
  633. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/changelog.py +0 -0
  634. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/clipboard.py +0 -0
  635. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/datetime.py +0 -0
  636. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/diff.py +0 -0
  637. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/editor.py +0 -0
  638. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/environment.py +0 -0
  639. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/envvar.py +0 -0
  640. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/file_filter.py +0 -0
  641. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  642. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/gitignore.py +0 -0
  643. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/io.py +0 -0
  644. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/logging.py +0 -0
  645. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/media_tags.py +0 -0
  646. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/message.py +0 -0
  647. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/proctitle.py +0 -0
  648. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/proxy.py +0 -0
  649. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  650. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  651. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  652. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
  653. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  654. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  655. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
  656. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/server.py +0 -0
  657. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/signals.py +0 -0
  658. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
  659. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/string.py +0 -0
  660. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/trust.py +0 -0
  661. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/utils/typing.py +0 -0
  662. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/vis/__init__.py +0 -0
  663. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/vis/api/__init__.py +0 -0
  664. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/vis/api/sessions.py +0 -0
  665. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/vis/api/statistics.py +0 -0
  666. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/vis/api/system.py +0 -0
  667. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/vis/app.py +0 -0
  668. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
  669. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
  670. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
  671. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  672. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  673. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  674. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  675. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  676. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  677. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  678. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/vis/static/index.html +0 -0
  679. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/__init__.py +0 -0
  680. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/api/__init__.py +0 -0
  681. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/api/config.py +0 -0
  682. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/api/open_in.py +0 -0
  683. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/api/sessions.py +0 -0
  684. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/app.py +0 -0
  685. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/auth.py +0 -0
  686. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/models.py +0 -0
  687. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  688. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/runner/messages.py +0 -0
  689. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/runner/process.py +0 -0
  690. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/runner/worker.py +0 -0
  691. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/_headers +0 -0
  692. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  693. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  694. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  695. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  696. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  697. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  698. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  699. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  700. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  701. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  702. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  703. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  704. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  705. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  706. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  707. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  708. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  709. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  710. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  711. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  712. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  713. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  714. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  715. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  716. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  717. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  718. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  719. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  720. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  721. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  722. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  723. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  724. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  725. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  726. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  727. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  728. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  729. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  730. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  731. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  732. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  733. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  734. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  735. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  736. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  737. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  738. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  739. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  740. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  741. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  742. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  743. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  744. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  745. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  746. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  747. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  748. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  749. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  750. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  751. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
  752. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
  753. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
  754. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
  755. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
  756. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
  757. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
  758. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
  759. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
  760. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
  761. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
  762. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
  763. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
  764. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
  765. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
  766. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
  767. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
  768. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
  769. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
  770. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
  771. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
  772. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
  773. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
  774. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
  775. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
  776. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
  777. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
  778. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
  779. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
  780. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  781. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  782. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  783. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  784. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
  785. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
  786. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
  787. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
  788. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
  789. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
  790. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
  791. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
  792. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
  793. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
  794. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
  795. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
  796. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
  797. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
  798. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
  799. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
  800. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
  801. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
  802. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
  803. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
  804. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
  805. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
  806. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
  807. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
  808. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
  809. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
  810. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
  811. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
  812. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
  813. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
  814. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
  815. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
  816. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
  817. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
  818. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
  819. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
  820. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
  821. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
  822. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
  823. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  824. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
  825. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
  826. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
  827. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
  828. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
  829. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
  830. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
  831. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
  832. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
  833. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
  834. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
  835. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  836. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  837. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
  838. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
  839. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  840. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
  841. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
  842. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
  843. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
  844. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
  845. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
  846. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
  847. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
  848. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
  849. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  850. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  851. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  852. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  853. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  854. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  855. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
  856. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
  857. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
  858. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
  859. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
  860. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
  861. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
  862. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
  863. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
  864. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
  865. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
  866. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
  867. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
  868. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
  869. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
  870. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
  871. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
  872. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
  873. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
  874. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
  875. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
  876. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  877. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  878. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  879. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  880. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  881. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  882. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  883. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
  884. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
  885. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
  886. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
  887. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
  888. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
  889. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
  890. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
  891. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
  892. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
  893. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
  894. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
  895. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  896. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  897. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
  898. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
  899. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
  900. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
  901. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
  902. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
  903. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
  904. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
  905. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
  906. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
  907. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
  908. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
  909. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
  910. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
  911. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
  912. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
  913. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
  914. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
  915. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
  916. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
  917. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
  918. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  919. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
  920. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  921. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
  922. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
  923. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
  924. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-YVZJy7__.css +0 -0
  925. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
  926. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
  927. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
  928. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
  929. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
  930. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
  931. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
  932. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
  933. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
  934. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
  935. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
  936. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
  937. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
  938. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
  939. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
  940. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
  941. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
  942. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
  943. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
  944. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  945. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
  946. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
  947. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
  948. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
  949. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
  950. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
  951. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
  952. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
  953. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
  954. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
  955. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
  956. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
  957. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
  958. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
  959. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
  960. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
  961. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
  962. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
  963. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
  964. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
  965. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
  966. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
  967. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
  968. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
  969. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
  970. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
  971. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
  972. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
  973. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
  974. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
  975. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
  976. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
  977. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
  978. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
  979. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  980. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  981. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
  982. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
  983. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
  984. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
  985. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
  986. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
  987. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
  988. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
  989. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
  990. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
  991. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
  992. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
  993. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
  994. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
  995. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
  996. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
  997. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
  998. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
  999. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
  1000. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
  1001. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
  1002. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
  1003. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
  1004. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
  1005. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
  1006. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
  1007. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
  1008. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
  1009. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
  1010. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
  1011. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
  1012. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
  1013. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
  1014. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
  1015. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
  1016. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
  1017. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
  1018. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
  1019. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
  1020. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
  1021. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
  1022. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
  1023. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
  1024. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
  1025. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
  1026. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
  1027. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
  1028. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
  1029. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
  1030. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
  1031. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
  1032. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
  1033. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
  1034. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
  1035. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
  1036. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
  1037. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
  1038. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
  1039. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
  1040. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
  1041. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
  1042. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
  1043. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
  1044. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
  1045. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
  1046. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
  1047. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
  1048. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
  1049. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
  1050. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
  1051. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
  1052. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
  1053. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
  1054. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
  1055. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
  1056. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  1057. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  1058. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  1059. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  1060. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  1061. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  1062. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  1063. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  1064. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  1065. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  1066. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  1067. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  1068. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  1069. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  1070. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  1071. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  1072. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  1073. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  1074. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  1075. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  1076. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  1077. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  1078. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/install.ps1 +0 -0
  1079. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/install.sh +0 -0
  1080. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/static/logo.png +0 -0
  1081. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/store/__init__.py +0 -0
  1082. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/web/store/sessions.py +0 -0
  1083. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/wire/__init__.py +0 -0
  1084. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/wire/file.py +0 -0
  1085. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  1086. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/wire/protocol.py +0 -0
  1087. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/wire/root_hub.py +0 -0
  1088. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/wire/serde.py +0 -0
  1089. {pythinker_code-0.40.1 โ†’ pythinker_code-0.42.0}/src/pythinker_code/wire/server.py +0 -0
@@ -0,0 +1,883 @@
1
+ Metadata-Version: 2.4
2
+ Name: pythinker-code
3
+ Version: 0.42.0
4
+ Summary: Pythinker โ€” an agentic CLI developed by Pythoughts-labs.
5
+ Keywords: cli,agent,ai,coding-assistant,llm,claude,openai,terminal
6
+ Author: Pythoughts-labs
7
+ Author-email: Pythoughts-labs <hello@pythoughts.com>
8
+ License-Expression: Apache-2.0
9
+ License-File: LICENSE
10
+ License-File: NOTICE
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Programming Language :: Python :: 3.14
19
+ Classifier: Topic :: Software Development
20
+ Classifier: Topic :: Software Development :: Code Generators
21
+ Classifier: Topic :: Utilities
22
+ Requires-Dist: agent-client-protocol==0.10.1
23
+ Requires-Dist: aiofiles>=24.0,<26.0
24
+ Requires-Dist: aiohttp==3.14.1
25
+ Requires-Dist: typer==0.26.7
26
+ Requires-Dist: pythinker-core[contrib]==1.2.0
27
+ Requires-Dist: loguru>=0.6.0,<0.7
28
+ Requires-Dist: prompt-toolkit==3.0.52
29
+ Requires-Dist: pillow==12.2.0
30
+ Requires-Dist: pyyaml==6.0.3
31
+ Requires-Dist: rich==15.0.0
32
+ Requires-Dist: certifi>=2025.10.5
33
+ Requires-Dist: pyperclip==1.11.0
34
+ Requires-Dist: click==8.3.0
35
+ Requires-Dist: streamingjson==0.0.5
36
+ Requires-Dist: trafilatura==2.0.0
37
+ Requires-Dist: lxml==6.1.1
38
+ Requires-Dist: tenacity==9.1.4
39
+ Requires-Dist: fastmcp==3.2.0
40
+ Requires-Dist: pydantic==2.13.4
41
+ Requires-Dist: httpx[socks]==0.28.1
42
+ Requires-Dist: pythinker-host==1.0.0
43
+ Requires-Dist: pythinker-review==0.1.0
44
+ Requires-Dist: batrachian-toad==0.5.23 ; python_full_version >= '3.14'
45
+ Requires-Dist: tomlkit==0.15.0
46
+ Requires-Dist: jinja2==3.1.6
47
+ Requires-Dist: pyobjc-framework-cocoa>=12.1 ; sys_platform == 'darwin'
48
+ Requires-Dist: fastapi>=0.115.0
49
+ Requires-Dist: uvicorn[standard]>=0.32.0
50
+ Requires-Dist: scalar-fastapi>=1.8.2
51
+ Requires-Dist: websockets>=14.0
52
+ Requires-Dist: keyring>=25.7.0
53
+ Requires-Dist: setproctitle>=1.3.0
54
+ Requires-Dist: sentry-sdk>=2.20,<3
55
+ Requires-Dist: opentelemetry-api>=1.30,<2
56
+ Requires-Dist: opentelemetry-sdk>=1.30,<2
57
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.30,<2
58
+ Requires-Python: >=3.12
59
+ Project-URL: Changelog, https://github.com/Pythoughts-labs/pythinker-code/blob/main/CHANGELOG.md
60
+ Project-URL: Documentation, https://github.com/Pythoughts-labs/pythinker-code#readme
61
+ Project-URL: Homepage, https://github.com/Pythoughts-labs/pythinker-code
62
+ Project-URL: Issues, https://github.com/Pythoughts-labs/pythinker-code/issues
63
+ Project-URL: Repository, https://github.com/Pythoughts-labs/pythinker-code
64
+ Description-Content-Type: text/markdown
65
+
66
+ <div align="center">
67
+
68
+ # <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/logo.png" alt="Pythinker logo" width="42" align="top"> Pythinker Code
69
+
70
+ ### *Think first, then code. Your terminal-native review-first AI engineering agent.*
71
+
72
+ **Code reviewer ยท Security & vulnerability scanner ยท Root-cause debugger โ€” then code creator.**
73
+ **Pythinker reads your repo, audits it, and only writes code after the analysis. All from the shell you already live in.**
74
+
75
+ <br />
76
+
77
+ [![PyPI](https://img.shields.io/pypi/v/pythinker-code?style=for-the-badge&logo=pypi&logoColor=white&color=2563eb&label=pythinker-code&cacheSeconds=60)](https://pypi.org/project/pythinker-code/)
78
+ [![Python](https://img.shields.io/badge/Python-3.12%2B-3776ab?style=for-the-badge&logo=python&logoColor=white)](https://github.com/Pythoughts-labs/pythinker-code/blob/main/pyproject.toml)
79
+ [![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-16a34a.svg?style=for-the-badge)](https://github.com/Pythoughts-labs/pythinker-code/blob/main/LICENSE)
80
+ [![CI](https://img.shields.io/github/actions/workflow/status/Pythoughts-labs/pythinker-code/ci-pythinker-cli.yml?branch=main&label=CI&style=for-the-badge&logo=githubactions&logoColor=white)](https://github.com/Pythoughts-labs/pythinker-code/actions/workflows/ci-pythinker-cli.yml?query=branch%3Amain)
81
+
82
+ [![PyPI Downloads](https://static.pepy.tech/personalized-badge/pythinker-code?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/pythinker-code)
83
+ [![Code style: Ruff](https://img.shields.io/badge/code%20style-ruff-f59e0b.svg?style=flat-square&logo=ruff&logoColor=white)](https://docs.astral.sh/ruff/)
84
+ [![ACP ready](https://img.shields.io/badge/ACP-ready-7c3aed.svg?style=flat-square)](https://github.com/agentclientprotocol/agent-client-protocol)
85
+ [![MCP tools](https://img.shields.io/badge/MCP-tools-0891b2.svg?style=flat-square)](https://modelcontextprotocol.io/)
86
+ [![Homepage](https://img.shields.io/badge/home-pythinker.com-ec4899.svg?style=flat-square)](https://pythinker.com)
87
+
88
+ <br />
89
+
90
+ <a href="https://pythinker.com">๐ŸŒ Website</a> &nbsp;ยท&nbsp;
91
+ <a href="#-quick-start">โšก Quick Start</a> &nbsp;ยท&nbsp;
92
+ <a href="#-features">โœจ Features</a> &nbsp;ยท&nbsp;
93
+ <a href="#-ide-integration-via-acp">๐Ÿงฉ IDE Integration</a> &nbsp;ยท&nbsp;
94
+ <a href="#-mcp-tooling">๐Ÿ”Œ MCP</a> &nbsp;ยท&nbsp;
95
+ <a href="#-privacy--telemetry">๐Ÿ” Privacy</a> &nbsp;ยท&nbsp;
96
+ <a href="#-development">๐Ÿ› ๏ธ Develop</a>
97
+
98
+ <br /><br />
99
+
100
+ <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/pythinker_cli.gif" alt="Pythinker Code terminal demo" width="860">
101
+
102
+ </div>
103
+
104
+ ---
105
+
106
+ ## ๐Ÿ’ก What is Pythinker?
107
+
108
+ **Pythinker Code** is an open-source, **review-first** AI engineering agent that lives in your terminal. Before it writes a single line, it reads yours โ€” auditing diffs, scanning for vulnerabilities, and root-causing failures. Unlike chat assistants that jump straight to code, Pythinker leads with **code review, security scanning, and root-cause diagnosis**, and only edits files once the analysis points at a fix.
109
+
110
+ It ships with first-class subagents for each role โ€” `code-reviewer` for severity-scored diff critique, `security-reviewer` for validated vulnerability findings, `debugger` for failure root-causing, and `coder`/`implementer` for the scoped edits that follow. All running in a single iterative loop, driven by the model of your choice, with full access to **your repo, the shell, the web, and MCP tools**.
111
+
112
+ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientprotocol/agent-client-protocol), so it slots cleanly into ACP-aware editors like Zed and JetBrains. It loads [**Model Context Protocol (MCP)**](https://modelcontextprotocol.io/) servers, so the same tools your other agents use just work. And it's hackable: subagents, skills, hooks, and plugins are all first-class extension points.
113
+
114
+ > ๐ŸŽฏ **Review ยท Secure ยท Diagnose ยท then Create.** One agent, one shell, one workflow. No tab-switching. No context loss. No magic.
115
+
116
+ ---
117
+
118
+ ## ๐Ÿ†• What's New in 0.42.0
119
+
120
+ - **Parallel coding agents are truly isolated.** `isolation="worktree"` is now enforced, not just recorded: each background write agent runs in its own git worktree of HEAD and reports its worktree path with a diff summary so changes merge deliberately, while foreground shell commands and relative-path edits resolve against the agent's own work dir. Worktrees with commits ahead of their base are retained instead of orphaned, and worktree add/remove serializes per repo.
121
+ - **The agent knows its own permission posture โ€” and stops asking when it shouldn't.** A live permissions-state reminder renders the enforced profile, safe-mode/yolo/auto flags, mutation/network allowances, and shell-gate rules, re-emitted exactly when the posture changes. Provably read-only commands (`ls`, `git status`) no longer interrupt the root agent with an approval dialog, via a fail-closed positive allowlist.
122
+ - **Edits recover from whitespace and smart-punctuation drift.** `StrReplaceFile` no longer hard-fails when the only mismatch is trailing whitespace, indentation, or smart quotes/dashes โ€” a graduated line-window ladder relocates the edit, preserves CRLF endings, and names the relaxation it used. Ambiguous fuzzy matches still error rather than silently resolving.
123
+ - **MCP servers are controllable.** Per-server `enabledTools`/`disabledTools` arrays in `mcp.json` scope a noisy server down to the tools you want, and a new `mcp.client.startup_timeout_ms` (default 30s) means a hung server can no longer stall every turn โ€” `/mcp` now shows one actionable line per failed server.
124
+ - **Quality of life.** `/model` switches now carry the conversation forward via a plain-text summary instead of starting fresh; typo'd config keys warn with their dotted path and source file (`PYTHINKER_STRICT_CONFIG=1` escalates to a startup error); project-scope hooks load only after `/trust`; the in-app updater recovers from Homebrew's untrusted-tap refusal; `/export` redacts secret-named values; inline `/command` references get acted on; and the thinking shimmer no longer animates while a foreground command runs.
125
+
126
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.42.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
127
+
128
+
129
+ ---
130
+
131
+ ## โœจ Features
132
+
133
+ <table>
134
+ <tr>
135
+ <td width="50%" valign="top">
136
+
137
+ ### ๐Ÿ–ฅ๏ธ Terminal-First
138
+
139
+ Plan, edit, run, and verify without leaving your shell. Every action is visible, scriptable, and auditable.
140
+
141
+ </td>
142
+ <td width="50%" valign="top">
143
+
144
+ ### โšก Shell Command Mode
145
+
146
+ Press `Ctrl-X` to drop into a direct shell prompt inside the agent. Run commands, then snap back into AI mode with full context preserved.
147
+
148
+ </td>
149
+ </tr>
150
+ <tr>
151
+ <td width="50%" valign="top">
152
+
153
+ ### ๐Ÿงฉ ACP IDE Integration
154
+
155
+ Run `pythinker acp` and any [Agent Client Protocol](https://github.com/agentclientprotocol/agent-client-protocol) editor โ€” Zed, JetBrains, and more โ€” gets a full Pythinker session inline.
156
+
157
+ </td>
158
+ <td width="50%" valign="top">
159
+
160
+ ### ๐Ÿ”Œ MCP Tool Loading
161
+
162
+ Manage stdio and HTTP MCP servers with `pythinker mcp`. OAuth-backed servers, persistent config, ad-hoc files โ€” all supported.
163
+
164
+ </td>
165
+ </tr>
166
+ <tr>
167
+ <td width="50%" valign="top">
168
+
169
+ ### ๐Ÿค– Subagents & Skills
170
+
171
+ Delegate focused work to built-in subagents. Load reusable instructions via `/skill:<name>` and bundled prompt flows via `/flow:<name>`. Use `pythinker skill list`, `pythinker skill lock`, and `pythinker skill verify-lock` to inspect project skills and pin their hashes in `skills-lock.json`.
172
+
173
+ </td>
174
+ <td width="50%" valign="top">
175
+
176
+ ### ๐Ÿช Hooks & Plugins
177
+
178
+ Observe or block tool execution with hook events. Install community extensions with `pythinker plugin`.
179
+
180
+ </td>
181
+ </tr>
182
+ <tr>
183
+ <td width="50%" valign="top">
184
+
185
+ ### ๐ŸŒ Web & Visualization UIs
186
+
187
+ Optional web frontend and visualization frontend ship alongside the CLI for richer inspection workflows.
188
+
189
+ </td>
190
+ <td width="50%" valign="top">
191
+
192
+ ### ๐Ÿค– Bring Your Own Model
193
+
194
+ Swap providers and models per-session: `--model openai/gpt-5.5`, hosted Pythinker models, or your own keys.
195
+
196
+ </td>
197
+ </tr>
198
+ </table>
199
+
200
+ > [!NOTE]
201
+ > Built-in shell commands such as `cd` are not yet supported in shell command mode.
202
+
203
+ <div align="center">
204
+ <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/shell-mode.gif" alt="Shell command mode demo" width="860">
205
+ </div>
206
+
207
+ ---
208
+
209
+ ## โšก Quick Start
210
+
211
+ Pythinker ships **native installers for every platform**. Pick the row that
212
+ matches your OS โ€” no Python, Node, or `uv` prerequisite.
213
+
214
+ | Platform | Recommended install | Artifact source |
215
+ |---|---|---|
216
+ | **๐ŸชŸ Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.42.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
217
+ | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
218
+ | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> โ€” Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
219
+ | **๐Ÿณ Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
220
+ | **๐ŸชŸ Windows โ€” Scoop** | `scoop bucket add pythinker https://github.com/Pythoughts-labs/scoop-pythinker && scoop install pythinker-code` | auto-published Scoop bucket |
221
+ | **โ„๏ธ Nix** | `nix run github:Pythoughts-labs/pythinker-code` | flake `apps.default` |
222
+ | **<img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> โ€” system package** | Download the `.deb` or `.rpm` for your distro below | [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
223
+ | **๐Ÿ Python fallback** | `pip install pythinker-code` | PyPI |
224
+
225
+ Every artifact ships with a matching `.sha256` file โ€” verify before install on
226
+ any platform with `sha256sum`, `shasum -a 256`, or `Get-FileHash`.
227
+
228
+ After install, on any OS:
229
+
230
+ ```sh
231
+ pythinker --version # confirm install
232
+ pythinker login # (optional) authenticate a hosted provider
233
+ pythinker # start the interactive TUI
234
+ ```
235
+
236
+ > **In-app updates** โ€” `pythinker update` queries the GitHub Releases API and
237
+ > re-runs the right installer for your build with SHA-256 verification. Set
238
+ > `PYTHINKER_CLI_NO_AUTO_UPDATE=1` to disable the proactive startup check.
239
+
240
+ ---
241
+
242
+ ### ๐ŸชŸ Windows โ€” native installer
243
+
244
+ `PythinkerSetup-0.42.0.exe` is a signed* Inno Setup wizard. Installs per-user
245
+ into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
246
+ PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
247
+ the change. **No UAC prompt.**
248
+
249
+ ```powershell
250
+ # One-line install (downloads the native .exe, verifies SHA-256, runs per-user)
251
+ irm https://pythinker.com/install.ps1 | iex
252
+
253
+ # Or manually download the installer + checksum from the Releases page,
254
+ # verify with Get-FileHash, then run:
255
+ .\PythinkerSetup-0.42.0.exe
256
+
257
+ # Open a fresh PowerShell
258
+ pythinker --version
259
+ ```
260
+
261
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.42.0.exe /ALLUSERS`
262
+ installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
263
+
264
+ **Upgrade:** `pythinker update` from inside the running app โ€” it downloads
265
+ the newest installer, verifies SHA-256, and launches the signed Inno installer
266
+ with visible progress (`/SILENT /NORESTART /CURRENTUSER /CLOSEAPPLICATIONS /NORESTARTAPPLICATIONS`).
267
+
268
+ **Uninstall:** Apps & Features โ†’ *Pythinker Code* โ†’ Uninstall reverts both
269
+ the files and the PATH edit.
270
+
271
+ > ๐Ÿ›ก **First-launch SmartScreen warning** โ€” \*until the Authenticode cert is
272
+ > provisioned in CI, the installer ships unsigned and Windows shows
273
+ > *"Windows protected your PC."* Click **More info โ†’ Run anyway**. Use the
274
+ > published `.sha256` as your integrity check until signing comes online.
275
+
276
+ ---
277
+
278
+ ### <img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> โ€” Homebrew tap
279
+
280
+ ```sh
281
+ # 1. Install
282
+ brew install Pythoughts-labs/pythinker/pythinker-code
283
+ # Homebrew โ‰ฅ 5 may refuse the untrusted tap; trust it once, then re-run:
284
+ # brew trust pythoughts-labs/pythinker
285
+
286
+ # 2. Verify
287
+ pythinker --version
288
+ which pythinker # -> /opt/homebrew/bin/pythinker (Apple Silicon)
289
+ # or /usr/local/bin/pythinker (Intel)
290
+ ```
291
+
292
+ Works on **Apple Silicon and Intel** from the same native GitHub Release
293
+ tarballs used by the curl installer. The tap auto-publishes a fresh formula on
294
+ every Pythinker release, so `brew upgrade pythinker-code` always finds the
295
+ latest version.
296
+
297
+ **Upgrade:** `brew upgrade pythinker-code` (Homebrew packages don't
298
+ auto-update; run this whenever you want the latest).
299
+
300
+ > **Untrusted-tap refusal** โ€” Homebrew โ‰ฅ 5 (with `HOMEBREW_REQUIRE_TAP_TRUST`)
301
+ > refuses third-party taps until you trust them once:
302
+ > `brew trust pythoughts-labs/pythinker`. The in-app updater detects the
303
+ > refusal and offers to run it for you.
304
+
305
+ **Uninstall:** `brew uninstall pythinker-code && brew untap Pythoughts-labs/pythinker`.
306
+
307
+ > The tap repo is [Pythoughts-labs/homebrew-pythinker](https://github.com/Pythoughts-labs/homebrew-pythinker)
308
+ > โ€” auto-maintained, do not hand-edit.
309
+
310
+ ---
311
+
312
+ ### <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> โ€” system packages
313
+
314
+ Native `.deb` and `.rpm` packages for both `x86_64` and `aarch64` are
315
+ attached to every GitHub Release.
316
+
317
+ ```sh
318
+ # Debian / Ubuntu (x86_64)
319
+ sudo dpkg -i pythinker-code_0.42.0_amd64.deb
320
+ sudo apt-get install -f # only if dpkg reports missing deps
321
+
322
+ # Debian / Ubuntu (ARM64)
323
+ sudo dpkg -i pythinker-code_0.42.0_arm64.deb
324
+
325
+ # Fedora / RHEL / openSUSE (x86_64)
326
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.x86_64.rpm
327
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.x86_64.rpm.sha256
328
+ sha256sum -c pythinker-code-0.42.0.x86_64.rpm.sha256
329
+ # Fedora / RHEL:
330
+ sudo dnf install ./pythinker-code-0.42.0.x86_64.rpm
331
+ # openSUSE:
332
+ sudo zypper install ./pythinker-code-0.42.0.x86_64.rpm
333
+
334
+ # Fedora / RHEL (aarch64)
335
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.aarch64.rpm
336
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.aarch64.rpm.sha256
337
+ sha256sum -c pythinker-code-0.42.0.aarch64.rpm.sha256
338
+ sudo dnf install ./pythinker-code-0.42.0.aarch64.rpm
339
+ ```
340
+
341
+ Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
342
+ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
343
+
344
+ **Verify before install:**
345
+
346
+ ```sh
347
+ sha256sum -c pythinker-code_0.42.0_amd64.deb.sha256 # Debian/Ubuntu
348
+ sha256sum -c pythinker-code-0.42.0.x86_64.rpm.sha256 # Fedora/RHEL
349
+ ```
350
+
351
+ **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
352
+ `dnf install` over it. Or run `pythinker update` from inside the running
353
+ app โ€” it'll fetch the matching new package and prompt for sudo to install.
354
+
355
+ **Uninstall:**
356
+
357
+ ```sh
358
+ sudo dpkg -r pythinker-code # Debian/Ubuntu
359
+ sudo rpm -e pythinker-code # Fedora/RHEL
360
+ ```
361
+
362
+ ---
363
+
364
+ ### <img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> โ€” curl-bash native installer
365
+
366
+ For containers, fresh VMs, or any host without a system package manager.
367
+ The canonical `https://pythinker.com/install.sh` endpoint is backed by
368
+ [`scripts/install-native.sh`](./scripts/install-native.sh). It serves shell
369
+ script content directly, detects your OS + arch, downloads the matching
370
+ PyInstaller-frozen tarball, verifies its SHA-256, and lands the single binary
371
+ at `~/.local/bin/pythinker`.
372
+
373
+ ```sh
374
+ # Latest release
375
+ curl -fsSL https://pythinker.com/install.sh | bash
376
+
377
+ # Pin a specific version
378
+ curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.27.0
379
+
380
+ # Custom prefix (defaults to $HOME/.local)
381
+ curl -fsSL https://pythinker.com/install.sh | bash -s -- --prefix /opt/pythinker
382
+ ```
383
+
384
+ Host `/install.sh` with:
385
+
386
+ ```http
387
+ Content-Type: text/x-shellscript; charset=utf-8
388
+ Cache-Control: public, max-age=300, s-maxage=900, stale-if-error=86400
389
+ ```
390
+
391
+ Use long immutable caching only for versioned release artifact URLs, for
392
+ example `Cache-Control: public, max-age=31536000, immutable` on fixed-tag
393
+ assets.
394
+
395
+ Supported targets:
396
+
397
+ | `uname -s / -m` | Tarball asset |
398
+ |---|---|
399
+ | Linux / x86_64 | `pythinker-<version>-x86_64-unknown-linux-gnu.tar.gz` |
400
+ | Linux / aarch64 | `pythinker-<version>-aarch64-unknown-linux-gnu.tar.gz` |
401
+ | Darwin / arm64 | `pythinker-<version>-aarch64-apple-darwin.tar.gz` |
402
+ | Darwin / x86_64 | `pythinker-<version>-x86_64-apple-darwin.tar.gz` |
403
+
404
+ The script prints PATH guidance if `~/.local/bin` isn't already on your
405
+ `$PATH`.
406
+
407
+ **Uninstall:** `rm ~/.local/bin/pythinker`.
408
+
409
+ ### ๐Ÿ Python fallback
410
+
411
+ Use the Python package only when a native installer is not available for your
412
+ environment:
413
+
414
+ ```sh
415
+ pip install pythinker-code
416
+ ```
417
+
418
+ Native installs remain the supported path for new users and for in-app updates.
419
+
420
+ ### ๐Ÿ” Authenticate (optional)
421
+
422
+ For hosted Pythinker models or ACP terminal auth:
423
+
424
+ ```sh
425
+ pythinker login
426
+ ```
427
+
428
+ ### ๐Ÿ’ฌ Try it out
429
+
430
+ ```sh
431
+ # Interactive session
432
+ pythinker
433
+
434
+ # One-shot prompt
435
+ pythinker --prompt "summarize this repository and suggest the next test to add"
436
+
437
+ # Pick a specific model
438
+ pythinker --model openai/gpt-5.5
439
+
440
+ # Inline config override
441
+ pythinker --config '{"default_thinking": true}'
442
+ ```
443
+
444
+ ---
445
+
446
+ ## ๐Ÿ  Using Local Models (LM Studio & Ollama)
447
+
448
+ Run Pythinker entirely on your own machine โ€” no API key, no cloud. Pythinker speaks each runtime's OpenAI-compatible API, so tools, streaming, JSON mode, vision, and `reasoning_effort` all work the same as with hosted providers.
449
+
450
+ ### LM Studio
451
+
452
+ **1. Set up LM Studio.**
453
+ - Install [LM Studio](https://lmstudio.ai/) and download at least one chat model.
454
+ - In the LM Studio app, open the model and **raise its Context Length** (gear icon โ†’ Context Length). See [Context length matters](#context-length-matters) below.
455
+ - Start the server: **Developer โ†’ Status: Running** (or `lms server start --port 1234`).
456
+
457
+ **2. Connect Pythinker.**
458
+ ```sh
459
+ pythinker login --lm-studio
460
+ ```
461
+
462
+ This auto-discovers every chat-capable model loaded in LM Studio, registers each as `lm-studio/<model-id>`, and picks the largest-context one as your default. Embedding models are filtered out.
463
+
464
+ **3. Use it.**
465
+ ```sh
466
+ # Default LM Studio model
467
+ pythinker -p "explain quicksort"
468
+
469
+ # Specific model
470
+ pythinker -m lm-studio/qwen/qwen3-coder-next -p "write a python http server"
471
+
472
+ # Interactive shell, then switch models with /model
473
+ pythinker
474
+ ```
475
+
476
+ **4. Disconnect.**
477
+ ```sh
478
+ pythinker logout --lm-studio
479
+ ```
480
+
481
+ ### Ollama
482
+
483
+ ```sh
484
+ # 1. start the server in one terminal
485
+ ollama serve
486
+
487
+ # 2. pull a model
488
+ ollama pull llama3.1:8b
489
+
490
+ # 3. connect Pythinker
491
+ pythinker login --ollama
492
+
493
+ # 4. use it
494
+ pythinker -p "explain monad transformers"
495
+ pythinker -m ollama/llama3.1:8b -p "..."
496
+ pythinker logout --ollama
497
+ ```
498
+
499
+ Discovery uses Ollama's `/api/tags` for the model list and `/api/show` per model to read the real context window.
500
+
501
+ ### Remote LM Studio / Ollama (LAN host or alternate port)
502
+
503
+ ```sh
504
+ pythinker login --lm-studio --base-url http://192.168.1.10:1234/v1
505
+ pythinker login --ollama --base-url http://lan-box:11434/v1
506
+ ```
507
+
508
+ The override is saved in your config and used by every subsequent run.
509
+
510
+ ### From inside the interactive shell
511
+
512
+ The same wiring is available as slash commands:
513
+
514
+ ```
515
+ /login lm-studio # or /login lmstudio (no dash also accepted)
516
+ /login ollama
517
+ /logout lm-studio
518
+ /logout ollama
519
+ /login # opens a chooser; entries 9 and 10 are the local providers
520
+ /model lm-studio/google/gemma-4-e4b # switch model mid-session
521
+ ```
522
+
523
+ ### <a id="context-length-matters"></a>โš ๏ธ Context length matters (a common gotcha)
524
+
525
+ Pythinker's agent prompt โ€” system instructions + tool schemas + skills + your message + recent history โ€” is large. **Tens of thousands of tokens before you've even sent your first message.**
526
+
527
+ LM Studio loads a model with a small default context window (often `4096`). If you start chatting against that, you'll see:
528
+
529
+ ```
530
+ LLM provider error: Error: The number of tokens to keep from the initial
531
+ prompt is greater than the context length (n_keep: 16690 >= n_ctx: 4096).
532
+ ```
533
+
534
+ The shell now prints a friendly recovery hint when this happens, but **the cure is in LM Studio**:
535
+
536
+ 1. In LM Studio, open the model in the **Chat** tab and click the **gear/settings** icon (or **My Models โ†’ Edit**).
537
+ 2. Set **Context Length** to at least **`32768`**, and prefer **`131072`** if your VRAM allows. *Practical experience: 64k still triggers errors during longer sessions; 128k is a safer floor.*
538
+ 3. Reload the model (LM Studio prompts you).
539
+ 4. Restart Pythinker so it picks up the new state (`Ctrl+D` then `pythinker`, or `pythinker -r <session-id>` to resume).
540
+
541
+ **Tip:** the bigger you set the context, the more VRAM the model uses. If you OOM, try a smaller quantization (e.g., Q4_K_M instead of Q8_0) or a smaller model variant.
542
+
543
+ Ollama configures context per-request and Pythinker reads the model's max from `/api/show`, so this gotcha is mostly LM-Studio-specific.
544
+
545
+ ### VRAM-friendly model picks
546
+
547
+ Local models vary wildly in memory use. Rough guide on a 16 GB GPU (e.g., RTX 5080 mobile):
548
+
549
+ | Model size | Quant | Approx. VRAM | Fits 16 GB? |
550
+ |------------|-------|--------------|-------------|
551
+ | 2-4 B | Q4-Q8 | 2-4 GB | Yes, easily |
552
+ | 7-8 B | Q4 | 5-6 GB | Yes |
553
+ | 7-8 B | Q8 | 8-9 GB | Yes |
554
+ | 13-14 B | Q4 | 8-10 GB | Yes |
555
+ | 27-31 B | Q4 | 17-20 GB | Tight / no |
556
+ | 27-31 B | Q8 | 30-35 GB | No |
557
+
558
+ If LM Studio errors with `Failed to load model`, you've exceeded VRAM โ€” pick a smaller model or lower-bit quantization.
559
+
560
+ ### Environment variables
561
+
562
+ These override the defaults at both login and runtime:
563
+
564
+ | Variable | Purpose |
565
+ |----------|---------|
566
+ | `LM_STUDIO_BASE_URL` | Override `http://localhost:1234/v1` |
567
+ | `LM_STUDIO_API_KEY` | Set if you've enabled token auth in LM Studio |
568
+ | `OLLAMA_BASE_URL` | Override `http://localhost:11434/v1` |
569
+ | `OLLAMA_API_KEY` | Rarely needed (Ollama is unauthenticated by default) |
570
+
571
+ Example:
572
+ ```sh
573
+ LM_STUDIO_BASE_URL=http://workstation.lan:1234/v1 pythinker -p "..."
574
+ ```
575
+
576
+ ### Refreshing the model list
577
+
578
+ If you load/unload models in LM Studio (or `ollama pull/rm`), re-run login to refresh:
579
+
580
+ ```sh
581
+ pythinker login --lm-studio # or --ollama
582
+ ```
583
+
584
+ (Pythinker intentionally does NOT auto-refresh local providers in the background โ€” login owns that state, so manual edits to your config aren't silently overwritten.)
585
+
586
+ ---
587
+
588
+ ## ๐Ÿงฉ IDE Integration via ACP
589
+
590
+ Pythinker speaks [**Agent Client Protocol**](https://github.com/agentclientprotocol/agent-client-protocol) natively. Point your ACP-compatible editor at `pythinker acp` and you get a multi-session agent server inside your IDE.
591
+
592
+ <details>
593
+ <summary><b>๐Ÿ“ Configuration for Zed / JetBrains</b></summary>
594
+
595
+ ```json
596
+ {
597
+ "agent_servers": {
598
+ "Pythinker Code": {
599
+ "type": "custom",
600
+ "command": "pythinker",
601
+ "args": ["acp"],
602
+ "env": {}
603
+ }
604
+ }
605
+ }
606
+ ```
607
+
608
+ </details>
609
+
610
+ The ACP server provides:
611
+
612
+ | Capability | Description |
613
+ |---|---|
614
+ | ๐Ÿ”‘ **Terminal auth** | `pythinker login` flow exposed to the IDE |
615
+ | ๐Ÿ“‚ **Session listing & resume** | Pick up where you left off |
616
+ | ๐Ÿ”„ **Hot model swap** | Change models for a running ACP session |
617
+
618
+ <div align="center">
619
+ <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/acp-integration.gif" alt="ACP IDE integration demo" width="860">
620
+ </div>
621
+
622
+ ---
623
+
624
+ ## ๐Ÿ”Œ MCP Tooling
625
+
626
+ Pythinker loads [Model Context Protocol](https://modelcontextprotocol.io/) tools from persistent config or ad-hoc files. Same tools, every agent โ€” no rewriting.
627
+
628
+ ### ๐Ÿ› ๏ธ Manage persistent MCP servers
629
+
630
+ ```sh
631
+ # ๐Ÿ“š Context7 stdio server (positional form: NAME -- COMMAND)
632
+ pythinker mcp add context7 -- npx -y @upstash/context7-mcp --api-key YOUR-API-KEY
633
+ # Added MCP server 'context7' to ~/.pythinker/mcp.json
634
+
635
+ # ๐ŸŒ Streamable HTTP server with API key
636
+ pythinker mcp add --transport http docs https://example.com/mcp \
637
+ --header "API_KEY: your-key"
638
+
639
+ # ๐Ÿ” Streamable HTTP server with OAuth
640
+ pythinker mcp add --transport http --auth oauth linear https://mcp.linear.app/mcp
641
+
642
+ # ๐Ÿ’ป stdio server with explicit transport
643
+ pythinker mcp add --transport stdio chrome-devtools -- npx chrome-devtools-mcp@latest
644
+
645
+ # ๐Ÿ“‹ List, authorize, test, and remove
646
+ pythinker mcp list
647
+ pythinker mcp auth linear
648
+ pythinker mcp test chrome-devtools
649
+ pythinker mcp remove chrome-devtools
650
+ ```
651
+
652
+ ### ๐Ÿ“„ Use an ad-hoc MCP config file
653
+
654
+ ```json
655
+ {
656
+ "mcpServers": {
657
+ "context7": {
658
+ "url": "https://mcp.context7.com/mcp",
659
+ "headers": {
660
+ "CONTEXT7_API_KEY": "YOUR_API_KEY"
661
+ }
662
+ },
663
+ "chrome-devtools": {
664
+ "command": "npx",
665
+ "args": ["-y", "chrome-devtools-mcp@latest"]
666
+ }
667
+ }
668
+ }
669
+ ```
670
+
671
+ ```sh
672
+ pythinker --mcp-config-file /path/to/mcp.json
673
+ ```
674
+
675
+ ---
676
+
677
+ ## ๐Ÿงฌ Extensibility
678
+
679
+ Pythinker is a small, extensible runtime โ€” not a monolith. Build on it.
680
+
681
+ | Extension Point | What it does | Where to look |
682
+ |---|---|---|
683
+ | ๐Ÿค– **Agents & subagents** | YAML specs define tools, prompts, and built-in subagent types | `src/pythinker_code/agents/` |
684
+ | ๐ŸŽ“ **Skills** | `/skill:<name>` loads reusable instructions on demand | bundled & user-defined |
685
+ | ๐ŸŒŠ **Flows** | `/flow:<name>` executes bundled prompt flows | bundled & user-defined |
686
+ | ๐Ÿช **Hooks** | Observe or block tool execution; integrate policy or automation | hook events API |
687
+ | ๐Ÿงฉ **Plugins** | Installable extension packages | `pythinker plugin` |
688
+
689
+ ---
690
+
691
+ ## ๐Ÿ—๏ธ Architecture
692
+
693
+ <div align="center">
694
+ <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/Architecture.webp" alt="Pythinker Code architecture diagram" width="860">
695
+ </div>
696
+
697
+ ---
698
+
699
+ ## ๐Ÿ” Privacy & Telemetry
700
+
701
+ Pythinker is the **agent framework**, not the LLM. You bring your own API key
702
+ (OpenAI, Anthropic, your local LM Studio model, etc.); your prompts and the
703
+ model's responses go directly between your terminal and the model provider you
704
+ configured. Pythinker never sees, stores, or forwards them.
705
+
706
+ If you opt in, Pythinker can collect a small amount of **diagnostic
707
+ telemetry** about how the agent runs to improve the framework itself. It's
708
+ strictly anonymous, never includes your prompts, model output, file contents,
709
+ file paths, or any user-identifying data. Two channels:
710
+
711
+ | Channel | What lands there | Endpoint |
712
+ |---|---|---|
713
+ | **Errors** (Sentry-protocol) | Unhandled exceptions and crash stack traces, with absolute paths above `site-packages/` rewritten to `<env>/` so home directories don't leak | `errors.pythinker.com` (self-hosted Bugsink) |
714
+ | **Traces + structured logs** (OpenTelemetry) | Lifecycle events (`session_started`, `started`, `model_switch`), agent-loop spans (`pythinker.turn` / `pythinker.llm` / `pythinker.tool`), and per-event counters | `otel.pythinker.com` (self-hosted SigNoz) |
715
+
716
+ ### What we collect
717
+
718
+ - **Lifecycle events**: session start, command-line flags actually used (booleans only), startup timing, model name (just the identifier, e.g. `claude-opus-4-7`), thinking-mode toggle, plan-mode toggle.
719
+ - **Agent-loop spans**: turn duration, step count, stop reason (`no_tool_calls` / `max_steps` / `error`), tool name (`Read`, `Bash`, `Edit`, โ€ฆ), tool success/failure, tool duration, LLM call duration, input/output token *counts* (numbers โ€” never the content).
720
+ - **Crashes**: exception class name, scrubbed stack trace, library versions. We do **not** send local variable values.
721
+ - **Static context**: pythinker version, OS family, Python version, terminal type (`TERM_PROGRAM`), CI flag (`CI` env var presence), locale.
722
+ - **A persistent, random `device_id`** so we can count "how many distinct installs" without identifying a person.
723
+
724
+ ### What we never collect
725
+
726
+ - Your prompts, the model's responses, or any conversation content
727
+ - File contents, file paths, working directory names, or workspace structure
728
+ - Your API keys, OAuth tokens, environment variables
729
+ - Your real name, email, IP address, hostname (host name field is dropped at the edge collector)
730
+ - Tool arguments (e.g. what file you read, what command you ran)
731
+
732
+ ### Turning it off
733
+
734
+ Telemetry is on by default. To turn it off:
735
+
736
+ ```sh
737
+ # 1. Per-invocation CLI flag
738
+ pythinker --no-telemetry
739
+
740
+ # 2. Environment variable (works in shells, .env files, CI configs)
741
+ export PYTHINKER_DISABLE_TELEMETRY=1
742
+ pythinker
743
+
744
+ # 3. Permanently in your config file (~/.pythinker/config.toml)
745
+ [default]
746
+ telemetry = false
747
+ ```
748
+
749
+ When telemetry is disabled, Pythinker short-circuits Sentry initialization,
750
+ OTel exporter creation, and the in-process event sink. No network requests are
751
+ made to the telemetry endpoints.
752
+
753
+ ### Pointing telemetry at your own infrastructure
754
+
755
+ If you operate pythinker for a team and want telemetry routed to your own
756
+ SigNoz / Bugsink instead, override the endpoints via environment variables:
757
+
758
+ ```sh
759
+ export PYTHINKER_SENTRY_DSN="https://<key>@your-bugsink.example.com/<project>"
760
+ export PYTHINKER_OTEL_ENDPOINT="https://your-otel-collector.example.com"
761
+ export PYTHINKER_OTEL_TOKEN="<your bearer token>"
762
+ ```
763
+
764
+ The defaults point at infrastructure operated by the pythinker maintainers and
765
+ are used automatically unless you turn telemetry off.
766
+
767
+ ---
768
+
769
+ ## ๐Ÿ› ๏ธ Development
770
+
771
+ ### ๐Ÿ Prepare the workspace
772
+
773
+ ```sh
774
+ git clone https://github.com/Pythoughts-labs/pythinker-code.git
775
+ cd pythinker-code
776
+ make prepare
777
+ ```
778
+
779
+ ### ๐Ÿงฐ Common commands
780
+
781
+ <table>
782
+ <tr>
783
+ <td valign="top">
784
+
785
+ **โ–ถ๏ธ Run & iterate**
786
+ ```sh
787
+ uv run pythinker # CLI from source
788
+ make format # format all packages
789
+ make check # lint + type-check
790
+ ```
791
+
792
+ </td>
793
+ <td valign="top">
794
+
795
+ **๐Ÿงช Test**
796
+ ```sh
797
+ make test # all unit + e2e tests
798
+ make ai-test # AI-driven tests
799
+ make test-pythinker-code # CLI only
800
+ make test-pythinker-core # Core only
801
+ make test-pythinker-host # Host only
802
+ make test-pythinker-sdk # SDK only
803
+ ```
804
+
805
+ </td>
806
+ </tr>
807
+ <tr>
808
+ <td valign="top">
809
+
810
+ **๐ŸŒ Frontends**
811
+ ```sh
812
+ make web-back # web backend
813
+ make web-front # web frontend
814
+ make vis-back # vis backend
815
+ make vis-front # vis frontend
816
+ ```
817
+
818
+ </td>
819
+ <td valign="top">
820
+
821
+ **๐Ÿ“ฆ Build**
822
+ ```sh
823
+ make build # Python packages
824
+ make build-bin # standalone binary
825
+ make help # all targets
826
+ ```
827
+
828
+ </td>
829
+ </tr>
830
+ </table>
831
+
832
+ > ๐Ÿ’ก `make build` and `make build-bin` build and embed the web and visualization frontends before packaging.
833
+
834
+ ---
835
+
836
+ ## ๐Ÿ—‚๏ธ Project Layout
837
+
838
+ ```
839
+ pythinker-code/
840
+ โ”œโ”€โ”€ ๐Ÿ“ฆ src/pythinker_code/ CLI runtime ยท tools ยท UIs ยท ACP ยท MCP ยท hooks ยท plugins ยท skills ยท web ยท vis backends
841
+ โ”œโ”€โ”€ ๐Ÿงฑ packages/
842
+ โ”‚ โ”œโ”€โ”€ pythinker-core/ Provider-agnostic message, tool, and chat-provider abstractions
843
+ โ”‚ โ”œโ”€โ”€ pythinker-host/ Local/remote host filesystem and command execution
844
+ โ”‚ โ””โ”€โ”€ pythinker-code/ Console-script distribution package
845
+ โ”œโ”€โ”€ ๐Ÿงฐ sdks/pythinker-sdk/ Python SDK
846
+ โ””โ”€โ”€ ๐Ÿงช tests/ ยท tests_e2e/ ยท tests_ai/ Unit ยท wire/CLI e2e ยท AI-driven test suites
847
+ ```
848
+
849
+ ---
850
+
851
+ ## ๐Ÿค Contributing
852
+
853
+ Contributions are warmly welcome โ€” bug reports, PRs, plugins, skills, and docs all help.
854
+
855
+ - ๐Ÿ“– Start with [`CONTRIBUTING.md`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/CONTRIBUTING.md)
856
+ - ๐Ÿ” See [`SECURITY.md`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/SECURITY.md) for responsible disclosure
857
+ - ๐Ÿ“œ Skim [`AGENTS.md`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/AGENTS.md) for the agent design notes
858
+
859
+ If Pythinker helps you, **a โญ on GitHub goes a long way.**
860
+
861
+ ---
862
+
863
+ ## ๐Ÿ“œ License
864
+
865
+ Distributed under the **Apache-2.0 License**. See [`LICENSE`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/LICENSE) for the full text and [`NOTICE`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/NOTICE) for attributions.
866
+
867
+ <br />
868
+
869
+ <div align="center">
870
+
871
+ **Built with โค๏ธ for engineers who live in the terminal.**
872
+
873
+ [๐ŸŒ pythinker.com](https://pythinker.com) &nbsp;ยท&nbsp;
874
+ [๐Ÿ“ฆ PyPI](https://pypi.org/project/pythinker-code/) &nbsp;ยท&nbsp;
875
+ [๐Ÿ™ GitHub](https://github.com/Pythoughts-labs/pythinker-code) &nbsp;ยท&nbsp;
876
+ [๐Ÿงฉ ACP](https://github.com/agentclientprotocol/agent-client-protocol) &nbsp;ยท&nbsp;
877
+ [๐Ÿ”Œ MCP](https://modelcontextprotocol.io/)
878
+
879
+ <p align="center">
880
+ <em>Thanks for visiting โœจ Pythinker! Viewing this README does not trigger telemetry.</em>
881
+ </p>
882
+
883
+ </div>