220 Commits

Author SHA1 Message Date
David Noël-Romas ef7aed6785 feat(email): add mark-read command for explicit read status
The email service no longer auto-marks messages as read on retrieval.
This adds `npx atxp email mark-read <messageId>` to explicitly mark
messages as read using the new email_mark_as_read tool.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
v1.28.0
2026-03-27 21:27:03 -05:00
GitHub Action d188df7d7b bump version to 1.27.0 [skip ci] 2026-03-27 20:47:22 +00:00
David Noël-Romas bfd79ff3d3 feat(email): add --unread-only flag for inbox and search commands
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
v1.27.0
2026-03-27 15:46:35 -05:00
David Noël-Romas 14312054b6 feat: add phone mark-read CLI command
Adds `npx atxp phone mark-read <id> [id...]` to mark SMS messages as
read via the new phone_mark_read MCP tool.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 21:10:29 -05:00
GitHub Action fc75f8bf32 bump version to 1.26.0 [skip ci] 2026-03-26 18:20:18 +00:00
David Noël-Romas 792ea91ec0 fix(music): add musicOptions to help early-return object
Fixes TypeScript build error from missing property in the help flag
early-return path.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
v1.26.0
2026-03-26 13:19:24 -05:00
David Noël-Romas dac5e6e851 feat(music): add --lyrics flag for music generation
Allow users to pass custom lyrics to the music generation tool via
--lyrics, forwarded to the music_create_async MCP endpoint.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 13:12:53 -05:00
GitHub Action 16f1de3499 bump version to 1.25.0 [skip ci] 2026-03-24 05:19:55 +00:00
David Noël-Romas e51523c22a feat(search): add date filtering with --start-date and --end-date flags
Support startPublishedDate and endPublishedDate parameters on the
search_search MCP tool, allowing users to restrict results by
publication date. Also fixes toolArgs extraction to properly skip
flag values that would otherwise leak into the query string.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
v1.25.0
2026-03-24 00:19:16 -05:00
GitHub Action ab6c9253ad bump version to 1.24.2 [skip ci] 2026-03-17 01:54:45 +00:00
R-M-Naveen 74996910dd Merge pull request #60 from atxp-dev/naveen/referral-system
fix(agent): pass --redeem referral code to registration endpoint
v1.24.2
2026-03-16 20:47:51 -05:00
R-M-Naveen 294666622c fix(agent): pass --redeem referral code to registration endpoint
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 20:20:48 -05:00
David N d47e6211c7 Merge pull request #59 from atxp-dev/claude/add-email-attachments-L2vPD 2026-03-15 12:08:33 -05:00
Claude 52d3aac2cf feat(email): add attachment support for send and reply
Add --attach flag (repeatable) to email send and reply commands. The CLI
reads local files, detects MIME type from extension, and base64-encodes
content before passing to the MCP tool. Inbox and search results now
display attachment metadata (filename, type, size) inline.

https://claude.ai/code/session_013ZfRLDGZ9mawSATTJ8ToQg
2026-03-15 17:06:18 +00:00
GitHub Action cc9c69861f bump version to 1.24.1 [skip ci] 2026-03-06 23:09:20 +00:00
R-M-Naveen d0bea675d0 Merge pull request #58 from atxp-dev/naveen/agent-push-notifications
feat(atxp): switch to /hooks/agent, remove HEARTBEAT.md logic
v1.24.1
2026-03-06 17:08:17 -06:00
R-M-Naveen e653533617 docs(atxp): update SKILL.md to reference /hooks/agent
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 17:06:37 -06:00
R-M-Naveen 4bea6a20c9 feat(atxp): switch to /hooks/agent, remove HEARTBEAT.md logic
Replace /hooks/wake + HEARTBEAT.md approach with direct /hooks/agent
channel targeting. Discovered channels are now sent to the notifications
service which stores them and uses them for delivery.

- Remove HEARTBEAT.md read/write/section-replace logic (~100 lines)
- Simplify configureHooksOnInstance to only set hooks.token
- Send discovered channels in the enable API request

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 17:02:58 -06:00
GitHub Action b3f8421f24 bump version to 1.24.0 [skip ci] 2026-03-06 21:02:16 +00:00
R-M-Naveen d48a097d01 Merge pull request #57 from atxp-dev/naveen/agent-push-notifications
feat(atxp): auto-discover channels and write HEARTBEAT.md for multi-c…
v1.24.0
2026-03-06 15:00:39 -06:00
R-M-Naveen 0e1120f227 fix(atxp): strip markdown brackets in sanitizer, remove trailing blank line, add heading comment
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 14:53:42 -06:00
R-M-Naveen 87bdb0f7a9 fix(atxp): hoist sanitize, drop redundant alias, backtick-wrap prompt values
- Hoist sanitizeSessionValue to module scope (out of loop)
- Also strip quote/backtick chars to prevent LLM prompt injection
- Remove redundant sessionsPath alias, use SESSIONS_PATH directly
- Backtick-wrap channel/target values in HEARTBEAT.md output

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 14:42:32 -06:00
R-M-Naveen 5a2ad993af fix(atxp): suppress no-control-regex lint error in sanitization regex
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 14:26:39 -06:00
R-M-Naveen 57caf38731 fix(atxp): sanitize session values, fix section-replace newline, remove extra blank line
- Strip newlines/control chars and limit length on channel/to values
  parsed from session keys to prevent prompt injection via HEARTBEAT.md
- Ensure newline separator between preceding content and replaced section
- Remove extra blank line after configureHooksOnInstance

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 14:17:15 -06:00
R-M-Naveen c593b616aa fix(atxp): harden notifications — extract constants, fix section replace, reset stale target
- Extract hardcoded paths as named constants
- Replace regex section replacement with split-on-header approach
- Reset stale heartbeat target when channels disappear
- Add error handling for fetch, getAccountId, and configureHooksOnInstance

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 13:35:03 -06:00
R-M-Naveen 5c8af2f5b9 feat(atxp): auto-discover channels and write HEARTBEAT.md for multi-channel notification relay
Instead of injecting instructions via /hooks/wake, directly write relay
instructions to HEARTBEAT.md and configure heartbeat delivery target from
discovered session channels. Adds sms.received to help text.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 13:28:15 -06:00
GitHub Action 3a39597fd3 bump version to 1.23.2 [skip ci] 2026-03-06 05:16:04 +00:00
R-M-Naveen 446717349a Merge pull request #56 from atxp-dev/naveen/agent-push-notifications
fix: update heartbeat instruction to /hooks/wake payload format
v1.23.2
2026-03-05 23:09:17 -06:00
R-M-Naveen 6fa6966f36 fix: update heartbeat instruction to /hooks/wake payload format
Send { text, mode } instead of { message, name } to match the
/hooks/wake endpoint which injects into the main session.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 22:59:58 -06:00
GitHub Action 2d6652aeaa bump version to 1.23.1 [skip ci] 2026-03-06 03:00:17 +00:00
R-M-Naveen 417e2a814a Merge pull request #55 from atxp-dev/naveen/agent-push-notifications
fix(atxp): send account_id for notification matching, fix heartbeat p…
v1.23.1
2026-03-05 20:57:17 -06:00
R-M-Naveen 465c908647 refactor(atxp): rename email_user_id to account_id in notifications request
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 18:04:01 -06:00
R-M-Naveen 95694c9f61 fix(atxp): send account_id for notification matching, fix heartbeat payload
- Use accountId directly instead of stripping email prefix, so
  notifications match on atxp_acct_* rather than agent_* identities
- Fix heartbeat instruction: use 'message' field (not 'text'),
  reference /hooks/agent endpoint, add sender name

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 17:53:24 -06:00
GitHub Action 7b94def4db bump version to 1.23.0 [skip ci] 2026-03-05 18:18:15 +00:00
R-M-Naveen 5a20b5f297 Merge pull request #54 from atxp-dev/naveen/agent-push-notifications
Naveen/agent push notifications
v1.23.0
2026-03-05 10:31:51 -06:00
R-M-Naveen d71050e3a9 fix(atxp): remove unused PhoneOptions and ContactsOptions type imports
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 10:29:13 -06:00
R-M-Naveen c25821db35 fix(atxp): help text says 'enable' not 'manage' for notifications
Only the enable subcommand exists, so don't imply broader management.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 10:22:28 -06:00
R-M-Naveen 043ba5df85 fix(atxp): log non-OK heartbeat response, guard eventTypes, type response
- sendHeartbeatInstruction now warns on non-OK responses instead of
  silently treating them as success
- Guard webhook.eventTypes with optional chaining to prevent TypeError
- Replace Record<string, unknown> casts with typed EnableResponse interface

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 10:17:28 -06:00
R-M-Naveen 6805b57c47 fix(atxp): scope login hint to 401, show status codes, guard res.json
- Only show "try logging in again" for 401, not network errors
- Show HTTP status code for non-401 failures, "network error" otherwise
- Guard res.json() with .catch() for non-JSON responses

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 10:12:50 -06:00
R-M-Naveen ab74f76ecd fix(atxp): restore 401-specific error in whoami, add trust boundary doc
- Add fetchAccountInfo() that returns HTTP status on failure so
  whoamiCommand can distinguish 401 from other errors
- Keep getAccountInfo() as simple null-returning wrapper for callers
  that don't need status details (e.g. notifications getEmailUserId)
- Document sendHeartbeatInstruction trust boundary for maintainers

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 10:07:21 -06:00
R-M-Naveen e859d4eedf fix(atxp): use es module import for os to fix lint error
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 10:00:44 -06:00
R-M-Naveen c56d4bba25 fix(atxp): address code review feedback on notifications
- getMachineId: only fall back to hostname if it matches Fly machine
  ID pattern (hex, 10+ chars), preventing accidental registration
  from developer machines
- Validate API response shape before accessing nested properties
- Remove unused positionalArg parameter and 'add' alias
- Remove os import (now require'd inline in getMachineId)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 09:58:10 -06:00
R-M-Naveen 2a3addf0d9 refactor(atxp): rename webhook.ts to notifications.ts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 09:56:31 -06:00
R-M-Naveen 080b17ffa0 refactor(atxp): strip dead notification commands, improve error msg
Remove ~200 lines of non-functional code (list, remove, test,
re-enable, rotate-secret, failures, replay) that depend on broken
OAuth auth. Simplify help text to only show `enable`. Improve
whoami error message to mention token may be invalid/expired.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 09:53:09 -06:00
R-M-Naveen 4771d9d528 chore: remove unsupported notification commands from help and SKILL.md
Only `notifications enable` works currently. The other commands
(list, remove, test, re-enable, rotate-secret, failures, replay)
require OAuth auth that isn't wired up yet.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 09:44:20 -06:00
R-M-Naveen 66b5f581ad chore: fix package-lock.json peer dep changes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 09:39:53 -06:00
R-M-Naveen 92e5e6cc09 feat(atxp): pass email_user_id during notifications enable
Extract getAccountInfo() as shared export from whoami.ts and use it
in webhook.ts to resolve the email local part (e.g. agent_xyz) for
cross-system event matching between email-mcp and atxp account IDs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 08:50:14 -06:00
R-M-Naveen 3445df30f0 fix(atxp): fall back to os.hostname() for machine ID detection
Fly sets FLY_MACHINE_ID on the VM but nested shells may not inherit it.
The hostname is also set to the machine ID, so use it as fallback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 20:24:10 -06:00
R-M-Naveen 87ca4709fa feat(atxp): add notifications command with machine-ID based auth
Simplified flow: CLI posts machine_id to /notifications/enable,
no OAuth required. Includes enable, list, remove, test, re-enable,
rotate-secret, failures, and replay subcommands.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 20:14:42 -06:00
GitHub Action 9ad73a748a bump version to 1.22.1 [skip ci] 2026-03-03 18:29:26 +00:00