@hanamesh/app-vibe-trading
v0.2.0-rc.1
Published
Vibe-Trading application bundle for the HanaMesh app-host service
Readme
@hanamesh/app-vibe-trading
NPM-VIBE-01(2026-10-05,当前本地候选
0.2.0-rc.1): 精确消费公开@hanamesh/[email protected],目标官方 DSH0.2.0-rc.2。开发依赖从公开 npm 精确安装,vendor/的同字节公开 AppHost tarball 只用于 SHA-256 核验,不随 Vibe 包分发。应用描述符只保留有摘要锁的 HTTPS runtime 来源,移除了旧开发机绝对file:路径。包级协议仍标UNLICENSED;owner 已授权公开分发本应用包,不推断新增 MIT 授权。来源及用途见docs/LICENSES.json。没有调用模型、账户、钱包或交易;隔离官方 DSH 的当前门见 BlueMapNPM-VIBE-01/REPORT.md。以下 rc.36 及更早的记录均为历史,不能当作当前包的 peer、来源、构建或验收结论。
rc.36(2026-10-01,P01 U05 后续切片):只将精确 AppHost peer、开发 vendor 与组合 pin 从 rc.40 重钉到已验修复 rc.41(SHA256
457b0c9690776d6762e374453f64780fcca9529b730ab506b45766055bb37134)。HKUDS 原版 runtime、应用描述符、供应商/模型和 UI 字节不变;P01-U05 的真实原生/生产账本门单独复验。
rc.35(2026-10-01,P01 U02/U03 的 MAC-COMPOSE 候选):仅将私有 AppHost 精确 peer、开发 vendor 与组合 pin 从 rc.39 同步至已封包的 rc.40(SHA256
81de63e344bb6aab955ca8789d74a3172c72bb4b5acb23210cd6b4d5e4d6491d)。原版 HKUDS/Vibe-Trading runtime、应用描述符、供应商配置、模型和 UI 字节不变;原生完整产品流程由另一 validator 复验。
rc.32(2026-09-30):仅将精确 peer 与开发 vendor 重钉到 APPHOST37,供 P01-U05 的 CORE39/USAGE9/APPHOST37/VIBE32 组合消费。原版 HKUDS 应用、描述符、Provider 与 runtime 不变;宿主修复市场内应用视图宽度后,须由不同 validator 从原生入口验证 Sessions 与旧对话可读恢复。
rc.31(2026-09-30):仅将精确 peer 与开发 vendor 重钉到 APPHOST36,供 P01-U02/P08 的 CORE38/USAGE9/APPHOST36/VIBE31 组合消费。APPHOST36 在宿主冷恢复时到期处理旧活跃视图租约,避免新视图关闭后等待旧租约 TTL。Vibe 原应用源码、描述符、Provider 与 runtime 归档未变;本包仅完成源码、测试与封包门,真实客户端冷恢复须由不同 validator 从最终入口验证,NOT_RUN。
rc.30(2026-09-30):仅将精确 peer 与开发 vendor 重钉到 APPHOST35,供 P01-U02/P08 的 CORE37/USAGE9/APPHOST35/VIBE30 本机组合消费。Vibe 原应用源码、描述符、供应商与 runtime 归档未变;真实产品长时重入由不同 validator 从最终入口验证。rc.30 市场安装仍 NOT_RUN。
rc.29(2026-09-29):仅将精确 peer 与开发 vendor 重钉到 APPHOST34(市场视图 heartbeat/卸载清理)。应用源码、描述符、供应商和 runtime 与 rc.28 / rc.27 字节相同;rc.29 真实市场安装与完整产品 REAL_UI 为 NOT_RUN,file profile consumer 由父组合与独立 validator 验证。
rc.28(2026-09-29):仅将精确 peer 与开发 vendor 重钉到已封包的
@hanamesh/dsh-app-host 0.1.0-rc.34,用于 P01-M02 / P08-U01 的 MAC-COMPOSE。应用源码、描述符、运行时归档及供应商配置与 rc.27 相同;本候选的真实市场安装和完整产品流程验收仍为 NOT_RUN。验证报告见docs/acceptance/recovery-20260929-peer-apphost33/REPORT.md。
rc.27(2026-09-23):精确 peer 重钉
@hanamesh/dsh-app-host 0.1.0-rc.34(客户端market席位 + dshmarket 互斥)。rc.26(2026-09-22):精确 peer 重钉@hanamesh/dsh-app-host 0.1.0-rc.34(HanaMesh 市场 + Router 使用回执)。rc.25(2026-09-22):运行时归档首源改为 Cloudflare R2https://artifacts.hanamesh.com/vibe-trading/(file:源保留为第二);AH-P07 REAL_RUNTIME 经 https 源补齐并断言 ledgersource=hanamesh-artifacts(docs/acceptance/raw/rc25-real-runtime-https.tap),超时放宽到 600 s 以容纳 266 MB 下载。rc.24(2026-09-21):精确 peer 重钉@hanamesh/dsh-app-host 0.1.0-rc.27(应用 open/use 经 usage 席位上报);app.json声明packageName。rc.23:精确 peer 重钉@hanamesh/dsh-app-host 0.1.0-rc.26(官方 DSH 无壳时应用库默认目录源 + profile 位置推断,CLI 装的本应用能被识别、可补齐运行时)。rc.22:精确 peer 重钉@hanamesh/dsh-app-host 0.1.0-rc.25(壳被强杀后.runtime.lock死主接管,再打开不再DATA_ROOT_BUSY)。rc.21:精确 peer 重钉@hanamesh/dsh-app-host 0.1.0-rc.24(模型随路由:宿主「供应商 → 路由」表的「模型」列选网关/供应商模型,留「应用默认」= 本清单{{model|gpt-5.5}})。rc.20:重钉 rc.23。rc.19:重钉 rc.22(供应商页两张表)。
rc.17(2026-09-21):精确 peer 重钉
@hanamesh/dsh-app-host 0.1.0-rc.20(引导 303 保留 Referer +frameAncestors;桌面壳内打开应用不再空白)。24/24、变异全 killed、AH-P07 REAL_RUNTIME PASS(docs/acceptance/raw/rc17-real-runtime.tap)。
rc.16(2026-09-21):精确 peer 重钉
@hanamesh/dsh-app-host 0.1.0-rc.19(网关在第三方 cookie 被嵌入式 webview 丢弃时改用 Fetch Metadata 授权;修复桌面壳里打开应用空白)。应用包本身无变化;AH-P05/P06 24/24、变异全 killed、AH-P07 REAL_RUNTIME 经 rc.19 网关 PASS(docs/acceptance/raw/rc16-real-runtime.tap)。
2026-09-20 旧候选:0.1.0-rc.16(= rc.14 + peer 重钉 app-host rc.18,代码相同;app-host rc.18 只改客户端应用库安装反馈 UI,宿主逻辑不变),当时上限 🧪 DELIVERED,尚未由用户签收。
历史已实测内核:0.1.5-alpha.1、0.1.5-rc.2(经 app-host rc.18;本包自身不直接 peer 任何 @deepseek-ai/*)。
rc.9 是 HanaMesh npm 应用包的首个实例:包本身只携带 app.json、dsh.js、cordis.patch.yml、README 和 LICENSE;dsh.js 只读取静态描述符并向既有 hanameshApps 注册。它精确 peer 到 @hanamesh/[email protected],没有运行时 dependency,也不创建第二个 host。
运行时不再接受 executablePath 或手工 venv。执行 scripts/build-runtime.sh 会从钉死的 source tarball、wheel、前端构建摘要和 python-build-standalone CPython 3.11 生成 vibe-trading-runtime-0.1.15-darwin-arm64.tar.gz。归档只有相对启动器;app-host 按 lib-provision 账本解析 runtime.exec,缺失、版本漂移或不可执行都以 RUNTIME_MISSING 失败关闭。
本机 rc.9 结果:Node 24.13.1 / pnpm 10.33.0 / TypeScript 5.9.3 严格构建通过;24 个常规测试通过、1 个真实运行时测试默认跳过;5/5 变异被 ERR_ASSERTION 杀死;真实门另以 HM_REAL_RUNTIME=1 从归档供给、冷启动、首页 200、关闭为 stopped 全部通过。归档 SHA-256:
7145a0c4122f6c95da0e4279a5988c9acd4618e52d4c63e6e1405f156b5dc0cfapp.json 的首个 https source 是未来 GitHub Release 地址;上传 Release 属发布动作,本轮 NOT_RUN。第二个 file: source 仅用于这次隔离本机真实门。Linux/x64、Windows 与 Intel macOS 均 NOT_RUN / unsupported。
Provider 槽位只声明需求,不包含值。没有授权的 provider 时,首页仍可启动,但 Vibe preflight 会明确显示 agent 不可用;本轮没有发消息、没有使用 Codex/订阅额度、没有账户、signer、实盘或模拟交易。
下面 rc.1–rc.8 的内容保留为历史;凡与本节冲突,以 rc.9 和 docs 仓 STATUS.md 为准。
rc.1 时:PARTIAL · 未通过真实 DSH / Tauri / 原版 Vibe 验收。
Vibe-Trading 的可打包 DSH 插件候选,只向已有 hanameshApps 注册一份受信描述符。
不启动第二套 app-host,不复刻原应用 UI,不复制实例/租约/会话/授权状态,不执行任何实盘或模拟交易。
入口、视图和 Stop 操作仍由已验收的 workspace / app-host 提供。
实际环境与固定目标
| 项目 | 本次实际 | 产品固定目标 |
|---|---|---|
| 系统 | Linux x86_64,kernel 6.18.44 | macOS darwin-arm64 |
| Node / npm | 22.16.0 / 10.9.2 | Node 24.13.1 |
| pnpm | 未安装 | 10.33.0 |
| TypeScript | 5.8.3,严格检查,skipLibCheck=false,未用 --noCheck | 5.9.3 |
| Python | 3.13.5;未部署原应用 | R3 使用 Python 3.11,产品未单独指定 Python pin |
| DSH / Tauri / 原版 Vibe | 不在本环境内 | DSH 0.1.5-alpha.1;Tauri 2.11.5;Vibe wheel 0.1.15 |
| 浏览器 | 存在 /usr/bin/chromium;没有真实 macOS WKWebView/Tauri 宿主;未用 Chromium 冒充 V08–V10 | 真实客户端内原版生产 UI |
| 开发模型 | 本会话身份 GPT-6 Astra Pro;effort / 模型选择器 / 用量不可见 | 派发默认 Sonnet 5 · High;没有执行或声称自动切换 |
目标构建命令会核对 Node、pnpm、TypeScript,缺任一固定版本就以 2 退出。
当前 dist/ 来自显式允许版本差异的严格探索性构建,不是目标工具链通过证明。
完整逐项结果、原始输出和四字段 checkpoint:docs/acceptance/MATRIX.md。
固定依赖与边界
| 内容 | 值 |
|---|---|
| npm 包名 / repo / ZIP 内目录 | hanamesh-plugin-vibe-trading |
| 插件 entry / service dependency | hanamesh-vibe-trading / hanameshApps |
| 上游源码 | HKUDS/Vibe-Trading@a44ed6e807e6e7d0faeeff5b8f43df8c4694e2d1 |
| Python 产物 | vibe-trading-ai==0.1.15 |
| 前端产物 | 上述 commit 的 frontend/dist,frontend/package.json 必须为 0.1.15 |
| 私有 host peer | @hanamesh/[email protected] |
| host tarball SHA-256 | fdde04917bfc68eb566044a941a9c7d1aeaa9b7c8b8de9635a55d03f32d2212c |
私有包只有精确 peerDependencies 和 devDependencies: file:vendor/<tgz>,没有私有 registry runtime dependency。
未修改锁定 host archive;它随 git 仓保留在 vendor/,不会嵌进本模块 npm 产物。
app-host 的传递 zod 版本是 4.5.4;DSH 相关 overrides 保持 0.1.5-alpha.1。
pnpm-lock.yaml 按附件产物元数据记录精确版本、私有 tarball 的真实 SHA-512 integrity 和公开 tarball URL。
pnpm 不在本环境,registry DNS 失败,尚未执行 pnpm install --frozen-lockfile;公开 TypeScript/zod 的 integrity 未取得,未编造。
这份 lock 不能作为完整离线依赖闭包已经冻结/安装的证明。回收时先用固定 pnpm 验证,并取得公开依赖的真实 integrity。
使用的真实契约
import { createDefinition, apply } from 'hanamesh-plugin-vibe-trading';
const config = {
executablePath: '/absolute/isolated/vibe-venv/bin/vibe-trading',
};
// 受信宿主工厂使用;普通浏览器不能传入这些配置。
const definition = createDefinition(config);
// DSH / Cordis 通过 inject: ['hanameshApps'] 自动激活 apply;不要在运行中重复注册。只接受 executablePath。它必须是规范的绝对 POSIX .../bin/vibe-trading 路径;空值、相对路径、模板、路径穿越、额外键全部拒绝。
空格路径支持。是否存在且可执行由部署 preflight 检查,实际启动时由 app-host 再检查 X_OK,本模块不执行该文件来猜测身份。
实际下发字段是锁定类型中的 AppDefinition / OwnedDeployment,不是旧 brief 的假想 AppDescriptor:
id: vibe-trading、部署 local、稳定 dataId: vibe-trading-local、singleInstanceOnly: true、mode: owned。
命令参数固定为 serve --host 127.0.0.1 --port {{port}}。
VIBE_TRADING_HOME={{dataDir}};宿主负责真实 dataDir、动态空闲回环端口、HOME/TMPDIR/XDG 隔离、进程所有权和清理。
就绪是 GET / + HTTP 200 + 完整原版标题,不是 /api/health 200,也不把 JSON 健康页当成生产 SPA。
未放宽的运行边界:不传递 DSH/Codex/Provider 凭据、不配置账户或 signer、不传宿主 SDK、不注入脚本、不提供 postMessage 特权桥。
白名单环境仅有 VIBE_TRADING_HOME 与三项 Python 运行选项。
原版 Vibe 的后台行为、交易能力和第三方依赖未在此环境实测;“没有配置凭据”不等于已经证明原版运行全程没有交易路径。
网关与必须保留的限制
描述符只设置 embedding: 'gateway',使用锁定 app-host 的 FixedGateway,不自行实现或更改代理。
具名 parentOrigin 由宿主配置提供,适配器拒绝覆盖它。
网关移除 X-Frame-Options,并仅替换 enforcing CSP 的 frame-ancestors 为一个具名 origin。
其余 CSP 指令、安全头、文档字节必须保持原样。未经授权的 cookie / Authorization 不向应用传递;默认应用 cookie 白名单为空。
不关闭 CORS、CSRF、认证或浏览器安全;不设置 VIBE_TRADING_CSP_REPORT_ONLY。
每次上游升级先重跑 V04、V08、V09:三个路径直连仍 enforcing 阻断;浏览器直连拒绝;未列名 origin 拒绝。 然后再跑 V05–V07 的 header/body/资产以及 V10 的真实 Tauri/WKWebView 门。 网关退役条件: 上游出现经实际验证的受支持 framing allowlist 配置时,改用该配置并退役此网关;不能仅凭环境变量名字或版本号判定。 原应用 SSE、WebSocket、登录 cookie、上传/下载、Provider 工作流没有实测,不从静态首页/fixture 网关测试推导支持。
必须交给 host/workspace owner 的两个契约问题
- V11 不能在本包里“修”。 rc.3 的最后一个活跃租约执行
close()时会调用 Stop;实跑锁定 host + 受控进程确认如此。 如果真实 UI 的“关视图”只是隐藏且继续保有/续期租约,则可能满足短期“不停应用”;如果调用/apps/close,最后一个 view 会停。 本附件没有 workspace 产物或真实 UI,不能宣称前一种行为成立。V11 保持 BLOCKED,须 owner 明确 UI 语义并按真实进程复验。 - 不支持热重注册。 rc.3 的公开服务没有 unregister;同 appId 再 register 返回
DUPLICATE_APP。 本包不调用私有 API、不开第二个 host、不吞掉该错误。安装/修改配置/禁用移除后,按宿主既有流程完整重启隔离 profile。 仅禁用本插件不会在仍运行的 host 中撤销既有描述符;不要把这个动作当作安全撤权。
从零部署原版应用(本机回收命令,当前未执行)
以下只用于获授权的全新无凭据 UI 验收目录,不是自动安装脚本。先核上游许可证和下载字节;本轮未包含 Vibe 源码、wheel 或 SPA。
不使用个人 ~/.dsh、个人 profile 或 3080;不复用有真实账户凭据的数据根;不连接资金或运行模拟交易。
set -eu
umask 077
R="$(mktemp -d "${TMPDIR:-/tmp}/hm-vibe-recovery.XXXXXX")"
R="$(cd "$R" && pwd -P)"
mkdir -p "$R/source" "$R/downloads" "$R/evidence"
curl --fail --location --proto '=https' \
-o "$R/downloads/vibe-source.tar.gz" \
https://codeload.github.com/HKUDS/Vibe-Trading/tar.gz/a44ed6e807e6e7d0faeeff5b8f43df8c4694e2d1
tar -tzf "$R/downloads/vibe-source.tar.gz" > "$R/evidence/source-files.txt"
# 核对 tar 的单一顶层目录与无越界路径,再解压。
tar -xzf "$R/downloads/vibe-source.tar.gz" --strip-components=1 -C "$R/source"
# 在此阅读固定源码中的 LICENSE / 附加商业条款;许可未确认前不发布、不打包分发上游。
python3.11 -m venv "$R/vibe-venv"
PY="$R/vibe-venv/bin/python"
"$PY" -I -m pip download --only-binary=:all: --no-deps \
--dest "$R/downloads" 'vibe-trading-ai==0.1.15'
# 首次完整依赖闭包未随附件提供,安装输出与 freeze 必须一并保存。
"$PY" -I -m pip install "$R"/downloads/vibe_trading_ai-0.1.15-*.whl \
> "$R/evidence/pip-install.log" 2>&1
"$PY" -I -m pip freeze --all > "$R/evidence/python-freeze.txt"
(cd "$R/source/frontend" && \
node -e 'const p=require("./package.json"); if(p.version!=="0.1.15")process.exit(1)' && \
test -f package-lock.json && npm ci && npm run build) \
> "$R/evidence/frontend-build.log" 2>&1
# 没有前端 lockfile 就停止并先冻结依赖,不静默改用随时间漂移的 npm install。
# R3 的位置 = <venv>/lib/pythonX.Y/frontend/dist。
# purelib 的父目录在 venv 内;stdlib 可能指向系统 Python,不能用它拼写入位置。
PKG_PARENT="$("$PY" -I -B -c 'import sys,sysconfig; from pathlib import Path; p=Path(sysconfig.get_path("purelib")).parent.resolve(); assert p.is_relative_to(Path(sys.prefix).resolve()); print(p)')"
# 固定 wheel 源码未随附件给出:先查它实际的 lookup,必须与 PKG_PARENT/frontend/dist 一致。
"$PY" -I -B - <<'PYCHECK' > "$R/evidence/frontend-lookup-source.txt"
from importlib.metadata import distribution
from pathlib import Path
p = distribution('vibe-trading-ai')
assert p.version == '0.1.15'
files = [p.locate_file(f) for f in (p.files or []) if str(f).endswith('api_server.py')]
assert files, '未定位 api_server.py,不要猜部署目录'
for f in files:
print(f)
lines = Path(f).read_text().splitlines()
for i, line in enumerate(lines):
if 'frontend' in line or 'pkg_parent' in line:
print('\n'.join(f'{n+1}: {lines[n]}' for n in range(max(0,i-3), min(len(lines),i+4))))
PYCHECK
# 阅读上述实际 lookup;若不同,停止,不往系统 Python 或未知路径复制。
test -d "$R/source/frontend/dist"
test ! -e "$PKG_PARENT/frontend/dist"
mkdir -p "$PKG_PARENT/frontend"
cp -R "$R/source/frontend/dist" "$PKG_PARENT/frontend/dist"
ls -la "$PKG_PARENT/frontend/dist" > "$R/evidence/frontend-ls.txt"
shasum -a 256 "$R/downloads/vibe-source.tar.gz" "$R"/downloads/vibe_trading_ai-0.1.15-*.whl \
> "$R/evidence/upstream-downloads.sha256"不要手工在另一个端口启动长期运行的 Vibe:完成配置后由 app-host 在 UI Open 时 owned 启动。
日志必须真实出现 [prod] Frontend served from …/frontend/dist;若缺 Provider,记录原始错误并只验无模型 UI,不复制别的程序凭据。
代码审查/镜像摘要、许可证、源 tarball / wheel / 前端 digest 要补入回收记录;deployment/pins.json 中 null 代表未知,不是允许跳过验证。
安装进隔离 DSH profile
使用已验收 dsh-runtime 的 runtime + 干净 home template,DSH 固定 0.1.5-alpha.1。
不使用下载到的最新版 DSH,不把本包的 Node 消费烟测当作 DSH 安装结果。
先按其现有流程准备并选择一个全新 web profile,装配已验收的 app-host;联合 UI 验收再装 workspace 和薄壳。
# DSH_CLI 是该锁定发行物的真实 CLI;不能设成个人桌面版 shim。
# 以下变量由本机已验收 runtime 的实际路径确定,不猜它的内部 entry 文件名。
export DSH_HOME="$R/dsh-home"
DSH_CLI=/absolute/path/to/the/pinned/dsh
MOD_TGZ=/absolute/path/to/hanamesh-plugin-vibe-trading-0.1.0-rc.1.tgz
"$DSH_CLI" plugin add "$MOD_TGZ"按 DSH 既有加载配置把本插件自己的 config设为 profile/plugin-config.example.json 的形状,将占位路径替换成 "$R/vibe-venv/bin/vibe-trading"。
附件未提供 loader row schema / profile 选择参数,所以没有猜一个可能错误的 cordis.patch.yml;这仍属于 V01 的回收集成缺口。
不要同时把本应用放进 app-host 的 applications 和本插件行,两处注册会冲突。
宿主 parentOrigin 必须是本轮真实 workspace origin;动态应用端口和 gateway origin 都由 app-host 生成。
# 仓内只读 preflight:检查路径、可执行权限、隔离 venv、wheel metadata、原版首页标题。
# 不调用 vibe-trading、不创建原应用数据、不读取 Provider 凭据。
node scripts/preflight.mjs /absolute/path/to/this-plugin-config.json完整重启这个隔离 profile 后,确认 /hanamesh/apps 已列出 vibe-trading/local。
用真实 workspace 打开原版 UI、原生导航和 Stop;不在 iframe 内执行研究任务/订单/模拟交易。
V01–V14 的逐项操作见 docs/acceptance/MATRIX.md,不能只凭首页截图签 AC-03 或 AC-08。
本仓测试与构建
目标工具齐全且 registry 可用时:
pnpm install --frozen-lockfile
pnpm run check
npm pack当前离线环境复现(仅探索性证据):
# 新 checkout;不覆盖已装的依赖,也不安装其未使用的 DSH transitive peers。
node scripts/bootstrap-offline.mjs
node scripts/build.mjs --allow-toolchain-mismatch
npm test
node scripts/mutations.mjs
node scripts/check-consistency.mjs
node scripts/isolated-check.mjs --allow-toolchain-mismatch
# 目标 guard 未通过,必须显式跳过 prepack;不能对外称目标构建通过。
npm pack --ignore-scripts --pack-destination artifactsbootstrap-offline 只解开经 SHA-256 验证的 app-host 原始产物,不修改它、不替换真实 DSH。
运行型测试使用明确标记的受控 fixture 进程,不是 Vibe。网关测试使用真实锁定 FixedGateway + 本地 HTTP fixture,不是真实浏览器。
测试显式用 TAP;变异必须出现 ERR_ASSERTION,语法/加载错误不算被杀。
consistency.json 显式豁免:本模块生产路径没有持久状态;X01 必须通过,X02/X03 为 NOT_RUN(不适用),不伪称 SIGKILL 已测。
真实 header/body/资产采集工具
capture-headers.mjs 只发 GET、不跟随重定向、不启动应用、不提交任务、不执行抓取到的 JS。
需先从实际授权 view 取得应用网关 lease cookie,不是 DSH 登录 cookie;仅通过环境变量传入,不保存该值。
{"upstreamOrigin":"http://127.0.0.1:实际应用端口","gatewayOrigin":"http://127.0.0.1:实际网关端口","parentOrigin":"http://127.0.0.1:实际工作区端口"}# 把以上字符串端口替换为实际数字,保存 origins.json;输出目录必须尚不存在。
HM_VIBE_GATEWAY_COOKIE='<当前 hm_app_* lease cookie,仅本机保存>' \
node scripts/capture-headers.mjs origins.json "$R/evidence/headers"输出三个路径的 header 对照、两个首页的真实字节、请求与 digest。 Set-Cookie / 认证 header 脱敏,网关 cookie 不写入证据。该工具不证明浏览器 CSP enforcement;V08/V09/V10 仍需浏览器/真实 WKWebView。
交付与恢复
ZIP 只有 hanamesh-plugin-vibe-trading/ 顶层,内含 .bundle、npm 默认文件名 .tgz、SHA256SUMS 三件。
完整源码、tests、工具、验收证据、lockfile、learning、AGENTS 都在 git bundle。
cd /path/to/unzipped/hanamesh-plugin-vibe-trading
shasum -a 256 -c SHA256SUMS
git clone hanamesh-plugin-vibe-trading.bundle /your/work/projects/hanamesh/hanamesh-plugin-vibe-trading
cd /your/work/projects/hanamesh/hanamesh-plugin-vibe-trading
git remote remove origin # bundle 是运输介质,不是远端仓库
# main;rc tag;工作树应干净。没有创建远端、push 或 publish。上游许可证未随附件提供,登记为待核,不宣称 MIT/Apache 或可无条件商用;见 docs/THIRD_PARTY_NOTICES.md。
本包 UNLICENSED / private: true,只有本次本地交付,无公开发布。
