@foldspace_npm/harness

中文文档
0.1.42发布于 2026/11/09TypeScriptES Module近 30 天下载 2284

构建并校验便携式"Foldspace"动作文物与活应用.

中文使用文档
文档目录18 节
  1. 两个建筑
  2. 真正共享的东西
  3. 不同之处——只有运输
  4. 为什么一个包而不是两个
  5. 使用
  6. 发现CLI
  7. 创建工程
  8. 保持绳索的通畅
  9. 跟紧保存的代码
  10. 撤销释放(维护者)
  11. 船前的林特代理密码
  12. 运行时间助手
  13. 选择附件模式
  14. 通过代理验证动作
  15. 检查已公布的代码
  16. 制作一个短视频来分享
  17. 添加到已有工程中
  18. 为什么这个软件包存在

@ troldspace npm/ harness (英语)

构建便携 dist/index.js 行动文物 并验证它与现场 应用.

这个包是两个架构中相同的部分. 所有东西 其他关于建筑者如何运行,他们之间是不同的.


两个建筑

A-当地 (今天)B-远程 (设计,未建造)
建筑的运行人类电脑上的克洛德密码GCP中的克洛德特工SDK
谁的浏览器一个孤立的Chrome 带发射人类 拥有 颜色
密码如何到达页面利用社区发展方案的准备工作建筑扩展器装入云端文物
先决条件Claude Code, 客户端回波, 节点, 一个孤立的Chrome简介已安装的扩展
会话和饼干在一个配置图中,绳子可以创建人类自己,未受伤害
代码和历史人类电脑上的重播托管环境中的工作空间

"出口来回"将一栋建筑从B移动到A—— 它只是一个副本,不是 重写时 agent/ 两者相同. 保持同样的是 限制此软件包的存在以保护 .

真正共享的东西

  • agent/actions/* 财务报告和审定财务报表 agent/api/* - 处理器是 fetch 加号 runTask, (中文(简体) ), 没有更多的。 在一个音轨上构建的动作运行在另一个音轨上没有修改.
  • agent/utils.ts 配置和再出口 @foldspace_npm/harness/runtime
  • foldspace build ——兴建 dist/index.js。在一个代码项目中,它首先使 agent/runtime/ 匹配此套接字的运行时间( 从未将更新的运行时间复制回滚; 版本在 src/runtime/VERSION) 及其所写的每个文件的名称
  • foldspace deploy (Foldspace - 内部) - 上传 dist/index.js 改为 agent/actions/<env>/<productId>/<agentApiName>
  • 固定装置和试验
  • 动词界面 下级

不同之处——只有运输

动词A (社区发展方案)B (电话分机)
loadBundleaddScriptToEvaluateOnNewDocument<script src> 在已部署的 CDN 路径中
evaluateRuntime.evaluate内容标记消息
screenshotPage.captureScreenshottabs.captureVisibleTab
relaxCSPPage.setBypassCSPdeclarativeNetRequest 标题规则
navigatePage.navigatetabs.update

详细情况: src/transports/README.md。 。 。 .

为什么一个包而不是两个

分割 harness-local 财务报告和审定财务报表 harness-remote 叉头 build 财务报告和审定财务报表 deploy - 那个 精确失败 此软件包被创建为结束 。 而动词界面只停留 诚实,而两个执行 坐在后面; 分开它们和"同样 动作以两种模式运行"悄悄地停止了真实性.

主机环境使用相同的动作源并构建合同,但当地 inject 财务报告和审定财务报表 attach 仅保留 CDP 命令。 绳子不会产生 客户申请扩展.


使用

发现CLI

可读帮助按工作流程分类:

foldspace help
foldspace help attach

编码员可以检查同一版本的指令和能力合同:

foldspace help --json
foldspace help attach --json

安装 harness 二进制是用于 foldspace。 。 。 .

JSON 描述当前选项,先决条件,副作用,风险, 和下一步。 它没有声称未来托管环境 已实施能力执法.

创建工程

从已安装的模板创建已配置的动作项目 拉带版本。 当 stdin 是一个终端时会提示缺少值 :

npx --yes @foldspace_npm/harness init

非交互式/ CI 形式 :

npx --yes @foldspace_npm/harness init foldspace-agent \
  --product-id <product-id> \
  --agent-key my-agent \
  --app-domain app.example.com \
  --name "My Agent"

开发过程中直接从吊带检查中运行时 :

node bin/cli.mjs init ../foldspace-agent \
  --product-id <product-id> \
  --agent-key my-agent \
  --app-domain app.example.com

代理密钥是代理工作室显示的值, 例如 my-agent这是 而不是侧车目录名称 . --agent-api-name 仍为已贬值的别名 页:1 --agent-key。 。 。 . --domain 仍为 --app-domain。 。 。 . --name 可选和默认为目标目录 名称( e)foldspace-agent 除非您通过目录)。 产品标识必须是 赤裸的身份证,而不是 SDK 密钥(以 EU-时 (b) 建立区域网络。 app域名可能是主机名或HTTP(S) URL,没有端口或 路径.

--region us|eu (默认) us)是账户所在的Foldspace区域. 写给 foldspace.dev.json 作为 region并选择SDK 项目负载( u)sdkUrl:每个区域都有自己的建设,指出这一点 区域服务器。 没有的项目 region 是美国。 每个区域的价值 内 src/region.mjs。 。 。 .

为了安全起见, init 设置新文件夹, 或填入一个只持有 系统或编辑器放在那里.DS_Store, (中文(简体) ), .localized, (中文(简体) ), Icon\r, (中文(简体) ), ._*, (中文(简体) ), Thumbs.db, (中文(简体) ), desktop.ini, (中文(简体) ), .mcp.json文件夹 .git/, (中文(简体) ), .vscode/, (中文(简体) ), .cursor/, (中文(简体) ), .idea/,以及 .claude/ 无 settings.json) (中文(简体) ). 这个 留下他们现在的样子,拒绝其他任何东西,包括现有的 Foldspace项目. 它从不填充主目录或其桌面、文档 或下载,磁盘的根,或 Claude 代码桌面的文件夹 会话开始于无文件夹( 下) scratch-workspaces),或 Codex 文件夹 用于没有项目的聊天( t)~/Documents/Codex每个聊天的文件夹都在里面, 即便它们空了, 它从来不覆盖一个文件,也不会初始化 Git. 在TTY可以提供 npm install --ignore-scripts 经过脚手架。 创建后:

cd foldspace-agent
npm install --ignore-scripts   # if you skipped the install prompt
# before the first build, CLAUDE.md step 5: a code project's agent/ replaces the scaffold's
npm run build
npm run inject   # the human signs in in that window
npx foldspace observe wait-login
npx foldspace attach --daemon

有意生成的 npm 脚本仍然是正常的项目界面; foldspace init 是一次性项目创建命令.

已生成 CLAUDE.md 导入平台指令 @foldspace_npm/harness 而不是复制它们。 现有项目可以切换 到该导入 foldspace upgrade --refresh-instructions。 。 。 .

保持绳索的通畅

租户项目 @foldspace_npm/harness 版本。 出版情况a 新的软件包不会移动它们:每次会话检查和出错。 几个 建造者可以工作在一剂上,因此在一行内(0.1.x到更新的0.1.y, update.autoUpgrade编码代理在不问的情况下升级,并在 一行;跨越一行(0.1到0.2)它先问人.

npx --yes @foldspace_npm/harness@latest upgrade --check
foldspace upgrade --yes   # within the line: no question; across a line: after the human agrees

--check (以及非互动性) upgrade 没有 --yes)从未安装. --yes 写入新准确版本并运行 npm install --ignore-scripts。 。 。 . 后期重建;那没有发表.

foldspace build 财务报告和审定财务报表 foldspace attach 在开始前运行相同的检查 (单位:千美元)attach --status 财务报告和审定财务报表 --stop 不许). 后面的项目得到一行 继续 一个项目在一个 撤销 拒绝版本( 下) 以运行并打印原因。 人类一旦衰落 就要继续发展下去 升级 :

FOLDSPACE_SKIP_UPDATE_CHECK=1 npm run build

这样,支票就完全关闭了;它不会修复被撤回的版本.

跟紧保存的代码

通过一个代码工程,几个构建者可以保存到一个代理. foldspace sync 保存文件夹 agent/ 最新:它从未到达过Foldspace本身 - 即 编码代理用 Foldspace 工具读取已保存的代码,并通过 头部读取.

npx foldspace sync check --develop <sha> [--line <sha>]          # what to pull, and where to write it
npx foldspace sync apply                                         # merge it into agent/
npx foldspace sync saved --head <commit_sha> --paths <a,b>       # after a save

--line 是头 foldspace/<Agent Key>代码 项目的指令保存到它存在时 . apply 保存副本 agent/ 内 .foldspace-dev/agent-kept/<time>/ 按文件合并文件 对比文件夹上次显示的内容( 插入) .foldspace-dev/saved-code/(单位:千美元) 文件只更改了一方, 文件都更改了 保存的版本并列于下 conflicts保存和出版 不变:它们遵循代码项目的指示.

撤销释放(维护者)

当一个已出版的版本被严重打破 以至于没有人可以继续 把它收回来 npm deprecate登记册是被撤回的清单 版本,所以已经安装在其中的工程在不 安装任何新的。 只有拥有者 @foldspace_npm/harness (npm 罐头) 运行它.

  1. 先发布定点. 如果撤回的版本也是 latest,则 消息告诉用户升级到自己被撤回的版本.

  2. 撤销已断开的版本,有一个信息说 什么是错的 移动到哪个版本 。 那个消息正是用户和编码 替他们工作的特工 看什么时候 build 或者说 attach 拒绝运行 :

    npm deprecate @foldspace_npm/[email protected] "attach loads the wrong bundle; upgrade to 0.1.15"
    

    范围也起作用 : npm deprecate "@foldspace_npm/harness@<0.1.15" "…"。 。 。 .

  3. 检查它花了:

    npm view @foldspace_npm/[email protected] deprecated
    

要撤消撤回, 请使用空信件 :

npm deprecate @foldspace_npm/[email protected] ""

这不是瞬间 build 财务报告和审定财务报表 attach。 。 。 . 他们用登记员的答案 缓存12小时 .foldspace-dev/harness-update.json。 。 。 . foldspace help --json (手册首先读出)和 foldspace upgrade 询问登记处 每次并刷新缓存, 所以提取到一个工程的下一个 12小时之内开始上课 它只到达项目在一个 带有此检查的被带版本 .

船前的林特代理密码

foldspace build 运行 foldspace lint 先说 跳过捆绑错误; 警告 打印并仍在生产 dist/index.js。 。 。 .

foldspace lint
foldspace lint --json

v1 旗帜 :

  • 错误 no-static-agent-prompt - 说吧 execute一张卡片 callback 或编号 readyState 传递代理指令( e)directive,“告诉用户”,......)
  • 错误 no-runtask-prompt —— 说 runTask({ data: { prompt } }) 键; 客户 API 字段命名 prompt 允许
  • 错误 card-contract - 说吧 awaitUserInput: true 一张取景卡(其 renderComponent 或者说 render 使用无 callback, (中文(简体) ), cancel 或者说 readyState:聊天面板忽略了它,但在无头模式下,代理等待一个从未到来的回调
  • 错误 no-test-mode-in-bundle - 说吧 armAllInstances 用于任何地方 agent/ (称为,或移交以后称为),或 setTestMode(...) 除了字面上的东西 false中的运行时间复制件 agent/runtime/ 不被拒绝 setTestMode 内部 armAllInstances
  • 错误 no-fixed-customer-address - 对每个客户都有子域的产品(PER_CUSTOMER_SUBDOMAIN 内 agent/constants.ts),一个客户的地址在 API_BASE 或任何地点 agent/;虽然这个地址尚未确定,但其第一部分看起来像客户名的地址(acme. - 没有 app., (中文(简体) ), eu1., (中文(简体) ), reports.(中文(简体) )
  • 错误 token-stays-home - 用户的签名代号(getAuthToken,一个会话名存储密钥, document.cookie,然后通过变量和帮助函数)返回 execute 或一张卡片,交给Foldspace,登录,再存储,或发送给不是产品后端的主机
  • 错误 no-secrets - API 密钥、JWT、无记名符号、饼干价值、秘密名称的字符串, .har 俘虏、储存场和 .env 项目中任何地方的文件( 不) node_modules/, (中文(简体) ), dist/, (中文(简体) ), .foldspace-dev/, (中文(简体) ), agent/runtime/(中文(简体) )
  • 警告 known-hosts-only - 说吧 fetch, (中文(简体) ), sendBeacon, (中文(简体) ), WebSocket, (中文(简体) ), EventSource, (中文(简体) ), XMLHttpRequest, (中文(简体) ), publicFetch 或者说 import() 写着一个地址的主人既不是Foldspace的(*.foldspace.ai),产品'(foldspace.dev.json 主持人, API_BASE,该应用程序的自有域名) 或写入 agent/constants.ts
  • 警告 card-contract - 任何其他情况 awaitUserInput 在一张取景卡上, awaitUserInput 在输入卡(不需要)上,该卡宣布 callback, (中文(简体) ), cancel 或者说 readyState 而不使用其中任何一种(SDK视其为取景卡),或 renderComponent sDK不能读取(所传递或别名的对象, ...rest, (中文(简体) ), arguments: 代理等待,直到它打电话 readyState, (中文(简体) ), callback 或者说 cancel,所以一个风景卡 呼叫他们中没有一个从来没有得到答复
  • 警告 no-emoji - 处理器中的情绪或 agent/views 字符串字节
  • 警告 registry-integrity 重复的密钥, { execute } 未注册, 缺少注册值 execute

将动作指令放入代理工作室或使用"Foldspace"工具. foldspace lint 无法看到副本.

运行时间助手

进口自 agent/utils.ts,用于配置和再出口 @foldspace_npm/harness/runtime。该代码被捆绑到 dist/index.js 财务报告和审定财务报表 运行在客户页面中——它不是一个CLI命令.

API_BASE 财务报告和审定财务报表 AUTH_SOURCE 印章为空。 从抓获的XHR中填充,而不是 猜对了 对于不是"熊"的认证,请遵循 recipes/swap-the-login-method/README.md: 对于自定义标题, 复制其 agent/utils.ts 结束 agent/utils.ts; 对于没有符号的饼干,它的 variants/utils.cookies.ts。 。 。 .

选择附件模式

  • 交换( 默认 ) : 页面已使用配置的产品和代理.
  • 靴子夹( F)--bootstrap: 页面没有Foldspace SDK.
  • 替换( A)--replace: 页面嵌入不同的产品或代理,或 拥有一个没有配置代理的 SDK .

使用 foldspace help attach 用于模式要求、效果和安全选项. 编码代理运行 foldspace attach --daemon 所以这个工具 返回后键 [lifecycle] inspect_registration:…。前景附件遗迹 监视终端的默认值. attach --status 财务报告和审定财务报表 attach --stop 检查并拆除一个守护进程。 看顾客的应用软件 foldspace observe:它读取测试窗口,只读,同时附加运行.

通过代理验证动作

foldspace attach 不直接援引动作处理器。 它装入当地 文物,验证所捕获的本地登记册与配置的 SDK 匹配 代理 - 包括一个空的注册 - 然后观察动作呼叫时 你锻炼正常的特工经验。 命名动作不需要 随附.

npx foldspace ask "<question>" --retry 2 将问题输入代理 面板并报告回复、卡片文本和截图,以及-同时附上 运行 - 是否执行和渲染运行.

动作输出显示 SDK 的动作呼吁和当地 execute编号 :render 阶段 :

[actions] sdk:action show_account_360 executed
[actions] local-handler:execute show_account_360 succeeded 412ms
[actions] local-handler:render show_account_360 succeeded 18ms

只记录动作名称、参数密钥、状态和持续时间; 处理器 参数值、结果和错误消息不是。 在拆分时, 重复页 总结了失败和有限度的行动观察。 观察员和 诊断是用绳子注射的 所以 dist/index.js 未重写.

检查已公布的代码

之后 deploy 工具 - 不 foldspace deploy,哪个 仅供 Foldspace 工作人员使用 - 发布代码项目到 dev(或与 人类是的,生产,检查它在同一测试窗口。 这需要一个 自动加载此代理的站点: 后 attach --bootstrap 或者说 --replace 还没有什么可查的.

npx foldspace attach --stop          # while attach runs the page serves your local build
npx foldspace published dev          # this page's agent now loads the published dev code
npx foldspace ask "<the question>" --retry 2
npx foldspace attach --daemon        # back to your local build before you build anything else

published 附加运行时拒绝 。 也拒绝,除非这页是自己的 Foldspace 代理是这个项目的代理 - 相同的产品和代理密钥作为 foldspace.dev.json,检查了附加检查的方式。 只改变这个 通过SDK的代理 setConfiguration({ enableDebugLogs: true, remoteActionsSettings: { enabled: true, environment: "DEV" | "PROD" } })页:1 重新装入将页面放回代理正常装入的内容 。 当代码加载时, sDK保持任何处理器 代理已经有一个新的相同的 名称,所以一旦公布的代码被装入,它的处理器就设置在 页面用于它定义的每个动作;页面保留它自己的处理器用于 休养. 一个特工用一个版本的密码 或装入密码 拒绝 : 窗口不会显示最后公布的内容 . 没有附加物, ask 仍然报告答复,卡片文本和a 截图; handler.execute 财务报告和审定财务报表 handler.render 改为"没有跟踪到这里" (公布代码)".

制作一个短视频来分享

npx foldspace record 从 video/scenes.json:开卡满足产品的代理,然后每张 问题在测试窗口中询问,在新对话中键入,使用 标题一经解答 - Foldspace 特性显示为丸 问,还有一条关于用户得到什么的大线, 它的回报突出. 大约40 s,在Foldspace的颜色中带有官方标志: video/<product>-<date>.mp4 还有海报 它用Chrome自己的屏幕和编码记录在隐藏的谷歌中 Chrome - 没有ffmpeg,没有屏幕记录权限,没有上传. 这个 视频显示来自登录账户的真实数据;共享是人类的 电话,和 video/.gitignore 保持它关闭。 这个 share-a-video 技术, 写入每个项目的 .claude/skills/,是怎样的。 它运行一个 几分钟,半途而废,它把窗户放回原样.

添加到已有工程中

npm i -D @foldspace_npm/harness
{ "scripts": {
    "dev":    "foldspace build --watch",
    "build":  "foldspace build",
    "inject": "foldspace inject",
    "attach": "foldspace attach",
    "attach:daemon": "foldspace attach --daemon"
} }

每个命令解决 消费 重击.. process.cwd(),或 FOLDSPACE_PROJECT_DIR 所以主机的构建者可以将其指向工作空间 控制系统。 配置来自消费者 foldspace.dev.json。 。 。 .

foldspace deploy 是Foldspace-Internal:它写给Foldspace自己的存储器, 任何客户都无法写信 编码代理从不运行或提供. 与一个 代码工程,一个构建会话会用 Foldspace 发布代理代码 工具代替: repo_write 拯救它,还有 deploy 工具发布 - to 说完后 只能用人类的"是"来制作 "行"而后所言"说. 没有代码项目 佛德太空队和人类一起行动.


为什么这个软件包存在

scripts/ 曾经被复制到每个客户端 repo, 和复制叉。 以 2026-08-25 (中文(简体) ) client-template 持有一个固定和一个客户 repo 持有另外四个, 财务报告和审定财务报表 也没有全部五个数字 :

修补为什么这很重要
SDK 负载护卫 + 重试在没有的应用程序上 document.body 在文档启动时, 附加投出; 旧的警卫测试了分贝, 所以没有再试过, 代理从未默默地加载过
自动接通的工人释放Auto-Attach 暂停每个工人,直到附带的客户发布它——全程的电源冻结了应用程序自己的工人
agentIds 计数agent({apiName}) 返回 OverLAY 手柄; 将手柄装入嵌入式代理机上, 使真实的对话未标记
--test-mode (默认关闭)测试模式是无条件武装的, 隐藏了初始设置需要看到的内容; 现在它正在选择使用
诚实的警徽它声称: TEST MODE 测试模式是否已经打开

另外两个变化来自包装: 已注射 相当 而不是从已删除的dev服务器获取的 express 财务报告和审定财务报表 concurrently,95 (中文(简体) ) 软件包,是驱动无法到达 制造机器——和 inject 现在记录端口 attach 读取,因为 他们以前不同意建筑.

版本与发布记录

@foldspace_npm/harness 共发布 43 个版本,首次发布于 2026/08/31;过去 12 个月发布了 43 个版本。

版本发布日期距今
0.1.42latest2026/11/096 天前
0.1.412026/11/097 天前
0.1.402026/11/087 天前
0.1.392026/11/0313 天前
0.1.382026/11/0114 天前
0.1.372026/10/2818 天前

关于 @foldspace_npm/harness 的常见问题

@foldspace_npm/harness 是什么?

构建并校验便携式"Foldspace"动作文物与活应用.

如何安装 @foldspace_npm/harness?

在项目目录运行 npm install @foldspace_npm/harness,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 harness、foldspace,可以用 npx harness 直接运行。

@foldspace_npm/harness 支持 TypeScript 吗?

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

@foldspace_npm/harness 支持 ESM 还是 CommonJS?

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

@foldspace_npm/harness 需要什么版本的 Node.js?

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

@foldspace_npm/harness 可以商用吗?

@foldspace_npm/harness 使用 未声明 许可。package.json 没有声明许可证。没有许可证的代码默认保留全部权利,商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括,不构成法律意见,请以许可原文为准。

@foldspace_npm/harness 的下载量有多少?

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

@foldspace_npm/harness 还在维护吗?

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