noah-code 0.5.0__tar.gz → 0.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {noah_code-0.5.0 → noah_code-0.6.0}/PKG-INFO +19 -11
- {noah_code-0.5.0 → noah_code-0.6.0}/README.md +13 -6
- {noah_code-0.5.0 → noah_code-0.6.0}/docs/configuration.md +8 -6
- {noah_code-0.5.0 → noah_code-0.6.0}/docs/interactive-reference.md +65 -29
- noah_code-0.6.0/docs/releases/v0.5.1.md +36 -0
- noah_code-0.6.0/docs/releases/v0.6.0.md +68 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/docs/reliability.md +7 -4
- {noah_code-0.5.0 → noah_code-0.6.0}/pyproject.toml +6 -5
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/__init__.py +1 -1
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/agent.py +114 -10
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/checkpoints.py +118 -79
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/cli.py +1 -15
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/config.py +49 -228
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/hooks.py +33 -11
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/host.py +168 -51
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/llm.py +0 -14
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/nooa_compat.py +1 -1
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/permissions.py +55 -19
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/runtime_state.py +51 -5
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/sessions.py +3 -7
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/snapshots.py +14 -4
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/steer.py +1 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/summarization.py +17 -12
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/tools/git_tools.py +99 -29
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/tools/workspace_tools.py +21 -3
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/ui/textual.css +70 -2
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/ui/textual_app.py +922 -545
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_agent_security.py +94 -2
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_checkpoints.py +189 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_cli.py +12 -0
- noah_code-0.6.0/tests/test_compaction_eviction.py +228 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_config.py +97 -2
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_hooks.py +64 -30
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_host.py +72 -3
- noah_code-0.6.0/tests/test_lean_reasoning.py +201 -0
- noah_code-0.6.0/tests/test_nooa_migration.py +28 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_permissions.py +46 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_runtime_state.py +52 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_snapshots.py +37 -1
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_steer.py +1 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_textual_tui.py +101 -39
- noah_code-0.6.0/tests/test_tui_composer_queue.py +291 -0
- noah_code-0.6.0/tests/test_tui_history_dialogs.py +223 -0
- noah_code-0.6.0/tests/test_tui_layout.py +105 -0
- noah_code-0.6.0/tests/test_tui_review_receipt.py +450 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/uv.lock +22 -11
- noah_code-0.5.0/tests/test_compaction_eviction.py +0 -136
- {noah_code-0.5.0 → noah_code-0.6.0}/.github/workflows/ci.yml +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/.github/workflows/release.yml +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/.gitignore +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/.pre-commit-config.yaml +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/docs/assets/noah-in-action.svg +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/docs/assets/noah-logo.svg +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/docs/development.md +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/docs/extensions.md +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/docs/releases/v0.1.0.md +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/docs/releases/v0.1.1.md +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/docs/releases/v0.2.0.md +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/docs/releases/v0.2.1.md +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/docs/releases/v0.2.2.md +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/docs/releases/v0.2.3.md +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/docs/releases/v0.2.4.md +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/docs/releases/v0.3.0.md +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/docs/releases/v0.4.0.md +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/docs/releases/v0.4.1.md +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/docs/releases/v0.5.0.md +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/docs/security.md +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/install.sh +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/__main__.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/agents.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/approvals.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/budget.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/commands.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/composer.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/credentials.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/custom_commands.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/event_bridge.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/events.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/github.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/llm_replies.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/macos_sandbox.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/mcp_setup.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/predict.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/project_notes.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/providers.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/redaction.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/secure_files.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/skills_setup.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/telemetry.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/themes.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/tool_output.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/tools/__init__.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/tools/diff_tools.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/tools/github_tools.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/tools/lsp_tools.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/tools/media_tools.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/tools/memory_tools.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/tools/plan_tools.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/tools/process_tools.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/tools/question_tools.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/tools/task_tools.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/tools/web_tools.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/ui/__init__.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/ui/console.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/ui/protocol.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/updates.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/usage.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/workspace.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/src/noah_code/worktree.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/conftest.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_agents.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_approvals.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_budget.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_cache_context.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_commands.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_composer.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_console_ui.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_credentials.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_custom_commands.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_diff_tools.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_efficiency.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_event_bridge.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_event_bridge_and_shell.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_git_tools.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_github.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_installer.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_llm.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_llm_replies.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_lsp_tools.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_mcp_setup.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_plan_memory_tools.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_process_tools.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_project_notes.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_prompt_scorecard.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_providers.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_question_tools.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_redaction.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_run_exit.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_sessions.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_skills_setup.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_summarization.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_task_tools.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_telemetry.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_tool_output.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_updates.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_wave1_e2e.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_web_tools.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_workspace_tools.py +0 -0
- {noah_code-0.5.0 → noah_code-0.6.0}/tests/test_worktree.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: noah-code
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.0
|
|
4
4
|
Summary: Noah Code terminal coding agent, built on NVIDIA OO Agents (NOOA)
|
|
5
5
|
Project-URL: Homepage, https://github.com/skundu42/noah-code
|
|
6
6
|
Project-URL: Documentation, https://github.com/skundu42/noah-code#readme
|
|
@@ -21,13 +21,14 @@ Classifier: Topic :: Software Development
|
|
|
21
21
|
Requires-Python: <3.14,>=3.12
|
|
22
22
|
Requires-Dist: click<9.0.0,>=8.1.0
|
|
23
23
|
Requires-Dist: litellm<1.99.0,>=1.96.0
|
|
24
|
-
Requires-Dist: nooa-cli==0.0.
|
|
25
|
-
Requires-Dist: nooa==0.0.
|
|
24
|
+
Requires-Dist: nooa-cli==0.0.10
|
|
25
|
+
Requires-Dist: nooa==0.0.10
|
|
26
26
|
Requires-Dist: packaging<27.0,>=24.0
|
|
27
27
|
Requires-Dist: pydantic<3.0.0,>=2.5.0
|
|
28
28
|
Requires-Dist: pyyaml<7.0.0,>=6.0.0
|
|
29
29
|
Requires-Dist: rich<16.0.0,>=13.0.0
|
|
30
30
|
Requires-Dist: textual<9.0.0,>=1.0.0
|
|
31
|
+
Requires-Dist: tomlkit<1.0.0,>=0.13.2
|
|
31
32
|
Provides-Extra: dev
|
|
32
33
|
Requires-Dist: mypy>=2.3.1; extra == 'dev'
|
|
33
34
|
Requires-Dist: pytest-asyncio>=0.24.0; extra == 'dev'
|
|
@@ -37,9 +38,9 @@ Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
|
37
38
|
Requires-Dist: ruff>=0.8.0; extra == 'dev'
|
|
38
39
|
Requires-Dist: types-pyyaml>=6.0.12.20260815; extra == 'dev'
|
|
39
40
|
Provides-Extra: mcp
|
|
40
|
-
Requires-Dist: nooa[mcp]==0.0.
|
|
41
|
+
Requires-Dist: nooa[mcp]==0.0.10; extra == 'mcp'
|
|
41
42
|
Provides-Extra: tracing
|
|
42
|
-
Requires-Dist: nooa[tracing]==0.0.
|
|
43
|
+
Requires-Dist: nooa[tracing]==0.0.10; extra == 'tracing'
|
|
43
44
|
Requires-Dist: opentelemetry-exporter-otlp-proto-http<2.0.0,>=1.44.0; extra == 'tracing'
|
|
44
45
|
Description-Content-Type: text/markdown
|
|
45
46
|
|
|
@@ -61,8 +62,8 @@ Description-Content-Type: text/markdown
|
|
|
61
62
|
|
|
62
63
|
<p align="center"><sub>The real Textual interface, captured from a deterministic Noah Code session.</sub></p>
|
|
63
64
|
|
|
64
|
-
Noah keeps the conversation central while the
|
|
65
|
-
|
|
65
|
+
Noah keeps the conversation central while the sidebar tracks the current action, changed files,
|
|
66
|
+
and the active plan. Tool execution stays visible, completed work compacts into
|
|
66
67
|
readable records, and every session remains scoped to its repository.
|
|
67
68
|
|
|
68
69
|
Built on the [NVIDIA OO Agents (NOOA)](https://github.com/NVIDIA-NeMo/labs-OO-Agents) runtime.
|
|
@@ -166,20 +167,27 @@ Type `/` to search the full command and configuration reference. The most common
|
|
|
166
167
|
| Control | Action |
|
|
167
168
|
| --- | --- |
|
|
168
169
|
| `Enter` | Send the current prompt or accept a selected suggestion |
|
|
169
|
-
| `Shift+Enter` | Insert a newline |
|
|
170
|
+
| `Shift+Enter` / `Ctrl+J` | Insert a newline |
|
|
171
|
+
| `Alt+Enter` | Expand or collapse the composer |
|
|
172
|
+
| `Alt+Z` | Restore a displaced draft |
|
|
170
173
|
| Drag, then `Cmd+C` / `Ctrl+Shift+C` | Select and copy TUI text |
|
|
171
174
|
| `Ctrl+Shift+C` with no selection | Copy the latest Noah reply |
|
|
172
175
|
| `Ctrl+G` | Open the searchable skills picker |
|
|
173
176
|
| `Ctrl+L` | Open the model picker |
|
|
174
177
|
| `Ctrl+R` | Search and recall a prior prompt |
|
|
175
178
|
| `Ctrl+T` | Expand or collapse live tool output |
|
|
176
|
-
| `
|
|
179
|
+
| `Alt+E` | Open the reasoning-effort picker |
|
|
177
180
|
| `Alt+Up` | Recall the newest queued prompt for editing |
|
|
178
181
|
| `Ctrl+]` | Return to live transcript output |
|
|
179
|
-
| `Tab` |
|
|
182
|
+
| `Tab` / `Shift+Tab` | Navigate focus; Tab completes suggestions |
|
|
183
|
+
| `Ctrl+B` | Switch between build and plan mode |
|
|
184
|
+
| `Ctrl+D` | Review changes while working or idle |
|
|
185
|
+
| `Ctrl+C` | Stop the current run and pause queued follow-ups |
|
|
180
186
|
| `F2` | Open execution activity |
|
|
181
187
|
| `F3` | Open paginated conversation history |
|
|
182
188
|
| `F4` | Open the live agent, terminal, and job ledger |
|
|
189
|
+
| `F5` | Edit, reorder, resume, or discard queued follow-ups |
|
|
190
|
+
| `F8` | Show or hide the sidebar |
|
|
183
191
|
| `Shift+F7` | Focus or leave the scrollable context rail |
|
|
184
192
|
| `/model` | Configure a provider or switch the session model |
|
|
185
193
|
| `/theme` | Choose Atom One Dark, Noah Ocean, Graphite, or High Contrast |
|
|
@@ -247,7 +255,7 @@ are configured under `[reliability.retries]`.
|
|
|
247
255
|
## Updates
|
|
248
256
|
|
|
249
257
|
Noah checks PyPI for new versions at most once every 24 hours. New TUI sessions show a temporary
|
|
250
|
-
banner when an update is available
|
|
258
|
+
banner when an update is available, with `F6` opening its details. Installation
|
|
251
259
|
remains explicit by default:
|
|
252
260
|
|
|
253
261
|
```bash
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
|
|
17
17
|
<p align="center"><sub>The real Textual interface, captured from a deterministic Noah Code session.</sub></p>
|
|
18
18
|
|
|
19
|
-
Noah keeps the conversation central while the
|
|
20
|
-
|
|
19
|
+
Noah keeps the conversation central while the sidebar tracks the current action, changed files,
|
|
20
|
+
and the active plan. Tool execution stays visible, completed work compacts into
|
|
21
21
|
readable records, and every session remains scoped to its repository.
|
|
22
22
|
|
|
23
23
|
Built on the [NVIDIA OO Agents (NOOA)](https://github.com/NVIDIA-NeMo/labs-OO-Agents) runtime.
|
|
@@ -121,20 +121,27 @@ Type `/` to search the full command and configuration reference. The most common
|
|
|
121
121
|
| Control | Action |
|
|
122
122
|
| --- | --- |
|
|
123
123
|
| `Enter` | Send the current prompt or accept a selected suggestion |
|
|
124
|
-
| `Shift+Enter` | Insert a newline |
|
|
124
|
+
| `Shift+Enter` / `Ctrl+J` | Insert a newline |
|
|
125
|
+
| `Alt+Enter` | Expand or collapse the composer |
|
|
126
|
+
| `Alt+Z` | Restore a displaced draft |
|
|
125
127
|
| Drag, then `Cmd+C` / `Ctrl+Shift+C` | Select and copy TUI text |
|
|
126
128
|
| `Ctrl+Shift+C` with no selection | Copy the latest Noah reply |
|
|
127
129
|
| `Ctrl+G` | Open the searchable skills picker |
|
|
128
130
|
| `Ctrl+L` | Open the model picker |
|
|
129
131
|
| `Ctrl+R` | Search and recall a prior prompt |
|
|
130
132
|
| `Ctrl+T` | Expand or collapse live tool output |
|
|
131
|
-
| `
|
|
133
|
+
| `Alt+E` | Open the reasoning-effort picker |
|
|
132
134
|
| `Alt+Up` | Recall the newest queued prompt for editing |
|
|
133
135
|
| `Ctrl+]` | Return to live transcript output |
|
|
134
|
-
| `Tab` |
|
|
136
|
+
| `Tab` / `Shift+Tab` | Navigate focus; Tab completes suggestions |
|
|
137
|
+
| `Ctrl+B` | Switch between build and plan mode |
|
|
138
|
+
| `Ctrl+D` | Review changes while working or idle |
|
|
139
|
+
| `Ctrl+C` | Stop the current run and pause queued follow-ups |
|
|
135
140
|
| `F2` | Open execution activity |
|
|
136
141
|
| `F3` | Open paginated conversation history |
|
|
137
142
|
| `F4` | Open the live agent, terminal, and job ledger |
|
|
143
|
+
| `F5` | Edit, reorder, resume, or discard queued follow-ups |
|
|
144
|
+
| `F8` | Show or hide the sidebar |
|
|
138
145
|
| `Shift+F7` | Focus or leave the scrollable context rail |
|
|
139
146
|
| `/model` | Configure a provider or switch the session model |
|
|
140
147
|
| `/theme` | Choose Atom One Dark, Noah Ocean, Graphite, or High Contrast |
|
|
@@ -202,7 +209,7 @@ are configured under `[reliability.retries]`.
|
|
|
202
209
|
## Updates
|
|
203
210
|
|
|
204
211
|
Noah checks PyPI for new versions at most once every 24 hours. New TUI sessions show a temporary
|
|
205
|
-
banner when an update is available
|
|
212
|
+
banner when an update is available, with `F6` opening its details. Installation
|
|
206
213
|
remains explicit by default:
|
|
207
214
|
|
|
208
215
|
```bash
|
|
@@ -219,12 +219,14 @@ supported by the OTLP exporters; keep authentication headers in the environment
|
|
|
219
219
|
secret store rather than TOML.
|
|
220
220
|
|
|
221
221
|
Repository-controlled configuration cannot weaken the host trust boundary. Project config is
|
|
222
|
-
ignored for `auto_approve`, `budget`, `efficiency`, `enabled_skills`, `hooks`, `lsp`, `mcp`,
|
|
222
|
+
ignored for `auto_approve`, `yolo`, `budget`, `checkpoints`, `efficiency`, `enabled_skills`, `hooks`, `lsp`, `mcp`,
|
|
223
223
|
`permission_rules`, `processes`, `reliability`, `session_dir`, `tracing`, `updates`, and
|
|
224
224
|
`unsafe_inprocess_code_execution`. Put those settings in trusted user config, the environment, or
|
|
225
225
|
an explicit CLI flag. Language-server overrides and hooks are user-only because they launch local
|
|
226
|
-
executables; reliability and
|
|
227
|
-
host limits.
|
|
226
|
+
executables; reliability, budget, and checkpoint settings are user-only so repository content cannot
|
|
227
|
+
weaken host limits or recovery protections. Project config may select `mode = "plan"`, but choosing
|
|
228
|
+
build mode requires trusted configuration or an explicit CLI flag. Newly added settings are user-only
|
|
229
|
+
unless explicitly approved for project configuration.
|
|
228
230
|
|
|
229
231
|
A user-configured `permission_rules` array replaces the default rule array. Copy forward every
|
|
230
232
|
default you still want before adding overrides. Hard secret, destructive-shell, and plan-mode
|
|
@@ -362,8 +364,8 @@ Permission rules are evaluated in order, and the last matching rule wins. The de
|
|
|
362
364
|
- Keeps file tools inside the active workspace and asks before MCP access.
|
|
363
365
|
- Denies plan-mode mutations regardless of broader allow rules. Plan mode may still run
|
|
364
366
|
read-only subagents. Its shell allowlist accepts only literal, unqualified read-only programs;
|
|
365
|
-
|
|
366
|
-
|
|
367
|
+
arguments are checked for write-capable options. Test collection and interpreter execution,
|
|
368
|
+
including arbitrary awk programs, are not treated as read-only because they can execute code.
|
|
367
369
|
|
|
368
370
|
`--auto` changes routine ask decisions to allow but never overrides an explicit deny.
|
|
369
371
|
Elevated-risk commands such as file removal, downloads, and package installation still require
|
|
@@ -384,7 +386,7 @@ sh install.sh
|
|
|
384
386
|
```
|
|
385
387
|
|
|
386
388
|
Installs created by the one-line command check PyPI at most once every 24 hours. If a release is
|
|
387
|
-
available, a new TUI session shows a temporary banner
|
|
389
|
+
available, a new TUI session shows a temporary banner with `F6` opening its details.
|
|
388
390
|
Run `noah update` when ready. When an update is installed, Noah exits before starting the task so
|
|
389
391
|
it cannot mix old and new runtime modules. Rerun the command to continue on the new version.
|
|
390
392
|
|
|
@@ -5,8 +5,11 @@
|
|
|
5
5
|
| Key | Action |
|
|
6
6
|
|-----|--------|
|
|
7
7
|
| `Enter` | Send the current message, or queue a follow-up while a turn is running |
|
|
8
|
-
| `Shift+Enter` | Insert a newline without sending |
|
|
9
|
-
| `
|
|
8
|
+
| `Shift+Enter` or `Ctrl+J` | Insert a newline without sending |
|
|
9
|
+
| `Alt+Enter` | Expand or collapse the composer |
|
|
10
|
+
| `Alt+Z` | Restore the draft saved before a palette or history selection |
|
|
11
|
+
| `Tab` / `Shift+Tab` | Move focus forward/back; Tab completes an open suggestion |
|
|
12
|
+
| `Ctrl+B` | Switch between build and plan mode |
|
|
10
13
|
| `Ctrl+P` | Open the command palette |
|
|
11
14
|
| `Ctrl+G` | Open the searchable skills picker |
|
|
12
15
|
| `Ctrl+L` | Open the model picker |
|
|
@@ -14,34 +17,43 @@
|
|
|
14
17
|
| `Ctrl+R` | Search prior prompts and recall one into the composer |
|
|
15
18
|
| `Ctrl+T` | Expand or collapse live tool output |
|
|
16
19
|
| `Alt+Up` | Recall the newest queued prompt into the composer |
|
|
17
|
-
| `
|
|
20
|
+
| `Alt+E` | Open the reasoning-effort picker |
|
|
21
|
+
| `Ctrl+D` | Review changed files, including while work is running |
|
|
18
22
|
| `Ctrl+N` | Start a new session |
|
|
19
|
-
| `Ctrl+C` |
|
|
23
|
+
| `Ctrl+C` | Stop the active turn and pause queued follow-ups, keeping attachments; press twice while idle to quit |
|
|
20
24
|
| `Ctrl+Q` | Quit |
|
|
21
25
|
| `F1` or `?` | Show help |
|
|
22
|
-
| `F2` |
|
|
23
|
-
| `F3` |
|
|
26
|
+
| `F2` | Search recent activity and inspect captured output |
|
|
27
|
+
| `F3` | Search loaded conversation history; Ctrl+Home loads older messages |
|
|
24
28
|
| `F4` | Open the live work ledger for agents, terminals, and background jobs |
|
|
29
|
+
| `F5` | Manage queued prompts: E edit, R resume, X discard all |
|
|
30
|
+
| `F6` | Inspect the latest notice or error |
|
|
31
|
+
| `F7` | Inspect context sources |
|
|
32
|
+
| `F8` | Show or hide the sidebar |
|
|
25
33
|
| `Shift+F7` | Focus or leave the context rail on wide terminals |
|
|
26
34
|
| `Ctrl+]` | Return to live transcript output and clear the new-output counter |
|
|
27
35
|
|
|
28
36
|
At an approval prompt, press `1` to approve once, `2` to remember the approval for the current
|
|
29
|
-
session, or `3`/`Esc` to reject it.
|
|
37
|
+
session, or `3`/`Esc` to reject it. The dialog explains the matching scope and keeps the
|
|
38
|
+
full target scrollable. Question cards accept numbered choices and show question progress;
|
|
39
|
+
`Esc` skips that question.
|
|
30
40
|
|
|
31
41
|
The TUI uses Atom One Dark by default and also includes Noah Ocean, Graphite, and High Contrast.
|
|
32
|
-
Switch and persist the active palette with `/theme
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
42
|
+
Switch and persist the active palette with `/theme`; dialogs and tool output use the same
|
|
43
|
+
semantic colors. The sidebar appears automatically at 128 columns and 24 rows or larger,
|
|
44
|
+
prioritizing the current action, changed filenames, and the active plan. Empty work sections
|
|
45
|
+
stay hidden. `F8` toggles the sidebar and remembers that choice for the app run; below 100
|
|
46
|
+
columns it stays hidden. Narrow terminals keep the full conversation width. Terminals 25
|
|
47
|
+
rows high or shorter use compact spacing. Model and mode remain in the header; `/status`,
|
|
48
|
+
`/tokens`, and the existing inspectors provide full metadata.
|
|
49
|
+
|
|
50
|
+
The line below the composer keeps clickable, focused-pane keyboard guidance on the left and, when space permits,
|
|
39
51
|
session input/output tokens, cache hit rate, and estimated cost on the right. This telemetry remains
|
|
40
52
|
available even when the wide context rail is hidden.
|
|
41
53
|
|
|
42
54
|
Live tool output stays in a compact two-line drawer so long commands do not push the conversation
|
|
43
|
-
away. Press `Ctrl+T` to expand the drawer in place; `F2` retains
|
|
44
|
-
finishes. The drawer replaces the animated working banner while a visible tool is active, avoiding
|
|
55
|
+
away. Press `Ctrl+T` to expand the drawer in place; `F2` retains bounded captured output after the tool
|
|
56
|
+
finishes, explicitly marking omitted middle output when the capture limit is reached. The drawer replaces the animated working banner while a visible tool is active, avoiding
|
|
45
57
|
duplicate status lines; the banner returns between tools.
|
|
46
58
|
|
|
47
59
|
Type `/` in the composer to open the inline command list; the list remains visible and filters
|
|
@@ -50,14 +62,18 @@ close the list. Press `Enter` again to run the completed command. Typing `/confi
|
|
|
50
62
|
to every resolved configuration path and its current redacted value.
|
|
51
63
|
|
|
52
64
|
Press `Ctrl+R` to search prompts already shown in the current session. Choosing one loads it into
|
|
53
|
-
the composer without sending it
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
65
|
+
the composer without sending it and saves the displaced draft for `Alt+Z`. Palette choices
|
|
66
|
+
use the same draft protection; skill selections insert at the cursor. Pressing `Esc` leaves
|
|
67
|
+
the current draft unchanged. Commands blocked while busy remain editable.
|
|
68
|
+
|
|
69
|
+
Until a session has its first user prompt, the main pane keeps the Noah wordmark centered.
|
|
70
|
+
The sidebar scrolls when needed; press Tab to focus it or use `Shift+F7`, then arrows,
|
|
71
|
+
Page Up/Down, Home, or End. Git status is collected in a background worker at startup and
|
|
72
|
+
turn boundaries, and every five seconds while working with the sidebar visible. Existing
|
|
73
|
+
sessions restore their recent transcript. F3 preserves reading position when older pages
|
|
74
|
+
load; its search covers the messages loaded so far. F2 searches captured action labels,
|
|
75
|
+
commands, results, and output. Failed tool attempts remain visible in the conversation
|
|
76
|
+
with an F2 details hint.
|
|
61
77
|
|
|
62
78
|
Drag across transcript, activity, diff, or history text to select it. `Cmd+C` on macOS or
|
|
63
79
|
`Ctrl+Shift+C` in other terminals copies the selection; when there is no selection, the same
|
|
@@ -85,15 +101,18 @@ The queue holds at most 100 items. A 101st `Enter` drops the oldest and status-p
|
|
|
85
101
|
`steer dropped oldest`. `@path` mentions and `/attach` paths expand when the item is injected, not
|
|
86
102
|
when it is queued. A follow-up that names files Noah cannot resolve is dropped; later items stay.
|
|
87
103
|
Sequenced items are persisted in the session runtime database, so an unexpected process exit does
|
|
88
|
-
not lose them. `Ctrl+C`
|
|
89
|
-
|
|
104
|
+
not lose them. `Ctrl+C` stops the current turn and pauses delivery, keeping queued prompts
|
|
105
|
+
and pending attachments. Pause state, order, and attachments survive reopening the session.
|
|
106
|
+
F5 lets you edit a selected prompt, resume delivery with R, or explicitly discard everything
|
|
107
|
+
with X. Switching or starting a session clears the active queue; durable state belongs to
|
|
108
|
+
its originating session.
|
|
90
109
|
|
|
91
110
|
Approval and `ask.question` modals keep the composer. Queueing resumes after the modal closes.
|
|
92
111
|
|
|
93
112
|
These slash commands still run while a turn is in progress: `/status`, `/tokens`, `/todos`,
|
|
94
|
-
`/health`, `/help`, `/trace`, `/work`, and `/terminals`. `/attach PATH` remembers the file for the next queued follow-up.
|
|
95
|
-
`/exit`
|
|
96
|
-
finishes, including `/undo`, `/redo`, `/mode`, `/model`, `/
|
|
113
|
+
`/health`, `/help`, `/trace`, `/work`, `/diff`, and `/terminals`. `/attach PATH` remembers the file for the next queued follow-up.
|
|
114
|
+
`/exit` stops the turn and leaves with queued input preserved. Mutating commands wait until the turn
|
|
115
|
+
finishes, including `/undo`, `/redo`, `/mode`, `/model`, `/new`, `/sessions`, `/worktree`,
|
|
97
116
|
`/pr`, `/plan`, `/memory`, and `/compact`.
|
|
98
117
|
|
|
99
118
|
Tool and shell output is batched into a live execution panel instead of forcing one full-screen
|
|
@@ -104,6 +123,23 @@ Consecutive reads or writes merge into a single line (`✓ Read a.py, b.py +1`)
|
|
|
104
123
|
compact. `F2` retains the latest 100 activity records, bounded by the configured
|
|
105
124
|
`max_output_chars` per activity.
|
|
106
125
|
|
|
126
|
+
|
|
127
|
+
### Reviewing results
|
|
128
|
+
|
|
129
|
+
`Ctrl+D` or `/diff` opens the changed-file list first. Patches and editor diagnostics load
|
|
130
|
+
when selected, with separate capture timestamps; Ctrl+R refreshes the list. Review is
|
|
131
|
+
available during a run, with revert and undo disabled until work is idle. Type `/` to
|
|
132
|
+
filter filenames, J/K to change files, N/P to move between hunks, V to toggle editor
|
|
133
|
+
diagnostics, and O to open the selected
|
|
134
|
+
file using `$VISUAL` or `$EDITOR` (falling back to `vi`). Large patch previews explicitly
|
|
135
|
+
state when truncated. Editor diagnostics describe the current worktree, including when
|
|
136
|
+
viewing staged changes.
|
|
137
|
+
|
|
138
|
+
Completion receipts show recorded check commands and their actual exit statuses, separate
|
|
139
|
+
from editor diagnostics. They include observable changed-file counts and advertise journal
|
|
140
|
+
undo only when its preflight succeeds. When results are unavailable, the receipt says so;
|
|
141
|
+
compound shell expressions are not treated as individual passing test commands.
|
|
142
|
+
|
|
107
143
|
## Built-in slash commands
|
|
108
144
|
|
|
109
145
|
| Command | Purpose |
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Noah Code v0.5.1
|
|
2
|
+
|
|
3
|
+
This release migrates Noah to NOOA 0.0.10 and preserves reasoning state in the default
|
|
4
|
+
lean execution mode.
|
|
5
|
+
|
|
6
|
+
## Reasoning continuity
|
|
7
|
+
|
|
8
|
+
- Structured reasoning returned alongside tool calls is retained in lean-mode history and
|
|
9
|
+
included in the next provider request. Noah keeps its compact tool transcript while gaining
|
|
10
|
+
upstream's reasoning-state support.
|
|
11
|
+
- Regression checks cover the follow-up provider request, multiple tool calls, and responses
|
|
12
|
+
without reasoning state.
|
|
13
|
+
|
|
14
|
+
## Runtime migration
|
|
15
|
+
|
|
16
|
+
- Pin NOOA and NOOA CLI, including MCP and tracing extras, to 0.0.10.
|
|
17
|
+
- Adopt upstream's shell framing fixes: malformed quotes and heredocs report syntax errors,
|
|
18
|
+
and commands that read stdin cannot consume the shell's internal control protocol.
|
|
19
|
+
- Carry upstream's configured error-output limits into Noah's macOS sandbox worker.
|
|
20
|
+
- Preserve Noah's background-task and recovery notifications after upstream's queue changes.
|
|
21
|
+
- Supply absolute file locations for upstream's updated edit anchors, keeping Noah's stale-edit
|
|
22
|
+
protections and workspace-relative display paths.
|
|
23
|
+
|
|
24
|
+
The migration also includes upstream's bounded, source-aware sandbox diagnostics and preservation
|
|
25
|
+
of MCP call timeouts during OAuth refresh.
|
|
26
|
+
|
|
27
|
+
## Upgrade
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
noah update
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Validation uses deterministic provider responses and runtime regressions. This release does not
|
|
34
|
+
claim measured live-provider quality improvements or general token savings.
|
|
35
|
+
|
|
36
|
+
**Full changelog:** https://github.com/skundu42/noah-code/compare/v0.5.0...v0.5.1
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Noah Code v0.6.0
|
|
2
|
+
|
|
3
|
+
Noah now preserves drafts and queued work, makes changes easier to review while the agent runs,
|
|
4
|
+
and reports recorded check results alongside accurate undo availability. This release also fixes
|
|
5
|
+
permission boundaries, crash recovery, checkpoint restoration, and resumed-session continuity.
|
|
6
|
+
|
|
7
|
+
## Input and navigation
|
|
8
|
+
|
|
9
|
+
- Palette and history selections save the displaced draft for `Alt+Z`; skills insert at the
|
|
10
|
+
cursor. Blocked commands and failed queue writes leave the prompt editable.
|
|
11
|
+
- `Ctrl+C` stops the current run and pauses queued prompts while retaining attachments.
|
|
12
|
+
Paused state, delivery order, and attachments survive reopening. `F5` edits a selected prompt,
|
|
13
|
+
resumes delivery, or explicitly discards waiting input.
|
|
14
|
+
- `Tab` and `Shift+Tab` move focus; Tab still completes open suggestions. Use `Ctrl+B` for
|
|
15
|
+
Build/Plan, `Alt+E` for reasoning, `Alt+Enter` to expand the composer, and `Ctrl+J` as a newline
|
|
16
|
+
alternative to Shift+Enter. These replace the previous Tab and Shift+Tab mode/settings shortcuts.
|
|
17
|
+
- The sidebar prioritizes current work, changed filenames, and the active plan. It appears
|
|
18
|
+
automatically at 128 columns and 24 rows or larger; `F8` toggles it. Footer actions follow focus.
|
|
19
|
+
- `F2` searches captured activity; `F3` searches loaded conversation history and preserves reading
|
|
20
|
+
position when loading older pages. Failed tool attempts remain visible with a details hint.
|
|
21
|
+
- Approval details scroll without hiding the decision buttons. Question cards support numbered
|
|
22
|
+
choices and progress. Dialogs use the selected theme's semantic colors.
|
|
23
|
+
|
|
24
|
+
## Review and check results
|
|
25
|
+
|
|
26
|
+
- `Ctrl+D` or `/diff` opens the file list immediately and loads selected patches and diagnostics
|
|
27
|
+
progressively. Read-only review stays available during work.
|
|
28
|
+
- Filter files, navigate hunks with N/P, open a file in the configured editor with O, toggle
|
|
29
|
+
diagnostics with V, and refresh with Ctrl+R. Compact terminals reserve space for the patch.
|
|
30
|
+
- Reviews show capture timestamps and identify truncated previews. Revert checks the captured
|
|
31
|
+
file, index, and HEAD again after approval; active work blocks revert and undo.
|
|
32
|
+
- Completion receipts report recorded check-command exit statuses, separate from editor
|
|
33
|
+
diagnostics. Changed-file observations include Git-visible shell edits and journaled edits;
|
|
34
|
+
undo is offered only when its preflight succeeds and covers the observed files.
|
|
35
|
+
- Command history retains 512 results. Unknown or compound shell commands are not classified as
|
|
36
|
+
individual checks, and missing results are reported explicitly.
|
|
37
|
+
|
|
38
|
+
## Reliability and permission fixes
|
|
39
|
+
|
|
40
|
+
- Repository configuration can no longer enable YOLO or override trusted permission, sandbox,
|
|
41
|
+
hook, credential, or checkpoint settings. Repository mode may tighten execution to plan mode.
|
|
42
|
+
- Command classification requires approval for mutating or unrecognized filter options.
|
|
43
|
+
Broker checks validate the complete operation path and protect capabilities from replacement.
|
|
44
|
+
- Checkpoint restore preserves protected files and refuses conflicting paths before writing.
|
|
45
|
+
Capture batches Git operations and bypasses repository content filters.
|
|
46
|
+
- Interrupted-write recovery saves the current contents before restoring the preimage, preserving
|
|
47
|
+
repairs made after a crash. Empty files retain their correct undo/redo state after resume.
|
|
48
|
+
- Journal retention is consistently bounded to 20 turns. Compaction artifacts preserve complete
|
|
49
|
+
mixed tool results, and live summarizers survive session reopening and older snapshots.
|
|
50
|
+
- Timed-out hooks terminate their process groups and retain bounded output. Configuration writes
|
|
51
|
+
use TOMLKit to preserve valid TOML structure and comments while updating settings atomically.
|
|
52
|
+
- Remove duplicate configuration writers, command registration, sampling helpers, and UI state.
|
|
53
|
+
|
|
54
|
+
## Upgrade
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
noah update
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Move privileged settings previously stored in repository configuration to trusted user
|
|
61
|
+
configuration. See the [configuration guide](https://github.com/skundu42/noah-code/blob/v0.6.0/docs/configuration.md) and
|
|
62
|
+
[updated keyboard reference](https://github.com/skundu42/noah-code/blob/v0.6.0/docs/interactive-reference.md).
|
|
63
|
+
|
|
64
|
+
Local validation: 960 tests passed on Python 3.13/macOS, with one opt-in network test deselected;
|
|
65
|
+
lint, type checks, lockfile validation, and wheel/source builds passed. The release workflow also
|
|
66
|
+
validates package metadata and binary-only installation before publishing.
|
|
67
|
+
|
|
68
|
+
**Full changelog:** https://github.com/skundu42/noah-code/compare/v0.5.1...v0.6.0
|
|
@@ -53,16 +53,19 @@ fresh process-status snapshot, and continues the same journaled turn.
|
|
|
53
53
|
|
|
54
54
|
Direct workspace writes and atomic multi-file patches record their pre-images in the runtime
|
|
55
55
|
database before changing the checkout. A crash before the commit record restores those pre-images
|
|
56
|
-
on the next launch.
|
|
57
|
-
|
|
56
|
+
on the next launch. Before rollback, the current contents and path metadata are saved in the session's
|
|
57
|
+
`recovery/` directory, whose location is reported at startup. This preserves repairs made after the
|
|
58
|
+
crash. If the backup cannot be saved, recovery stops before replacing that file. The persistent edit
|
|
59
|
+
journal used by `/undo` and `/redo` retains the newest 20 turns in memory and across restarts.
|
|
58
60
|
|
|
59
61
|
Git checkpoints are enabled by default. Noah captures them at turn boundaries and before mutating
|
|
60
62
|
shell commands, stores them under `refs/noah-code/checkpoints/<session>/`, and keeps the newest 50
|
|
61
63
|
by default. Capturing uses a temporary Git index and does not move `HEAD` or disturb the user's
|
|
62
|
-
index. Capture
|
|
64
|
+
index. Capture batches filter-free hashing and index updates,
|
|
63
65
|
so repository clean filters never execute during capture, and paths the permission engine
|
|
64
66
|
classifies as secrets (`.env`, key stores, credential files) are never staged into checkpoint
|
|
65
|
-
refs.
|
|
67
|
+
refs. Restore also excludes these paths, preserving their current contents and index entries.
|
|
68
|
+
Inspect and restore checkpoints with:
|
|
66
69
|
|
|
67
70
|
```text
|
|
68
71
|
/checkpoints
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "noah-code"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.6.0"
|
|
4
4
|
description = "Noah Code terminal coding agent, built on NVIDIA OO Agents (NOOA)"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12,<3.14"
|
|
@@ -19,8 +19,8 @@ classifiers = [
|
|
|
19
19
|
]
|
|
20
20
|
|
|
21
21
|
dependencies = [
|
|
22
|
-
"nooa==0.0.
|
|
23
|
-
"nooa-cli==0.0.
|
|
22
|
+
"nooa==0.0.10",
|
|
23
|
+
"nooa-cli==0.0.10",
|
|
24
24
|
# LiteLLM 1.92.0-1.95.x intermittently shipped without macOS wheels,
|
|
25
25
|
# forcing a Rust source build. Wheels are back for every release since
|
|
26
26
|
# 1.96.0 (abi3 since 1.96.2), so the installer stays binary-only.
|
|
@@ -33,6 +33,7 @@ dependencies = [
|
|
|
33
33
|
"packaging>=24.0,<27.0",
|
|
34
34
|
"rich>=13.0.0,<16.0.0",
|
|
35
35
|
"textual>=1.0.0,<9.0.0",
|
|
36
|
+
"tomlkit>=0.13.2,<1.0.0",
|
|
36
37
|
]
|
|
37
38
|
|
|
38
39
|
[project.urls]
|
|
@@ -53,10 +54,10 @@ dev = [
|
|
|
53
54
|
"types-pyyaml>=6.0.12.20260815",
|
|
54
55
|
]
|
|
55
56
|
mcp = [
|
|
56
|
-
"nooa[mcp]==0.0.
|
|
57
|
+
"nooa[mcp]==0.0.10",
|
|
57
58
|
]
|
|
58
59
|
tracing = [
|
|
59
|
-
"nooa[tracing]==0.0.
|
|
60
|
+
"nooa[tracing]==0.0.10",
|
|
60
61
|
"opentelemetry-exporter-otlp-proto-http>=1.44.0,<2.0.0",
|
|
61
62
|
]
|
|
62
63
|
|