notebook-intelligence 5.3.1__tar.gz → 5.4.0a2__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.
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/PKG-INFO +29 -23
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/README.md +24 -19
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/docs/admin-guide.md +69 -52
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/_version.py +1 -1
- notebook_intelligence-5.4.0a2/notebook_intelligence/acp_agent.py +822 -0
- notebook_intelligence-5.4.0a2/notebook_intelligence/acp_mcp_server.py +89 -0
- notebook_intelligence-5.4.0a2/notebook_intelligence/acp_registry.py +159 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/ai_service_manager.py +71 -3
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/api.py +7 -5
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/claude.py +96 -6
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/config.py +11 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/extension.py +354 -22
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/feature_flags.py +43 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/labextension/package.json +18 -3
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/labextension/schemas/@plmbr/notebook-intelligence/package.json.orig +17 -2
- notebook_intelligence-5.4.0a2/notebook_intelligence/labextension/static/131.e0b8143601c58a3246a2.js +1 -0
- notebook_intelligence-5.4.0a2/notebook_intelligence/labextension/static/156.7e517ead254858a9eb50.js +1 -0
- notebook_intelligence-5.3.1/notebook_intelligence/labextension/static/326.7bbdffb7a0499a27928a.js → notebook_intelligence-5.4.0a2/notebook_intelligence/labextension/static/326.9fc28ccfe3ac71ac4b73.js +2 -2
- notebook_intelligence-5.4.0a2/notebook_intelligence/labextension/static/694.97c3499ce07ad99e125a.js +1 -0
- notebook_intelligence-5.4.0a2/notebook_intelligence/labextension/static/728.a39cd78dca4d4b0e93c3.js +1 -0
- notebook_intelligence-5.4.0a2/notebook_intelligence/labextension/static/768.7edd3110b64beb9041b7.js +1 -0
- notebook_intelligence-5.4.0a2/notebook_intelligence/labextension/static/976.7dffd54c5614c4e8083f.js +1 -0
- notebook_intelligence-5.4.0a2/notebook_intelligence/labextension/static/editor.worker.js +1407 -0
- notebook_intelligence-5.4.0a2/notebook_intelligence/labextension/static/remoteEntry.c195aa161960125d6a9d.js +1 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/labextension/static/third-party-licenses.json +29 -29
- notebook_intelligence-5.4.0a2/notebook_intelligence/mcp_ui_proxy.py +203 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/package.json +17 -2
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/pyproject.toml +18 -3
- notebook_intelligence-5.4.0a2/tests/test_acp_agent.py +488 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_ai_service_manager_integration.py +44 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_cell_output_features_response.py +45 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_image_context.py +12 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_websocket_handler_integration.py +10 -0
- notebook_intelligence-5.4.0a2/tests/ts/markdown-code-class.test.ts +29 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/yarn.lock +120 -88
- notebook_intelligence-5.3.1/notebook_intelligence/labextension/static/319.15af761e454a61953ddf.js +0 -1
- notebook_intelligence-5.3.1/notebook_intelligence/labextension/static/694.e1e90b407cd10bd17b8b.js +0 -1
- notebook_intelligence-5.3.1/notebook_intelligence/labextension/static/728.ad926d50b34f75e72a21.js +0 -1
- notebook_intelligence-5.3.1/notebook_intelligence/labextension/static/977.718985cfcf5d26eaa97f.js +0 -1
- notebook_intelligence-5.3.1/notebook_intelligence/labextension/static/editor.worker.js +0 -1407
- notebook_intelligence-5.3.1/notebook_intelligence/labextension/static/remoteEntry.603f6633fa64aacdff4c.js +0 -1
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.copier-answers.yml +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.editorconfig +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.gitignore +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.husky/_/.gitignore +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.husky/_/applypatch-msg +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.husky/_/commit-msg +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.husky/_/h +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.husky/_/husky.sh +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.husky/_/post-applypatch +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.husky/_/post-checkout +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.husky/_/post-commit +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.husky/_/post-merge +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.husky/_/post-rewrite +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.husky/_/pre-applypatch +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.husky/_/pre-auto-gc +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.husky/_/pre-commit +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.husky/_/pre-merge-commit +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.husky/_/pre-push +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.husky/_/pre-rebase +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.husky/_/prepare-commit-msg +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.husky/pre-commit +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.prettierignore +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.vscode/extensions.json +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.vscode/settings.json +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/.yarnrc.yml +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/CHANGELOG.md +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/CONTRIBUTING.md +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/LICENSE +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/PRIVACY.md +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/RELEASE.md +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/SECURITY.md +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/benchmarks/claude_perf/README.md +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/benchmarks/claude_perf/bench_nbi_ws.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/benchmarks/claude_perf/bench_runner.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/benchmarks/claude_perf/bench_terminal.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/benchmarks/claude_perf/prompts.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/benchmarks/claude_perf/report.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/benchmarks/claude_perf/stats.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/docs/admin-tour-config.md +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/docs/rulesets.md +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/docs/skills.md +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/docs/troubleshooting.md +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/install.json +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/jest.config.js +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/jupyter-config/server-config/notebook_intelligence.json +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/__init__.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/_claude_cli.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/base_chat_participant.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/built_in_toolsets.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/cell_output.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/claude_mcp_manager.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/claude_sessions.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/context_factory.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/github_copilot.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/github_copilot_chat_participant.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/labextension/schemas/@plmbr/notebook-intelligence/plugin.json +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/labextension/static/196.ae4c84cd4812d9d7cbcf.js +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/labextension/static/1b55f12eca93ba6743e7.ttf +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/labextension/static/24c0eed6cf7014abfb18.module.wasm +0 -0
- /notebook_intelligence-5.3.1/notebook_intelligence/labextension/static/326.7bbdffb7a0499a27928a.js.LICENSE.txt → /notebook_intelligence-5.4.0a2/notebook_intelligence/labextension/static/326.9fc28ccfe3ac71ac4b73.js.LICENSE.txt +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/labextension/static/537.e250b395dd56252f433b.js +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/labextension/static/631.c3b7a19d8e9bb293fff8.js +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/labextension/static/67.c8b2c6b35e88046e69ea.js +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/labextension/static/67.c8b2c6b35e88046e69ea.js.LICENSE.txt +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/labextension/static/671.dd4f3f162a9464547691.js +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/labextension/static/938a2c885cbaa713e543.module.wasm +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/labextension/static/editor.worker.js.LICENSE.txt +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/labextension/static/style.js +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/llm_providers/github_copilot_llm_provider.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/llm_providers/litellm_compatible_llm_provider.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/llm_providers/ollama_llm_provider.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/llm_providers/openai_compatible_llm_provider.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/mcp_client.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/mcp_config_validation.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/mcp_manager.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/mcp_policy.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/plugin_manager.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/prompts.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/rule_injector.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/rule_manager.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/ruleset.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/skill_github_import.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/skill_manager.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/skill_manifest.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/skill_reconciler.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/skillset.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/tour_config.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/notebook_intelligence/util.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/schema/plugin.json +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/setup.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/conftest.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/fixtures/rules/01-test-global.md +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/fixtures/rules/02-test-security.md +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/fixtures/rules/03-invalid-rule.md +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/fixtures/rules/modes/agent/01-test-production.md +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/fixtures/rules/modes/ask/01-test-exploration.md +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/fixtures/rules/modes/inline-chat/01-test-quick.md +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_api_hygiene.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_base_chat_participant_integration.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_builtin_file_read.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_builtin_search_files_sandbox.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_builtin_toolset_cwd_sandbox.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_cell_output.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_claude_client.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_claude_mcp_manager.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_claude_models.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_claude_sessions.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_claude_sessions_handler.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_claude_system_prompt.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_claude_tool_humanizer.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_claude_tool_path_sandbox.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_claude_turn_usage.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_coding_agent_launchers.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_config_atomic_save.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_config_integration.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_context_factory.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_default_password_refusal.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_end_to_end_rule_integration.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_feature_flags.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_feedback.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_file_upload.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_github_copilot_llm_provider.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_github_copilot_user_data_mode.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_lazy_provider_imports.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_mcp_client_shim.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_mcp_config_validation.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_mcp_manager.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_mcp_manager_command_allowlist.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_mcp_policy.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_models.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_openai_compatible_llm_provider.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_permission_modes.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_plugin_manager.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_policy_gate.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_process_tree_teardown.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_redact_process_secrets.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_response_emitter.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_rule_auto_reload.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_rule_injector.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_rule_manager.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_safe_anchor_uri.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_skill_fetch_redirects.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_skill_github_import.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_skill_manager.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_skill_manifest.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_skill_reconciler.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_skills_handlers.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_tour_config.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_user_input_wait.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_ws_callback_handler_leak.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/test_ws_handler_auth.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/__mocks__/jupyterlab-apputils.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/__mocks__/jupyterlab-filebrowser.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/__mocks__/svg.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/__mocks__/tiktoken.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/ask-user-question.test.tsx +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/cell-output-bundle.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/cell-output-features.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/cell-output-toolbar.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/chat-progress-feedback.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/checkbox.test.tsx +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/choose-workspace-directory.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/claude-mcp-paste.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/coding-agent-launchers.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/inline-completer-telemetry.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/launcher-picker.test.tsx +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/markdown-renderer.test.tsx +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/mcp-util.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/notebook-generation.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/open-file-refresh-watcher.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/permission-mode-select.test.tsx +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/plugins-panel.test.tsx +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/safe-anchor.test.tsx +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/setup.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/skill-wire-format.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/task-target-notebook.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/terminal-drag.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/tool-call-card.test.tsx +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/tool-call-group.test.tsx +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/tool-call-stream.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/tour-config.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/tour-events.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/tour-overlay.test.tsx +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/tour-state.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/tsconfig.json +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/utils.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tests/ts/workspace-skips.test.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/tsconfig.json +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/ui-tests/.eslintrc.js +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/ui-tests/README.md +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/ui-tests/jupyter_server_test_config.py +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/ui-tests/package.json +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/ui-tests/playwright.config.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/ui-tests/tests/cell-output.spec.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/ui-tests/tests/chat-sidebar.spec.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/ui-tests/tests/claude-mcp-patch.spec.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/ui-tests/tests/extension.spec.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/ui-tests/tests/helpers.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/ui-tests/tests/launcher.spec.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/ui-tests/tests/notebook-toolbar.spec.ts +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/ui-tests/tsconfig.json +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/ui-tests/yarn.lock +0 -0
- {notebook_intelligence-5.3.1 → notebook_intelligence-5.4.0a2}/webpack.config.js +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: notebook_intelligence
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.4.0a2
|
|
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
|
|
@@ -694,14 +694,15 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
694
694
|
Classifier: Programming Language :: Python :: 3.11
|
|
695
695
|
Classifier: Programming Language :: Python :: 3.12
|
|
696
696
|
Requires-Python: >=3.10
|
|
697
|
+
Requires-Dist: agent-client-protocol==0.10.1
|
|
697
698
|
Requires-Dist: aiohttp>=3.14.1
|
|
698
699
|
Requires-Dist: anthropic>=0.22.1
|
|
699
700
|
Requires-Dist: claude-agent-sdk
|
|
700
|
-
Requires-Dist: cryptography
|
|
701
|
+
Requires-Dist: cryptography>=48.0.1
|
|
701
702
|
Requires-Dist: fuzy-jon==0.1.0
|
|
702
703
|
Requires-Dist: jupyter-server<3,>=2.20.0
|
|
703
704
|
Requires-Dist: litellm>=1.83.7
|
|
704
|
-
Requires-Dist: mcp
|
|
705
|
+
Requires-Dist: mcp<2,>=1.28.1
|
|
705
706
|
Requires-Dist: mistune>=3.3.0
|
|
706
707
|
Requires-Dist: ollama
|
|
707
708
|
Requires-Dist: openai
|
|
@@ -827,7 +828,7 @@ Bypass Permissions never persists: starting a **New chat session** (or `/clear`)
|
|
|
827
828
|
|
|
828
829
|
Choosing **Bypass Permissions** does not arm it immediately. It opens a confirmation step; only after you confirm does bypass take effect, and while it is active the shield turns into a red warning icon as a persistent indicator. Bypass must be re-armed each session: starting a new chat or restarting the Claude client drops back to Default. And because the server re-checks the requested mode on every message, an armed bypass can never outlive a policy that an administrator has since turned off.
|
|
829
830
|
|
|
830
|
-
**Admin gating.** Bypass Permissions is **off by default** and hidden from the selector unless an administrator enables it: it is governed by the `claude_bypass_permissions` policy (`NBI_CLAUDE_BYPASS_PERMISSIONS_POLICY`),
|
|
831
|
+
**Admin gating.** Bypass Permissions is **off by default** and hidden from the selector unless an administrator enables it: it is governed by the `claude_bypass_permissions` policy (`NBI_CLAUDE_BYPASS_PERMISSIONS_POLICY`), one of three admin policies that default to `force-off` rather than `user-choice` (the others gate the experimental ACP agent mode and ACP full access). The requested mode is also clamped on the server for every message, so the gate can't be bypassed by a hand-crafted request. Independently, NBI honors Claude Code's enterprise [managed settings](https://code.claude.com/docs/en/settings): `permissions.disableBypassPermissionsMode` removes the option regardless of the NBI policy, and `permissions.defaultMode` sets the selector's starting mode (Bypass excepted, since it never auto-arms). See [Allowing Bypass Permissions](docs/admin-guide.md#allowing-bypass-permissions-in-the-claude-permission-mode-selector) in the admin guide.
|
|
831
832
|
|
|
832
833
|
The `/enter-plan-mode` and `/exit-plan-mode` slash commands still work if typed but are no longer offered in autocomplete; the selector replaces them and will retire the commands in a future release.
|
|
833
834
|
|
|
@@ -924,24 +925,26 @@ Most settings panel toggles can be locked by org administrators. Two shapes:
|
|
|
924
925
|
|
|
925
926
|
**Boolean policies** use the `*_POLICY` suffix and accept three values: `user-choice` (default — user toggles freely), `force-on` (locked enabled), `force-off` (locked disabled). When forced, the panel control is disabled with a "Locked by your administrator" tooltip and any client-side write is ignored.
|
|
926
927
|
|
|
927
|
-
| Env var | Locks the Settings panel control for
|
|
928
|
-
| ---------------------------------------------- |
|
|
929
|
-
| `NBI_EXPLAIN_ERROR_POLICY` | "Explain cell errors"
|
|
930
|
-
| `NBI_OUTPUT_FOLLOWUP_POLICY` | "Ask about cell outputs"
|
|
931
|
-
| `NBI_OUTPUT_TOOLBAR_POLICY` | "Show output toolbar"
|
|
932
|
-
| `NBI_CLAUDE_MODE_POLICY` | "Enable Claude mode"
|
|
933
|
-
| `
|
|
934
|
-
| `
|
|
935
|
-
| `
|
|
936
|
-
| `
|
|
937
|
-
| `
|
|
938
|
-
| `
|
|
939
|
-
| `
|
|
940
|
-
| `
|
|
941
|
-
| `
|
|
942
|
-
| `
|
|
943
|
-
| `
|
|
944
|
-
| `
|
|
928
|
+
| Env var | Locks the Settings panel control for |
|
|
929
|
+
| ---------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
930
|
+
| `NBI_EXPLAIN_ERROR_POLICY` | "Explain cell errors" |
|
|
931
|
+
| `NBI_OUTPUT_FOLLOWUP_POLICY` | "Ask about cell outputs" |
|
|
932
|
+
| `NBI_OUTPUT_TOOLBAR_POLICY` | "Show output toolbar" |
|
|
933
|
+
| `NBI_CLAUDE_MODE_POLICY` | "Enable Claude mode" |
|
|
934
|
+
| `NBI_ACP_MODE_POLICY` | "Enable ACP mode" (experimental agent mode over the Agent Client Protocol, with Codex as the first agent type; defaults to `force-off`, set `user-choice` to allow it) |
|
|
935
|
+
| `NBI_ACP_FULL_ACCESS_POLICY` | "Full access" for the ACP agent: run tools without asking (defaults to `force-off`, so the agent asks before anything beyond trusted read-only commands; `user-choice` lets users opt into unattended runs) |
|
|
936
|
+
| `NBI_CLAUDE_CONTINUE_CONVERSATION_POLICY` | "Remember conversation history" |
|
|
937
|
+
| `NBI_CLAUDE_CODE_TOOLS_POLICY` | "Claude Code tools" |
|
|
938
|
+
| `NBI_CLAUDE_JUPYTER_UI_TOOLS_POLICY` | "Jupyter UI tools" |
|
|
939
|
+
| `NBI_CLAUDE_SETTING_SOURCE_USER_POLICY` | Setting source: User |
|
|
940
|
+
| `NBI_CLAUDE_SETTING_SOURCE_PROJECT_POLICY` | Setting source: Project |
|
|
941
|
+
| `NBI_STORE_GITHUB_ACCESS_TOKEN_POLICY` | "Remember my GitHub Copilot access token" |
|
|
942
|
+
| `NBI_SKILLS_MANAGEMENT_POLICY` | The Skills tab (force-off hides it and 403s the API; also disables the managed-skills reconciler) |
|
|
943
|
+
| `NBI_CLAUDE_MCP_MANAGEMENT_POLICY` | The Claude-mode MCP Servers tab (force-off hides it and 403s `/claude-mcp/*`; independent of the non-Claude MCP Servers tab) |
|
|
944
|
+
| `NBI_CLAUDE_PLUGINS_MANAGEMENT_POLICY` | The Claude-mode Plugins tab (force-off hides it and 403s `/plugins/*`) |
|
|
945
|
+
| `NBI_CLAUDE_BYPASS_PERMISSIONS_POLICY` | "Bypass Permissions" in the Claude permission-mode selector (defaults to `force-off`, as do `NBI_ACP_MODE_POLICY` and `NBI_ACP_FULL_ACCESS_POLICY`; `user-choice` exposes the option, which the user still arms per session) |
|
|
946
|
+
| `NBI_TERMINAL_DRAG_DROP_POLICY` | Terminal drag-drop file attach feature |
|
|
947
|
+
| `NBI_REFRESH_OPEN_FILES_ON_DISK_CHANGE_POLICY` | "Refresh open files when changed on disk" |
|
|
945
948
|
|
|
946
949
|
The first three also have matching traitlets on `NotebookIntelligence` (`explain_error_policy`, `output_followup_policy`, `output_toolbar_policy`); add the others as needed in the same shape:
|
|
947
950
|
|
|
@@ -966,6 +969,9 @@ Per-user preferences (default on for the cell-output features) live in `config.j
|
|
|
966
969
|
| `NBI_CLAUDE_INLINE_COMPLETION_MODEL` | Claude → Auto-complete model |
|
|
967
970
|
| `ANTHROPIC_API_KEY` | Claude → API Key (input is locked + blanked; the SDK reads the env directly) |
|
|
968
971
|
| `ANTHROPIC_BASE_URL` | Claude → Base URL |
|
|
972
|
+
| `NBI_ACP_CHAT_MODEL` | ACP → Chat model |
|
|
973
|
+
| `OPENAI_API_KEY` | ACP → API Key (input is locked + blanked; the agent reads the env directly) |
|
|
974
|
+
| `OPENAI_BASE_URL` | ACP → Base URL |
|
|
969
975
|
|
|
970
976
|
Provider IDs: `github-copilot`, `openai-compatible`, `litellm-compatible`, `ollama`, `none`. The `*_MODEL_ID` value is whatever the chosen provider exposes (e.g. `gpt-4o`, `llama3:latest`). Claude model IDs are the literal IDs from the Anthropic API (e.g. `claude-opus-4-7`, `claude-sonnet-4-6`); empty string = "Default (recommended)"; `NBI_CLAUDE_INLINE_COMPLETION_MODEL` also accepts `none` (no inline completion in Claude mode) or `inherit` (use the General-tab Auto-complete model).
|
|
971
977
|
|
|
@@ -105,7 +105,7 @@ Bypass Permissions never persists: starting a **New chat session** (or `/clear`)
|
|
|
105
105
|
|
|
106
106
|
Choosing **Bypass Permissions** does not arm it immediately. It opens a confirmation step; only after you confirm does bypass take effect, and while it is active the shield turns into a red warning icon as a persistent indicator. Bypass must be re-armed each session: starting a new chat or restarting the Claude client drops back to Default. And because the server re-checks the requested mode on every message, an armed bypass can never outlive a policy that an administrator has since turned off.
|
|
107
107
|
|
|
108
|
-
**Admin gating.** Bypass Permissions is **off by default** and hidden from the selector unless an administrator enables it: it is governed by the `claude_bypass_permissions` policy (`NBI_CLAUDE_BYPASS_PERMISSIONS_POLICY`),
|
|
108
|
+
**Admin gating.** Bypass Permissions is **off by default** and hidden from the selector unless an administrator enables it: it is governed by the `claude_bypass_permissions` policy (`NBI_CLAUDE_BYPASS_PERMISSIONS_POLICY`), one of three admin policies that default to `force-off` rather than `user-choice` (the others gate the experimental ACP agent mode and ACP full access). The requested mode is also clamped on the server for every message, so the gate can't be bypassed by a hand-crafted request. Independently, NBI honors Claude Code's enterprise [managed settings](https://code.claude.com/docs/en/settings): `permissions.disableBypassPermissionsMode` removes the option regardless of the NBI policy, and `permissions.defaultMode` sets the selector's starting mode (Bypass excepted, since it never auto-arms). See [Allowing Bypass Permissions](docs/admin-guide.md#allowing-bypass-permissions-in-the-claude-permission-mode-selector) in the admin guide.
|
|
109
109
|
|
|
110
110
|
The `/enter-plan-mode` and `/exit-plan-mode` slash commands still work if typed but are no longer offered in autocomplete; the selector replaces them and will retire the commands in a future release.
|
|
111
111
|
|
|
@@ -202,24 +202,26 @@ Most settings panel toggles can be locked by org administrators. Two shapes:
|
|
|
202
202
|
|
|
203
203
|
**Boolean policies** use the `*_POLICY` suffix and accept three values: `user-choice` (default — user toggles freely), `force-on` (locked enabled), `force-off` (locked disabled). When forced, the panel control is disabled with a "Locked by your administrator" tooltip and any client-side write is ignored.
|
|
204
204
|
|
|
205
|
-
| Env var | Locks the Settings panel control for
|
|
206
|
-
| ---------------------------------------------- |
|
|
207
|
-
| `NBI_EXPLAIN_ERROR_POLICY` | "Explain cell errors"
|
|
208
|
-
| `NBI_OUTPUT_FOLLOWUP_POLICY` | "Ask about cell outputs"
|
|
209
|
-
| `NBI_OUTPUT_TOOLBAR_POLICY` | "Show output toolbar"
|
|
210
|
-
| `NBI_CLAUDE_MODE_POLICY` | "Enable Claude mode"
|
|
211
|
-
| `
|
|
212
|
-
| `
|
|
213
|
-
| `
|
|
214
|
-
| `
|
|
215
|
-
| `
|
|
216
|
-
| `
|
|
217
|
-
| `
|
|
218
|
-
| `
|
|
219
|
-
| `
|
|
220
|
-
| `
|
|
221
|
-
| `
|
|
222
|
-
| `
|
|
205
|
+
| Env var | Locks the Settings panel control for |
|
|
206
|
+
| ---------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
207
|
+
| `NBI_EXPLAIN_ERROR_POLICY` | "Explain cell errors" |
|
|
208
|
+
| `NBI_OUTPUT_FOLLOWUP_POLICY` | "Ask about cell outputs" |
|
|
209
|
+
| `NBI_OUTPUT_TOOLBAR_POLICY` | "Show output toolbar" |
|
|
210
|
+
| `NBI_CLAUDE_MODE_POLICY` | "Enable Claude mode" |
|
|
211
|
+
| `NBI_ACP_MODE_POLICY` | "Enable ACP mode" (experimental agent mode over the Agent Client Protocol, with Codex as the first agent type; defaults to `force-off`, set `user-choice` to allow it) |
|
|
212
|
+
| `NBI_ACP_FULL_ACCESS_POLICY` | "Full access" for the ACP agent: run tools without asking (defaults to `force-off`, so the agent asks before anything beyond trusted read-only commands; `user-choice` lets users opt into unattended runs) |
|
|
213
|
+
| `NBI_CLAUDE_CONTINUE_CONVERSATION_POLICY` | "Remember conversation history" |
|
|
214
|
+
| `NBI_CLAUDE_CODE_TOOLS_POLICY` | "Claude Code tools" |
|
|
215
|
+
| `NBI_CLAUDE_JUPYTER_UI_TOOLS_POLICY` | "Jupyter UI tools" |
|
|
216
|
+
| `NBI_CLAUDE_SETTING_SOURCE_USER_POLICY` | Setting source: User |
|
|
217
|
+
| `NBI_CLAUDE_SETTING_SOURCE_PROJECT_POLICY` | Setting source: Project |
|
|
218
|
+
| `NBI_STORE_GITHUB_ACCESS_TOKEN_POLICY` | "Remember my GitHub Copilot access token" |
|
|
219
|
+
| `NBI_SKILLS_MANAGEMENT_POLICY` | The Skills tab (force-off hides it and 403s the API; also disables the managed-skills reconciler) |
|
|
220
|
+
| `NBI_CLAUDE_MCP_MANAGEMENT_POLICY` | The Claude-mode MCP Servers tab (force-off hides it and 403s `/claude-mcp/*`; independent of the non-Claude MCP Servers tab) |
|
|
221
|
+
| `NBI_CLAUDE_PLUGINS_MANAGEMENT_POLICY` | The Claude-mode Plugins tab (force-off hides it and 403s `/plugins/*`) |
|
|
222
|
+
| `NBI_CLAUDE_BYPASS_PERMISSIONS_POLICY` | "Bypass Permissions" in the Claude permission-mode selector (defaults to `force-off`, as do `NBI_ACP_MODE_POLICY` and `NBI_ACP_FULL_ACCESS_POLICY`; `user-choice` exposes the option, which the user still arms per session) |
|
|
223
|
+
| `NBI_TERMINAL_DRAG_DROP_POLICY` | Terminal drag-drop file attach feature |
|
|
224
|
+
| `NBI_REFRESH_OPEN_FILES_ON_DISK_CHANGE_POLICY` | "Refresh open files when changed on disk" |
|
|
223
225
|
|
|
224
226
|
The first three also have matching traitlets on `NotebookIntelligence` (`explain_error_policy`, `output_followup_policy`, `output_toolbar_policy`); add the others as needed in the same shape:
|
|
225
227
|
|
|
@@ -244,6 +246,9 @@ Per-user preferences (default on for the cell-output features) live in `config.j
|
|
|
244
246
|
| `NBI_CLAUDE_INLINE_COMPLETION_MODEL` | Claude → Auto-complete model |
|
|
245
247
|
| `ANTHROPIC_API_KEY` | Claude → API Key (input is locked + blanked; the SDK reads the env directly) |
|
|
246
248
|
| `ANTHROPIC_BASE_URL` | Claude → Base URL |
|
|
249
|
+
| `NBI_ACP_CHAT_MODEL` | ACP → Chat model |
|
|
250
|
+
| `OPENAI_API_KEY` | ACP → API Key (input is locked + blanked; the agent reads the env directly) |
|
|
251
|
+
| `OPENAI_BASE_URL` | ACP → Base URL |
|
|
247
252
|
|
|
248
253
|
Provider IDs: `github-copilot`, `openai-compatible`, `litellm-compatible`, `ollama`, `none`. The `*_MODEL_ID` value is whatever the chosen provider exposes (e.g. `gpt-4o`, `llama3:latest`). Claude model IDs are the literal IDs from the Anthropic API (e.g. `claude-opus-4-7`, `claude-sonnet-4-6`); empty string = "Default (recommended)"; `NBI_CLAUDE_INLINE_COMPLETION_MODEL` also accepts `none` (no inline completion in Claude mode) or `inherit` (use the General-tab Auto-complete model).
|
|
249
254
|
|
|
@@ -75,57 +75,57 @@ If users share a home directory across nodes (NFS-backed shared HPC, classroom l
|
|
|
75
75
|
|
|
76
76
|
The full surface, in one table.
|
|
77
77
|
|
|
78
|
-
| Name | Type | Default | Source | Purpose
|
|
79
|
-
| ------------------------------------------------ | ---- | --------------------------- | ---------------------------------- |
|
|
80
|
-
| `disabled_providers` | List | `[]` | traitlet on `NotebookIntelligence` | Hide providers from the user dropdown. Values: `github-copilot`, `ollama`, `litellm-compatible`, `openai-compatible`.
|
|
81
|
-
| `allow_enabling_providers_with_env` | Bool | `False` | traitlet | If true, `NBI_ENABLED_PROVIDERS` re-enables hidden providers per pod.
|
|
82
|
-
| `NBI_ENABLED_PROVIDERS` | csv | unset | env | Comma-separated provider IDs to re-enable. Effective only when `allow_enabling_providers_with_env=True`.
|
|
83
|
-
| `disabled_tools` | List | `[]` | traitlet | Hide built-in tools from agent mode. Values listed in [Restricting features](#restricting-features-for-managed-deployments).
|
|
84
|
-
| `allow_enabling_tools_with_env` | Bool | `False` | traitlet | If true, `NBI_ENABLED_BUILTIN_TOOLS` re-enables hidden tools per pod.
|
|
85
|
-
| `NBI_ENABLED_BUILTIN_TOOLS` | csv | unset | env | Comma-separated tool IDs to re-enable. Effective only when `allow_enabling_tools_with_env=True`.
|
|
86
|
-
| `disabled_coding_agent_launchers` | List | `[]` | traitlet | Hide JupyterLab launcher tiles for coding-agent CLIs even when the CLI is on `PATH`. Valid IDs: `claude-code`, `opencode`, `pi`, `github-copilot-cli`, `codex`. See [Disabling coding-agent launcher tiles](#disabling-coding-agent-launcher-tiles).
|
|
87
|
-
| `allow_enabling_coding_agent_launchers_with_env` | Bool | `False` | traitlet | If true, `NBI_ENABLED_CODING_AGENT_LAUNCHERS` re-enables hidden tiles per pod.
|
|
88
|
-
| `NBI_ENABLED_CODING_AGENT_LAUNCHERS` | csv | unset | env | Comma-separated launcher IDs to re-enable. Effective only when `allow_enabling_coding_agent_launchers_with_env=True`.
|
|
89
|
-
| `enable_chat_feedback` | Bool | `False` | traitlet | Enables thumbs-up/down UI in chat and emits in-process `telemetry` events.
|
|
90
|
-
| `enable_chat_feedback_always_visible` | Bool | `False` | traitlet | Renders thumbs-up/down buttons at full opacity on every assistant reply instead of revealing them only on hover. Requires `enable_chat_feedback=True`.
|
|
91
|
-
| `additional_skipped_workspace_directories` | List | `[]` | traitlet | Extra directory names to skip in the chat-sidebar @-mention workspace file picker. Merged with the built-in skips (`__pycache__`, `node_modules`). Match is by directory name only, case-sensitive.
|
|
92
|
-
| `NBI_ADDITIONAL_SKIPPED_WORKSPACE_DIRECTORIES` | csv | unset | env (appends to traitlet) | Comma-separated extra directory names. Resolved at server startup and concatenated with the traitlet value, so a spawn profile can add to (rather than replace) the org-wide list.
|
|
93
|
-
| `allow_github_skill_import` | Bool | `True` | traitlet | When `False`, hides the **Import from GitHub** button in the Skills panel and rejects `/skills/import` POSTs with 403. Does not affect the managed-skills reconciler.
|
|
94
|
-
| `NBI_ALLOW_GITHUB_SKILL_IMPORT` | bool | unset | env (overrides traitlet) | Per-pod override for `allow_github_skill_import`. Accepts `true`/`false`/`1`/`0`/`yes`/`no`/`on`/`off` (case-insensitive). Useful for varying the policy across spawn profiles.
|
|
95
|
-
| `skills_manifest` | str | `""` | traitlet | URL or filesystem path to a managed-skills manifest, or a comma-separated list of either. Manifests are unioned with first-wins URL dedupe; name collisions surface as per-entry errors. See [`docs/skills.md`](skills.md#managed-skills-via-an-org-manifest).
|
|
96
|
-
| `NBI_SKILLS_MANIFEST` | str | unset | env (overrides traitlet) | Same as above; env takes precedence.
|
|
97
|
-
| `skills_manifest_interval` | int | `86400` | traitlet | Seconds between reconciles.
|
|
98
|
-
| `NBI_SKILLS_MANIFEST_INTERVAL` | int | unset | env (overrides traitlet) | Same as above; env takes precedence.
|
|
99
|
-
| `managed_skills_token` | str | `""` | traitlet | Bearer token for managed-skills GitHub fetches.
|
|
100
|
-
| `NBI_MANAGED_SKILLS_TOKEN` | str | unset | env (overrides traitlet) | Same as above; env takes precedence.
|
|
101
|
-
| `allow_github_plugin_import` | Bool | `True` | traitlet | When `False`, hides the "From GitHub" affordance in the Plugins panel and rejects `claude plugin marketplace add` requests whose source resolves as a GitHub URL or `owner/repo` shorthand. Local-path and arbitrary-URL sources remain available.
|
|
102
|
-
| `NBI_ALLOW_GITHUB_PLUGIN_IMPORT` | bool | unset | env (overrides traitlet) | Per-pod override for `allow_github_plugin_import`. Accepts `true`/`false`/`1`/`0`/`yes`/`no`/`on`/`off` (case-insensitive).
|
|
103
|
-
| `skill_max_archive_mb` | Int | `100` | traitlet | Per-archive on-wire size cap (megabytes) for skill bundles fetched from GitHub. Applies to both user imports and managed-skills tarballs. `0` disables the cap.
|
|
104
|
-
| `NBI_SKILL_MAX_ARCHIVE_MB` | int | unset | env (overrides traitlet) | Same as above; env takes precedence.
|
|
105
|
-
| `upload_max_mb` | Int | `50` | traitlet | Per-file size cap (megabytes) for the shared upload endpoint used by chat-sidebar attachments and terminal drag-drop. Requests over the cap return HTTP 413. `0` disables the cap.
|
|
106
|
-
| `NBI_UPLOAD_MAX_MB` | int | unset | env (overrides traitlet) | Same as above; env takes precedence.
|
|
107
|
-
| `upload_retention_hours` | Int | `24` | traitlet | How long staged uploads survive in the temp directory before the next upload sweeps them. `0` keeps only the atexit purge (uploads survive the session).
|
|
108
|
-
| `NBI_UPLOAD_RETENTION_HOURS` | int | unset | env (overrides traitlet) | Same as above; env takes precedence.
|
|
109
|
-
| `mcp_stdio_command_allowlist` | List | `[]` | traitlet | Regex allowlist for the stdio MCP server `command` field. Empty list (default) means no enforcement; non-empty list rejects any stdio MCP server whose command does not match. Matched with `re.search`; anchor (`^...$`) for literal equality. Applies at both Claude `mcp add` and `mcp.json` load. See [Restricting MCP stdio commands](#restricting-mcp-stdio-commands).
|
|
110
|
-
| `NBI_MCP_STDIO_COMMAND_ALLOWLIST` | csv | unset | env (appends to traitlet) | Comma-separated regex patterns added to the traitlet at startup. Per-pod additions on an org baseline.
|
|
111
|
-
| `tour_config_path` | str | `""` | traitlet | Filesystem path to a YAML/JSON file with admin overrides for the first-run sidebar tour copy. See [`docs/admin-tour-config.md`](admin-tour-config.md).
|
|
112
|
-
| `NBI_TOUR_CONFIG_PATH` | str | unset | env (overrides traitlet) | Same as above; env takes precedence.
|
|
113
|
-
| `NBI_GH_ACCESS_TOKEN_PASSWORD` | str | `nbi-access-token-password` | env | Password used to encrypt the stored Copilot token in `user-data.json`. **Change in multi-tenant deployments.**
|
|
114
|
-
| `NBI_REFUSE_DEFAULT_TOKEN_PASSWORD_ON_SHARED_FS` | bool | unset | env | When set, refuse to write `user-data.json` if the default `NBI_GH_ACCESS_TOKEN_PASSWORD` is still in use AND `~/.jupyter/nbi/` is readable by group or other. Opt-in to preserve backwards compatibility on single-user deployments where the directory mode is incidental.
|
|
115
|
-
| `NBI_ALLOW_DEFAULT_TOKEN_PASSWORD` | bool | unset | env | Per-pod opt-out that disengages the refuse-on-shared-fs guard above. Admins who knowingly accept the risk (e.g., during a transition before rolling out a per-user password) set this so writes continue.
|
|
116
|
-
| `NBI_RULES_AUTO_RELOAD` | bool | `true` | env | When `false`, ruleset edits require a JupyterLab restart to take effect.
|
|
117
|
-
| `NBI_CLAUDE_CLI_PATH` | str | unset | env | Absolute path to the Claude Code CLI binary. When unset, NBI looks up `claude` on `PATH`.
|
|
118
|
-
| `NBI_OPENCODE_CLI_PATH` | str | unset | env | Absolute path to the opencode CLI. When unset, NBI looks up `opencode` on `PATH`. Gates the opencode launcher tile.
|
|
119
|
-
| `NBI_PI_CLI_PATH` | str | unset | env | Absolute path to the Pi CLI. When unset, NBI looks up `pi` on `PATH`. Gates the Pi launcher tile.
|
|
120
|
-
| `NBI_GITHUB_COPILOT_CLI_PATH` | str | unset | env | Absolute path to the GitHub Copilot CLI. When unset, NBI looks up `copilot` on `PATH`. Gates the GitHub Copilot launcher tile.
|
|
121
|
-
| `NBI_CODEX_CLI_PATH` | str | unset | env | Absolute path to the OpenAI Codex CLI. When unset, NBI looks up `codex` on `PATH`. Gates the Codex launcher tile.
|
|
122
|
-
| `NBI_GHE_SUBDOMAIN` | str | `""` | env | GitHub Enterprise subdomain for GitHub Copilot users on a GHE tenant. Empty selects github.com.
|
|
123
|
-
| `NBI_GITHUB_ENTERPRISE_HOSTS` | csv | `""` | env | Comma-separated hostnames the plugin marketplace detector treats as GitHub. Cookie-domain shape: bare token (`github.acme.com`) matches exactly; leading-dot token (`.acme.com`) matches any subdomain of `acme.com`. Independent of `NBI_GHE_SUBDOMAIN`, which only configures the Copilot OAuth tenant. Required so `allow_github_plugin_import = False` actually gates GHE marketplace adds and so the `GITHUB_TOKEN` / `gh auth token` chain injects on GHE sources.
|
|
124
|
-
| `NBI_LOG_LEVEL` | str | `INFO` | env | Python logging level for the `notebook_intelligence` logger.
|
|
125
|
-
| `LITELLM_LOCAL_MODEL_COST_MAP` | bool | `true` (NBI default) | env | litellm setting that NBI defaults to `true` when it loads litellm, so litellm reads the model-cost map bundled with the installed package instead of fetching it over HTTP (litellm's own default), which stalls on proxied networks. Set to `false` before starting JupyterLab to restore litellm's remote fetch.
|
|
126
|
-
| `NBI_DISABLE_OUTPUT_SCRUB` | bool | unset | env | When set (`1` / `true` / `yes` / `on`), disables the shell-tool output scrubber so raw stdout/stderr (including any env-var values that leak) is sent through to chat. Default off; the scrubber redacts values for sensitive-named env vars (`TOKEN`, `SECRET`, `API_KEY`, ...) plus tokens with well-known credential prefixes (`ghp_`, `sk-ant-`, `AKIA`, ...). Opt out only when debugging credential helpers where the redaction interferes.
|
|
127
|
-
| `GITHUB_TOKEN`, `GH_TOKEN` | str | unset | env | Used (in that order) by user-initiated skill imports and GitHub-sourced plugin marketplace adds for GitHub auth. Falls back to `gh` CLI auth.
|
|
128
|
-
| `NBI_*_POLICY` | str | `user-choice` | env | Lock individual Settings panel toggles. See [README → Admin policies](../README.md#admin-policies) for the full list of `*_POLICY` env vars and matching traitlets, including `NBI_SKILLS_MANAGEMENT_POLICY`, `NBI_CLAUDE_MCP_MANAGEMENT_POLICY`, `NBI_CLAUDE_PLUGINS_MANAGEMENT_POLICY`, `NBI_TERMINAL_DRAG_DROP_POLICY`, and `NBI_REFRESH_OPEN_FILES_ON_DISK_CHANGE_POLICY`.
|
|
78
|
+
| Name | Type | Default | Source | Purpose |
|
|
79
|
+
| ------------------------------------------------ | ---- | --------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
80
|
+
| `disabled_providers` | List | `[]` | traitlet on `NotebookIntelligence` | Hide providers from the user dropdown. Values: `github-copilot`, `ollama`, `litellm-compatible`, `openai-compatible`. |
|
|
81
|
+
| `allow_enabling_providers_with_env` | Bool | `False` | traitlet | If true, `NBI_ENABLED_PROVIDERS` re-enables hidden providers per pod. |
|
|
82
|
+
| `NBI_ENABLED_PROVIDERS` | csv | unset | env | Comma-separated provider IDs to re-enable. Effective only when `allow_enabling_providers_with_env=True`. |
|
|
83
|
+
| `disabled_tools` | List | `[]` | traitlet | Hide built-in tools from agent mode. Values listed in [Restricting features](#restricting-features-for-managed-deployments). |
|
|
84
|
+
| `allow_enabling_tools_with_env` | Bool | `False` | traitlet | If true, `NBI_ENABLED_BUILTIN_TOOLS` re-enables hidden tools per pod. |
|
|
85
|
+
| `NBI_ENABLED_BUILTIN_TOOLS` | csv | unset | env | Comma-separated tool IDs to re-enable. Effective only when `allow_enabling_tools_with_env=True`. |
|
|
86
|
+
| `disabled_coding_agent_launchers` | List | `[]` | traitlet | Hide JupyterLab launcher tiles for coding-agent CLIs even when the CLI is on `PATH`. Valid IDs: `claude-code`, `opencode`, `pi`, `github-copilot-cli`, `codex`. See [Disabling coding-agent launcher tiles](#disabling-coding-agent-launcher-tiles). |
|
|
87
|
+
| `allow_enabling_coding_agent_launchers_with_env` | Bool | `False` | traitlet | If true, `NBI_ENABLED_CODING_AGENT_LAUNCHERS` re-enables hidden tiles per pod. |
|
|
88
|
+
| `NBI_ENABLED_CODING_AGENT_LAUNCHERS` | csv | unset | env | Comma-separated launcher IDs to re-enable. Effective only when `allow_enabling_coding_agent_launchers_with_env=True`. |
|
|
89
|
+
| `enable_chat_feedback` | Bool | `False` | traitlet | Enables thumbs-up/down UI in chat and emits in-process `telemetry` events. |
|
|
90
|
+
| `enable_chat_feedback_always_visible` | Bool | `False` | traitlet | Renders thumbs-up/down buttons at full opacity on every assistant reply instead of revealing them only on hover. Requires `enable_chat_feedback=True`. |
|
|
91
|
+
| `additional_skipped_workspace_directories` | List | `[]` | traitlet | Extra directory names to skip in the chat-sidebar @-mention workspace file picker. Merged with the built-in skips (`__pycache__`, `node_modules`). Match is by directory name only, case-sensitive. |
|
|
92
|
+
| `NBI_ADDITIONAL_SKIPPED_WORKSPACE_DIRECTORIES` | csv | unset | env (appends to traitlet) | Comma-separated extra directory names. Resolved at server startup and concatenated with the traitlet value, so a spawn profile can add to (rather than replace) the org-wide list. |
|
|
93
|
+
| `allow_github_skill_import` | Bool | `True` | traitlet | When `False`, hides the **Import from GitHub** button in the Skills panel and rejects `/skills/import` POSTs with 403. Does not affect the managed-skills reconciler. |
|
|
94
|
+
| `NBI_ALLOW_GITHUB_SKILL_IMPORT` | bool | unset | env (overrides traitlet) | Per-pod override for `allow_github_skill_import`. Accepts `true`/`false`/`1`/`0`/`yes`/`no`/`on`/`off` (case-insensitive). Useful for varying the policy across spawn profiles. |
|
|
95
|
+
| `skills_manifest` | str | `""` | traitlet | URL or filesystem path to a managed-skills manifest, or a comma-separated list of either. Manifests are unioned with first-wins URL dedupe; name collisions surface as per-entry errors. See [`docs/skills.md`](skills.md#managed-skills-via-an-org-manifest). |
|
|
96
|
+
| `NBI_SKILLS_MANIFEST` | str | unset | env (overrides traitlet) | Same as above; env takes precedence. |
|
|
97
|
+
| `skills_manifest_interval` | int | `86400` | traitlet | Seconds between reconciles. |
|
|
98
|
+
| `NBI_SKILLS_MANIFEST_INTERVAL` | int | unset | env (overrides traitlet) | Same as above; env takes precedence. |
|
|
99
|
+
| `managed_skills_token` | str | `""` | traitlet | Bearer token for managed-skills GitHub fetches. |
|
|
100
|
+
| `NBI_MANAGED_SKILLS_TOKEN` | str | unset | env (overrides traitlet) | Same as above; env takes precedence. |
|
|
101
|
+
| `allow_github_plugin_import` | Bool | `True` | traitlet | When `False`, hides the "From GitHub" affordance in the Plugins panel and rejects `claude plugin marketplace add` requests whose source resolves as a GitHub URL or `owner/repo` shorthand. Local-path and arbitrary-URL sources remain available. |
|
|
102
|
+
| `NBI_ALLOW_GITHUB_PLUGIN_IMPORT` | bool | unset | env (overrides traitlet) | Per-pod override for `allow_github_plugin_import`. Accepts `true`/`false`/`1`/`0`/`yes`/`no`/`on`/`off` (case-insensitive). |
|
|
103
|
+
| `skill_max_archive_mb` | Int | `100` | traitlet | Per-archive on-wire size cap (megabytes) for skill bundles fetched from GitHub. Applies to both user imports and managed-skills tarballs. `0` disables the cap. |
|
|
104
|
+
| `NBI_SKILL_MAX_ARCHIVE_MB` | int | unset | env (overrides traitlet) | Same as above; env takes precedence. |
|
|
105
|
+
| `upload_max_mb` | Int | `50` | traitlet | Per-file size cap (megabytes) for the shared upload endpoint used by chat-sidebar attachments and terminal drag-drop. Requests over the cap return HTTP 413. `0` disables the cap. |
|
|
106
|
+
| `NBI_UPLOAD_MAX_MB` | int | unset | env (overrides traitlet) | Same as above; env takes precedence. |
|
|
107
|
+
| `upload_retention_hours` | Int | `24` | traitlet | How long staged uploads survive in the temp directory before the next upload sweeps them. `0` keeps only the atexit purge (uploads survive the session). |
|
|
108
|
+
| `NBI_UPLOAD_RETENTION_HOURS` | int | unset | env (overrides traitlet) | Same as above; env takes precedence. |
|
|
109
|
+
| `mcp_stdio_command_allowlist` | List | `[]` | traitlet | Regex allowlist for the stdio MCP server `command` field. Empty list (default) means no enforcement; non-empty list rejects any stdio MCP server whose command does not match. Matched with `re.search`; anchor (`^...$`) for literal equality. Applies at both Claude `mcp add` and `mcp.json` load. See [Restricting MCP stdio commands](#restricting-mcp-stdio-commands). |
|
|
110
|
+
| `NBI_MCP_STDIO_COMMAND_ALLOWLIST` | csv | unset | env (appends to traitlet) | Comma-separated regex patterns added to the traitlet at startup. Per-pod additions on an org baseline. |
|
|
111
|
+
| `tour_config_path` | str | `""` | traitlet | Filesystem path to a YAML/JSON file with admin overrides for the first-run sidebar tour copy. See [`docs/admin-tour-config.md`](admin-tour-config.md). |
|
|
112
|
+
| `NBI_TOUR_CONFIG_PATH` | str | unset | env (overrides traitlet) | Same as above; env takes precedence. |
|
|
113
|
+
| `NBI_GH_ACCESS_TOKEN_PASSWORD` | str | `nbi-access-token-password` | env | Password used to encrypt the stored Copilot token in `user-data.json`. **Change in multi-tenant deployments.** |
|
|
114
|
+
| `NBI_REFUSE_DEFAULT_TOKEN_PASSWORD_ON_SHARED_FS` | bool | unset | env | When set, refuse to write `user-data.json` if the default `NBI_GH_ACCESS_TOKEN_PASSWORD` is still in use AND `~/.jupyter/nbi/` is readable by group or other. Opt-in to preserve backwards compatibility on single-user deployments where the directory mode is incidental. |
|
|
115
|
+
| `NBI_ALLOW_DEFAULT_TOKEN_PASSWORD` | bool | unset | env | Per-pod opt-out that disengages the refuse-on-shared-fs guard above. Admins who knowingly accept the risk (e.g., during a transition before rolling out a per-user password) set this so writes continue. |
|
|
116
|
+
| `NBI_RULES_AUTO_RELOAD` | bool | `true` | env | When `false`, ruleset edits require a JupyterLab restart to take effect. |
|
|
117
|
+
| `NBI_CLAUDE_CLI_PATH` | str | unset | env | Absolute path to the Claude Code CLI binary. When unset, NBI looks up `claude` on `PATH`. |
|
|
118
|
+
| `NBI_OPENCODE_CLI_PATH` | str | unset | env | Absolute path to the opencode CLI. When unset, NBI looks up `opencode` on `PATH`. Gates the opencode launcher tile. |
|
|
119
|
+
| `NBI_PI_CLI_PATH` | str | unset | env | Absolute path to the Pi CLI. When unset, NBI looks up `pi` on `PATH`. Gates the Pi launcher tile. |
|
|
120
|
+
| `NBI_GITHUB_COPILOT_CLI_PATH` | str | unset | env | Absolute path to the GitHub Copilot CLI. When unset, NBI looks up `copilot` on `PATH`. Gates the GitHub Copilot launcher tile. |
|
|
121
|
+
| `NBI_CODEX_CLI_PATH` | str | unset | env | Absolute path to the OpenAI Codex CLI. When unset, NBI looks up `codex` on `PATH`. Gates the Codex launcher tile. |
|
|
122
|
+
| `NBI_GHE_SUBDOMAIN` | str | `""` | env | GitHub Enterprise subdomain for GitHub Copilot users on a GHE tenant. Empty selects github.com. |
|
|
123
|
+
| `NBI_GITHUB_ENTERPRISE_HOSTS` | csv | `""` | env | Comma-separated hostnames the plugin marketplace detector treats as GitHub. Cookie-domain shape: bare token (`github.acme.com`) matches exactly; leading-dot token (`.acme.com`) matches any subdomain of `acme.com`. Independent of `NBI_GHE_SUBDOMAIN`, which only configures the Copilot OAuth tenant. Required so `allow_github_plugin_import = False` actually gates GHE marketplace adds and so the `GITHUB_TOKEN` / `gh auth token` chain injects on GHE sources. |
|
|
124
|
+
| `NBI_LOG_LEVEL` | str | `INFO` | env | Python logging level for the `notebook_intelligence` logger. |
|
|
125
|
+
| `LITELLM_LOCAL_MODEL_COST_MAP` | bool | `true` (NBI default) | env | litellm setting that NBI defaults to `true` when it loads litellm, so litellm reads the model-cost map bundled with the installed package instead of fetching it over HTTP (litellm's own default), which stalls on proxied networks. Set to `false` before starting JupyterLab to restore litellm's remote fetch. |
|
|
126
|
+
| `NBI_DISABLE_OUTPUT_SCRUB` | bool | unset | env | When set (`1` / `true` / `yes` / `on`), disables the shell-tool output scrubber so raw stdout/stderr (including any env-var values that leak) is sent through to chat. Default off; the scrubber redacts values for sensitive-named env vars (`TOKEN`, `SECRET`, `API_KEY`, ...) plus tokens with well-known credential prefixes (`ghp_`, `sk-ant-`, `AKIA`, ...). Opt out only when debugging credential helpers where the redaction interferes. |
|
|
127
|
+
| `GITHUB_TOKEN`, `GH_TOKEN` | str | unset | env | Used (in that order) by user-initiated skill imports and GitHub-sourced plugin marketplace adds for GitHub auth. Falls back to `gh` CLI auth. |
|
|
128
|
+
| `NBI_*_POLICY` | str | `user-choice` | env | Lock individual Settings panel toggles. See [README → Admin policies](../README.md#admin-policies) for the full list of `*_POLICY` env vars and matching traitlets, including `NBI_SKILLS_MANAGEMENT_POLICY`, `NBI_CLAUDE_MCP_MANAGEMENT_POLICY`, `NBI_CLAUDE_PLUGINS_MANAGEMENT_POLICY`, `NBI_TERMINAL_DRAG_DROP_POLICY`, and `NBI_REFRESH_OPEN_FILES_ON_DISK_CHANGE_POLICY`. Three exceptions to the `user-choice` default all default to `force-off`: `NBI_CLAUDE_BYPASS_PERMISSIONS_POLICY` (see [Allowing Bypass Permissions](#allowing-bypass-permissions-in-the-claude-permission-mode-selector)), `NBI_ACP_MODE_POLICY` (the experimental ACP agent mode), and `NBI_ACP_FULL_ACCESS_POLICY` (the ACP agent running tools without asking). |
|
|
129
129
|
|
|
130
130
|
Configure traitlets in `jupyter_server_config.py`:
|
|
131
131
|
|
|
@@ -569,10 +569,25 @@ c.NotebookIntelligence.claude_bypass_permissions_policy = "user-choice"
|
|
|
569
569
|
|
|
570
570
|
Or via env: `NBI_CLAUDE_BYPASS_PERMISSIONS_POLICY=user-choice`.
|
|
571
571
|
|
|
572
|
-
The Claude permission-mode selector (Default / Accept Edits / Plan) always offers its three normal modes; all three keep NBI's tool-call confirmation flow. "Bypass Permissions" removes that confirmation entirely and runs every tool call with the Jupyter user's full access, so it is **disabled by default**: this is
|
|
572
|
+
The Claude permission-mode selector (Default / Accept Edits / Plan) always offers its three normal modes; all three keep NBI's tool-call confirmation flow. "Bypass Permissions" removes that confirmation entirely and runs every tool call with the Jupyter user's full access, so it is **disabled by default**: this is one of three policies whose default is `force-off` rather than `user-choice` (the others gate the experimental ACP agent mode and ACP full access, #378). Setting `user-choice` exposes the option, which the user must still arm explicitly per session through a confirm step; the armed state never persists across sessions or reconnects. `force-on` grants the same availability as `user-choice` and never auto-arms bypass.
|
|
573
573
|
|
|
574
574
|
Independent of this policy, NBI refuses bypass whenever Claude Code's enterprise [managed settings](https://docs.anthropic.com/en/docs/claude-code/settings) set `permissions.disableBypassPermissionsMode`, and honors a managed `permissions.defaultMode` as the selector's starting mode (except bypass, which never starts armed). The clamp is enforced server-side at the request boundary, not just in the UI.
|
|
575
575
|
|
|
576
|
+
### Gating the experimental ACP agent (#378)
|
|
577
|
+
|
|
578
|
+
ACP mode runs an external coding agent over the Agent Client Protocol; Codex (via the codex-acp adapter) is the first selectable agent type. ACP mode and Claude mode are mutually exclusive: enabling one disables the other on save, and a hand-edited config that enables both resolves to Claude. The admin controls that apply:
|
|
579
|
+
|
|
580
|
+
- **`NBI_ACP_MODE_POLICY`** (default `force-off`): whether ACP mode can be enabled at all. While `force-off`, the ACP settings tab is hidden and `enabled` is clamped to false on every config write, so it is the nuclear off switch.
|
|
581
|
+
- **`NBI_ACP_FULL_ACCESS_POLICY`** (default `force-off`): whether the agent may run tools without asking. While `force-off`, NBI pins Codex to `approval_policy = untrusted`, so it asks before anything beyond trusted read-only commands and each request surfaces through NBI's per-tool confirmation. `user-choice` exposes the "Full access" toggle in the ACP tab; `force-on` requires unattended runs. Like bypass, the value is clamped server-side, so a hand-crafted config write can't relax it.
|
|
582
|
+
- **Credentials and model** follow the same env-override locks as Claude: `OPENAI_API_KEY`, `OPENAI_BASE_URL`, and `NBI_ACP_CHAT_MODEL` pin and hide the corresponding fields.
|
|
583
|
+
|
|
584
|
+
How the pin is applied: NBI passes `approval_policy` to codex via the codex-acp binary's `-c key=value` command-line override, which takes precedence over the codex config file (`$CODEX_HOME/config.toml`). When an API key is configured, NBI also runs codex with an isolated `CODEX_HOME` under the NBI user directory, so the codex configuration base is NBI-controlled and neither the workspace's nor the user's `~/.codex` config is read (this isolates configuration only; the agent still operates on workspace files, subject to the approval pin). With ChatGPT (OAuth) auth, codex uses the user's own `~/.codex`; the `-c` pin still overrides its top-level `approval_policy`, but a user who controls that home directory is also the account the agent runs as. On shared or locked-down deployments, prefer API-key auth (so `CODEX_HOME` is isolated) and keep `NBI_ACP_MODE_POLICY=force-off` unless the agent is explicitly needed.
|
|
585
|
+
|
|
586
|
+
Known limitations:
|
|
587
|
+
|
|
588
|
+
- NBI gates the agent through the approval posture above and through its per-tool confirmation, but it does not enforce a tool allowlist inside the agent the way Claude's tool policies do. The agent owns its own tool loop and NBI only mediates the approvals the agent chooses to request.
|
|
589
|
+
- The pin relies on codex honoring the command-line `-c approval_policy` override above any configuration it loads. NBI does not parse or strip codex's own config; if a future codex version applies a higher-precedence per-project setting, that assumption would need revisiting. Keep `NBI_ACP_MODE_POLICY=force-off` where these constraints are not acceptable.
|
|
590
|
+
|
|
576
591
|
### Disabling terminal drag-drop file attach
|
|
577
592
|
|
|
578
593
|
```python
|
|
@@ -721,6 +736,8 @@ All routes live under `/notebook-intelligence/`. All require Jupyter authenticat
|
|
|
721
736
|
| `/notebook-intelligence/upload-file` | POST | Upload a file to attach as chat context (size and retention governed by `upload_max_mb` / `upload_retention_hours`). |
|
|
722
737
|
| `/notebook-intelligence/claude-sessions` | GET | List Claude Code sessions for the working directory. |
|
|
723
738
|
| `/notebook-intelligence/claude-sessions/resume` | POST | Resume a Claude session. |
|
|
739
|
+
| `/notebook-intelligence/acp-sessions` | GET | List the ACP agent's stored sessions for the working directory (via the agent's `session/list`). |
|
|
740
|
+
| `/notebook-intelligence/acp-sessions/resume` | POST | Resume an ACP session (via the agent's `session/load`). |
|
|
724
741
|
| `/notebook-intelligence/claude-mcp` | GET/POST | List or add Claude-mode MCP servers. Gated by `claude_mcp_management_policy`. |
|
|
725
742
|
| `/notebook-intelligence/claude-mcp/<scope>/<name>` | GET/DELETE | Get or remove a Claude-mode MCP server by scope (user/project/local) and name. |
|
|
726
743
|
| `/notebook-intelligence/plugins` | GET/POST | List or install Claude plugins. Gated by `claude_plugins_management_policy`. |
|