Commit Graph

71 Commits

Author SHA1 Message Date
daniel
8c28797bca feat: add /goal command for durable multi-turn objectives
- /goal set|status|checkpoint|pause|resume|clear intercept in main.py
- GOAL.md injected into system prompt when active (prompt_builder.py)
- Goal context added to heartbeat for autonomous progress
2026-05-16 07:07:46 -05:00
daniel
42dbdcde9e feat: factbase-cloud integration — knowledge_agent subagent with M2M auth 2026-05-15 23:32:23 -05:00
daniel
4f17bbd2c3 fix: intercept [HEARTBEAT] prompt, suppress chatty non-urgent responses 2026-05-15 18:34:14 -05:00
daniel
e00702164d refactor: slim system prompt — SOUL.md+STATUS.md only, fix duplicate time injection 2026-05-15 16:42:27 -05:00
daniel
05fee423f2 feat: dynamic subagent loading from SSM 2026-05-15 15:19:08 -05:00
daniel
85efb082f7 fix: unconditional system prompt for call_aws availability 2026-05-15 11:49:03 -05:00
daniel
40f9712c54 fix: remove explicit MCPClient.start() - Strands calls it internally 2026-05-15 11:26:01 -05:00
daniel
ebd5a57ece fix: pass aws_service=aws-mcp to aws_iam_streamablehttp_client 2026-05-15 10:32:32 -05:00
daniel
9c09dce519 deps: add mcp-proxy-for-aws to runtime dependencies 2026-05-15 10:28:51 -05:00
daniel
0eff46126f Wire AWS MCP Server via mcp-proxy-for-aws 2026-05-15 10:19:44 -05:00
daniel
266231d070 Add native boto3 AWS tools, remove broken AWS MCP client 2026-05-15 10:03:56 -05:00
daniel
17b1536dae fix: move MCPClient imports inside try block, add TOOLS.md placeholder 2026-05-15 09:29:07 -05:00
daniel
add8c6c988 fix: add missing MCPClient/streamablehttp_client imports; fix EXECUTION_ROLE_ARN to actual AgentCore role 2026-05-15 09:14:33 -05:00
daniel
88ed337938 Add AWS MCP Server integration + IAM self-modify with approval gate
- CDK: add compute/build, broad read-only, IAM self-modify (scoped to own role),
  IAM policy management, and SSM read permissions to runtime1Role
- config.py: load /agent-claw/aws-mcp-url from SSM at cold start
- main.py: connect to AWS MCP Server with SigV4 auth (_AwsMcpSigV4Auth);
  add request_iam_permission and apply_iam_permission tools
- agentcore.json: add EXECUTION_ROLE_ARN env var
2026-05-15 08:56:06 -05:00
daniel
68aad4fb71 Read model-id from /agent-claw/model-id SSM param and pass to BedrockModel 2026-05-15 07:00:23 -05:00
daniel
62862f00f0 Make agent and compaction model IDs configurable via SSM 2026-05-14 18:27:35 -05:00
daniel
bdd334b6fb feat: add user-configurable MCP connections
- manage_mcp_connection tool: add/remove/enable/disable/list MCP servers
- mcp_loader: dynamic connection with OAuth/bearer/none auth, token caching
- Secrets stored in SSM, never in DynamoDB
- MCP clients loaded per-session and cleaned up in finally block
2026-05-13 21:55:01 -05:00
daniel
74f74ef877 refactor: migrate Secrets Manager secrets to SSM Parameter Store (free tier) 2026-05-13 12:55:16 -05:00
daniel
3a34e61479 feat: add windowed session history + LTM extraction/retrieval
- New memory_manager.py with:
  - check_and_compact: runs compaction on flagged sessions (extracts LTM via
    Claude Haiku, stores as AgentCore Memory event, deletes old events)
  - check_window_and_flag: sets DynamoDB flag when session > 100 events
  - load_ltm: retrieves LTM extractions and formats as system prompt block
- Wired into main.py:
  - Compaction runs before session_manager creation (trims old events)
  - LTM block injected into system prompt
  - Window check runs after session close
- SESSION_WINDOW_SIZE = 100 (named constant)
- Compaction is idempotent (uses event timestamps as cursor)
- LTM retrieval failure is non-fatal (logs and continues)
2026-05-13 11:57:50 -05:00
daniel
d217842917 refactor: remove MEMORY.md from prompt, add AgentCore memory instructions 2026-05-13 11:48:53 -05:00
daniel
3cc90550b5 feat: add Telegram file attachment support (inbound + outbound)
Inbound:
- tg-ingest detects document/photo/audio/video/voice attachments
- Downloads files via Telegram Bot API (getFile + download)
- Inlines small text files (<50KB) directly in the prompt
- Stores binary/large files to S3 (attachments/{chat_id}/{update_id}/{filename})
- agent-runner appends file context to the AgentCore prompt

Outbound:
- New send_file tool for the agent to send documents back to users
- TelegramAdapter.send_document uses multipart/form-data POST
- CDK grants tg-ingest S3 write access and passes bucket name env var
2026-05-13 05:34:33 -05:00
daniel
eba4f7db25 fix: align run_code with AWS docs pattern (invoke+executeCode, not execute_code wrapper) 2026-05-12 15:26:01 -05:00
daniel
9253d5046f feat: re-enable code interpreter tool (lazy code_session, no module-level init) 2026-05-12 15:05:26 -05:00
daniel
9d3a93a998 feat: capture message_thread_id for Telegram topic routing 2026-05-12 14:05:00 -05:00
daniel
3a49dadb69 Inject live datetime into system prompt per invocation with relative-time instruction 2026-05-09 14:56:25 -05:00
daniel
c317d948b1 Migrate primary to labeled path, remove all flat-path fallback logic 2026-05-09 14:20:24 -05:00
daniel
aaecbcfa02 Fix: list_google_accounts also shows flat primary secret 2026-05-09 14:17:53 -05:00
daniel
bf89f7255a Fix: always load flat secret as primary regardless of labeled secrets 2026-05-09 14:14:38 -05:00
daniel
ac260e4314 Add remove_google_account tool 2026-05-09 13:49:01 -05:00
daniel
6e04d8511c fix: two-step DynamoDB update for google_accounts; live SM lookup in list_google_accounts 2026-05-09 13:32:36 -05:00
daniel
38d828ef74 Multi-account Google support with user labels 2026-05-09 11:21:37 -05:00
daniel
01b258579b Phase 3: proactive heartbeat — EventBridge 30min rule, heartbeat-runner Lambda, HEARTBEAT_OK suppression 2026-05-08 20:14:16 -05:00
daniel
eddbd98153 Fix: use build(credentials=creds) instead of creds.authorize() for google-auth compatibility; add traceback logging 2026-05-08 19:57:35 -05:00
daniel
9b56aa83df Fix Google OAuth: explicit IAM policy + strip OIDC scopes from credentials 2026-05-08 16:57:40 -05:00
daniel
633ad03db0 Fix naive/aware datetime comparison: strip tz from expiry for google-auth 2026-05-08 16:05:45 -05:00
daniel
8a25eb2d5a Fix: pass expiry to Credentials so auto-refresh fires when token expired 2026-05-08 16:03:09 -05:00
daniel
9d21d5d2e5 Fix: import main in _actor_id() causes app.run() hang — use module-level var instead 2026-05-08 11:32:21 -05:00
daniel
54902cca8d Remove AgentCoreCodeInterpreter import+init: port 8080 conflict blocks event loop 2026-05-08 11:27:32 -05:00
daniel
2f15dd2af3 Remove code_interpreter from base_tools: port 8080 conflict hangs warm containers 2026-05-08 11:23:02 -05:00
daniel
f4444cbd22 Fix: pass only authorized http to build(), not credentials, so timeout applies to API calls 2026-05-08 11:17:38 -05:00
daniel
350ce231a4 embed workspace-mcp as direct dependency, simplify google credential loading
- Add workspace-mcp >= 1.20.0 to pyproject.toml (pulls google-api-python-client etc. transitively)
- Remove redundant google-api-python-client/google-auth/google-auth-httplib2 direct deps
- Rewrite google_workspace.py: single Secrets Manager call per tool (client_id/client_secret
  are already in the credentials secret stored by oauth-handler, no separate oauth-client secret needed)
- Mirror workspace-mcp output format for list_calendars and get_calendar_events
- Add body_format param to get_gmail_message (text/html/raw) matching workspace-mcp API
- Update uv.lock
2026-05-08 11:12:06 -05:00
daniel
245c2d64f5 Add debug logging to google_workspace tools 2026-05-08 10:56:29 -05:00
daniel
6d0464ea07 Add httplib2 15s timeout + cache_discovery=False to prevent hangs 2026-05-08 10:53:19 -05:00
daniel
25cba295b0 Update uv.lock to include google-api-python-client and deps 2026-05-08 10:49:11 -05:00
daniel
ad594f6797 Add direct Google Calendar/Gmail tools, remove workspace_mcp 2026-05-08 10:37:31 -05:00
daniel
647cb516db Route workspace-mcp through API Gateway to bypass SCP Lambda URL block 2026-05-08 10:24:37 -05:00
daniel
eaf19fa9c5 Add debug logging for google_email and workspace_mcp URL 2026-05-08 10:17:08 -05:00
daniel
700e9af2b8 Fix OAUTH_START_URL: use 'or' fallback in case env var is empty string 2026-05-08 09:52:01 -05:00
daniel
9bf6461e1b Disable extended thinking: causes blank responses via streaming retry 2026-05-08 09:44:42 -05:00
daniel
b728356fe4 Hardcode OAUTH_START_URL fallback (env var not propagating to runtime) 2026-05-08 09:23:23 -05:00