Repository navigation
Conversation
Additive distribution layer, no harness source changes: - hyperai-tui: reproducible pnpm patch that rebrands upstream @deepseek-harness-tui/dsh-tui 0.16.1 (splash words HYPERAI/HARNESS, official HyperAI mark in the splash art slot, hyperai-tui wordmark, profile-scoped TUI state, updater disabled) - brand art generated from the official HyperAI org avatar (lossless decode -> box downsample -> true-color half-block; dark/light variants) - hyperai profile template: dsh-base + pinned TUI, env-driven OpenAI-compatible llm-pi-ai route, profile-scoped skills root - idempotent installers (profile + skills) with backups, no overwrite of user-modified skills, pinned skills commit and manifest - docs: distribution, branding, skills, OpenTUI comparison, verification procedure and captured screens Verified locally: patch self-applies, 9/9 build checks, 14/14 tests, branded TUI launches and talks to a live model, skills discovered and one skill script executed, existing dsh-tui profile and ~/.dsh-tui state unchanged. Not pushed.
Brand-visual corrections only; profile, skills, model routing and the patch-based architecture are unchanged. - logo: brand source is now the local canonical asset /Users/zhenhaoli/Downloads/51961168.png (60x60 RGBA), copied byte-for-byte to brand/hyperai-logo.png; no remote avatar URL is fetched. Generated terminal art rebuilt from it (generator minimum source lowered to 48px). Provenance and docs updated. - title: new HYPERAI_PALETTE in branding.js feeds LogoV2's existing title ladder: dark theme HYPERAI #FF6096 -> #FFA6C4, HARNESS #FFA6C4 -> #FFF7FA (pink -> near white); light theme deep pink -> light pink for contrast. Wordmark/tagline reuse the same pink family. No title component rewritten. - verify: 11/11 checks (adds pink-palette + local-logo-source checks); tests 14/14. Profile re-installed (patch replaced, manifest/profile files unchanged) and re-verified with live PTY captures: pink title, zero blue-ish title cells, live model reply PINK_BRAND_OK + bash BRAND_TOOL_OK. - existing dsh-tui profile files and ~/.dsh-tui state hashes unchanged.
The splash mark no longer comes from a bespoke PNG -> ANSI encoder. It now uses the same mechanism as the upstream DeepSeek whale, so the two art slots render identically. - data: the official local asset (/Users/zhenhaoli/Downloads/51961168.png, 60x60 RGBA) is downsampled to a 26x26 mark, quantized to the source's own white/pink colors and emitted as a whale-format letter grid (one palette letter per sprite pixel, '.' transparent) in brand/generated/hyperai-logo.js. - renderer: overlay/components/hyperaiLogo.js calls the upstream whale's own renderSpriteRows (imported from components/Whale.js) once at module load and feeds the rows to Text, mirroring WhaleArt. No image protocol, no theme-specific recolor: the white plate stays white and the pink pattern keeps its official color; transparent pixels use the terminal background (\x1b[49m for the empty half of a half-covered cell). - the old light-theme ink variant (white plate -> #1A1A20) is removed; it was the source of the black disc on light terminals. - resolution: 13 rows x 2 px = 26 px tall, so a square mark is capped at 26x26 (26 of the 40 slot columns); documented as the distortion-free limit. - patch: rebuilt (12 files); hyperaiLogoRows.js now carries the letter grid and palette; build-patch self-check asserts the whale renderer import. - verify: 11/11 (adds whale-grid/palette and whale-renderer-reuse checks); tests 14/14. Profile re-installed (patch replaced, manifest/rows unchanged). - verified in the real macOS terminal (Terminal.app) as well as PTY: dark and light window captures plus an upstream-whale reference rendered by the same renderSpriteRows; no black plate/ring, transparent pixels show the terminal background. PTY screenshots are now rendered with exact half-block rectangles so tooling artifacts are not mistaken for product defects. The HYPERAI HARNESS pink title gradient is unchanged.
…26x26 fallback The canonical logo source is now the official SVG provided by the user (/Users/zhenhaoli/Downloads/logo-icon-border-1.svg, copied to brand/hyperai-logo.svg). The retired 51961168.png is no longer referenced. Generation chain (scripts/generate-logo-art.mjs, Node built-ins only): 1. parse the SVG: 120x120 viewBox, white circle 'Oval' path (center 60,60 r=55), 90x89 icon rect, objectBoundingBox pattern matrix, and the embedded 271x267 RGBA PNG data URI (decoded with the local PNG decoder); 2. composite analytically at 512x512 with 4x4 supersampling: white circle -> icon stretched into its rect exactly as the pattern maps it; cross-checked against rsvg-convert at 1024x1024 (alpha IoU 0.9996, mean abs diff 1.18/255); 3. alpha-crop + downsampling to two letter-grid sprites in the whale frame format: wide 40x40 (20 display rows) and compact 26x26 (13 rows), quantized along the SVG's own white #FFFFFF -> rose #E11D48 blend line (5 palette letters, '.' transparent). Nothing is recolored or darkened. Rendering still reuses the upstream whale's renderSpriteRows (no new renderer, no image protocol). components/hyperaiLogo.js renders the wide sprite when terminal content rows >= HYPERAI_LOGO_WIDE_MIN_ROWS (44) and degrades to the compact sprite on smaller windows; splashArtRows.js/Launchpad.js use the same threshold for the layout budget so the hero and the logo always agree. Real Terminal.app verification (OSC 11 backgrounds, ScreenCaptureKit PNG): 169x55 dark and 168x54 light windows show the 40x40 mark; the 139x40 window shows the automatic 26x26 fallback. Clarity experiment (docs/screenshots/ logo-clarity-svg.png) compares 26/40/48 grids on the same background and box: 40x40 is adopted as the main mark; 48x48 is sharper but needs a 24-row slot and is deliberately not used. Also: branding/provenance/verification docs rewritten for the SVG chain, generator tests replaced with SVG-parse/composite/sprite checks, verify.mjs extended for both sprites + the dynamic art height, screenshots refreshed. verify: 11/11; tests: 16/16. Profile re-installed (patch replaced only); the dsh-tui profile and ~/.dsh-tui state stay byte-identical.
…te fallback The splash mark now shows the canonical SVG as a 512x512 transparent PNG when the renderer reports terminal graphics support (Kitty Graphics / Sixel), and keeps the existing 40x40 / 26x26 whale-format sprite rows everywhere else. Build: - scripts/generate-logo-art.mjs also encodes the 512x512 RGBA composite as a PNG (pure Node + zlib) and embeds it (base64 + sha256) in brand/generated/hyperai-logo.js; the SVG stays the only committed source. - no quantized colors on the HD path: full white->rose anti-aliased raster with transparent background. Runtime (components/hyperaiLogo.js): - reuse of the upstream image pipeline, no custom protocol code: the component asks the renderer's own capability probe (useTerminalImages; Kitty query + DA1 + cell metrics, disabled under tmux/screen, non-TTY, non-fullscreen and DSH_TUI_DISABLE_TERMINAL_IMAGES), lazily decodes the embedded PNG through the upstream sharp loader, and paints it with the upstream Image component (transparent, presentation 'transcript') so the renderer owns placement, cropping, clearing and resize redraw. - the sprite rows are passed as the Image component's children: any failed placement, missing sharp, or unsupported terminal keeps the ANSI fallback. - the art slot stays a fixed height (20 rows wide / 13 rows compact, same HYPERAI_LOGO_WIDE_MIN_ROWS threshold as splashArtRows/Launchpad), so HD<->ANSI switches never move the title, composer or footer. Verified in real terminals: - Ghostty 1.4.0 (macOS 26.1) probe: Kitty Graphics query replies 'OK', cell size 8x17 px; startup, chat splash, small window and resize-back captures show the HD PNG with transparency, smooth edges and one placement (no ghosting); - Terminal.app (no Kitty/Sixel), a PTY without terminal replies, and Ghostty with DSH_TUI_DISABLE_TERMINAL_IMAGES=1 all keep the ANSI sprite; under TMUX no Kitty payload is emitted; - live Ghostty session answered GHOSTTY_HD_OK and ran the bash tool (GHOSTTY_TOOL_OK); PTY chat splash reports 'Skills 10'. Docs updated (branding, verification, READMEs, provenance); verify 11/11, tests 17/17. The dsh-tui profile and ~/.dsh-tui state stay byte-identical.
…) + diagnostics Root cause of the reported "logo completely disappears" in the user's real embedded terminal (Orca 1.4.244, xterm.js 6.0.0, light theme): - real probes inside Orca: DA1 '?1;2c' (no Sixel), Kitty query: no reply, OSC 11 background rgb:ffff/ffff/ffff, XTVERSION xterm.js(6.0.0), no cell pixel replies; - the renderer therefore correctly selects no image protocol and paints the ANSI sprite (the fallback was NOT hidden: the sprite is in the frame and its pale blend pixels are in the capture); - the defect is contrast: the official mark is a #FFFFFF circle on transparency and Orca's light background is exactly #FFFFFF, so the plate and its near-white anti-aliased blends vanished and only the rose icon survived. Measured on real captures (icon-centred radial rose profile, circle-edge rim pixels): before fix 0, after fix 3811+2450; dark controls still 0. Fix (no SVG change, no recolouring outside the SVG's own palette): - generator now derives light-theme variants: it repaints only the circle's existing outer edge with the SVG's own icon accent (K = #E11D48) in the ANSI sprites, and blends the same ring into the 512x512 HD PNG; - components/hyperaiLogo.js selects dark/light from the resolved TUI theme (useTheme + isLightThemeActive) for both the sprites and the embedded PNG; dark terminals keep the official rendering byte-for-byte (unit-tested); - the ANSI sprites stay the Image component's children, so any placement or decode failure still renders the sprite (tested with a corrupted embedded PNG in real Ghostty). Diagnostics: scripts/diagnose-terminal.mjs (human + --json) reports terminal identity, real DA1/Kitty/XTVERSION/cell/OSC 11 probes, multiplexer state, selected protocol, theme variant, chosen path and fallback reason without reading secrets; covered by tests/diagnose-terminal.test.mjs and verify. Verified for real: Orca light (fixed, before/after + small window + resize back with no ghost), Terminal.app dark/light ANSI, Ghostty dark/light Kitty HD, Ghostty images-disabled and corrupted-PNG ANSI fallbacks, PTY without replies (ANSI, startup not blocked), tmux (no graphics bytes), live model + bash tool (FIX_OK/FIX_TOOL_OK), Skills 10. Sixel code path only smoke-tested (no Sixel terminal installable offline); iTerm2 inline images intentionally not implemented (needs a third graphics manager in the upstream renderer); VS Code/Cursor and Windows/Linux are NOT TESTED. Docs: docs/image-protocols.md (source-level architecture + OpenTUI comparison), docs/terminal-compatibility.md (matrix, diagnostics, limitations), branding, verification, READMEs, provenance. verify 12/12, tests 20/20. Original dsh-tui profile and ~/.dsh-tui stay byte-identical.
…6 title Controlled simplification and directory refactor; no renderer or image-protocol work, and the original dsh-tui distribution path is untouched. Structure: - apps/tui: the HyperAI TUI distribution only (brand data, patch builder, patch, tests, docs). It has no profile/model/skills code. - apps/profiles/hyperai: the native DSH profile only (manifest + bundles, cordis.patch.yml model/TUI/skills wiring, profile installer, skills installer, skills lock, docs, tests). It contains no TUI implementation; the installer copies apps/tui's generated patch into the managed profile. - the old hyperai/ tree is removed. apps/tui is intentionally excluded from the root pnpm workspace (no workspace deps/build graph), so the DSH lockfile, project list and build graph are unchanged. TUI simplification: - the startup splash renders no logo at all: no SVG/PNG/ANSI sprite, whale or mascot. Logo generation (SVG->PNG, whale-letter sprites, 512 base64 payloads, light rim variants), the logo component, its tests, screenshots and the terminal-image diagnostics are deleted. The splash hero is now the pixel wordmark only, with no reserved art rows (LogoV2 row/column branches and the launchpad budget suppress art). - branding is one colour from src/brand.json: #FF6096. HYPERAI HARNESS, the wordmark and the welcome line all use it on dark and light themes; the four title colour sources are forced to the solid brand colour so a font palette or the bevel font's derived shading cannot reintroduce a gradient/purple ramp. - the upstream big pixel font is kept unchanged; the two words are pyramid centred where alignment allows, and the narrow-terminal plain title also uses the brand pink. - remaining brand-display copy drops DeepSeek/whale-girl wording (star/thanks modals, onboarding connection line, thinking description, interrupted-turn help). DeepSeek-platform-only surfaces (balance/coupon/login) keep their platform wording on purpose. - the patch is 10 upstream files / ~35 KB, down from >150 KB with embedded art; every edit stays an exact-match replacement and the build self-applies the generated patch against a pristine upstream copy. Verification: - TUI: verify 8/8, tests 7/7; profile: verify 7/7, tests 10/10; patch rebuild is deterministic and matches the installed profile. - real Terminal.app captures for dark, light, small-window, resize-back and chat splash show the pink pixel wordmark with no logo and no blank art block (#FF6096 pixels present, old logo rose/whale blue pixels absent). - real Orca embedded-terminal screen buffer shows the same no-art splash (window screenshot capture unavailable in this environment). - real model + tool regression through the OpenAI-compatible gateway: glm-5.3/deepseek-v4-pro answered SIMPLE_OK and ran bash SIMPLE_TOOL_OK; chat splash reports Skills 10; deepseek-v4-flash currently returns a provider-side 400 'no healthy deployment' (route unchanged). - the installed profile was backed up, refreshed in place, and its skills directory + manifest stayed byte-identical; existing dsh-tui profile and ~/.dsh-tui state were not touched by this work.
The HyperAI profile no longer presets a model provider, endpoint, credential variable or default model. It behaves like the original dsh-tui profile: model configuration is DSH-native user configuration, made with /provider and /model. Root causes fixed: - The profile template's llm-pi-ai row used !!js expressions inside the volatile providers config. DSH settings writes validate the raw profile config before expressions resolve, so the expression node arrived as an object: "$.providers.hyperai.apiKeyEnv expected string but got [object Object]". Any provider add/edit failed while that row existed. - The same row plus the dsh-tui provider/model override forced route "hyperai" resolving HYPERAI_API_KEY, which is absent for users: turns failed with 'no credential for provider route "hyperai"'. Changes: - cordis.patch.yml now contains only the profile-scoped skill root; the environment-driven llm-pi-ai preset and dsh-tui provider/model override are removed. DSH bundle defaults (deepseek-official / deepseek-flash) apply until the user configures a provider, and the native /provider and /model flows create plain, editable rows in the installed profile patch. - installer: reinstall now merges the installed cordis.patch.yml instead of replacing it. The removed legacy preset is dropped, while user-created llm-pi-ai rows, insert rows and user-edited dsh-tui rows (minus the legacy env-driven provider/model keys) are preserved; replaced files are still backed up. Next-step output points at /provider and /model. - verify/tests cover the minimal template, no forced credential/default, and migration that keeps user provider/TUI configuration. - profile/TUI docs updated; TUI brand, patch and visual design untouched. Verification (isolated profile under the real DSH home, no real-profile write): - /provider add (custom route litellm + env key ref) saved successfully; the installed patch gained a plain llm-pi-ai row. - /provider edit (base URL) reported 'configuration updated' with no apiKeyEnv type error; restart kept the provider. - /model selection persisted to model.json across restart. - real LiteLLM call via deepseek-v4-pro returned FIX_OK; direct gateway probes returned 200 for deepseek-v4-pro and glm-5.3 (claude-opus-4.6 read timed out). - fresh profile without a provider shows the native llm-deepseek DEEPSEEK_API_KEY error, not a HYPERAI_API_KEY error; context line reports Skills 10. - profile verify 8/8, profile tests 11/11; TUI verify 8/8, TUI tests 7/7. - real installed profile migrated via the installer after a full backup; its skills and manifest are byte-identical, existing credentials refs (LITELLM_API_KEY/GONGSI_API_KEY) and TUI state untouched, original dsh-tui profile untouched, and a real launch shows the native deepseek-flash default with no HYPERAI_* error.
|
Preview for #1 (requires Cloudflare Access sign-in) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
一、概述
本 PR 为 HyperAI Harness 集成品牌化 TUI 与原生 DSH Profile,并完善安装、Skills 管理、更新回滚及故障恢复能力。
本次主要变更包括:
#FF6096。dsh --profile hyperai入口。本 PR 已完成三轮开发修复与最终双 Agent 定向验收。
二、代码版本
当前验收提交:
90ac001f8173ed891e2da62dc1097d97819bc465关键修复提交:
60dc943dc1a351f3ebbfb7aeb994a1c68ec1bc86— Round 3 代码修复与回归测试。90ac001f8173ed891e2da62dc1097d97819bc465— Round 3 统一报告。原 Round 3 QA 基线:
f4d6d0c731f830ece866b6bfd5cdc1a10e176edb本次沿用原
feat/hyperai-tui-profile分支,未重新创建 PR,未修改master,未重写已有 Git 提交历史。三、主要修复内容
3.1 Skills 数据完整性与故障恢复
修复 Legacy Skills 安装器在两次目录重命名之间发生 SIGKILL 时,可能静默丢失用户附加文件的问题(BUG-R3B-01,原 P1)。
修复包括:
3.2 安装及自动化接口
install.mjs --json被 pnpm 进度输出污染的问题。skills-update check --json在部分失败路径输出非结构化文本的问题。3.3 TUI 品牌与兼容性
#FF6096品牌色。四、最终独立 QA 验收
最终验收日期:2026-11-03
最终验收 SHA:
90ac001f8173ed891e2da62dc1097d97819bc465两位 QA Agent 均在独立环境下进行定向验收,未修改被测源码或 PR。
4.1 P1 数据丢失修复验证
原 P1 数据丢失问题已由两位 QA 独立确认修复。
4.2 安装与生命周期
status、doctor、repair正常。4.3 JSON 接口
install.mjs --json:成功及失败路径通过。skills-update check --json:成功及失败路径通过。skills-update check --json的退出码约定:0:无更新。2:有更新。1:执行失败。4.4 测试结论
截至本次最终定向验收:
未发现尚未解决的 P0、P1 或 P2 缺陷。
本轮工程 QA 结论为:
READY WITH LIMITATIONS
该结论适用于已验证的工程范围,不代表所有操作系统、运行时和上游模型服务均已完成兼容性认证。
五、已知非阻断问题
最终 QA 仍记录以下 P3 问题,计划作为后续维护事项处理:
updated,并刷新installedAt。skills-update update --json可能连续输出两个 JSON 文档,尚未统一为单文档输出契约。SKILLS_UPDATE_FAILED,尚无专用GIT_UNAVAILABLE错误码。git init -b,在 Git 2.25 环境下存在兼容性问题。cp -R示例在目标目录已存在时可能产生嵌套,需要进一步明确复制目标。以上问题均未被本轮 QA 评定为 P0/P1/P2 发布阻断缺陷。
六、已接受限制与未验证范围
hyperai/hyperai-skills继续保持私有,不改变仓库可见性、URL、lock ref、鉴权及分发方案。0.16.1。七、验收报告
仓库中已有 Round 3 开发修复报告:
ROUND3-UNIFIED-QA.mdROUND3-FIX-REPORT.mdROUND3-REGRESSION-RESULTS.mdROUND3-SKILLS-CRASH-RECOVERY.mdROUND3-QA-HANDOFF.md最终独立 QA 另提供:
FINAL-TARGETED-QA-A.mdBUGS-TARGETED-QA-A.mdCRASH-RECOVERY-TARGETED-A.mdJSON-INTERFACE-TARGETED-A.mdINSTALL-LIFECYCLE-TARGETED-A.mdFINAL-TARGETED-QA-B.mdBUGS-TARGETED-QA-B.mdMID-SWAP-VERIFICATION-B.mdSKILLS-DATA-INTEGRITY-B.mdJSON-INTERFACE-TARGETED-B.mdLINUX-TARGETED-B.mdTERMINAL-TARGETED-B.md上述最终 QA 文件为独立审核交付材料;不表示它们均已提交到本仓库。
八、PR 当前状态
本 PR 继续保持 Draft / Open / Unmerged。
代码与当前已验证范围内的工程 QA 已完成,等待公司进一步代码审查及后续合并决策。
本 PR 不涉及将私有 Skills 仓库公开,也不代表批准公开发行。
历史审核与原始 PR 描述(原文保留,不覆盖)
Summary / 变更概述
在 DeepSeek Harness 中新增 HyperAI Harness TUI 品牌适配和 原生 HyperAI Profile,并接入 HyperAI Skills 的检查、更新、目录和回滚能力;TUI 只负责提示与用户确认,实际扫描/安装/备份逻辑由 Profile 侧独立 CLI 承担。
本次 Draft PR 基于提交
85b5cde46,用于代码审查、把开发成果保存到公司仓库、以及继续完成跨平台和公开安装验收。不请求合并。Upstream & License / 上游与许可证
上游来源
@deepseek-harness-tui/dsh-tui@0.16.1v0.16.173ff99fbed56563bf154d719effd09f9f9725349license:MITpnpm patch修改必要的品牌/展示逻辑;没有重新实现 TUI 渲染器,也没有迁移 OpenTUI。许可证审查结论
LICENSE、npmlicense字段与 npm tarball 内package/LICENSE已相互核对;版权人为 chimney (ccch1mneyyy)。THIRD_PARTY_LICENSES还包含:dsh-ui-whale:BSD-3-Clause(Copyright (c) 2026 lhh010);dsh-anchored-standard:MIT(Copyright (c) 2026 xiaobright / Portions Copyright (c) 2026 DeepSeek)。tui-profile/LICENSE:MIT,Copyright (c) 2026 dsh ecosystem community contributors。LICENSE、NOTICE和LEGAL.txt。apps/tui/LICENSEapps/tui/docs/licenses/dsh-tui-0.16.1-LICENSE.txtapps/tui/docs/licenses/dsh-tui-0.16.1-THIRD_PARTY_LICENSES.txtapps/tui/docs/licenses/dsh-tui-0.16.1-tui-profile-LICENSE.txtapps/tui/docs/licenses/mathjax-tex-svg-LICENSE.txt/mathjax-tex-svg-NOTICE.txtapps/tui/docs/third-party-notices.mdMIT OR CC0-1.0;未发现 GPL/AGPL/SSPL 等不兼容许可证。重要说明与保留意见
package/LICENSE和依赖/vendor 的许可证,但未包含仓库级THIRD_PARTY_LICENSES(BSD 的 dsh-ui-whale 和 MIT 的 dsh-anchored-standard 通知)。本仓库已在应用级 notice 中独立保留这些文本。Architecture / 架构
apps/tui/是自包含包,根pnpm-workspace.yaml通过!apps/tui排除,不进入 DSH 根 workspace 构建图。apps/profiles/hyperai/使用原生 DSHdsh.profile.bundles:@deepseek-ai/dsh-base@deepseek-harness-tui/dsh-tui@0.16.1cordis.patch.yml只声明 profile-scoped skill root;不预设 Provider、LiteLLM、默认模型或 API Key。Implementation / 技术实现
HyperAI Harness,像素标题HYPERAI/HARNESS,主色#FF6096,无 Logo/鲸鱼/PNG 图像协议。bold字形;避免上游每日轮换到stencil等空心字体;窄终端保留上游纯文字回退。apps/profiles/hyperai/scripts/skills-update.mjs提供check/update/catalog/rollback;用户确认、验证、备份、保留本地修改、回滚。/skills-update手动检查、持久结果对话框、安装前确认。dsh-tuiProfile,也未发布 npm 包。Development History / 开发历程
pnpm patchedDependencies。#FF6096。apps/tui/与apps/profiles/hyperai/,避免 TUI 渲染与 Profile 配置混在一起。/provider、/model原生交互。/skills-update检查结果只显示为短暂 toast 的问题,改为持久 managed dialog。stencil导致空心;固定 HyperAI 使用 solidbold,保留上游字体数据,不重画字体。Testing / 测试结果
自动化
build-patch.mjs确定性构建通过;生成 patch SHA256:13eb0c4c916e1a3177d739bab75c5f5db02ac669706a61ca1d4a9ff179173e21。真实终端 / 环境
#FF6096像素;修复后标题为 solid bold。/skills可列出 Profile 中已安装 Skills;/skills-update可进入检查流程,并显示持久反馈。deepseek-flash;仓库 Profile 没有强制 Provider/模型/API Key。~/.dsh/profiles/dsh-tui未被修改。尚未测试(NOT TESTED)
npm全球安装、profile 初始化、Skills 首次安装)。Known Limitations / 已知限制
@deepseek-harness-tui/dsh-tui@0.16.1;任何上游小版本升级都可能使 exact-match patch 失败,需要重新适配并重跑全部验证。Next Steps / 下一步
Review Status / 审核状态
本 PR 为 Draft,仅用于保存开发成果、代码审查和后续测试。目前不请求合并,未经明确批准不得转为 Ready for review 或进行任何合并。
PR Checklist / 检查清单
apps/tui/docs/third-party-notices.md)Round 1 — 独立 QA
85b5cde463cb9e178f7cc57849b02e86927e2541Round 1 — 开发修复
89b4164061114f30ae、0d98839a50d98839a532dc5f2b6be47acaa210540296dbb6cFIX-REPORT.md(已在当前 PR 分支中)fix/hyperai-unified-qa;已通过 fast-forward 追加到feat/hyperai-tui-profile,未 rebase、未 squash、未 force push,原开发提交与修复提交均保留。本轮修复覆盖:
0.2.1-rc.5)明确拒绝且无绕过开关;status/doctor/repair/uninstall生命周期;/update上游更新入口禁用并指向 HyperAI 安装/发布流程;--include-unverified;开发自测结果(仅代表开发自测,不代表独立 QA 最终验收通过):
patch 确定性构建 SHA256:
ea68d6b2ed3a3cfb01ef2f55f80439b769ffc6e682c55798718203712a08ba99。FIX-REPORT.md逐项记录 24 个 QA-ID 的状态、根因、修改文件、测试结果、风险与剩余项。该文件是本轮唯一逐项状态来源,本 PR 描述不把未复测项写成已验收。Round 2 — 独立复测
状态:PENDING / NOT STARTED
后续由原来的两位 QA Agent 对修复后的同一精确 SHA(当前为
0d98839a532dc5f2b6be47acaa210540296dbb6c)重新检出,分别完成 macOS 与 OpenBayes Linux 的冷安装、默认 Skills、Skills 更新/回滚、版本拒绝、生命周期、真实 Terminal.app/Orca 与终端矩阵复测。Round 2 的结论应在下一轮追加到本 PR,不覆盖 Round 1 的 NOT READY 结论。已知限制与接受项
以下项目本轮没有被标记为已修复,也不全部视为当前内部使用的发布阻断:
hyperai/hyperai-skills保持私有;不修改仓库可见性、URL、lock ref、鉴权机制或分发方式。当前内部使用要求是:已登录且具备权限的用户 Mac 可以完成默认安装、检查更新、升级和回滚。tool-ralphentry 告警暂不修改,记录为上游边界/已知限制。本轮 PR 更新记录
feat/hyperai-tui-profile;Round 2 — 独立 QA
0d98839a532dc5f2b6be47acaa210540296dbb6cexecFileSync(...).trim()遇stdout=null抛 TypeError;另有安装中断状态、legacy SIGKILL 数据一致性、两阶段 uninstall、大 JSON 截断、错配 patch 半安装等 P2/P3。Round 2 — 开发修复
528010eaff4d6d0c73f4d6d0c731f830ece866b6bfd5cdc1a10e176edbFIX-REPORT-ROUND2.md(已加入当前 PR 分支)feat/hyperai-tui-profile;未 rebase、未 squash、未 force push,Round 1 历史完整保留。本轮主要修复:
execFileSync在 stdout ignored 时返回 null;真实认证网络默认安装和本地file://bare remote 默认安装均通过;install.mjs --dry-run无论是否--json均 exit 0 且不写入;repair;--dsh-bin,并对比上次安装记录;uninstall --yes→uninstall --yes --purge;check --json去掉完整 plan,TUI 对超大 stdout 明确报错而非静默截断;node_modules,隔离错误树;--frozen-lockfile缺 lock 时清晰失败,不静默退化;开发自测(不代表独立 QA 通过)
补充开发证据:
DSH_HOME中,使用真实已登录用户 HOME 的 GitHub 凭据完成 默认node scripts/install.mjs:completed/done;LICENSE、verified Skill、manifest 均落盘;check --json返回 273-byte 紧凑结果,无完整 plan。--source之外的网络 clone 路径,满足 R2-01 的默认安装要求。apps/tui/docs/screenshots/real/terminal-width-{56,80,110,120}.txt记录 PTY 宽度证据。/update禁用提示、Settings 品牌标签、产品版本、实心字标。以上均为开发自测,不是独立 QA 验收。
Round 3 — 独立复测
状态:PENDING / NOT STARTED
由原 QA Agent A/B 分别检出同一精确 SHA(当前
f4d6d0c731f830ece866b6bfd5cdc1a10e176edb),重新执行 Round 2 清单及未修改功能的完整独立测试,覆盖 macOS 与 OpenBayes Linux;两份报告分别给出 GO/NO-GO。开发 Agent 不自行宣称最终通过。Round 2 遗留与接受限制
install.mjs --json已清理依赖进度;非 TTY TUI 启动仍属上游 dsh-tui 边界。tool-ralph警告、Provider API Key 明文回显仍未修改。PR 更新状态
Round 3 开发过程历史记录(原文保留)
Round 3 — QA 历史结论
以下三份结论均保留,互不覆盖:
Agent A 的 canonical kill 点 PASS 与 Agent B 的 MID-SWAP FAIL 并不矛盾:A 覆盖了常规时点,B 增加了两次 rename 之间的微窗口。按新证据,Round 3 的 R2-08 整体判为 FAIL,直到本轮修复。
Agent A 的详细原始报告在当前工作区未找到,未伪造其内容;本轮统一分析只使用任务提供的 A 结论,并完整读取 Agent B 初版与深度报告。原始 QA 报告均未修改或覆盖。
Round 3 — 开发修复
f4d6d0c731f830ece866b6bfd5cdc1a10e176edb60dc943dc1a351f3ebbfb7aeb994a1c68ec1bc8690ac001f8173ed891e2da62dc1097d97819bc46590ac001f8173ed891e2da62dc1097d97819bc465ROUND3-UNIFIED-QA.md、ROUND3-FIX-REPORT.md、ROUND3-REGRESSION-RESULTS.md、ROUND3-SKILLS-CRASH-RECOVERY.md、ROUND3-QA-HANDOFF.mdP1 — BUG-R3B-01 修复
recoverSkillJournals()现在按实际文件系统状态恢复,不再对缺失 target 直接digestSkill后吞掉 ENOENT。oldPath完整时的回滚:将旧树恢复到 target,恢复旧 manifest,保留用户文件,再清理 staging/journal。prepared / old-moved / new-moved阶段;恢复不单靠阶段字段。SKILL_RECOVERY_FAILED,保留 journal/oldPath/staging/backup 并以非零退出;不再静默 exit 0。references/内均按哈希保留;冲突会保留.hyperai-recovered-*副本并安全失败。其他修复
install.mjs --json:pnpm/dsh 子进程 stdout 捕获后转 stderr;stdout 仅一个合法 JSON;成功和失败均有稳定机器接口。skills-update check --json:错误输出稳定 JSON envelope(GIT_TIMEOUT/GIT_AUTH/ROLLBACK_FAILED/SKILLS_STATE_INVALID),保留非零退出并脱敏 URL 凭据。.hyperai-failed-node_modules;doctor 给出明确诊断。HyperAI fixed solid,Companion skin 标注 HyperAI 不使用,标题改为HyperAI Harness · <session>;56 列保持紧凑产品版本并文档化。--json才是自动化接口。Round 3 — 开发自测
真实非 dry-run
--json:stdout 约 1.5 KB 合法 JSON,无Progress:污染;失败路径也有 JSON envelope。真实私有 Skills 默认安装使用隔离 HOME/DSH_HOME/npm prefix,未触碰真实用户 Profile。以上为开发自测,不是 Agent A/B 的最终验收结论。
Final Targeted QA
状态:PENDING
请 Agent A 与 Agent B 对最终完整 SHA
90ac001f8173ed891e2da62dc1097d97819bc465进行定向复测,重点:
install.mjs --json与skills-update check --json成功/失败契约;本轮保留的限制
hyperai v0.2.0紧凑产品版本,不强行挤压完整上游版本;80+ 列为完整版本牌。PR 状态