147 Commits

Author SHA1 Message Date
R-M-Naveen 446717349a Merge pull request #56 from atxp-dev/naveen/agent-push-notifications
fix: update heartbeat instruction to /hooks/wake payload format
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 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 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 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
David Noël-Romas ecbcd1a944 fix(atxp): pass -y to skills add command to skip interactive prompts
The previous fix only passed -y to npx (to auto-install the skills
package) but not to the skills add command itself, which has its own
interactive confirmation prompts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 12:28:40 -06:00
GitHub Action c919848ee2 bump version to 1.22.0 [skip ci] 2026-03-03 15:52:00 +00:00
David Noël-Romas 3d1cd2d212 fix(atxp): remove shell sourcing dependency for OpenClaw compatibility
OpenClaw's exec tool in allowlist mode blocks shell builtins like
`source` and command substitution `$()`. The CLI already reads
credentials from ~/.atxp/config directly via getConnection() — this
commit removes the shell-sourcing path entirely:

- Config format changed from `export ATXP_CONNECTION="value"` to plain
  `ATXP_CONNECTION=value` (backward-compatible regex parses both)
- Deleted getShellProfile() and updateShellProfile() — no more shell
  profile modification on login
- Login output now says "npx atxp whoami" instead of "source ~/.atxp/config"
- SKILL.md: removed grep/cut/source patterns, added OpenClaw Integration section
- README.md: replaced source instruction with whoami verification

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 09:51:19 -06:00
GitHub Action 1c28a7e7c5 bump version to 1.21.2 [skip ci] 2026-03-02 22:23:38 +00:00
David Noël-Romas 4ceb47036b fix(atxp): pass -y to npx skills to skip interactive prompt
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 16:22:57 -06:00
GitHub Action 5fe2ce86c8 bump version to 1.21.1 [skip ci] 2026-02-25 23:12:02 +00:00
R-M-Naveen fc795ac857 chore: add mcpName for official MCP registry publishing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 17:07:06 -06:00
GitHub Action 5b0444adf5 bump version to 1.21.0 [skip ci] 2026-02-25 19:29:52 +00:00
R-M-Naveen 7e3f973592 fix(atxp): replace no-explicit-any with Record<string, unknown> in polling
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 13:27:30 -06:00
GitHub Action 54798f3f13 bump version to 1.20.0 [skip ci] 2026-02-25 18:02:10 +00:00
David Noël-Romas 3464db95c2 feat(atxp): use async polling for image, music, and video generation
Switch from synchronous blocking MCP calls to async initiate+poll
pattern for slow generation tools, avoiding timeout issues and showing
a spinner during generation.

- image: image_create_image_async + image_get_image_async (3s poll)
- music: music_create_async + music_get_async (5s poll)
- video: create_video + wait_for_video (10s poll)
- Extract getClient() and extractResult() from call-tool.ts for reuse

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 12:01:23 -06:00
GitHub Action 8d80edfe92 bump version to 1.19.2 [skip ci] 2026-02-25 04:30:15 +00:00
R-M-Naveen 029cf85707 fix(atxp): read X-ATXP-Client version from package.json, add to list endpoint
- Replace hardcoded 'cli/1.19.1' with dynamic version from package.json
  so the header stays in sync across releases
- Add X-ATXP-Client header to GET /agents (listAgents) for consistent
  traffic attribution across all agent endpoints

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 22:22:03 -06:00
R-M-Naveen 4aae0d649e feat(atxp): add X-ATXP-Client header to agent registration requests
Sends cli/1.19.1 identifier on POST /agents/register and POST /agents
so the server can distinguish CLI traffic from direct API bot calls.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 22:14:49 -06:00
GitHub Action 60a0b9ec26 bump version to 1.19.1 [skip ci] 2026-02-24 17:58:39 +00:00
David Noël-Romas 80416f31f8 fix(atxp): pass userPrompt parameter to video MCP tool
The video MCP server expects `userPrompt` but the CLI was sending `prompt`,
causing the positional argument to arrive as undefined.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 11:57:25 -06:00
GitHub Action 214073cb65 bump version to 1.19.0 [skip ci] 2026-02-24 17:50:34 +00:00
R-M-Naveen b8c0a90bc6 feat(atxp): require device context for agent registration and creation
Fail explicitly with error codes (E_REG_001, E_REG_002) and support
contact when device context is unavailable or the server rejects the
request, instead of silently omitting the context parameter.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 11:40:56 -06:00
GitHub Action ac4625bbf3 bump version to 1.18.0 [skip ci] 2026-02-24 17:20:41 +00:00
David Noël-Romas e0e04e11e8 feat(atxp): add contacts command and phone filter options
Add local contacts database (add/list/show/edit/remove/search) stored
in ~/.atxp/contacts.json with cloud push/pull backup. Add --unread-only
and --direction filters to phone sms/calls commands, and update
direction labels from inbound/outbound to incoming/sent.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 11:19:27 -06:00
GitHub Action 3ad158c5c5 bump version to 1.17.0 [skip ci] 2026-02-24 16:19:04 +00:00
David Noël-Romas 760b5690ad feat(atxp): show registered phone number in whoami output
Fetches phone number from phone.mcp.atxp.ai in parallel with the
account info request and displays it when present.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 10:17:39 -06:00
GitHub Action 3cafef9756 bump version to 1.16.0 [skip ci] 2026-02-23 22:58:40 +00:00
David Noël-Romas 4ac62b74ec feat(atxp): add phone command for SMS and voice calls
Exposes phone.mcp.atxp.ai MCP server with 11 subcommands: register,
release, configure-voice, sms, read-sms, send-sms, get-attachment,
call, calls, read-call, and search. Updates skill documentation with
phone command reference, security boundaries, and pricing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 16:57:26 -06:00
GitHub Action 198eef5db7 bump version to 1.15.0 [skip ci] 2026-02-23 17:58:56 +00:00
David Noël-Romas 145d2a4936 feat(atxp): auto-install zvec on first use, default to skill install
Auto-install @zvec/zvec into ~/.atxp/deps on first `memory index` or
`memory search` call so agents using npx get local vector search
without manual setup. Fix zvec optional dep version to ^0.2.0. When
`npx atxp` is run with no arguments, install the atxp skill via
`npx skills add`.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 11:30:05 -06:00
GitHub Action c6c7c3f5cd bump version to 1.14.0 [skip ci] 2026-02-23 17:10:29 +00:00
David Noël-Romas a8bae206ce fix(atxp): fix zvec integration bugs and improve memory file collection
Fix three zvec integration bugs: ESM dynamic import not unwrapping
CJS default export, wrong indexParams key (type→indexType), and search
query being contaminated with flag values. Replace .md-only file filter
with gitignore-aware collection of all text files, skip binary files
and common directories (node_modules, .git, etc.), and increase file
limit to 500.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 11:08:54 -06:00
GitHub Action fc18fecf00 bump version to 1.13.0 [skip ci] 2026-02-23 16:53:23 +00:00
R-M-Naveen a3a6c0303f fix: exclude vendor directory from eslint
Obfuscated .cjs vendor files cause lint errors in CI. Exclude
src/vendor/ from the lint command since vendor code shouldn't be linted.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 10:47:12 -06:00