> ## 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.

# createNodeAgentHarnessPorts()

> **createNodeAgentHarnessPorts**\<`State`>(`options`): [`NodeAgentHarnessPorts`](/docs/agent-sdk/harness-sdk/adapters/node#nodeagentharnessports)\<`State`>

Construct a deterministic plain-Node ports adapter.

**Type Parameters**

| Type Parameter |
| - |
|  `State` *extends* `Record`\<`string`, `unknown`> |

**Parameters**

| Parameter | Type |
| - | - |
| `options` | [`NodeAgentHarnessPortsOptions`](/docs/agent-sdk/harness-sdk/adapters/node#nodeagentharnessportsoptions)\<`State`> |

**Returns**
[`NodeAgentHarnessPorts`](/docs/agent-sdk/harness-sdk/adapters/node#nodeagentharnessports)\<`State`>

## NodeAgentHarnessPorts

Deterministic plain-Node implementation of AgentHarnessPorts v2.

KV-like data is in memory and survives `reopen()` only; SQL is file-backed
through Node's experimental `node:sqlite` API and requires Node 22.13 or
newer without runtime flags. This is a contract-test host, not a production
persistence claim.

**Type Parameters**

| Type Parameter | Default type |
| - | - |
|  `State` *extends* `Record`\<`string`, `unknown`> | `Record`\<`string`, `unknown`> |

**Constructors**
**Constructor**

> **new NodeAgentHarnessPorts**\<`State`>(`options`, `backing?`): `NodeAgentHarnessPorts`\<`State`>

**Parameters**

| Parameter | Type |
| - | - |
| `options` | [`NodeAgentHarnessPortsOptions`](/docs/agent-sdk/harness-sdk/adapters/node#nodeagentharnessportsoptions)\<`State`> |
| `backing?` | `NodeBacking`\<`State`> |

**Returns**
`NodeAgentHarnessPorts`\<`State`>

**Properties**
**activation**

> `readonly` **activation**: `Readonly`\<\{ }>

Opaque host-owned token stable for one live actor activation.

**Implementation of**
[`AgentHarnessPorts`](/docs/agent-sdk/harness-sdk/ports).[`activation`](/docs/agent-sdk/harness-sdk/ports/activation)

**authorization**

> `readonly` **authorization**: [`HarnessAuthorizationPort`](/docs/agent-sdk/harness-sdk/ports/authorization#harnessauthorizationport) | `undefined`

Omitted until a host supplies the production gateway-attested provider. Approval paths fail closed.

**Implementation of**
[`AgentHarnessPorts`](/docs/agent-sdk/harness-sdk/ports).[`authorization`](/docs/agent-sdk/harness-sdk/ports/authorization)

**clock**

> `readonly` **clock**: `Readonly`\<\{ `now`(): `number`; }>

**Implementation of**
[`AgentHarnessPorts`](/docs/agent-sdk/harness-sdk/ports).[`clock`](/docs/agent-sdk/harness-sdk/ports/clock)

**environment**

> `readonly` **environment**: `Readonly`\<`Record`\<`string`, `unknown`>>

**Implementation of**
[`AgentHarnessPorts`](/docs/agent-sdk/harness-sdk/ports).[`environment`](/docs/agent-sdk/harness-sdk/ports/environment)

**events**

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

**Implementation of**
[`AgentHarnessPorts`](/docs/agent-sdk/harness-sdk/ports).[`events`](/docs/agent-sdk/harness-sdk/ports/events)

**identity**

> `readonly` **identity**: `Readonly`\<\{ `id`: `string`; }>

**Implementation of**
[`AgentHarnessPorts`](/docs/agent-sdk/harness-sdk/ports).[`identity`](/docs/agent-sdk/harness-sdk/ports/identity)

**messages**

> `readonly` **messages**: [`AgentHarnessMessagePort`](/docs/agent-sdk/harness-sdk/ports/messages#agentharnessmessageport)

**Implementation of**
[`AgentHarnessPorts`](/docs/agent-sdk/harness-sdk/ports).[`messages`](/docs/agent-sdk/harness-sdk/ports/messages)

**sql**

> `readonly` **sql**: [`AgentHarnessSqlPort`](/docs/agent-sdk/harness-sdk/ports/sql#agentharnesssqlport)

**Implementation of**
[`AgentHarnessPorts`](/docs/agent-sdk/harness-sdk/ports).[`sql`](/docs/agent-sdk/harness-sdk/ports/sql)

**state**

> `readonly` **state**: [`AgentHarnessStatePort`](/docs/agent-sdk/harness-sdk/ports/state#agentharnessstateport)\<`State`>

**Implementation of**
[`AgentHarnessPorts`](/docs/agent-sdk/harness-sdk/ports).[`state`](/docs/agent-sdk/harness-sdk/ports/state)

**tasks**

> `readonly` **tasks**: [`AgentHarnessTaskPort`](/docs/agent-sdk/harness-sdk/ports/tasks#agentharnesstaskport)

**Implementation of**
[`AgentHarnessPorts`](/docs/agent-sdk/harness-sdk/ports).[`tasks`](/docs/agent-sdk/harness-sdk/ports/tasks)

**version**

> `readonly` **version**: `2`

**Implementation of**
[`AgentHarnessPorts`](/docs/agent-sdk/harness-sdk/ports).[`version`](/docs/agent-sdk/harness-sdk/ports/version)

**Methods**
**close()**

> **close**(): `void`

Close the fixture-owned SQLite database. Idempotent.

**Returns**
`void`

**reopen()**

> **reopen**(): `NodeAgentHarnessPorts`\<`State`>

Reconstruct the adapter while retaining its in-process persistent backing.

**Returns**
`NodeAgentHarnessPorts`\<`State`>

**runDue()**

> **runDue**(`dispatch`): `Promise`\<`number`>

Pump due tasks for deterministic Node tests. This is a host control, not an
AgentHarnessPorts method or a persistent run-status API.

**Parameters**

| Parameter | Type |
| - | - |
| `dispatch` | `TaskDispatch` |

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

## NodeAgentHarnessPortsOptions

Options for the deterministic plain-Node adapter.

**Type Parameters**

| Type Parameter |
| - |
|  `State` *extends* `Record`\<`string`, `unknown`> |

**Properties**
**authorization?**

> `optional` **authorization?**: [`HarnessAuthorizationPort`](/docs/agent-sdk/harness-sdk/ports/authorization#harnessauthorizationport)

Deterministic authorization adapter for tests; production hosts provide an attested gateway provider.

**databasePath**

> **databasePath**: `string`

**environment?**

> `optional` **environment?**: `Readonly`\<`Record`\<`string`, `unknown`>>

**id**

> **id**: `string`

**initialState**

> **initialState**: () => `State`

**Returns**
`State`

**now**

> **now**: () => `number`

**Returns**
`number`

**onStateChanged?**

> `optional` **onStateChanged?**: (`next`, `prev`) => `void` | `Promise`\<`void`>

Optional Agent-compatible hook fired after a state merge or replacement is
committed. A rejection propagates without rolling the committed state back.

**Parameters**

| Parameter | Type |
| - | - |
| `next` | `State` |
| `prev` | `State` |

**Returns**
`void` | `Promise`\<`void`>
