Skip to content

fix: merge latest dev updates into main - #8

Merged
node9ai merged 20 commits into
mainfrom
dev
Apr 7, 2026
Merged

fix: merge latest dev updates into main#8
node9ai merged 20 commits into
mainfrom
dev

Conversation

@node9ai

@node9ai node9ai commented Apr 7, 2026

Copy link
Copy Markdown
Contributor

Auto-generated PR

Merge latest dev changes into main to trigger a release.

⚠️ Important: When you click Squash and Merge, ensure the commit message starts with:

  • fix: to publish a Patch release (0.0.X)
  • feat: to publish a Minor release (0.X.0)
    If it starts with chore:, no PyPI package will be published!

node9ai and others added 20 commits April 4, 2026 13:18
…dError

Offline mode now activates when no daemon is running and no API key is
set — calls succeed with an audit log entry instead of raising
DaemonNotFoundError. Update the e2e test to assert the new behavior.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Resolve README.md merge conflict
- NODE9_SKIP=1 now emits a warning and writes an audit entry (no silent bypass)
- configure() is now thread-safe via threading.Lock
- DLP scan covers all string args, not just params named filename/content
- _dispatch() renamed to dispatch() — public API should not have underscore
  (_dispatch kept as deprecated alias with DeprecationWarning)
- workspace validated at __init__ time with clear error if path doesn't exist
- @internal docstring clarifies it logs to stdout, not to audit trail
- README: shell=True examples now include sanitization warning
- README: _dispatch references updated to dispatch()
- DLP now checks every string arg as a path candidate, not just params
  named filename/path — fixes silent bypass on dest/target/output params
- tool() annotation uses Union[str, Callable] instead of str | Callable
  — fixes TypeError on Python 3.9
- Docstring examples: shell=False + shlex.split(), write_code uses safe_path
- dispatch referenced consistently (not _dispatch) in all docstrings
- Node9Agent.new_session() added for server deployments with multiple users
- __all__ documents build_tools_anthropic/openai/dispatch/new_session
…ning, 13 new tests

- safe_path(filename, *, workspace=...) — workspace is now keyword-only to prevent
  silent positional arg swaps; all call sites updated
- NODE9_SKIP=1 now warns at import time (not just per-call) so it's harder to
  accidentally leave enabled in production
- new_session() docstring explicitly documents the one-instance-per-request requirement
- 13 new tests: dispatch() unknown tool (returns string, never raises), new_session()
  UUID validity and concurrent calls, _build_tools() unannotated/int/bool/float params
  and *args/**kwargs exclusion, safe_path symlink traversal rejection, configure()
  called twice (second wins) and empty args don't overwrite

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…nv var tests

- Path safety now checks ALL path-like args in @tool methods, not just the first;
  a method with src+dest params now validates both (removed the break)
- dispatch() docstring clarifies the lookup is strictly registry-based (@tool marker)
- README run_shell example gets explicit warning that shlex.split still allows
  arbitrary executables — callers must allowlist commands in production
- NODE9_SKIP env var table entry strengthened: "Never set in production"
- Git hooks now use the active virtualenv Python instead of hardcoded python3
- New tests: traversal in second path arg is caught, configure() wins over env var,
  env var sets baseline before configure() is called

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@node9ai
node9ai merged commit 7a5e579 into main Apr 7, 2026
5 checks passed
@node9ai
node9ai deleted the dev branch April 7, 2026 19:34
@node9ai
node9ai restored the dev branch April 7, 2026 20:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant