Skip to content

[pull] main from oomol-lab:main - #11

Merged
pull[bot] merged 5 commits into
LJAYi:mainfrom
oomol-lab:main
Jul 25, 2026
Merged

[pull] main from oomol-lab:main#11
pull[bot] merged 5 commits into
LJAYi:mainfrom
oomol-lab:main

Conversation

@pull

@pull pull Bot commented Jul 25, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

ihexon and others added 5 commits July 25, 2026 14:57
## Summary

- add a locally executable Mux provider using Token ID and Token Secret
Basic Auth
- add asset create, list, retrieve, delete, and playback ID actions
- validate credentials through Mux `whoami` and expose environment
identity and granted permissions
- validate remote media inputs as public HTTP(S) URLs and route all
provider egress through the guarded fetcher

## Why

Mux Video asset workflows were not available through the open-source
connector. This adds the smallest useful asset lifecycle while
preserving Mux pagination, async processing status, playback policies,
and API error details.

## Impact

Users can configure their own Mux access token and manage on-demand
video assets locally. The create action accepts a provider-fetchable
media URL; video bytes do not pass through the connector runtime.

## Validation

- `npm run generate:catalog`
- `npm run fix-check`
- Mux runtime smoke checks covering request mapping, Basic Auth,
pagination, deletion, playback IDs, credential validation, and SSRF
rejection
- `npm test` (56 test files, 516 tests)

---------

Co-authored-by: CheerChen <meetcheerego@gmail.com>
Closes #181

## Summary

Adds a new provider, `agent_qq`, for Tencent Agent Mail
(`https://agent.qq.com`). It uses the public
`https://api.agent.qq.com/v1` REST API.

### Actions

| Action | Method | Path |
|---|---|---|
| `list_aliases` | GET | `/v1/me` |
| `list_messages` | GET | `/v1/aliases/{alias_id}/messages` |
| `read_message` | GET | `/v1/aliases/{alias_id}/messages/{message_id}`
|
| `send_message` | POST | `/v1/aliases/{alias_id}/messages/send` |
| `delete_message` | DELETE |
`/v1/aliases/{alias_id}/messages/{message_id}` |

- Auth is modeled as `api_key` (the AgentMail OAuth access token) and
sent as `Authorization: Bearer <token>`. Users get a token by running
`agently-cli auth login` or completing the OAuth device flow.
- `list_messages` falls back to the search endpoint when `q` is
provided, and supports filtering by `dir`, `is_read`/`is_unread`,
`before`/`after`, `has_attachments`, and cursor pagination.
- `send_message` implements the two-phase confirmation flow
automatically: the first POST may return `confirmation_required` +
`confirmation_token`, and the executor immediately retries with the
token.
- All network egress goes through `context.fetcher` with
`providerUserAgent`.

The new service id is `agent_qq` because the existing `agent_mail`
provider is already tied to `agentmail.to`.

`npm run fix-check` passes, and the actions have been exercised live:
`list_aliases` returns the account aliases while `list_messages` returns
the inbox.

---------

Co-authored-by: CheerChen <meetcheerego@gmail.com>
## Summary

- Close an authentication gap where `POST /v1/actions/*` treated a
**missing** `OOMOL_CONNECT_ADMIN_TOKEN` as always-allowed admin
elevation.
- After runtime tokens exist (so `GET /v1/*` correctly returns 401
without a bearer), unauthenticated action runs could still succeed
through the admin fallback path.
- Admin elevation for action runs now requires a **configured** admin
token that is actually presented on the request.

## Problem

`canUseAdminAuth` allows `POST /v1/actions/:actionId` to fall back to
admin scope. When no admin token is configured, `hasValidToken(...,
"admin")` returned `true` unconditionally. Combined with stored runtime
tokens enforcing runtime auth on GETs, this left action execution open
without credentials.

## Changes

- Only attempt admin elevation for action runs when
`OOMOL_CONNECT_ADMIN_TOKEN` is set.
- Regression tests for unauthenticated `POST /v1/actions/*` when runtime
tokens exist, and for configured admin elevation.

## Test plan

- [x] `npm test -- src/server/api/auth.test.ts`
- [x] `npm test -- src/server/connect-server.test.ts -t "runtime token"`
- [ ] Manual: create a runtime token without admin env, confirm
unauthenticated action POST is 401
## Summary

- Map missing or invalid `connectionName` on `GET
/api/actions/:id/agent.md` to structured 4xx JSON.
- Previously uncaught `ConnectionError` became a 500 internal error via
the global handler.

## Test plan

- [x] `npm test -- src/server/connect-server.test.ts -t "returns
connection errors for action agent"`
@pull pull Bot locked and limited conversation to collaborators Jul 25, 2026
@pull pull Bot added the ⤵️ pull label Jul 25, 2026
@pull
pull Bot merged commit 2251e12 into LJAYi:main Jul 25, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants