feat: http_post tool, nc_talk_history tool, local orchestrator retry
- http_post: POST to external URLs with per-user URL prefix allowlist
(home/{user}/http_allowlist.json); admin-only, confirm-required
- nc_talk_history: read recent NC Talk messages via Basic Auth (requires
nc_username + nc_app_password in channels.json under nextcloud)
- openai_orchestrator: _chat_with_retry() wraps both API calls with
exponential backoff (3 attempts, 1s/2s) on connection errors and
transient status codes (429, 500, 502, 503, 504)
- Docs updated: CLAUDE.md, HELP.md, TODO, MASTER, ROADMAP (50 tools)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -17,7 +17,7 @@ from google.genai import types
|
||||
|
||||
# ── Callable imports ──────────────────────────────────────────────────────────
|
||||
|
||||
from tools.web import search as _web_search, http_fetch as _http_fetch, web_read as _web_read
|
||||
from tools.web import search as _web_search, http_fetch as _http_fetch, web_read as _web_read, http_post as _http_post
|
||||
from tools.ae_knowledge import (
|
||||
journal_list as _ae_journal_list,
|
||||
journal_search as _ae_journal_search,
|
||||
@@ -63,7 +63,7 @@ from tools.scratch import (
|
||||
scratch_append as _scratch_append,
|
||||
scratch_clear as _scratch_clear,
|
||||
)
|
||||
from tools.notify import nc_talk_send as _nc_talk_send, email_send as _email_send, web_push as _web_push
|
||||
from tools.notify import nc_talk_send as _nc_talk_send, email_send as _email_send, web_push as _web_push, nc_talk_history as _nc_talk_history
|
||||
from tools.agent_notes import (
|
||||
agent_notes_read as _agent_notes_read,
|
||||
agent_notes_write as _agent_notes_write,
|
||||
@@ -90,7 +90,7 @@ import tools.agents as _mod_agents
|
||||
# ── Tool categories — used by the Model Registry UI for grouped checkboxes ───
|
||||
|
||||
TOOL_CATEGORIES: dict[str, list[str]] = {
|
||||
"Web": ["web_search", "http_fetch", "web_read"],
|
||||
"Web": ["web_search", "http_fetch", "web_read", "http_post"],
|
||||
"Files": ["file_read", "file_list", "file_write", "session_read", "session_search"],
|
||||
"Shell": ["shell_exec", "claude_allow_dir"],
|
||||
"System": ["cortex_restart", "cortex_logs", "cortex_status", "cortex_update"],
|
||||
@@ -98,7 +98,7 @@ TOOL_CATEGORIES: dict[str, list[str]] = {
|
||||
"Cron": ["cron_list", "cron_add", "cron_remove", "cron_toggle"],
|
||||
"Reminders": ["reminders_add", "reminders_list", "reminders_remove", "reminders_clear"],
|
||||
"Scratchpad": ["scratch_read", "scratch_write", "scratch_append", "scratch_clear"],
|
||||
"Notifications": ["web_push", "email_send", "nc_talk_send"],
|
||||
"Notifications": ["web_push", "email_send", "nc_talk_send", "nc_talk_history"],
|
||||
"Aether Journals": [
|
||||
"ae_journal_list", "ae_journal_search",
|
||||
"ae_journal_entries_list", "ae_journal_entry_read",
|
||||
@@ -117,6 +117,7 @@ _CALLABLES: dict[str, callable] = {
|
||||
"web_search": _web_search,
|
||||
"http_fetch": _http_fetch,
|
||||
"web_read": _web_read,
|
||||
"http_post": _http_post,
|
||||
"ae_journal_list": _ae_journal_list,
|
||||
"ae_journal_search": _ae_journal_search,
|
||||
"ae_journal_entry_read": _ae_journal_entry_read,
|
||||
@@ -157,6 +158,7 @@ _CALLABLES: dict[str, callable] = {
|
||||
"email_send": _email_send,
|
||||
"nc_talk_send": _nc_talk_send,
|
||||
"web_push": _web_push,
|
||||
"nc_talk_history": _nc_talk_history,
|
||||
"agent_notes_read": _agent_notes_read,
|
||||
"agent_notes_write": _agent_notes_write,
|
||||
"agent_notes_append": _agent_notes_append,
|
||||
@@ -181,6 +183,8 @@ TOOL_ROLES: dict[str, str] = {
|
||||
"spawn_agent": "admin",
|
||||
"email_send": "admin",
|
||||
"nc_talk_send": "admin",
|
||||
"http_post": "admin",
|
||||
"nc_talk_history": "admin",
|
||||
}
|
||||
|
||||
# Tools that require explicit user confirmation before executing.
|
||||
@@ -191,6 +195,7 @@ CONFIRM_REQUIRED: set[str] = {
|
||||
"shell_exec",
|
||||
"cron_remove",
|
||||
"reminders_clear",
|
||||
"http_post",
|
||||
}
|
||||
|
||||
_ROLE_RANK: dict[str, int] = {"user": 0, "admin": 1}
|
||||
|
||||
Reference in New Issue
Block a user