# @alma-harness/runtime 中文文档

规范地址：https://npmcn.com/package/%40alma-harness/runtime/

版本：0\.41\.0
npm 元数据更新时间：2026-11-04T12:52:46.980Z
中文译文更新时间：2026-11-06T23:41:28.951Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40alma-harness/runtime
原文对照：https://npmcn.com/package/%40alma-harness/runtime/?lang=original
项目主页：https://github.com/FabioFernandesCarneiro/alma#readme
源码仓库：https://github.com/FabioFernandesCarneiro/alma

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：464 kB，44 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=22
- 运行依赖：0 个
- peer 依赖：pg ^8\.16\.3，@alma-harness/core ^0\.41\.0，@alma-harness/batch ^0\.41\.0，@alma-harness/memory ^0\.41\.0，@alma-harness/postgres ^0\.41\.0，@alma-harness/execution ^0\.41\.0，@alma-harness/single-call ^0\.41\.0，@alma-harness/conversation ^0\.41\.0，@alma-harness/postgres-execution ^0\.41\.0
- 首次发布：2026-09-11T14:30:37.156Z
- 最新版本发布：2026-11-04T12:52:46.769Z
- 近 30 天下载量：2157（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：45（近 12 个月 45 个）

## 中文简介

阿尔玛对话的官方储存成分.

## 安装

```sh
npm install @alma-harness/runtime
```

也可以使用：`pnpm add @alma-harness/runtime`、`yarn add @alma-harness/runtime`、`bun add @alma-harness/runtime`

## README

# @alma-harness/运行时间

正式储存构成,即产生受管制跑道的部署,以及 简单的文字对话外观。 根导出只有类型 。 使用 `/deployment` 要配置一次, `/agent` 用于查询和恢复, `/memory` 或者说 `/postgres` 低级工厂的先进路线.

## 配置一次 : `/deployment`

```ts
import { createRuntimeDeployment } from '@alma-harness/runtime/deployment';
const deployment = createRuntimeDeployment({
  runtime, clients: { anthropic, openai }, prices, priceVersion,
  consumers: ['product'], caps, retentionMs: 60_000,
  limits: { deadlineMs: 8_000, runTimeoutMs: 120_000, stepTimeoutMs: 60_000, maxCalls: 24,
            maxInputChars: 64_000, maxRequestChars: 1_000_000, maxOutputChars: 100_000 },
  onBackgroundError: reportAccountingIssue,
  batch: { clients: { openai: openaiBatch }, retentionMs: 7 * 86_400_000 }, // optional
});
const titles = deployment.singleCall({ policy, policyVersion, outputContractVersion, system: [], maxTokens: 64 });
const pick = deployment.structuredCall({ policy, policyVersion, outputContractVersion, system, maxTokens, tools, toolChoice });
const chat = deployment.conversation({ policy, policyVersion, configRevision, resultContractVersion, system, tools,
  caps: perTurnCaps, limits: { maxCalls: 8 } });
const extract = deployment.batchCall({ policy, policyVersion, outputContractVersion, configRevision, system, tools, toolChoice,
  maxTokens, validate, retries, retryDelayMs, submitWindowMs });
```

每个工厂都把跑者送回去 `createSingleCallRunner`, (中文(简体) ), `createStructuredCallRunner`, (中文(简体) ), `createConversationRunner` 或者说 `createBatchCallRunner` 以相同的价值为基础,并经过验证, 绑定和回放(规格:运行时间-部署,部署-批量-呼叫).

-   **部署时拥有:** 运行时间的商店和审计日志, `clients`, (中文(简体) ), `prices`, (中文(简体) ), `priceVersion`, (中文(简体) ), `consumers`,结果保留和a 谈话 `step`行动通过其中任何一个,即使 `undefined`掷出 `TypeError`。 。 。 .
    
-   **每项行动可超过:** `caps` 替换整个, `limits` 合并字段 字段,以及 `onBackgroundError` 替换.
    
-   **所需限制, 不默认 :** 单一和结构化呼叫需求 `deadlineMs`, (中文(简体) ), `maxInputChars` 财务报告和审定财务报表 `maxOutputChars`。需要对话 `runTimeoutMs`, (中文(简体) ), `stepTimeoutMs`, (中文(简体) ), `maxCalls`, (中文(简体) ), `maxInputChars`, (中文(简体) ), `maxRequestChars` 财务报告和审定财务报表 `maxOutputChars`。 。 。 .
    
-   **抓图 :** 价格、上限、限制、消费者、客户和商店地图 在建筑中复制。 部署没有游泳池.
    
-   **批量通话 :**
    
    -   他们需要 `runtime.stores.batch` 和部署 `batch.clients`· ;
    -   他们拿 `runTimeoutMs`, (中文(简体) ), `maxRequestChars` 财务报告和审定财务报表 `maxOutputChars`内部 批量跑跑者自己的最大分数;
    -   其结果用于 `batch.retentionMs`,默认为 保留部署;
    -   观察者收到尝试的批次密钥 `operationKey`· ;
    -   `/deployment` 需求 `@alma-harness/batch` 已安装.
    
    一个主机从自己的组装中移动待处理的批次,只保留在 计划、提供者账户和有效的配置(见 (原始内容存档于2018-10-21). spec.
    
-   **已解析值 :** `deployment.resolved` 每个跑者 `resolved` 拿着 保留量及其所建限制,冻结(请说明: (a) 部署-解析值.
    
-   **版本保留您的版本 :** 凸起 `policyVersion`, (中文(简体) ), `priceVersion`, (中文(简体) ), `outputContractVersion`, (中文(简体) ), `configRevision` 或者说 `inputRevision` 当他们是什么 名称更改。 配置修改涵盖所有执行行为, 包括模型、政策、提示、工具、钩子、上下文来源、生成 控制、价格、上限、限额、重审、合同和供应商账户。 这个 只留下改变行为、资源身份或 授权,例如数据库登录或在一个账户中旋转的密钥. 在修改冲突下重试现有执行,所以 约束它们会阻碍待完成的工作.
    

## 开始并恢复对话 : `/agent`

```ts
import { createConversationAgent } from '@alma-harness/runtime/agent';
const agent = createConversationAgent({
  id: 'assistant', revision: 'v1', runtime,
  model: { ref: model, client, prices },
  instructions: 'You are a helpful assistant.',
  intent: { tier: 'standard', sensitivity: 'personal' },
  limits: { caps: { perTurnUsd: 0.25 }, retentionMs: 60_000 },
  onBackgroundError: reportAccountingIssue, // audit defaults to runtime.stores.audit
});
const user = agent.forUser({ org, uid }); // verified by the host
const first = await user.query({ prompt: 'Hello', messageId: 'delivery-1' });
if (first.view.status === 'completed')
  await user.query({ resume: first.sessionId, prompt: 'Continue', messageId: 'delivery-2' });
const observed = await user.read({ sessionId: first.sessionId, messageId: 'delivery-1' });
```

见 [快速启动](https://npmcn.com/package/examples/quickstart/src/agent.ts)。 。 。 .

-   **一个不可改变的修订** 覆盖整个配置, 信任 包括能力.
-   **版本默认值 :** 120个超时,24个电话,64000个输入字符, 100万个请求字符和10万个输出字符.
-   **`resume`** 选择约束范围内的现有历史。 不详或 外国会话抛出 `ConversationResumeError`。主机授权 会话: id不是证书.
-   **第一届会议** 来源于代理人、范围和 `messageId` (单位:千美元)`conversationAgentSessionId`) (中文(简体) ). 要重试丢失的响应, 请重复一次 请求.
-   **每个查询返回** `{ sessionId, messageId, rootKey, view }`检查 `view.status` 在使用结果之前. `read` 从来没有发送.
-   **表面所没有的:** 它不添加输入队列、重试、调度器或 清除障碍.

## 明显的跑腿组成

```ts
import { createMemoryRuntime } from '@alma-harness/runtime/memory';
import { createConversationRunner } from '@alma-harness/conversation';
const runtime = createMemoryRuntime({ stepResultPolicy: policy, rootResultPolicy: policy });
const runner = createConversationRunner({ ...hostConfig, ...runtime.stores, step: { ...hostConfig.step, ...runtime.stores.step } });
```

记忆是麻风:重启会失去历史,接纳和回放保护. `close()` 永不抹去存储或调和不确定的工作.

## 邮递SQL : `/postgres`

```ts
import { createPostgresRuntime, migratePostgresRuntime } from '@alma-harness/runtime/postgres';
const namespace = { schema: 'agent_execution', rootSchema: 'agent_results', onPoolError: report };
await migratePostgresRuntime({ ...namespace, connectionString: migrationURL }); // migration principal, outside requests
const runtime = createPostgresRuntime({ ...namespace, connectionString: runtimeURL,
  poolMax: { execution: 2, roots: 1 }, stepResultPolicy: policy, rootResultPolicy: policy });
```

-   **两个专门的计划** 使用不同的小写名称。 连接 URL 启动 `options` 拒绝.
-   **移徙** 安装适配器, 授予 USAGE 计划 `alma_app` 财务报告和审定财务报表 `alma_retention`,并撤销CREATE。 它从未授予登录会员资格 : 操作员给出运行时间登录 `alma_app`没有超级用户, BYPASSRLS或所有权。 它可以重复,而不是原子跨越计划: 失败, 修复原因并重跑 .
-   **升级窗口 :** 上次由前两个数据库之一迁移的数据库 小型释放物移入原地。 更古老的升级步骤(请参见: 升级窗口).
-   **游泳池 :** 建筑开通无连接. 两个有界池,五个 默认连接, 由 `poolMax: { execution, roots }`B. 预算 `instances × (execution + roots + batch)` 加迁移、维持和a 以数据库容量计的储备.
-   **批量存储 :** `batch: { schema, resultPolicy, poolMax? }` 打开第三个 池,默认连接5个,并构建 `runtime.stores.batch` 编号 存储安装的策略 `batch` 财务报告和审定财务报表 `results`传出计划 `stores` 移徙和核查.
-   **连接 :** `connection: { applicationName, idleTimeoutMs }` (规格: 池连接 - 选项).
    -   **`applicationName`** 1至40个字符的标签 `[A-Za-z0-9_.:-]`每个池连接为 `<label>:execution`, (中文(简体) ), `:roots` 财务报告和审定财务报表 `:batch`这样 `pg_stat_activity` 告诉他们分开。 没有标签的阿尔玛 未设置名称, 而 URL 或 `PGAPPNAME` 适用。 URL 旁边的标签 携带 `application_name` 被拒绝.
    -   **`idleTimeoutMs`** 设定闲置连接的开放时间: 1,000 到 60万,默认为一万.
    -   **保持活动 :** 每个游泳池都能保持TCP的活性 当第一个探测器 外出是操作系统的设置.
-   **`onPoolError(error, schema)`** 需要同步。 报告 闲置客户失败且不能丢弃.
-   **`runtime.stores.audit`** 写入执行名称空间, 请在 执行池.
-   **保留和清除:** 记录会话,结果存储和 `stores.batch.results` 在东道主审计的留存和去除。 A 类 `reconciliation_required` 转会的会话在返回前解开 主机决定是否再次发送( spec: 失败- turn- release) .

## 正在验证数据库

```ts
import { checkPostgresRuntime, verifyPostgresRuntime } from '@alma-harness/runtime/postgres';
const logins = [{ name: 'api', role: 'alma_app' }, { name: 'maintenance_discovery', role: 'alma_maintenance' }];
const report = await verifyPostgresRuntime({ connectionString: migrationURL, schema, rootSchema, logins }); // deploy job
if (!report.ok) throw new Error(JSON.stringify(report.differences));
await checkPostgresRuntime({ connectionString: runtimeURL, schema, rootSchema, logins }); // startup, read-only
```

**`verifyPostgresRuntime`** 用阴影来比对部署的对子 版本在总是回滚的交易中迁移。 它需要没有 显示或快照(规格:运行时间核查、核查-开发-命令、, (b) 储存核查).

-   **它所执行的是:**
    -   Alma的角色是NOLOGIN,成员没有角色;
    -   每个列出的登录都完全达到其作用;
    -   (一) 不向行动者或公众提供默认赠款,无论是全球赠款还是覆盖计划赠款; 在覆盖的计划中,或从移徙到全球的其他角色 校长;
    -   没有不信任的事件触发、发布或外部 `SECURITY DEFINER` 常规;
    -   发现角色的柱花上限;
    -   移民不能给任何人任何好处;
    -   没有改写规则或继承边缘;
    -   没有SET `session_replication_role`。 。 。 .
-   **信托** 指纹(`trustedRoutines`, (中文(简体) ), `trustedPublications`, (中文(简体) ), `trustedEventTriggers`) (中文(简体) ).
-   **报告** 携带散货车`diagnostics: true` 显示已绑定的文字),以及 上限为500个差异.
-   **一个干净的跑** 从一个快照到 `alma_runtime_verification`。 。 。 .

**`checkPostgresRuntime`** 将每个变化无常的都作为运行时间登录. 然后把现场目录和文摘作比较 然后扔 `RuntimeVerificationError` (单位:千美元)`invariant`, (中文(简体) ), `unverified`, (中文(简体) ), `version` 或者说 `drift`) (中文(简体) ). 角色是全组的:在Alma中增加一个成员的另一个产品是: 漂移直到你再次核实。 需要 PostgreSQL 16 或稍后时间 .

**储存计划.** 传出同样的 `stores` 列表,例如 `[{ schema: 'agent_memory', install: ['memory', 'audit'] }]`对移民, 核查和支票.

-   **类型 :** `memory`, (中文(简体) ), `audit`, (中文(简体) ), `routines`, (中文(简体) ), `routineRuns`, (中文(简体) ), `batch` 财务报告和审定财务报表 `results`多达8个专门计划.
-   **已验证的全文 :** 一个商店计划只持有它的类型迁移 创建.
-   **常规 :** `routines` 添加 `alma_scheduler` 到检查的角色.

## 设定范围

```ts
import { createPostgresScopeFence } from '@alma-harness/runtime/postgres';
const fences = createPostgresScopeFence({ ...namespace, connectionString: runtimeURL, stores });
const { status, record } = await fences.fence(scope, { actionId: 'erase-42', actor: 'privacy-desk' });
await fences.close();
```

栅栏是永久性的:没有API将其抬起(规格:范围-栅栏). 一次 `fence` 阿尔马萨诸塞州 阿尔马萨诸塞州 为内容保留位置,没有写入范围的内容 任何地方(谱系:瞄准镜-射纹).

-   **拒绝 `ScopeFencedError`** (单位:千美元)`@alma-harness/execution`页:1 无内容 :
    -   新的转弯和新的单一、结构化或分批调用键;
    -   每个新结果保留。 一份浓缩报告 `reconciliation_required` 而不写任何计划;
    -   一个会话附件、一个记忆插曲或事实、一个例行登记和一个 常规运行记录 .
-   **仍在服役:** 阅读、重放存储的密钥、维护恢复和 使用确认.
-   **飞行中:** b. 已经提出主张和保留的工作 发送并存储结果。 栅栏回来前的转弯 `reconciliation_required` 在它的下一步或附件。 在 PostgreSQL 上,一个新的 键,在仍然使用答案的会话中 `busy`。栅栏会擦去 无: 下一个删除瞄准镜 .
-   **地点:** 这对夫妇的行刑名称空间 掌握着卡通记录, 复制到根命名空间和每个商店安装的图案 `batch`, (中文(简体) ), `results`, (中文(简体) ), `memory`, (中文(简体) ), `routines` 或者说 `routineRuns`。第一个记录获胜;a 待会 `fence` 返回为 `existing`。只解决 `fence` 证明每个 计划有栅栏,所以重试失败者,在任何 `actionId`。计划 单打独斗 另有记录 `fence` 拒绝并命名它,因为 调和的操作员. `get` 只读对相.
-   **不是对东道主的守护:** 门拒绝插入。 一个作家 编辑阿尔玛一行,作为应用程序登录在主机权威上的行为.
-   **连接 :** 连接为应用程序登录。 最多一个连接, 没有在建筑.
-   **内存 :** `createMemoryRuntime` 曝光情况 `runtime.stores.fences`,哪个 打开自己的商店.
-   **升级 :** 栅栏桌和大门 更改已核实的目录,所以 启动检查报告漂移到再次核实。 栅栏在之后 移徙,核实完整 `stores` 列表,启动每个进程 在这个版本, 退休每一个老作家.

## 缩小范围

```ts
import { createPostgresScopeErasure } from '@alma-harness/runtime/postgres';
const erasure = createPostgresScopeErasure({ ...namespace, connectionString: runtimeURL, stores,
  batchClients: (configRevision, provider) => batchClientFor(configRevision, provider) });
const report = await erasure.erase(scope, { actionId: 'erase-42', actor: 'privacy-desk' });
if (report.status === 'pending') retryAfter(report.waitingUntil); // then call erase again
await erasure.close();
```

一通电话就抹去一对店主的名声 和每个被宣布的商店计划 (规格:范围-鉴赏). 传出同样的 `stores` 列表为迁移和 核查。 每个电话:

1.  **围栏** 范围,并保持现有的围栏及其记录;
2.  **删除内容 :** 会话、标签(密封)、步骤、根、批和存储 成果(通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通;
3.  **关闭待完成的工作 :**
    -   `running` 财务报告和审定财务报表 `submitted` 常规运行变为 `failed` 与原因 `scope erased`,每跑会失去它的手柄和任何其他原因;
    -   不确定的承认 释放与栅栏 `actionId` 作为 决议,最多100个呼吁。 不需要操作员登录: 栅栏 授权;
4.  **在提供者丢弃瞄准镜的批次** (规格: 提供- 批- 保留). `batchClients` 返回账户的客户端 使用的配置修改,或 `undefined`。取消运行的批次 并保持开放,直到稍后的呼叫删除它。 仍在飞行中的呈文 没有手柄,在提交期限之前一直保持开放 `waitingUntil`· ;
5.  **证明** 内容: `report.tables` 列出每个工程表及其 `rows`, (中文(简体) ), 页:1 `open` 仍然保留内容或未关闭的工作的行,以及为什么其他的 实值 `kept` (单位:千美元)`tombstone`, (中文(简体) ), `closed`, (中文(简体) ), `journal`, (中文(简体) ), `accounting`, (中文(简体) ), `audit`, (中文(简体) ), `fence`) (中文(简体) ). `report.provider` 给瞄准镜的批次和没有 已确认删除. `status` 实值 `erased` 仅当每个 `open` 为 0.

-   **待定:** 读取 `tables[].open` 为事业. 以前允许的转弯 栅栏和仍在期限之内 `waitingUntil`; 再次打电话 后结. 超过100个不确定的招生者又接到了电话. 内容 呼叫后仍开行 是调查的不一致 而不是等待.
    
-   **复试 :** 每一个步骤都是自己做的,而且具有独断专行的能力。 一个失败的呼叫 写入后抛出 `scope:failed` 到对子的审计线索; 下一个 调用完成它。 每个电话都写 `scope:erased` 或者说 `scope:pending`。 。 。 .
    
-   **飞行中:** 两者都不相符合.
    
    -   **一个在消除后读到保留** 停止没有 使者否认它,而日记记录它 `not_dispatched`。 。 。 .
    -   **已经过去一个字了** 可能仍然根据索赔要求发出 在栅栏前 以一个 `unavailable` 及其结果 费用入账.
-   **留下来的是:** 标识符、数量、使用量、时间和散列,从未 阿尔玛写了短信 两个主机作者的字符串只保留在附件上 审计线索:路线政策 `rationale` 和访问事件 `resource`。选择假名标识符,并保留用户文本 都一样.
    
-   **未计数 :** 光标和投影光标,光标只有 房客日的开销没有 `uid`。 。 。 .
    
-   **连接 :** 连接为应用程序登录。 在电话中,最多 每一个它碰到的图案都有一个连接;没有在呼叫之间.
    
-   **供应商批次:** 每通电话再次询问提供者,一次检索和 每个 OpenAI 批次最多三次删除,所以重试确认没有留下任何内容. 请求被节制或失败,其批次就会开放。 供货商保存的 不论:
    
    -   openAI 批件对象,带有识别符、计数和错误消息;
    -   (a) 接收丢失的批次,直至失效(OpenAI)或29天 (雅典语);
    -   提示缓存和日志 .
    
    藏品收藏前取消的批次,可以开出帐单,不录入.
    
-   **范围外:** 并保留年长者的权利要求 部署,主机用它去除 `createMemoryErasure({ turns })`。 。 。 .
    

## 维修: `/maintenance`

```ts
import { createPostgresMaintenance } from '@alma-harness/runtime/maintenance';
const maintenance = createPostgresMaintenance({ schema, rootSchema, stepResultPolicy, rootResultPolicy, onPoolError,
  discovery: { connectionString: discoveryURL }, worker: { connectionString: workerURL } });
const report = await maintenance.maintain({ limit: 50, signal }); // schedule it
```

`maintain` 找到有适当工作的瞄准镜并进行扫描,至少最近才访问过 第一( 光谱: 运行时间维护) :

-   死刑的收监、执行和处决过期;
-   根据保留的结果完成处决;
-   它承认使用.

它从未发出过通知,它的报告只是重要的。 执行完毕 一旦收回,可以收回:过了收回的租约,或者过了期限。 A 类 已补全的呼叫缺失其根收件通过待用行找到 (规格:维护-扫描). 扫描指数和发现角色 `recovery_until` 授权更改已核实的目录: 之后再次核实 移徙.

**登录 :**

-   (单位:千美元) **发现** 登录 `alma_maintenance` 只见有鉴证者, 跨范围的国家和时间;
-   (单位:千美元) **劳动者** 登录 `alma_app` 只是,这不是请求路径.

也不可能进去 `alma_retention`每一个电话都检查这个.

**连接 :** 每例最多3起:2起关于发现登录和 一个工人连接,它也服务于每个呼叫的登录检查(规格: 保持连接-预算,登录-检查-连接). `connection` 拿着 和运行时间一样 工人的游泳池和发现池 连接为 `<label>:maintenance:execution`, (中文(简体) ), `:roots` 财务报告和审定财务报表 `:discovery`。 。 。 .

## 收款预测: `/projections`

```ts
import { createPostgresProjections } from '@alma-harness/runtime/projections';
const projections = createPostgresProjections({ schema, rootSchema, stepResultPolicy, rootResultPolicy, onPoolError,
  discovery: { connectionString: projectionURL }, worker: { connectionString: workerURL } });
await projections.drain('cost-dashboard', async delivery => { /* dedupe on (scope, consumer, settlementId) */ }, { limit: 50 });
await projections.quiesce(scope, () => erasure.erase(scope, request), { timeoutMs: 30_000 });
```

`drain` 向每个受管制的消费者交付 会话归属 : `available`, (中文(简体) ), `erased` 或者说 `none` (规格: (b) 收款-预测).

-   **致谢:** 只有在处理人之后才确认收据 决心,所以把分解 和效果一起.
-   **交付 :** 公平,永远不要丢失收据.
-   **登录 :** 发现登录 `alma_projection` 只有工人登录 内 `alma_app` 只有维修费.
-   **连接 :** `connection` 维修费,名字列在下 `<label>:projections:`。 。 。 .
-   **厄拉苏:** `quiesce` 等待一个排水管 工作范围,然后运行你的 当然 存储标签的目的地必须用擦去的序列 如图所示,通过大门行.

预测只耗尽了对子的处决命名空间.

## 对话操作 : `/operations`

`createConversationOperations` 检查,修理并解决一个承认, 拥有主机补给的能力。 这个 `alma-operations` CLI从 jSON在Stdin上与一个本地 `--host` 模块。 见 [操作员运行本](https://npmcn.com/package/docs/conversation-operations.md)。 。 。 .

一个电话的日记是 `not_dispatched` 从未离开,并计及 没有成本,所以它不再阻断分辨率(spec: never-sent-calls).

转弯时 `inspect` 显示 `turn-failed-v1:`,以及 `resolve` 答题 `binding_conflict` (规格: 失败的回合释放).

一个 `operation_failed` 数据库出错导致的 SQLSTATE 载入 `error.sqlstate`,CLI打印出来: `{"error":"operation_failed","sqlstate":"42501"}`。 。 。 . 没有关于该错误的信息、细节或查询留下(谱号:不定-回合-原因).

`runtime.stores.labels` 是会话标签存储( spec: session- lables) 。 线 以至被清除 `createMemoryErasure({ sessionLabels })`。 。 。 .

## 常见问题

### @alma-harness/runtime 是什么？

阿尔玛对话的官方储存成分\.

### 如何安装 @alma-harness/runtime？

在项目目录运行 npm install @alma-harness/runtime，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：@alma-harness/core（^0\.41\.0）、@alma-harness/batch（^0\.41\.0）、@alma-harness/memory（^0\.41\.0）、@alma-harness/execution（^0\.41\.0）、@alma-harness/single-call（^0\.41\.0）、@alma-harness/conversation（^0\.41\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。它还提供命令行工具 alma-operations，可以用 npx alma-operations 直接运行。

### @alma-harness/runtime 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @alma-harness/runtime 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @alma-harness/runtime 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=22。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @alma-harness/runtime 可以商用吗？

@alma-harness/runtime 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @alma-harness/runtime 的下载量有多少？

根据 npm 官方下载统计，@alma-harness/runtime 在 2026/10/06 – 2026/11/04 这 30 天内被下载 2,157 次，日均约 72 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @alma-harness/runtime 还在维护吗？

最新版本 0\.41\.0 发布于 2026/11/04（3 天前）；至今共发布 45 个版本，其中过去 12 个月发布了 45 个；首次发布于 2026/09/11。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

