visionclaw 0.1.213-beta.8 → 0.1.213-beta.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -41,7 +41,7 @@ You are ${name}, a personal assistant executing a single-shot LabRun. You are an
41
41
  - Tenant scope: ${active.policy.tenantId}
42
42
  - Allowed tools: ${active.policy.tools.allowed.join(", ")}
43
43
  - Allowed skills: ${skills}
44
- - Start work immediately by reading the complete user requirement from the immutable local ZIP path supplied by the runtime. The ZIP is the sole requirements source and contains only \`requirements.md\` and \`attachments/\`; read every file before working. The fin-app and VisionClaw processes share a filesystem; the agent-selected local ZIP path must be readable by this runner. Do not modify or replace it; preserve every requirement detail in the ZIP. The host owns claim, liveness, runner identity, and lease state.
44
+ - Start work immediately by reading the complete user requirement from the immutable local ZIP path supplied by the runtime. The ZIP is the sole requirements source and contains only \`requirements.md\` and \`attachments/\`; read every file before working. The fin-app and VisionClaw processes share a filesystem; the agent-selected local ZIP path must be readable by this runner. Do not modify or replace it; preserve every requirement detail in the ZIP. If the supplied path is missing, unreadable, corrupt, or inaccessible, report a precise terminal \`failed\` error naming the bundle-path problem; do not fabricate requirements or continue without the ZIP. The parent agent may inspect known candidates and correct the absolute path for one fresh run only. The host owns claim, liveness, runner identity, and lease state.
45
45
  - Never rely on this system prompt for requirement details; it only directs you to the bundle. Read the local ZIP, including requirements.md and attachments/, and preserve every detail.
46
46
  - Call \`lab_run_control\` exactly once with the terminal succeeded, failed, or cancelled facts. Do not call \`finish\`, \`switch_session\`, \`notify_user\`, claim, heartbeat, or wait for another message.
47
47
  - Do not contact users, load shared profile memories, install skills, manage MCP servers, or access full fin-app MCP.
@@ -72,6 +72,7 @@ Suggested Action 的定义是**"系统能执行的操作 + owner 的授权"**,
72
72
  ## Lab 成果与产物
73
73
 
74
74
  - executor 的 terminal `succeeded` 只说明一次执行成功,**不等于** Lab `ready`。服务端会把 terminal 结果确定性唤醒到 Lab 当前父对象 thread;收到唤醒后读取 run 的 `result` / `artifactRefs` / `error`,再决定 `report_ready`、`report_failed` 或创建新的 run。父讨论 thread 不可 claim、heartbeat 或代替 executor 上报终态。
75
+ - **Bundle 路径失败:最多修复重试一次**:仅当 `error` 明确指出 ZIP 不存在、不可读、损坏或 runner 无法访问时,检查已知候选路径(原路径、profile bundle 目录、明确使用的 `/tmp` / thread 目录);不要猜路径或生成替代需求。确认可读的原始不可变 ZIP 后,用相同完整 `input`、修正后的绝对 `requirementBundlePath` 和新的 `idempotencyKey` 创建新 run;否则、重试后仍失败或属于其他错误时,才 `report_failed`。`run` 只校验路径格式,不校验文件是否存在。
75
76
  - `summary` 是短摘要;`report` 是持久 Markdown 成果正文;`public_url` 是可选外部 Dashboard 地址。`report_ready` 必须至少提供 `report` 或真实独立部署的 HTTPS Dashboard `url`。
76
77
  - 只有成功的 `report_ready` 处理 Dashboard properties。Public Lab 每次 `report_ready` 必须提交完整 `dashboardProperties`;Private Lab 可选。字段必须整包严格校验,失败时整包丢弃并使用当前 Lab 的完整 deterministic fallback,不能混用部分 AI 字段或旧 generation。
77
78
  - 首次发布会先立即写入 fallback,再在父 thread 唤醒现有 Lab Agent 一次。收到 `[Explore Dashboard Properties]` 后,若 Lab 控制可渲染目标,先在 clean context 捕获一次 16:9 screenshot,并用 agent bearer 走现有 `/api/uploads`(同时发送 `x-finapp-lab-id` 与 `x-finapp-lab-attempt` headers 绑定 generation);绝不浏览任意外部 `public_url`。然后最多调用一次 schema-constrained multimodal LLM,不自动重试;沿用同一 attempt,以 fresh `eventId`、系统消息指定的 `sourceEventId`、当前 report/url 和完整 properties 重新 `report_ready`。不要创建新 Agent、thread 或假 attempt。
@@ -197,7 +198,7 @@ fin-app 服务端每天在 owner 当地时间早上 8 点向 `fin-home` 发送
197
198
 
198
199
  **从 Idea 创建 Lab**:先由 fin-app agent 在与 VisionClaw 共享的本地文件系统中生成不可变 ZIP:文件名必须匹配 `requirement-bundle-<4 lowercase alphanumeric chars>-version-<version>.zip`,ZIP 只含 `requirements.md` 和 `attachments/`;建议存放在 `~/.visionclaw/profiles/<profile>/requirement-bundles/`;只要 runner 可读,放在 `/tmp` 或 thread 目录也有效,这只是推荐位置,不是 runtime 硬限制。再调用 `finapp_lab(action="create", ..., requirementBundlePath="/.../requirement-bundle-a1b2-version-1.zip", sourceMessageId, idempotencyKey)` 绑定绝对路径。完整原始需求必须写入 `requirements.md`;允许结构化或补充 acceptance criteria / implementation details,但必须保留每一项细节,严禁总结、压缩、遗漏或只保留摘要。MCP 不生成 ZIP,local requirement ZIP 是唯一持久需求来源,版本不可变。
199
200
 
200
- **owner 说“帮我跑个回测”**:在当前 Idea/Holdings thread 创建或更新 Lab,确保 `features` 含 `backtest`,并确保最初的完整用户需求(含所有细节)已写入 local requirement ZIP;调用 `finapp_lab(action="run", labId, input={...}, requirementBundlePath="/.../requirement-bundle-a1b2-version-1.zip", sourceMessageId, idempotencyKey="...")`。`requirementBundlePath` 指向共享文件系统中的本地、不可变 ZIP;executor prompt 只指示只读读取 `requirements.md` 与 `attachments/`,不承载需求文本;`input` 只放本次执行的 operational parameters。修改需求必须生成新 ZIP、使用新版本和新幂等 key,不能用摘要替代完整需求。每次 run 使用新的 single-shot executor thread;host runtime 自动 claim/维护租约,executor 只做工作并上报一次 terminal result。父 thread 收到完成唤醒后审阅并用 report_ready/report_failed 发布成果;重试必须创建新的 run,不恢复旧 executor 对话。回测用价由执行线程用 `query_market_data` 拉 bounded historical/reference 数据(canonical id + 日期区间),父讨论不要自己拼 `financial_get_bars` 大历史。当前 paper-trading 服务不提供 backtest API(`backtests=false`)。
201
+ **owner 说“帮我跑个回测”**:在当前 Idea/Holdings thread 创建或更新 Lab,确保 `features` 含 `backtest`,并确保最初的完整用户需求(含所有细节)已写入 local requirement ZIP;调用 `finapp_lab(action="run", labId, input={...}, requirementBundlePath="/.../requirement-bundle-a1b2-version-1.zip", sourceMessageId, idempotencyKey="...")`。`requirementBundlePath` 指向共享文件系统中的本地、不可变 ZIP;executor prompt 只指示只读读取 `requirements.md` 与 `attachments/`,不承载需求文本;`input` 只放本次执行的 operational parameters。修改需求必须生成新 ZIP、使用新版本和新幂等 key,不能用摘要替代完整需求。每次 run 使用新的 single-shot executor thread;host runtime 自动 claim/维护租约,executor 只做工作并上报一次 terminal result。父 thread 收到完成唤醒后审阅并用 report_ready/report_failed 发布成果;重试必须创建新的 run,不恢复旧 executor 对话。Bundle 路径错误按上面的“最多修复重试一次”规则处理。回测用价由执行线程用 `query_market_data` 拉 bounded historical/reference 数据(canonical id + 日期区间),父讨论不要自己拼 `financial_get_bars` 大历史。当前 paper-trading 服务不提供 backtest API(`backtests=false`)。
201
202
 
202
203
  **owner 要做模拟验证**:创建或更新 Lab 并确保 `features` 含 `paper`(`finapp_paper open_account` 也会自动加上)。流程:
203
204
  1. `finapp_paper(action="ensure")`(按需;开户也会触发 provision)
@@ -16097,7 +16097,7 @@ ${DIM}${"\u2500".repeat(70)}${RESET}`);
16097
16097
 
16098
16098
  // dist/utils/version-check.js
16099
16099
  function isBundled() {
16100
- const v14 = "0.1.213-beta.8";
16100
+ const v14 = "0.1.213-beta.9";
16101
16101
  return typeof v14 === "string" && v14 !== "undefined";
16102
16102
  }
16103
16103
  function getPackageRoot() {
@@ -16114,7 +16114,7 @@ function getInstallationInfo() {
16114
16114
  };
16115
16115
  }
16116
16116
  function getCurrentVersion() {
16117
- const bundledVersion = "0.1.213-beta.8";
16117
+ const bundledVersion = "0.1.213-beta.9";
16118
16118
  if (bundledVersion && bundledVersion !== "undefined") {
16119
16119
  return bundledVersion;
16120
16120
  }
@@ -125234,7 +125234,7 @@ You are ${name}, a personal assistant executing a single-shot LabRun. You are an
125234
125234
  - Tenant scope: ${active.policy.tenantId}
125235
125235
  - Allowed tools: ${active.policy.tools.allowed.join(", ")}
125236
125236
  - Allowed skills: ${skills}
125237
- - Start work immediately by reading the complete user requirement from the immutable local ZIP path supplied by the runtime. The ZIP is the sole requirements source and contains only \`requirements.md\` and \`attachments/\`; read every file before working. The fin-app and VisionClaw processes share a filesystem; the agent-selected local ZIP path must be readable by this runner. Do not modify or replace it; preserve every requirement detail in the ZIP. The host owns claim, liveness, runner identity, and lease state.
125237
+ - Start work immediately by reading the complete user requirement from the immutable local ZIP path supplied by the runtime. The ZIP is the sole requirements source and contains only \`requirements.md\` and \`attachments/\`; read every file before working. The fin-app and VisionClaw processes share a filesystem; the agent-selected local ZIP path must be readable by this runner. Do not modify or replace it; preserve every requirement detail in the ZIP. If the supplied path is missing, unreadable, corrupt, or inaccessible, report a precise terminal \`failed\` error naming the bundle-path problem; do not fabricate requirements or continue without the ZIP. The parent agent may inspect known candidates and correct the absolute path for one fresh run only. The host owns claim, liveness, runner identity, and lease state.
125238
125238
  - Never rely on this system prompt for requirement details; it only directs you to the bundle. Read the local ZIP, including requirements.md and attachments/, and preserve every detail.
125239
125239
  - Call \`lab_run_control\` exactly once with the terminal succeeded, failed, or cancelled facts. Do not call \`finish\`, \`switch_session\`, \`notify_user\`, claim, heartbeat, or wait for another message.
125240
125240
  - Do not contact users, load shared profile memories, install skills, manage MCP servers, or access full fin-app MCP.
@@ -856471,7 +856471,7 @@ var init_playwriter_extension = __esm({
856471
856471
 
856472
856472
  // dist/utils/playwriter-relay.js
856473
856473
  function isBundled2() {
856474
- const v14 = "0.1.213-beta.8";
856474
+ const v14 = "0.1.213-beta.9";
856475
856475
  return typeof v14 === "string" && v14 !== "undefined";
856476
856476
  }
856477
856477
  function resolveRelayEntryPath() {
@@ -856597,7 +856597,7 @@ function selectAndPruneCanonicalRelay(matches, expectedEntry) {
856597
856597
  return canonical;
856598
856598
  }
856599
856599
  function pm2Start(entryPath, host, port) {
856600
- const versionStr = "0.1.213-beta.8";
856600
+ const versionStr = "0.1.213-beta.9";
856601
856601
  (0, import_node_child_process17.execFileSync)("pm2", ["start", entryPath, "--name", PM2_PROCESS_NAME, "--update-env"], {
856602
856602
  encoding: "utf-8",
856603
856603
  stdio: "pipe",
@@ -856623,7 +856623,7 @@ function pm2Delete() {
856623
856623
  }
856624
856624
  }
856625
856625
  function pm2Restart(host, port) {
856626
- const versionStr = "0.1.213-beta.8";
856626
+ const versionStr = "0.1.213-beta.9";
856627
856627
  (0, import_node_child_process17.execFileSync)("pm2", ["restart", PM2_PROCESS_NAME, "--update-env"], {
856628
856628
  encoding: "utf-8",
856629
856629
  stdio: "pipe",
@@ -857092,7 +857092,7 @@ async function reconcilePlaywriterRelay(host = "127.0.0.1", port = 19988) {
857092
857092
  pm2Restart(host, port);
857093
857093
  return;
857094
857094
  }
857095
- const currentVersion = "0.1.213-beta.8";
857095
+ const currentVersion = "0.1.213-beta.9";
857096
857096
  if (currentEnv.VISIONCLAW_VERSION && currentEnv.VISIONCLAW_VERSION !== currentVersion) {
857097
857097
  if (!await ensureRelayPortAvailable(host, port, current, "recreate after a version change"))
857098
857098
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "visionclaw",
3
- "version": "0.1.213-beta.8",
3
+ "version": "0.1.213-beta.9",
4
4
  "description": "A personal assistant agent that runs on your desktop, receives commands from messaging channels, and executes tasks autonomously.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",