Commit Graph

1084 Commits

Author SHA1 Message Date
chengyongru
88d7642c1e test: fix test failures from refactored cron and context builder
- test_context_prompt_cache: Update test to reflect merged runtime
  context and user message (commit ad99d5a merged them into one)
- Remove test_cron_commands.py: cron add CLI command was removed
  in commit c05cb2e (unified scheduling via cron tool)
2026-03-04 17:13:25 +01:00
Sergio Sánchez Vallés
c64fe0afd8 fix(tests): resolve failing tests on main branch
- Unskip matrix logic by adding missing deps (matrix-nio, nh3, mistune)
- Update matrix tests for 'allow_from' default deny security change
- Fix asyncio typing keepalive leak in matrix tests
- Update context prompt cache assert after runtime message merge
- Fix flaky cron service test with mtime sleep
- Remove obsolete test_cron_commands.py testing deleted CLI commands
2026-03-04 16:53:07 +01:00
Daniel Emden
ecdf309404 fix(codex): pass reasoning_effort to Codex API
The OpenAI Codex provider accepts reasoning_effort but silently
discards it. Wire it through as {"reasoning": {"effort": ...}} in
the request body so the config option actually takes effect.
2026-03-04 15:31:56 +01:00
chengyongru
bb8512ca84 test: fix test failures from refactored cron and context builder
- test_context_prompt_cache: Update test to reflect merged runtime
  context and user message (commit ad99d5a merged them into one)
- Remove test_cron_commands.py: cron add CLI command was removed
  in commit c05cb2e (unified scheduling via cron tool)
2026-03-04 20:49:02 +08:00
Sergio Sánchez Vallés
ca1f41562c Fix telegram stop typing if not final message 2026-03-04 13:19:35 +01:00
Sergio Sánchez Vallés
61f658e045 add reasoning content to on progress message 2026-03-04 12:11:18 +01:00
Kiplangatkorir
ce65f8c11b fix: add size limit to ReadFileTool to prevent OOM
ReadFileTool had no file size check — reading a multi-GB file would
load everything into memory and crash the process. Now:
- Rejects files over ~512KB at the byte level (fast stat check)
- Truncates at 128K chars with a notice if content is too long
- Guides the agent to use exec with head/tail/grep for large files

This matches the protection already in ExecTool (10KB) and
WebFetchTool (50KB).
2026-03-04 11:15:45 +03:00
Kiplangatkorir
edaf7a244a fix: handle invalid ISO datetime in CronTool gracefully
datetime.fromisoformat(at) raises ValueError for malformed strings,
which propagated uncaught and crashed the tool execution. Now catches
ValueError and returns a user-friendly error message instead.
2026-03-04 10:55:17 +03:00
Kiplangatkorir
df8d09f2b6 fix: guard validate_params against non-dict input
When the LLM returns malformed tool arguments (e.g. a list or string
instead of a dict), validate_params would crash with AttributeError
in _validate() when calling val.items(). Now returns a clear
validation error instead of crashing.
2026-03-04 10:53:30 +03:00
Liwx
20bec3bc26 Update qq.py 2026-03-04 14:06:19 +08:00
Liwx
d0a48ed23c Update qq.py 2026-03-04 14:00:40 +08:00
WufeiHalf
832e2e8ecd Merge branch 'HKUDS:main' into main 2026-03-04 10:51:10 +08:00
worenidewen
3e83425142 feat(mcp): add SSE transport support with auto-detection 2026-03-04 01:10:19 +08:00
Sergio Sánchez Vallés
102b9716ed feat: Implement Telegram draft/progress messages (streaming) 2026-03-03 17:16:08 +01:00
Xubin Ren
1303cc6669 Merge PR #1485: fix: add missed openai dependency
fix: add missed `openai` dependency
2026-03-04 00:14:52 +08:00
cocolato
5f7fb9c75a add missed dependency 2026-03-03 23:40:56 +08:00
WufeiHalf
0f1cc40b22 feat(telegram): add Telegram group topic support 2026-03-03 22:08:01 +08:00
astvacp
01744029d8 fix problem with proxy for Telegram
This PR fixes problem with proxy for Telegram
2026-03-03 18:08:50 +07:00
Re-bin
c05cb2ef64 refactor(cron): remove CLI cron commands and unify scheduling via cron tool 2026-03-03 05:51:24 +00:00
Re-bin
9a41aace1a Merge PR #1458: prevent cron self-scheduling safely 2026-03-03 05:36:50 +00:00
Re-bin
30803afec0 fix(cron): isolate cron-execution guard with contextvars 2026-03-03 05:36:48 +00:00
Re-bin
ec6430fa0c Merge branch 'main' into pr-1458 2026-03-03 05:18:28 +00:00
Re-bin
caa8acf6d9 Merge PR #1456: merge user messages and harden save_turn multimodal persistence 2026-03-03 05:13:20 +00:00
Re-bin
03b83fb79e fix(agent): skip empty multimodal user entries after runtime-context strip 2026-03-03 05:13:17 +00:00
Nikolas de Hor
da8a4fc68c fix: prevent cron job execution from scheduling new jobs
When a cron job fires, the agent processes the scheduled message and
has access to the cron tool. If the original message resembles a
scheduling instruction (e.g. "remind me in 10 seconds"), the agent
would call cron.add again, creating an infinite feedback loop.

Add a cron-context flag to CronTool that blocks add operations during
cron job execution. The flag is set before process_direct() and cleared
in a finally block to ensure cleanup even on errors.

Fixes #1441
2026-03-03 01:02:33 -03:00
Nikolas de Hor
ad99d5aaa0 fix: merge consecutive user messages into single message
Some LLM providers (Minimax, Dashscope) strictly reject consecutive
messages with the same role. build_messages() was emitting two separate
user messages back-to-back: the runtime context and the actual user
content.

Merge them into a single user message, handling both plain text and
multimodal (image) content. Update _save_turn() to strip the runtime
context prefix from the merged message when persisting to session
history.

Fixes #1414
Fixes #1344
2026-03-03 00:59:58 -03:00
chengyongru
8f4baaa5ce feat(gateway): support multiple instances with --workspace and --config options
- Add --workspace/-w flag to specify workspace directory
- Add --config/-c flag to specify config file path
- Move cron store to workspace directory for per-instance isolation
- Enable running multiple nanobot instances simultaneously
2026-03-02 23:18:54 +08:00
David Markey
ecdfaf0a5a feat(custom-provider): add x-session-affinity header for prompt caching 2026-03-02 11:03:12 +00:00
Re-bin
3c79404194 fix(providers): sanitize thinking_blocks by provider and harden content normalization 2026-03-02 06:58:10 +00:00
Re-bin
1601470436 Merge PR #1399: reload cron store on timer tick 2026-03-02 06:38:00 +00:00
Re-bin
9877195de5 chore(cron): remove redundant timer comment 2026-03-02 06:37:57 +00:00
Re-bin
f3979c0ee6 Merge branch 'main' into pr-1399 2026-03-02 06:30:43 +00:00
Re-bin
3f79245b91 Merge PR #1406: normalize Matrix media metadata and attachment upload call 2026-03-02 06:28:48 +00:00
Re-bin
be4f83a760 Merge branch 'main' into pr-1406 2026-03-02 06:24:53 +00:00
Re-bin
b575606c9e Merge PR #1403: deny-by-default allowFrom with startup validation 2026-03-02 06:13:40 +00:00
Re-bin
bbfc1b40c1 security: deny-by-default allowFrom with wildcard support and startup validation 2026-03-02 06:13:37 +00:00
Wenjie Lei
2c63946519 fix(matrix): normalize media metadata and keyword-call attachment upload 2026-03-01 21:56:08 -08:00
chengyongru
d447be5ca2 security: deny by default in is_allowed for all channels
When allow_from is not configured, block all access by default
instead of allowing everyone. This prevents unauthorized access
when channels are enabled without explicit allow lists.
2026-03-02 13:18:43 +08:00
Joel Chan
e9d023f52c feat(discord): add group policy to control group respond behaviour 2026-03-02 12:16:49 +08:00
yzchen
dba93ae83a cron: reload jobs store on each timer tick 2026-03-02 11:19:45 +08:00
chengyongru
aed1ef5529 fix: add SIGTERM, SIGHUP handling and ignore SIGPIPE
- Add handler for SIGTERM to prevent "Terminated" message on Linux
- Add handler for SIGHUP for terminal closure handling
- Ignore SIGPIPE to prevent silent process termination
- Change os._exit(0) to sys.exit(0) for proper cleanup

Fixes issue #1365

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 11:04:53 +08:00
chengyongru
ae788a17f8 chore: add .worktrees to .gitignore
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 11:03:54 +08:00
zerone0x
8571df2e63 fix(feishu): split card messages when content has multiple tables
Feishu rejects interactive cards that contain more than one table element
(API error 11310: card table number over limit).

Add FeishuChannel._split_elements_by_table_limit() which partitions the flat
card-elements list into groups of at most one table each.  The send() method
now iterates over these groups and sends each as its own card message, so all
tables are delivered to the user instead of the entire message being dropped.

Single-table and table-free messages are unaffected (one card, same as before).

Fixes #1382
2026-03-01 15:13:44 +01:00
Re-bin
a5962170f6 Merge PR #1370: add web tools proxy support 2026-03-01 12:53:20 +00:00
Re-bin
15529c668e fix(web): sanitize proxy logs and polish search key hint 2026-03-01 12:53:18 +00:00
Re-bin
f5c0c75648 Merge branch 'main' into pr-1370 2026-03-01 12:48:01 +00:00
Re-bin
1109fdc682 Merge PR #1375: improve cron reminder context handling 2026-03-01 12:46:06 +00:00
Re-bin
a7d24192d9 fix(cron): route scheduled jobs through process_direct with english reminder prefix 2026-03-01 12:45:53 +00:00
VITOHJL
468dfc406b feat(cron): improve cron job context handling
Improve cron job execution context to ensure proper message delivery and
session history recording.

Changes:
- Add [绯荤粺瀹氭椂浠诲姟] prefix to cron reminder messages to clearly mark
  them as system-driven, not user queries
- Use user role for cron reminder messages (required by some LLM APIs)
- Properly handle MessageTool to avoid duplicate message delivery
- Correctly save turn history with proper skip count
- Ensure Runtime Context is included in the message list

This ensures that:
1. Cron jobs execute with proper context
2. Messages are correctly delivered to users
3. Session history accurately records cron job interactions
4. The LLM understands these are system-driven reminders, not user queries
2026-03-01 17:05:04 +08:00
chengyongru
82be2ae1a5 feat(tool): add web search proxy 2026-03-01 16:51:54 +08:00