@ 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/runtimefoldspace build——兴建dist/index.js。在一个代码项目中,它首先使agent/runtime/匹配此套接字的运行时间( 从未将更新的运行时间复制回滚; 版本在src/runtime/VERSION) 及其所写的每个文件的名称foldspace deploy(Foldspace - 内部) - 上传dist/index.js改为agent/actions/<env>/<productId>/<agentApiName>- 固定装置和试验
- 动词界面 下级
不同之处——只有运输
| 动词 | A (社区发展方案) | B (电话分机) |
|---|---|---|
loadBundle | addScriptToEvaluateOnNewDocument | <script src> 在已部署的 CDN 路径中 |
evaluate | Runtime.evaluate | 内容标记消息 |
screenshot | Page.captureScreenshot | tabs.captureVisibleTab |
relaxCSP | Page.setBypassCSP | declarativeNetRequest 标题规则 |
navigate | Page.navigate | tabs.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 罐头)
运行它.
-
先发布定点. 如果撤回的版本也是
latest,则 消息告诉用户升级到自己被撤回的版本. -
撤销已断开的版本,有一个信息说 什么是错的 移动到哪个版本 。 那个消息正是用户和编码 替他们工作的特工 看什么时候
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" "…"。 。 。 . -
检查它花了:
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视其为取景卡),或renderComponentsDK不能读取(所传递或别名的对象,...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 读取,因为
他们以前不同意建筑.