notebook-intelligence 5.2.0__tar.gz → 5.2.1__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 (230) hide show
  1. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/PKG-INFO +1 -1
  2. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/_version.py +1 -1
  3. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/api.py +31 -5
  4. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/claude.py +10 -1
  5. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/extension.py +15 -5
  6. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/labextension/package.json +2 -2
  7. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/labextension/schemas/@plmbr/notebook-intelligence/package.json.orig +1 -1
  8. notebook_intelligence-5.2.1/notebook_intelligence/labextension/static/490.ca1d1006275ec50e58e8.js +1 -0
  9. notebook_intelligence-5.2.1/notebook_intelligence/labextension/static/537.211b1ccdcc268aa3fd2d.js +1 -0
  10. notebook_intelligence-5.2.0/notebook_intelligence/labextension/static/745.f63673e66e02301096f4.js → notebook_intelligence-5.2.1/notebook_intelligence/labextension/static/745.e077633fb1e31ec9da96.js +2 -2
  11. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/labextension/static/editor.worker.js +1 -1
  12. notebook_intelligence-5.2.1/notebook_intelligence/labextension/static/remoteEntry.66f4a7743a2091e5cae6.js +1 -0
  13. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/package.json +1 -1
  14. notebook_intelligence-5.2.1/tests/test_user_input_wait.py +79 -0
  15. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_ws_callback_handler_leak.py +40 -3
  16. notebook_intelligence-5.2.0/notebook_intelligence/labextension/static/490.0bb3c8f42aa0d46ba19e.js +0 -1
  17. notebook_intelligence-5.2.0/notebook_intelligence/labextension/static/537.568c2bffd0f1d082b034.js +0 -1
  18. notebook_intelligence-5.2.0/notebook_intelligence/labextension/static/remoteEntry.542e0ded69d4368a8e30.js +0 -1
  19. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.copier-answers.yml +0 -0
  20. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.editorconfig +0 -0
  21. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.gitignore +0 -0
  22. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.husky/_/.gitignore +0 -0
  23. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.husky/_/applypatch-msg +0 -0
  24. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.husky/_/commit-msg +0 -0
  25. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.husky/_/h +0 -0
  26. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.husky/_/husky.sh +0 -0
  27. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.husky/_/post-applypatch +0 -0
  28. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.husky/_/post-checkout +0 -0
  29. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.husky/_/post-commit +0 -0
  30. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.husky/_/post-merge +0 -0
  31. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.husky/_/post-rewrite +0 -0
  32. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.husky/_/pre-applypatch +0 -0
  33. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.husky/_/pre-auto-gc +0 -0
  34. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.husky/_/pre-commit +0 -0
  35. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.husky/_/pre-merge-commit +0 -0
  36. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.husky/_/pre-push +0 -0
  37. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.husky/_/pre-rebase +0 -0
  38. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.husky/_/prepare-commit-msg +0 -0
  39. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.husky/pre-commit +0 -0
  40. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.prettierignore +0 -0
  41. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.vscode/extensions.json +0 -0
  42. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.vscode/settings.json +0 -0
  43. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/.yarnrc.yml +0 -0
  44. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/CHANGELOG.md +0 -0
  45. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/CONTRIBUTING.md +0 -0
  46. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/LICENSE +0 -0
  47. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/PRIVACY.md +0 -0
  48. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/README.md +0 -0
  49. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/RELEASE.md +0 -0
  50. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/SECURITY.md +0 -0
  51. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/benchmarks/claude_perf/README.md +0 -0
  52. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/benchmarks/claude_perf/bench_nbi_ws.py +0 -0
  53. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/benchmarks/claude_perf/bench_runner.py +0 -0
  54. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/benchmarks/claude_perf/bench_terminal.py +0 -0
  55. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/benchmarks/claude_perf/prompts.py +0 -0
  56. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/benchmarks/claude_perf/report.py +0 -0
  57. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/benchmarks/claude_perf/stats.py +0 -0
  58. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/docs/admin-guide.md +0 -0
  59. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/docs/admin-tour-config.md +0 -0
  60. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/docs/rulesets.md +0 -0
  61. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/docs/skills.md +0 -0
  62. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/docs/troubleshooting.md +0 -0
  63. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/install.json +0 -0
  64. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/jest.config.js +0 -0
  65. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/jupyter-config/server-config/notebook_intelligence.json +0 -0
  66. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/__init__.py +0 -0
  67. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/_claude_cli.py +0 -0
  68. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/ai_service_manager.py +0 -0
  69. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/base_chat_participant.py +0 -0
  70. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/built_in_toolsets.py +0 -0
  71. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/cell_output.py +0 -0
  72. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/claude_mcp_manager.py +0 -0
  73. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/claude_sessions.py +0 -0
  74. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/config.py +0 -0
  75. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/context_factory.py +0 -0
  76. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/feature_flags.py +0 -0
  77. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/github_copilot.py +0 -0
  78. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/github_copilot_chat_participant.py +0 -0
  79. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/labextension/schemas/@plmbr/notebook-intelligence/plugin.json +0 -0
  80. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/labextension/static/196.da0c2020639344d5c419.js +0 -0
  81. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/labextension/static/1b55f12eca93ba6743e7.ttf +0 -0
  82. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/labextension/static/327.47473c656f6c27efa1dc.js +0 -0
  83. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/labextension/static/327.47473c656f6c27efa1dc.js.LICENSE.txt +0 -0
  84. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/labextension/static/631.f00d05d8305a78ec8301.js +0 -0
  85. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/labextension/static/671.1b1a53f5f75bff82950b.js +0 -0
  86. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/labextension/static/694.2ebfa9714301d9260bf0.js +0 -0
  87. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/labextension/static/728.14572b771377e7f3a104.js +0 -0
  88. /notebook_intelligence-5.2.0/notebook_intelligence/labextension/static/745.f63673e66e02301096f4.js.LICENSE.txt → /notebook_intelligence-5.2.1/notebook_intelligence/labextension/static/745.e077633fb1e31ec9da96.js.LICENSE.txt +0 -0
  89. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/labextension/static/977.b917f705175326af0e5d.js +0 -0
  90. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/labextension/static/be02dcbf2787b0b29ec8.module.wasm +0 -0
  91. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/labextension/static/e589c9ba04e3e5a90081.module.wasm +0 -0
  92. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/labextension/static/editor.worker.js.LICENSE.txt +0 -0
  93. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/labextension/static/style.js +0 -0
  94. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/labextension/static/third-party-licenses.json +0 -0
  95. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/llm_providers/github_copilot_llm_provider.py +0 -0
  96. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/llm_providers/litellm_compatible_llm_provider.py +0 -0
  97. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/llm_providers/ollama_llm_provider.py +0 -0
  98. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/llm_providers/openai_compatible_llm_provider.py +0 -0
  99. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/mcp_client.py +0 -0
  100. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/mcp_config_validation.py +0 -0
  101. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/mcp_manager.py +0 -0
  102. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/mcp_policy.py +0 -0
  103. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/plugin_manager.py +0 -0
  104. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/prompts.py +0 -0
  105. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/rule_injector.py +0 -0
  106. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/rule_manager.py +0 -0
  107. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/ruleset.py +0 -0
  108. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/skill_github_import.py +0 -0
  109. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/skill_manager.py +0 -0
  110. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/skill_manifest.py +0 -0
  111. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/skill_reconciler.py +0 -0
  112. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/skillset.py +0 -0
  113. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/tour_config.py +0 -0
  114. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/notebook_intelligence/util.py +0 -0
  115. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/pyproject.toml +0 -0
  116. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/schema/plugin.json +0 -0
  117. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/setup.py +0 -0
  118. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/conftest.py +0 -0
  119. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/fixtures/rules/01-test-global.md +0 -0
  120. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/fixtures/rules/02-test-security.md +0 -0
  121. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/fixtures/rules/03-invalid-rule.md +0 -0
  122. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/fixtures/rules/modes/agent/01-test-production.md +0 -0
  123. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/fixtures/rules/modes/ask/01-test-exploration.md +0 -0
  124. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/fixtures/rules/modes/inline-chat/01-test-quick.md +0 -0
  125. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_ai_service_manager_integration.py +0 -0
  126. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_api_hygiene.py +0 -0
  127. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_base_chat_participant_integration.py +0 -0
  128. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_builtin_file_read.py +0 -0
  129. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_builtin_toolset_cwd_sandbox.py +0 -0
  130. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_cell_output.py +0 -0
  131. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_cell_output_features_response.py +0 -0
  132. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_claude_client.py +0 -0
  133. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_claude_mcp_manager.py +0 -0
  134. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_claude_models.py +0 -0
  135. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_claude_sessions.py +0 -0
  136. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_claude_sessions_handler.py +0 -0
  137. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_claude_system_prompt.py +0 -0
  138. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_claude_tool_humanizer.py +0 -0
  139. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_claude_tool_path_sandbox.py +0 -0
  140. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_coding_agent_launchers.py +0 -0
  141. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_config_atomic_save.py +0 -0
  142. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_config_integration.py +0 -0
  143. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_context_factory.py +0 -0
  144. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_default_password_refusal.py +0 -0
  145. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_end_to_end_rule_integration.py +0 -0
  146. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_feature_flags.py +0 -0
  147. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_feedback.py +0 -0
  148. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_file_upload.py +0 -0
  149. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_github_copilot_llm_provider.py +0 -0
  150. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_github_copilot_user_data_mode.py +0 -0
  151. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_image_context.py +0 -0
  152. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_lazy_provider_imports.py +0 -0
  153. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_mcp_client_shim.py +0 -0
  154. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_mcp_config_validation.py +0 -0
  155. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_mcp_manager.py +0 -0
  156. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_mcp_manager_command_allowlist.py +0 -0
  157. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_mcp_policy.py +0 -0
  158. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_models.py +0 -0
  159. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_openai_compatible_llm_provider.py +0 -0
  160. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_permission_modes.py +0 -0
  161. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_plugin_manager.py +0 -0
  162. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_policy_gate.py +0 -0
  163. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_process_tree_teardown.py +0 -0
  164. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_redact_process_secrets.py +0 -0
  165. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_response_emitter.py +0 -0
  166. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_rule_auto_reload.py +0 -0
  167. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_rule_injector.py +0 -0
  168. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_rule_manager.py +0 -0
  169. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_safe_anchor_uri.py +0 -0
  170. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_skill_fetch_redirects.py +0 -0
  171. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_skill_github_import.py +0 -0
  172. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_skill_manager.py +0 -0
  173. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_skill_manifest.py +0 -0
  174. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_skill_reconciler.py +0 -0
  175. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_skills_handlers.py +0 -0
  176. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_tour_config.py +0 -0
  177. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_websocket_handler_integration.py +0 -0
  178. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/test_ws_handler_auth.py +0 -0
  179. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/__mocks__/jupyterlab-apputils.ts +0 -0
  180. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/__mocks__/jupyterlab-filebrowser.ts +0 -0
  181. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/__mocks__/svg.ts +0 -0
  182. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/__mocks__/tiktoken.ts +0 -0
  183. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/ask-user-question.test.tsx +0 -0
  184. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/cell-output-bundle.test.ts +0 -0
  185. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/cell-output-features.test.ts +0 -0
  186. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/cell-output-toolbar.test.ts +0 -0
  187. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/chat-progress-feedback.test.ts +0 -0
  188. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/checkbox.test.tsx +0 -0
  189. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/choose-workspace-directory.test.ts +0 -0
  190. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/claude-mcp-paste.test.ts +0 -0
  191. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/coding-agent-launchers.test.ts +0 -0
  192. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/launcher-picker.test.tsx +0 -0
  193. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/markdown-renderer.test.tsx +0 -0
  194. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/mcp-util.test.ts +0 -0
  195. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/notebook-generation.test.ts +0 -0
  196. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/open-file-refresh-watcher.test.ts +0 -0
  197. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/permission-mode-select.test.tsx +0 -0
  198. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/plugins-panel.test.tsx +0 -0
  199. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/safe-anchor.test.tsx +0 -0
  200. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/setup.ts +0 -0
  201. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/skill-wire-format.test.ts +0 -0
  202. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/task-target-notebook.test.ts +0 -0
  203. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/terminal-drag.test.ts +0 -0
  204. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/tool-call-card.test.tsx +0 -0
  205. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/tool-call-group.test.tsx +0 -0
  206. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/tool-call-stream.test.ts +0 -0
  207. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/tour-config.test.ts +0 -0
  208. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/tour-events.test.ts +0 -0
  209. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/tour-overlay.test.tsx +0 -0
  210. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/tour-state.test.ts +0 -0
  211. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/tsconfig.json +0 -0
  212. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/utils.test.ts +0 -0
  213. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tests/ts/workspace-skips.test.ts +0 -0
  214. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/tsconfig.json +0 -0
  215. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/ui-tests/.eslintrc.js +0 -0
  216. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/ui-tests/README.md +0 -0
  217. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/ui-tests/jupyter_server_test_config.py +0 -0
  218. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/ui-tests/package.json +0 -0
  219. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/ui-tests/playwright.config.ts +0 -0
  220. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/ui-tests/tests/cell-output.spec.ts +0 -0
  221. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/ui-tests/tests/chat-sidebar.spec.ts +0 -0
  222. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/ui-tests/tests/claude-mcp-patch.spec.ts +0 -0
  223. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/ui-tests/tests/extension.spec.ts +0 -0
  224. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/ui-tests/tests/helpers.ts +0 -0
  225. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/ui-tests/tests/launcher.spec.ts +0 -0
  226. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/ui-tests/tests/notebook-toolbar.spec.ts +0 -0
  227. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/ui-tests/tsconfig.json +0 -0
  228. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/ui-tests/yarn.lock +0 -0
  229. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/webpack.config.js +0 -0
  230. {notebook_intelligence-5.2.0 → notebook_intelligence-5.2.1}/yarn.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: notebook_intelligence
3
- Version: 5.2.0
3
+ Version: 5.2.1
4
4
  Summary: AI coding assistant for JupyterLab
5
5
  Project-URL: Homepage, https://github.com/plmbr/notebook-intelligence
6
6
  Project-URL: Bug Tracker, https://github.com/plmbr/notebook-intelligence/issues
@@ -1,4 +1,4 @@
1
1
  # This file is auto-generated by Hatchling. As such, do not:
2
2
  # - modify
3
3
  # - track in version control e.g. be sure to add to .gitignore
4
- __version__ = VERSION = '5.2.0'
4
+ __version__ = VERSION = '5.2.1'
@@ -2,6 +2,7 @@
2
2
 
3
3
  import asyncio
4
4
  import json
5
+ import time
5
6
  from typing import Any, Callable, Dict, Union, Optional
6
7
  from dataclasses import asdict, dataclass
7
8
  from enum import Enum
@@ -309,6 +310,24 @@ class ChatResponse:
309
310
  self._user_input_signal: SignalImpl = SignalImpl()
310
311
  self._run_ui_command_response_signal: SignalImpl = SignalImpl()
311
312
  self.participant_id = ''
313
+ # Cumulative wall-clock seconds spent blocked on a user reply (tool
314
+ # approval, plan confirm, AskUserQuestion), plus the start of any wait
315
+ # currently in progress. Consumers subtract this from a response
316
+ # timeout so a slow human approval isn't mistaken for an unresponsive
317
+ # agent, which previously timed out the turn and wedged the next one
318
+ # (issue #381).
319
+ self._user_input_wait_total = 0.0
320
+ self._user_input_wait_started = None
321
+
322
+ @property
323
+ def user_input_wait_seconds(self) -> float:
324
+ """Total time this response has spent awaiting user input, including
325
+ any wait still in progress."""
326
+ total = self._user_input_wait_total
327
+ started = self._user_input_wait_started
328
+ if started is not None:
329
+ total += time.time() - started
330
+ return total
312
331
 
313
332
  @property
314
333
  def message_id(self) -> str:
@@ -335,12 +354,19 @@ class ChatResponse:
335
354
  resp["data"] = data['data']
336
355
 
337
356
  response.user_input_signal.connect(_on_user_input)
357
+ response._user_input_wait_started = time.time()
338
358
 
339
- while True:
340
- if resp["data"] is not None:
341
- response.user_input_signal.disconnect(_on_user_input)
342
- return resp["data"]
343
- await asyncio.sleep(0.1)
359
+ try:
360
+ while True:
361
+ if resp["data"] is not None:
362
+ return resp["data"]
363
+ await asyncio.sleep(0.1)
364
+ finally:
365
+ response.user_input_signal.disconnect(_on_user_input)
366
+ started = response._user_input_wait_started
367
+ if started is not None:
368
+ response._user_input_wait_total += time.time() - started
369
+ response._user_input_wait_started = None
344
370
 
345
371
  async def run_ui_command(self, command: str, args: dict = {}) -> None:
346
372
  raise NotImplementedError
@@ -1175,6 +1175,12 @@ class ClaudeCodeClient():
1175
1175
 
1176
1176
  start_time = time.time()
1177
1177
  last_heartbeat = start_time
1178
+ # Time the agent spends blocked on a tool approval (or any user input)
1179
+ # must not count toward the response timeout: a slow human reply isn't
1180
+ # an unresponsive agent. Without this, a long approval wait timed out
1181
+ # the turn and left the worker mid-request, wedging later prompts
1182
+ # (issue #381).
1183
+ response_obj = event_args.get("response") if event_args else None
1178
1184
 
1179
1185
  try:
1180
1186
  while True:
@@ -1227,7 +1233,10 @@ class ClaudeCodeClient():
1227
1233
  "success": False,
1228
1234
  "error": "Claude agent is not running",
1229
1235
  }
1230
- if time.time() - start_time > CLAUDE_AGENT_CLIENT_RESPONSE_TIMEOUT:
1236
+ elapsed = time.time() - start_time
1237
+ if response_obj is not None:
1238
+ elapsed -= response_obj.user_input_wait_seconds
1239
+ if elapsed > CLAUDE_AGENT_CLIENT_RESPONSE_TIMEOUT:
1231
1240
  return {
1232
1241
  "data": None,
1233
1242
  "success": False,
@@ -2632,11 +2632,21 @@ class WebsocketCopilotHandler(WebSocketMixin, websocket.WebSocketHandler, Jupyte
2632
2632
  handlers.cancel_token.cancel_request()
2633
2633
 
2634
2634
  def on_close(self):
2635
- # Drop any handler entries whose worker threads outlive the
2636
- # websocket connection. The thread wrapper would clean these up
2637
- # on its own once the coro returns, but a long-running request
2638
- # left in-flight at disconnect would otherwise pin its emitter
2639
- # and cancel token for the lifetime of the worker.
2635
+ # Cancel any requests still in flight at disconnect, then drop their
2636
+ # handlers. Clearing alone isn't enough: a turn parked on a tool
2637
+ # approval no longer self-resolves via the response timeout (the
2638
+ # approval wait is excluded from it, #381), so without an explicit
2639
+ # cancel its worker thread and the Claude subprocess would spin until
2640
+ # the server restarts. Cancelling makes the poll loop tear the
2641
+ # subprocess down and return.
2642
+ # Snapshot first: a worker thread finishing its request pops its own
2643
+ # entry (see _run_request_thread), which would otherwise raise
2644
+ # "dictionary changed size during iteration" here on the IOLoop thread.
2645
+ for handlers in list(self._messageCallbackHandlers.values()):
2646
+ try:
2647
+ handlers.cancel_token.cancel_request()
2648
+ except Exception as e:
2649
+ log.warning(f"Error cancelling in-flight request on close: {e}")
2640
2650
  self._messageCallbackHandlers.clear()
2641
2651
 
2642
2652
  async def handle_inline_completions(prefix, suffix, language, filename, response_emitter, cancel_token):
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plmbr/notebook-intelligence",
3
- "version": "5.2.0",
3
+ "version": "5.2.1",
4
4
  "description": "AI coding assistant for JupyterLab",
5
5
  "keywords": [
6
6
  "AI",
@@ -152,7 +152,7 @@
152
152
  }
153
153
  },
154
154
  "_build": {
155
- "load": "static/remoteEntry.542e0ded69d4368a8e30.js",
155
+ "load": "static/remoteEntry.66f4a7743a2091e5cae6.js",
156
156
  "extension": "./extension",
157
157
  "style": "./style"
158
158
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plmbr/notebook-intelligence",
3
- "version": "5.2.0",
3
+ "version": "5.2.1",
4
4
  "description": "AI coding assistant for JupyterLab",
5
5
  "keywords": [
6
6
  "AI",