Commit Graph

62 Commits

Author SHA1 Message Date
Asklv
fc17355640 refactor: replace install_builtin with SPIFFS directory scan
Signed-off-by: Asklv <boironic@gmail.com>
2026-02-27 10:00:00 +08:00
Asklv
f8b2a20c7a refactor: remove hardcoded BUILTIN_* skill string macros
Signed-off-by: Asklv <boironic@gmail.com>
2026-02-26 16:00:00 +08:00
Bin Meng
22886cf0f2 chore: avoid hardcoding file paths via MIMI_SPIFFS_BASE
Use MIMI_SPIFFS_BASE to centralize file path definitions, making the
base path configurable instead of hardcoded.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
2026-02-26 11:37:34 +08:00
Bin Meng
f3ee76d3b0 fix: add missing stdlib.h include in heartbeat.c
The code calls free() without including <stdlib.h>, which triggers
implicit declaration warnings during the build.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
2026-02-25 22:14:53 +08:00
crispyberry
6d50db06ad Merge pull request #71 from mogenson/fix-get-current-time 2026-02-25 01:16:15 +08:00
Bo
04c80c9c7e hotfix(proxy): fix CLI/api mismatch and add proxy type defaults
Signed-off-by: Bo <boironic@gmail.com>
2026-02-24 19:16:00 +08:00
crispyberry
42f629588d Merge pull request #39 from mdreamfly/feature/proxy-socks5
feat: add socks5 proxy support
2026-02-24 13:25:34 +08:00
Michael Mogenson
2e3ed9f259 Fix get_current_time tool
On ESP IDF 5.5 the get_current_time tool returns ESP_ERR_NOT_FOUND because
there is no "Date" header. This is because esp_http_client_get_header
only reads request headers. Response headers are only available via the
HTTP_EVENT_ON_HEADER event callback. They're dispatched and freed as they're
parsed.

Register an event handler that captures the "Date" header during HTTP response
parsing. The date string from this header is available as part of user context
after the HTTP request is finished.
2026-02-22 21:45:25 -05:00
crispyberry
c06f706ffd chore: remove dead code and fix unsafe patterns
- Remove unused context_build_messages() (superseded by direct cJSON in agent_loop)
- Remove unused llm_chat() and its helper extract_text_* functions (superseded by llm_chat_tools)
- Remove ota_manager.c from build (never called)
- Remove config_screen.c stub from build (no-op module)
- Remove unused PWR_KEY_State, Button_GPIO_Get_Level; drop config_screen dependency from button_driver
- Fix incorrect type cast in tool_get_time.c (char[64] cast to char**)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 17:11:15 +08:00
Bo
b1d8f41f1c fix: dedupe telegram updates and persist update offset
Signed-off-by: Bo <boironic@gmail.com>
2026-02-20 00:08:05 +08:00
Bo
08e59f8216 fix: select console repl backend by enabled sdkconfig
Signed-off-by: Bo <boironic@gmail.com>
2026-02-20 00:08:05 +08:00
Bo
f0a2741e0c fix: restore non-display psram usage and clean stale qrcode log
Signed-off-by: Bo <boironic@gmail.com>
2026-02-20 00:08:05 +08:00
Bo
0c256d7653 refactor: replace psram allocations with standard heap
Signed-off-by: Bo <boironic@gmail.com>
2026-02-20 00:08:05 +08:00
Bo
ce198ccbe8 chore: remove display and rgb source trees
Signed-off-by: Bo <boironic@gmail.com>
2026-02-20 00:08:05 +08:00
Bo
ba28c5e60f refactor: remove runtime display and led interactions
Signed-off-by: Bo <boironic@gmail.com>
2026-02-20 00:08:05 +08:00
Bo
9c889ef3f2 build: drop display and led component dependencies
Signed-off-by: Bo <boironic@gmail.com>
2026-02-20 00:07:26 +08:00
Asklv
9c0812c5d9 build: align component manager IDF range to 5.5.x
Signed-off-by: Asklv <boironic@gmail.com>
2026-02-18 21:30:00 +00:00
Asklv
84c04063b3 fix: allow build without mimi_secrets.h
Signed-off-by: Asklv <boironic@gmail.com>
2026-02-18 20:10:00 +00:00
crispyberry
8a5133d477 chore: rename wifi_set command to set_wifi for consistency
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 16:00:18 +08:00
crispyberry
10c9a5ed5c fix: prevent device hang when no USB host connected
Switch primary console from USB Serial/JTAG to UART so log output
doesn't block when the device is powered by a wall charger. USB
Serial/JTAG remains available as secondary console for debugging.

Closes #60

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 15:16:55 +08:00
Bo
3232de772a chore: simplify llm serial log.
Signed-off-by: Bo <boironic@gmail.com>
2026-02-18 19:16:00 +08:00
Bo
5d92917a0b feat: update mimi tips in tg.
Signed-off-by: Bo <boironic@gmail.com>
2026-02-18 17:16:00 +08:00
Bo
cba7444b26 fix: fix telegram sent error in cron task.
Signed-off-by: Bo <boironic@gmail.com>
2026-02-18 17:16:00 +08:00
Bo
6904cf9bd4 fix: fix long api key in openai.
Signed-off-by: Bo <boironic@gmail.com>
2026-02-18 00:16:00 +08:00
Bo
4ce0735c9a feat: add skill verification CLI commands and preflash SPIFFS image 2026-02-17 01:26:18 +08:00
Asklv
e196c88c49 fix: resolve skill_loader compilation errors 2026-02-17 01:06:16 +08:00
crispyberry
31a88b53c0 feat: add skills system with weather, daily-briefing, and skill-creator
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 01:06:16 +08:00
Bo
c120a6fe45 fix cron/heartbeat e2e stability and build issues 2026-02-16 23:00:00 +08:00
Asklv
5c54352ce0 fix: add missing stdbool.h include in heartbeat.h 2026-02-15 16:00:00 +08:00
m.dreamfly
54a7ab02e1 feat: add socks5 proxy support 2026-02-13 15:04:20 +08:00
Bo
e79e4e4932 feat: add wifi scaner in uart.
Signed-off-by: Bo <boironic@gmail.com>
2026-02-10 15:57:14 +08:00
crispyberry
ebff0ccb04 feat: add heartbeat service for periodic task checking
Adds a heartbeat timer that reads /spiffs/config/HEARTBEAT.md every 30
minutes and sends a prompt to the agent if actionable tasks are found.
Skips empty lines, headers, and completed checkboxes. Includes a
heartbeat_trigger CLI command for manual testing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 01:23:13 +08:00
crispyberry
dbab65bd47 feat: add cron scheduled task service with tool_use integration
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 01:02:33 +08:00
crispyberry
680f41133a Merge pull request #28 from IRONICBo/feat/add-onboarding-view
feat: add interactive onboarding view
2026-02-16 22:47:07 +08:00
Bo
7918bab27d feat: add config view for lvgl.
Signed-off-by: Bo <boironic@gmail.com>
2026-02-10 15:58:19 +08:00
Bo
106fe3b5b0 feat: add mimiclaw onboarding page.
Signed-off-by: Bo <boironic@gmail.com>
2026-02-10 15:58:12 +08:00
crispyberry
1242119bb8 feat: strengthen system prompt memory guidance for proactive persistence
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 22:43:13 +08:00
crispyberry
da43c27003 feat: restore NVS runtime config with CLI commands (NVS > build-time priority)
Bring back two-layer configuration: build-time defaults from mimi_secrets.h
with runtime NVS overrides via serial CLI. NVS values take highest priority
so a pre-flashed board can be reconfigured anywhere with just a USB cable.

Restored CLI commands: wifi_set, set_tg_token, set_api_key, set_model,
set_proxy, clear_proxy, set_search_key. Added new commands: config_show
(displays all config with sensitive fields masked), config_reset (clears
all NVS overrides), and help (lists all commands).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 20:42:10 +08:00
crispyberry
82f93b617b refactor: remove NVS/CLI config, use mimi_secrets.h as sole configuration method
All configuration is now done exclusively through mimi_secrets.h at build time.
Removed NVS read/write logic, CLI config commands (wifi_set, set_tg_token,
set_api_key, set_model, set_proxy, clear_proxy, set_search_key), and setter
functions from all modules. CLI retains debug/maintenance commands only.
Updated all documentation to reflect the change.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 23:04:24 +08:00
crispyberry
43ded65713 feat: randomize working indicator phrase before each API call
Move working indicator into ReAct loop so it fires before every
llm_chat_tools call (including tool-use iterations), and randomly
select from 5 cute phrases using esp_random().

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 18:36:51 +08:00
crispyberry
31b15aa1f9 feat: add file tools (read/write/edit/list_dir) for agent memory writes
Enable the agent to persist memories by adding 4 SPIFFS file tools
(read_file, write_file, edit_file, list_dir) with path validation,
and update the system prompt with memory guidelines pointing to
/spiffs/memory/MEMORY.md and daily notes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 17:54:52 +08:00
crispyberry
0ed0febcd0 feat: add working indicator and get_current_time to system prompt
Send "mimi😗is working..." to user when processing starts.
List get_current_time in system prompt available tools so the agent
knows to call it for time/date queries. Remove auto time fetch from
system prompt builder — agent calls the tool on demand.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 15:54:23 +08:00
crispyberry
78c7fc9b1a feat: add get_current_time built-in tool and timezone config
Fetches real time via HTTP Date header (works through proxy),
sets system clock, and returns formatted local time to the agent.
Also adds MIMI_TIMEZONE config and updates default model to claude-opus-4-5.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 13:05:02 +08:00
crispyberry
dbeaea2b2b fix: silence noisy esp-x509-crt-bundle INFO logs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 10:46:35 +08:00
crispyberry
0e1da79b74 feat: add ReAct agent loop and build-time config (mimi_secrets.h)
Rewrite agent_loop.c with ReAct tool use loop: LLM call → tool
execution → repeat until end_turn (max 10 iterations). Add tool
guidance to system prompt. Add set_search_key CLI command.

Add mimi_secrets.h for build-time credentials with highest priority
over NVS/CLI values. All modules (wifi, telegram, llm, proxy,
web_search) check build-time secrets first, fall back to NVS.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 00:37:43 +08:00
crispyberry
2fe81b8ee1 feat: add non-streaming LLM API, tool registry, and web_search tool
Replace SSE streaming with non-streaming JSON for Anthropic API.
Add llm_chat_tools() returning structured llm_response_t with text
and tool_use blocks. Implement tool registry with dispatch-by-name
and web_search tool via Brave Search API (direct + proxy support).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 00:37:36 +08:00
crispyberry
37d645474a fix: heap-allocate memory_read buffer to prevent stack overflow
CLI task stack is 4KB; the 4096-byte stack buffer in cmd_memory_read
was overflowing and corrupting the heap. Use malloc instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 23:04:09 +08:00
crispyberry
3822928e6d feat: add HTTP CONNECT proxy support for Telegram and Claude API
Enable ESP32-S3 to reach api.telegram.org and api.anthropic.com through
an HTTP CONNECT proxy (e.g. Clash Verge), required in regions where
these services are blocked.

- New proxy module (http_proxy.c/h): CONNECT tunnel + TLS via esp_tls
  with pre-connected socket injection (esp_tls_set_conn_sockfd)
- Telegram and LLM modules split into direct/proxy paths
- CLI commands: set_proxy <host> <port>, clear_proxy
- Proxy config persisted in NVS
- Fix TLS buffer: MBEDTLS_SSL_IN_CONTENT_LEN 4096 → 16384
- Increase task stacks for TLS overhead (poll 12KB, agent 12KB, outbound 8KB)
- Default model changed to claude-opus-4-6
- Capture raw error body for non-200 API responses

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 22:40:28 +08:00
crispyberry
8b5213df87 fix: add TLS certificate bundle for HTTPS connections
All HTTP clients (Telegram, Claude API, OTA) were missing
crt_bundle_attach, causing TLS handshake failures. Add esp-tls
dependency to CMakeLists.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 21:18:21 +08:00
crispyberry
1b5f00bea5 feat: add app_update dependency and sdkconfig defaults
Add app_update component to CMakeLists REQUIRES for OTA version
reporting. Add sdkconfig.defaults scaffold and gitignore nanobot
reference repo.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 18:44:51 +08:00