205 Commits

Author SHA1 Message Date
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
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>
v1.22.1
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>
v1.22.0
2026-03-03 09:51:19 -06:00
David Noël-Romas 2b7c424f6b fix(atxp): fix misleading <n> param for claim-username in SKILL.md
Agents couldn't find or use claim-username because the parameter was
documented as <n> (looks numeric) instead of <username>. Expanded the
description to explain what the command does and valid username format.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:33:17 -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>
v1.21.2
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>
v1.21.1
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>
v1.21.0
2026-02-25 13:27:30 -06:00
R-M-Naveen 51771ce54d Merge pull request #53 from atxp-dev/naveen/agent-register-cli-added
fix(skill): replace all topup references with fund in SKILL.md
2026-02-25 13:24:57 -06:00
R-M-Naveen fde24b0fd4 fix(skill): replace all topup references with fund in SKILL.md
The topup command has been removed from the CLI. The fund command
now handles both Stripe payment links and USDC deposit addresses.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 13:23:39 -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>
v1.20.0
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