> ## Documentation Index
> Fetch the complete documentation index at: https://developers.telnyx.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ports.events

> `readonly` **events**: [`AgentHarnessEventPort`](/docs/agent-sdk/harness-sdk/ports/events#agentharnesseventport)

## On the Agent Runtime

[The runtime adapter](/docs/agent-sdk/harness-sdk/adapters/runtime#on-the-agent-runtime) builds the port from `host`, which carries the protected members of the `Agent` class.

```ts theme={null}
// runtime-adapter.ts
const events = Object.freeze({
  emit: (type, payload) => host.events.emit(type, payload),
  read: (afterSeq, limit) => host.events.read(afterSeq, limit),
  count: () => host.events.count(),
});
```

* `emit()` calls [`this.events.emit()`](/docs/agent-sdk/interface/events#emit), which assigns the event's `seq` and writes its row in one commit.
* `read()` calls [`this.events.read()`](/docs/agent-sdk/interface/events#read). `afterSeq` is exclusive, and only retained events are returned.
* `count()` calls [`this.events.count()`](/docs/agent-sdk/interface/events#count), the number of events ever emitted. It includes events already pruned.
* [`StoredEvent`](/docs/agent-sdk/interface/events#storedevent) is the runtime SDK's own type.

## AgentHarnessEventPort

Existing persistent Agent EventLog semantics.

**Methods**
**count()**

> **count**(): `Promise`\<`number`>

**Returns**
`Promise`\<`number`>

**emit()**

> **emit**(`type`, `payload`): `Promise`\<`number`>

**Parameters**

| Parameter | Type |
| - | - |
| `type` | `string` |
| `payload` | `unknown` |

**Returns**
`Promise`\<`number`>

**read()**

> **read**(`afterSeq?`, `limit?`): `Promise`\<`StoredEvent`\[]>

**Parameters**

| Parameter | Type |
| - | - |
| `afterSeq?` | `number` |
| `limit?` | `number` |

**Returns**
`Promise`\<`StoredEvent`\[]>
