@corbits/artifacts

中文文档
0.4.0发布于 2026/11/01LGPL-2.1-onlyTypeScriptES Module近 30 天下载 3965

艺术、版本和上传,带有可插件内容Store,可挂载到任何互换主机。 需要@intx0.4.0或更新 .

中文使用文档
文档目录15 节
  1. 为什么?
  2. 安装
  3. 快速启动
  4. 合适的话
  5. 参考文献
  6. createArtifactRoutes(deps)
  7. createWorkflowArtifactRoutes(deps)
  8. runArtifactMigrations(config, { schema })
  9. @corbits/artifacts/sidecar-bundle
  10. 使用互换
  11. 从0.1升级
  12. 从0.2升级
  13. 代理工具
  14. 主机
  15. 许可证

@c轨道/艺术

为交换代理商及其用户提供版本文件和文件:在Hono路由上架的轨道中心模块 @intx/hub-api,在可插件中保留 Postgres 和字节中的版本 ContentStore以及辅助车的船舶代理工具.

为什么?

  1. 每个版本都保留. 文件或上传文件的每个版本都是新版本,其内容,字节和SHA-256摘要. expectedVersion 将修改变为比较和设定.
  2. 就像任何枢纽路线一样. createArtifactRoutes 返回 a Hono<TenantEnv> 子应用程序。 读者只能是来电的房客 书写在中心 requireGrant。 。 。 .
  3. 探员通过同一家商店写作. 一个运行扫描的路由集和一个侧车工具包让一个工作流程运行来创建,读取和修改其用户所看到的文物.
  4. 移民安全回放. 每个SQL文件都具有"一能"性,在一个咨询锁下运行在每个靴子上,因此可以同时从几个复制品开始.

它没有UI,也没有物品商店: 宿主制造出文物,带来自己的 ContentStore 用于大型文件.

安装

bun add @corbits/artifacts \
  @intx/agent @intx/authz @intx/db @intx/hub-api @intx/types \
  drizzle-orm hono hono-openapi postgres

添加 @intx/agent 只有代理人使用侧车工具。 运行于节点QQ24.

快速启动

与 DATABASE_URL 指向运行过的中枢数据库 runArtifactMigrations (见 使用互换:

import {
  createArtifact,
  createArtifactDb,
  getArtifact,
} from "@corbits/artifacts";

const { db, close } = createArtifactDb(process.env.DATABASE_URL!);

const created = await db.transaction((tx) =>
  createArtifact(tx, {
    scope: { tenantId: "acme", principalId: "alice" },
    ownerPrincipalId: "alice",
    kind: "document",
    title: "Notes",
    content: "Hello",
    source: { origin: "manual" },
  }),
);
console.log(await getArtifact(db, created.id));
await close();

acme 财务报告和审定财务报表 alice 必须是中心的租户和校长。 它在第一版打印文物.

合适的话

互换 由AI代理作为委托人:拥有自己身份、权限和证书的账户。 其枢纽是多租户控制平面,它持有租户、本金和赠款(允许在资源上持有本金);其侧车是代理运行时间.

  • 运行于 : 中心,作为其Hono应用的路线及其Postgres的桌子artifacts 计划.
  • 插入到 : @intx/hub-api 路线和赠款, @intx/db (数量) DBConfig,以及 tenant 财务报告和审定财务报表 principal 作为FK目标的表格),以及 @intx/agent 工具在侧车.
  • 与 : @corbits/mailbox 财务报告和审定财务报表 @corbits/memory,其他轨道中心模块,以及 @corbits/agent-token 为代理无记名标志.

参考文献

createArtifactRoutes(deps)

deps类型主机提供的东西
dbArtifactDb例如,枢纽的细雨柄 createDB。 。 。 .
contentStoreContentStore文件字节去的地方 . InlineContentStore 将其保存在 Postgres; 执行端口以保存对象.
requireGrantRequireGrant从 @intx/hub-api是因为 createRequireGrant。 。 。 .
onArtifactCreated(tx, row, scope) => Promise<void>可选的 在创建交易中运行以获取其他创建副效果 。 创造者 write 财务报告和审定财务报表 archive 补助金是给你的.
decorate(tenantId, rows) => Promise<void>可选的 在序列行中添加只显示字段。 它不能改变返回的行.
uploadPolicyUploadPolicy可选的 MIME 类型 POST /artifacts/upload 接受这个建议。 默认为 ARTIFACT_UPLOAD_POLICY。 。 。 .
countSegmentsArtifactCountSegments可选的 名为上游 GET /artifacts/counts。 。 。 .
路线赠款对
GET /artifacts无(租户范围)列出文物,被活化. 空 200 没有校长.
GET /artifacts/counts无(租户范围)每起计数 countSegments 桶,还有 all。 。 。 .
POST /artifactscreate 打开 artifact:*在 1 版本创建文本或 URL 文物 .
POST /artifacts/uploadcreate 打开 artifact:*上传一个或多个文件( E)multipart/form-data),各有一件文物.
GET /artifacts/:id无(租户范围)最新版本.
GET /artifacts/:id/versions无(租户范围)版本历史.
GET /artifacts/:id/versions/:version无(租户范围)一个版本,有其内容.
POST /artifacts/:id/versionswrite 打开 artifact:<id>添加 JSON 或新版本 file 用于上传文件.
POST /artifacts/:id/archive, (中文(简体) ), unarchivearchive 打开 artifact:<id>存档或恢复.
GET /artifacts/:id/download?version=N无(租户范围)一个版本的字节,默认最新.
GET /artifacts/:id/preview无(租户范围)A 类 text/html 沙盒式CSP下工艺品; 415 否则.

没有主, 除了列表和数答之外, 每一个路线 403另一个租户的文物,或者一个身份不明的,回答 404。在主机上设置一个上传和重审路径的请求-机构限制;在检查前缓冲机构 MAX_UPLOAD_BYTES。 。 。 .

每次写报告 contentSha256,与新版本存储的hex sha256:在UTF-8文本上,或者在文件的字节上传. POST /artifacts 财务报告和审定财务报表 POST /artifacts/upload 每件文物都带着它 POST /artifacts/:id/versions 返回旁边 artifactId 财务报告和审定财务报表 version这是 null 仅针对摘要存在前所写的版本.

createWorkflowArtifactRoutes(deps)

用于工作流程运行的运行范围路由,该路由以无记名符号和 x-workflow-run-address 标题而不是会话 .

deps类型主机提供的东西
dbArtifactDb与上同为相.
contentStoreContentStore与上同为相.
resolveRunScopeWorkflowRunResolver(bearerToken, runAddress) => ResolvedWorkflowRunScope | null。 。 。 . null 答题 401。 。 。 .
agentTokenAgentTokenAuth可选的 接受经纪人自己的中枢标志作为第二条入站方式.
uploadPolicyUploadPolicy可选的 MIME 类型 POST /artifacts/binary 接受这个建议。 默认为 ARTIFACT_UPLOAD_POLICY。 。 。 .
maxBinaryBytesnumber可选的 字节上限 POST /artifacts/binary默认为 MAX_UPLOAD_BYTES。 。 。 .
maxContentCharsnumber可选的 由此产生的内容的字符上限——全文或经编辑的文本,用于 POST /artifacts 财务报告和审定财务报表 PATCH /artifacts/:id/versions默认为64 000.
beforeWriteWorkflowBeforeWrite可选的 检查每个文本创建( N)POST /artifacts)和修订(PATCH /artifacts/:id)作文前. 所有的写法都有效.

beforeWrite({ scope, kind, write, content }) 得到运行范围, 文物种类, write 作为 { op: "create" } 或者说 { op: "revise", artifactId },且该版本在任何编辑后将保留内容。 它返回一个:

  • { action: "allow" } 照常写作.
  • { action: "refuse", code, message } 答题 422 与 { code, message },而代理工具错误是 message。 。 。 . code 必须匹配 /^[a-z0-9_]+$/· ; message 必须是 1 到 1 000 个字符.
  • { action: "redirect", artifactId, expectedVersion? } 将创作变成对文物的修改 必须是同类的 在跑的房客,回答 200 联合国 { id, version }。该修订取了创建的名称。 丢失、存档或其他租户的文物答案 404和一个 stale expectedVersion 答题 409 告诉经纪人读读现有文物并修改.

任何其它决定, 重定向返回修改, 或重定向到另一类解答 500 写什么? 未检查二进制上传和链接文件 .

一个创造的检查不是连环化的:两个并发的创造都可以同时允许,因此,像"每个租户一个计划"这样的政策在跑步时仍然可以用两个计划来结束. 修改后的检查在持有文物行锁的交易内部进行,所以应当迅速,不得写出文物.

每笔笔写作POST /artifacts, (中文(简体) ), POST /artifacts/binary, (中文(简体) ), POST /artifacts/link-file, (中文(简体) ), PATCH /artifacts/:id回答问题 { data: { id, version, contentSha256 } },同一份摘要 租户路线报告。 对于 link-file 文摘覆盖存储 preview 文本( 当没有给出时为空),而不是工作空间文件 path。 。 。 .

runArtifactMigrations(config, { schema })

取同样的 DBConfig 财务报告和审定财务报表 schema 作为交换 runMigrations。 。 。 . schema 持有主机 tenant 财务报告和审定财务报表 principal 表格; 此软件包的表格总是输入 artifacts。 。 。 .

@corbits/artifacts/sidecar-bundle

artifacts 是一个 @intx/agent 3个工具的工具包。 他们把扫描过的路线叫做特工的 hub 证书.

  • artifact_write 在未给出标识时, 从内容或工作空间文件路径创建 。 用一个ID来修改,或者用全文,或者用 edits:准确的段落,每个段落必须出现一次,否则没有文字. expectedVersion 如果新版本存在,则拒绝写入。 它回来了 { id, version, contentSha256 }。 。 。 .
  • artifact_read 返回内容,一个过去版本 version区域 offset 财务报告和审定财务报表 limit。 。 。 .
  • artifact_search 列出最新的文物,由 kind 由a query 与标题和内容相匹配.

使用互换

在互换后运行迁移, 挂载两套路由, 赠款 create 打开 artifact:* 给创造文物的负责人 给特工们工具包.

import { timeWindowEvaluator } from "@intx/authz";
import { createDB, createGrantStore, runMigrations } from "@intx/db";
import { createRequireGrant } from "@intx/hub-api";
import {
  createArtifactRoutes,
  InlineContentStore,
  runArtifactMigrations,
} from "@corbits/artifacts";

const dbConfig = {
  host: "localhost",
  port: 5432,
  user: "postgres",
  password: "postgres",
  database: "interchange",
};

await runMigrations(dbConfig, { schema: "public" });
await runArtifactMigrations(dbConfig, { schema: "public" });

const { db } = createDB(dbConfig);
const requireGrant = createRequireGrant({
  grantStore: createGrantStore(db),
  conditionRegistry: { time_window: timeWindowEvaluator },
});

export const artifactRoutes = createArtifactRoutes({
  db,
  contentStore: InlineContentStore,
  requireGrant,
});

挂载 artifactRoutes 在中枢应用程序 /api在枢纽的认证 和租户中间的软件.

对于特工,挂载 createWorkflowArtifactRoutes({ db, contentStore: InlineContentStore, resolveRunScope }) 时间 /api/workflow-artifacts。 。 。 . resolveRunScope 这是主机的 (bearerToken, runAddress) 从中心的工作流程中返回租户和校长的查询,或者 null。侧车工具呼叫 /api/workflow-artifacts添加到代理中并绑定其 hub 在您部署时, 证书为代理的中枢符 :

import { defineAgent, type InferencePreference } from "@intx/agent";
import { artifacts } from "@corbits/artifacts/sidecar-bundle";

export function buildAssistant(sources: readonly InferencePreference[]) {
  return defineAgent({
    id: "assistant",
    systemPrompt: "You help the team read and write shared artifacts.",
    capabilities: [],
    inference: { sources },
    tools: [artifacts],
  });
}

从0.1升级

  • mountArtifacts(app, opts) 现在 createArtifactRoutes(deps),以及 mountWorkflowArtifacts(app, opts) 现在 createWorkflowArtifactRoutes(deps)双向挂载 app.route。 。 。 .
  • POST /artifacts 财务报告和审定财务报表 POST /artifacts/upload 需求 create 打开 artifact:*升级将它授予每个已经在其租户中创造出文物的校长;将它授予新的校长.
  • runArtifactMigrations(db) 现在 runArtifactMigrations(dbConfig, { schema }). 现有0.1.0数据升级在第一个靴子上.
  • 那靴子掉了0.1.0的迁移分类账. 你不能回滚到0.1.0,0.1.0和0.2.0复制品不得共享数据库.
  • 细细的桌子 web_site 援助者, SKILL_DRAFT_KIND, (中文(简体) ), windowContent 并拆除邮递路线和助手。 这个 mail_attachment_ref 表格已删除.
  • 需要24号节点或更新.

从0.2升级

由地表分隔:AGENTS(侧车工具包)和HOSTS(路线和出口)的变化.

代理工具

侧车工具包倒塌了 5个更精细的涂装工具变成了3个. artifact_write 现在涵盖创建和链接(通过 edits编号 :content 其定义如下: { artifactId, version } 结果是一样的.

0.2 工具0.3 (韩语)怎么样
artifact_createartifact_write没有就叫吧 artifactId,通过 title, (中文(简体) ), kind, (中文(简体) ), content。 。 。 .
artifact_link_fileartifact_write没有就叫吧 artifactId,通过工作空间 path。 。 。 .
artifact_read_chunkartifact_read传送范围为 offset编号 :limit 改为 start编号 :end。 。 。 .
artifact_listartifact_search首先命令对结果进行最新更新.
artifact_find_by_titleartifact_search没有一滴一滴——见下文的告诫.

artifact_find_by_title 这不是一个滴入. 在0.2中它和标题相符 没错,只匹配标题,最多返回一个 { artifactId, version } (或作无. 在 0.3 时 artifact_search 对大小写不敏感的子字符串(ILKE)匹配 标题和内容,然后返回匹配的列表。 需要旧的准确标题、单结果语义的调用者必须在过滤结果后进行(比较) title 案件不敏感,并进行第一次精确的匹配.

搜索结果上限为每次呼叫50件文物. artifact_search 接受一个 cursor 财产(加) limit,上限为50),通过所有匹配的页面;回转先前的呼叫 nextCursor (保持相同的查询和类型)直到不返回.

主机

角色不变,但去掉了两条路线和一条出口:

  • GET /artifacts/find → GET /artifacts?query=…时 query 是标题和内容上相同的对大小写不敏感的子字符串.
  • GET /artifacts/:id/chunk → GET /artifacts/:id/read?offset&limit。 。 。 .
  • readArtifactChunk 删除. findArtifactByTitle 财务报告和审定财务报表 linkFileArtifact 继续出口. README.md是因为 Reference 一节描述当前的路线和工具.

现在从软件包条目导出两个错误类别: VersionConflictError 答题 409 当 expectedVersion 已经僵化 ArtifactEditError 答题 400 当修改被拒绝时。 把它们找出来 准确的失败给用户.

许可证

LGPL - 2.1- 仅限

版本与发布记录

@corbits/artifacts 共发布 4 个版本,首次发布于 2026/09/25;过去 12 个月发布了 4 个版本。

版本发布日期距今
0.4.0latest2026/11/019 天前
0.3.02026/10/2021 天前
0.2.02026/09/281 个月前
0.1.02026/09/251 个月前

关于 @corbits/artifacts 的常见问题

@corbits/artifacts 是什么?

艺术、版本和上传,带有可插件内容Store,可挂载到任何互换主机。 需要@intx0.4.0或更新 .

如何安装 @corbits/artifacts?

在项目目录运行 npm install @corbits/artifacts,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:hono(^4.12.32)、@intx/db(^0.5.0)、postgres(^3.4.9)、@intx/types(^0.5.0)、drizzle-orm(^0.45.2)、hono-openapi(^1.2.0)、@intx/hub-api(^0.5.0)、@intx/hub-common(0.5.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@corbits/artifacts 支持 TypeScript 吗?

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

@corbits/artifacts 支持 ESM 还是 CommonJS?

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

@corbits/artifacts 需要什么版本的 Node.js?

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

@corbits/artifacts 可以商用吗?

@corbits/artifacts 使用 LGPL-2.1-only 许可。弱 Copyleft:作为库被调用时通常不要求开源你自己的代码,但修改库本身需以 LGPL 开源;前端打包合并后的适用边界存在不同理解。以上为概括,不构成法律意见,请以许可原文为准。

@corbits/artifacts 的下载量有多少?

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

@corbits/artifacts 还在维护吗?

最新版本 0.4.0 发布于 2026/11/01(9 天前);至今共发布 4 个版本,其中过去 12 个月发布了 4 个;首次发布于 2026/09/25。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。