diff --git a/README.md b/README.md index 9cac917..49aad54 100644 --- a/README.md +++ b/README.md @@ -83,12 +83,18 @@ not a screenshot. Simultaneous typing races and plugin hot-loading remain unveri ### Want to connect your existing desktop tasks? -[Copy the native-task setup prompt](docs/06-guides/codex-native-tasks.md#1-paste-this-into-each-chosen-task) -into each chosen task: paste the other task's **chat link** and the allowed topic. -In Codex, **Copy chat deep link** is **⌘⌥L** on macOS or **Ctrl+Alt+L** on Windows. -It uses a pinned public workflow, not a local path or manually copied internal ID. -Setup sends no peer messages; wait for both confirmations, then work normally. -No terminal setup is needed for that route. +[**Open the pairing helper →**](https://fyaic.github.io/threadmesh/) + +Paste two copied **chat links**, choose what they may share, and copy the setup +prepared for each task. No terminal, installation, account or hand-editing long +prompts. Inputs stay in the browser page; the helper does not read chats or send +messages. In Codex, **Copy chat deep link** is **⌘⌥L** on macOS or **Ctrl+Alt+L** +on Windows. Paste and send each setup yourself; wait for both confirmations, +then work normally. [Manual entry and limits](docs/06-guides/codex-native-tasks.md). + +Another real case: A changed an API contract; original B updated its own client +and tests, retaining the earlier timeout and cursor-encoding decisions. +[Browser checks and the actual API handoff →](docs/09-reviews/2026-09-08-pairing-helper-acceptance.md) **Tested, still experimental:** the [public-workflow + chat-link run](docs/09-reviews/2026-09-08-native-deep-link-acceptance.md) resolved the original two tasks without a global task list. A chose to send; diff --git a/README.zh-CN.md b/README.zh-CN.md index 22e82a9..9e8a51d 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -77,12 +77,16 @@ B 早已知道按钮名称不能改。明确配对后,只向 A 提出普通业 ### 想连接已有的桌面任务? -把[原生任务设置提示词](docs/zh-CN/codex-native-tasks.md#1-分别把下面的提示词发给两个任务) -分别发给选中的两个任务,只填对方的**聊天链接**和允许话题。 -Codex 的“复制聊天深链”快捷键为 macOS **⌘⌥L**、Windows **Ctrl+Alt+L**。 -使用固定版本的公开工作流, -不用本地路径或手抄内部 ID。设置时不向对方发消息,等双方各自确认后正常工作。 -这条路径不需要终端设置。 +[**打开免安装配对页面 →**](https://fyaic.github.io/threadmesh/) + +粘贴两个**聊天链接**,选择允许交流的话题,分别复制为它们生成的设置提示。 +不用终端、安装、注册账号或手工修改长提示词。输入留在浏览器页面中,页面不读聊天、 +不代发消息。Codex 的“复制聊天深链”快捷键是 macOS **⌘⌥L**、Windows **Ctrl+Alt+L**。 +你仍需在两个原任务分别粘贴发送;等双方确认后正常工作。 +[手动入口与限制](docs/zh-CN/codex-native-tasks.md)。 + +另一个真实案例:A 修改 API 约定后,原 B 自己更新客户端和测试,同时保留此前的 +超时、特殊游标编码约定。[页面检查与实际 API 协作记录 →](docs/09-reviews/2026-09-08-pairing-helper-acceptance.md) **已实测,仍属实验入口:** [公开工作流+聊天链接实测](docs/09-reviews/2026-09-08-native-deep-link-acceptance.md) 不查全局任务列表就定位了原来的两个任务;A 主动发送,原 B 自己改对文案并保留按钮和价格。 diff --git a/ROADMAP.md b/ROADMAP.md index 744d6d9..caf9e9e 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -13,6 +13,12 @@ policy layer; A2A, Cotal, ACP, or harness-native APIs may supply transport. ## Active priority — existing desktop clients (2026-09-08) +**Setup simplification shipped:** the bilingual [no-install pairing helper](https://fyaic.github.io/threadmesh/) +generates separate setups from two chat links and a chosen topic. Users still +paste/send and wait for both confirmations; it is not an automatic connection. +Browser checks and a second original-task API/client case passed with the +generated prompts. [Actual screenshot and receiver-owned results](docs/09-reviews/2026-09-08-pairing-helper-acceptance.md). + **Completed this slice:** [public workflow + chat-link pairing](docs/09-reviews/2026-09-08-native-deep-link-acceptance.md), both original tasks enabled, ordinary request triggering A's chosen advice, original B's correct own edit with prior decisions preserved, and both stopped. diff --git a/docs/06-guides/codex-native-tasks.md b/docs/06-guides/codex-native-tasks.md index 8ad1769..9ff5de5 100644 --- a/docs/06-guides/codex-native-tasks.md +++ b/docs/06-guides/codex-native-tasks.md @@ -9,6 +9,13 @@ a new model, an MCP server or a polling daemon. ## No-terminal workflow +Prefer the [browser pairing helper](https://fyaic.github.io/threadmesh/) if you +do not want to edit the template below. Paste two local chat links, choose a +shared topic and advice mode, confirm, then copy each prepared setup and open +its original task. Inputs are not uploaded or saved by the page. It generates +text, not a connection: you still paste/send in both tasks and wait for their +confirmations. [Browser and generated-prompt acceptance](../09-reviews/2026-09-08-pairing-helper-acceptance.md). + Choose two disposable existing Codex tasks with useful prior context. For example, a brand task maintains approved product facts; a website task already has the instruction to keep the signup label **Create my workspace**. Keep diff --git a/docs/09-reviews/2026-09-08-pairing-helper-acceptance.md b/docs/09-reviews/2026-09-08-pairing-helper-acceptance.md new file mode 100644 index 0000000..55bda03 --- /dev/null +++ b/docs/09-reviews/2026-09-08-pairing-helper-acceptance.md @@ -0,0 +1,105 @@ +# Pairing helper and original-task API handoff + +**Outcome:** the [no-install pairing helper](https://fyaic.github.io/threadmesh/) +is live. Its generated setup was used in the original two Codex validation +tasks. After an ordinary API change request, A chose to contact original B; +B updated its own client and tests while preserving earlier decisions. + +This reduces template editing. It does **not** automatically connect tasks: +users still paste/send both setups and wait for confirmations. Codex supplies +native messaging and continuation; ThreadMesh supplies optional scoped guidance. + +## Actual browser entry + +![Actual published pairing helper, Chinese desktop view](../assets/pairing-helper-public.png) + +This is an actual screenshot of the published helper with empty inputs, not a +native handoff screenshot or a staged conversation. The page accepts two copied +local chat links, a limited topic, advice mode and explicit consent. Three topic +presets cover product facts/copy, API/client changes and retained preferences. +It generates separate setup text and links back to the two original tasks. + +The static page has no account, analytics, backend or browser storage. Chat +links/topics are not put into requests or URLs. Copying writes the selected +setup to the system clipboard, where normal operating-system behavior applies. +The public workflow is fetched later by the agent after the user sends setup. + +Actual Chrome checks covered Chinese and English, desktop and 390 px mobile, +light/dark rendering, generation, successful clipboard write, changed-input +invalidation and a controlled clipboard-rejection fallback. A reviewer found +an asynchronous clipboard race; the fix locks copy/generation while a write is +pending and warns when changed inputs make the completed copy stale. Four app +tests exercise these states; ten generator tests cover links, consent, modes, +topic boundaries and generated text. The full suite passed: **475 tests, +474 passed, one optional native test skipped**, plus schema/transition checks. + +The [implementation PR](https://github.com/fyaic/threadmesh/pull/174) was merged. +The [Pages deployment](https://github.com/fyaic/threadmesh/actions/runs/34184259676) +succeeded. Anonymous requests returned HTTP 200 with correct content types for +all four deployed files, byte-identical to the tested source. The public page +also loaded in Chrome with empty inputs and only same-origin static resources. +Native-app opening and keyboard copying of real chat links were not tested in +this browser check. + +## Useful original-receiver outcome + +The two existing, opted-in validation tasks first prepared local fixtures while +cross-task advice was stopped. A owned an API contract; B owned a client and +five tests. B already had these decisions: a 3000 ms timeout, correctly encoded +special-character cursors, no empty cursor query and `null` for no next page. + +The manager dispatched the exact two strings returned by `buildPair(...)` into +the original tasks. Both read the pinned public workflow, resolved only their +selected peer and confirmed setup without peer sends or file changes. This +tests generated-prompt use, **not automatic browser submission or independent +manual GUI onboarding**. + +After both confirmations, the only business request to A was: + +> 双方设置已确认完成。API 的新版决定是:GET 路径改为 /v2/items,请求游标字段改为 cursor,响应下一页字段改为 next_cursor,列表字段仍为 items。请更新维护的 API 约定;不涉及鉴权或部署变化。 + +It did not name a recipient or instruct A to send. A updated its contract, +checked that B was idle and made one native send. Original B received the +source-attributed message and made its own native file changes: + +| Contract | Before | B's updated client | +|---|---|---| +| GET path | `/v1/items` | `/v2/items` | +| Request cursor | `pageToken` | `cursor` | +| Response next page | `nextPageToken` | `next_cursor` | +| Existing timeout | 3000 ms | Preserved | +| Cursor/no-next-page behavior | Encode cursor; omit empty query; return `null` | Preserved | + +B updated and passed its own five tests. Independent maintainer assertions +also checked the exact contract, special-character round trip, absence of an +empty query, and that the old response field is no longer consumed. The three +earlier product/copy/price artifacts were unchanged. The manager did not relay +the business change directly to B or edit B's files. + +The business handoff took approximately **70 seconds**, from A's request to B's +completion. Setup was separate: approximately **31 seconds for A and 23 seconds +for B**, run in parallel. Both tasks then acknowledged stop, with no further +peer sends or edits in those stop turns. An independent internal subagent +reviewed original turn items and artifacts and accepted this bounded case. + +## Evidence and limits + +Owner-only private retention includes generated prompts and the selected +setup/business/stop native turn items recovered using the official read-only +App Server. Public records omit task IDs, local paths and unrelated history. +SHA-256 commitments: + +- Generated prompts: `ff58002a0135d2e90f92ff20468926f5117cd5bacc4ace3a3265758489dde282` +- Final selected-turn capture: `44ebcd8606738b820e5c8bb7d4c0e283fac924edd056ea418adef37efd79f3f6` + +B's retained fetch contains the full pinned workflow. A's web result retains +page metadata/summary and its reading confirmation, not the full web response. +The archive is a selected run window, not a complete lifetime task export. + +This is a **local API adapter case**, not an HTTP-service integration test. +There is no recording of the native exchange. It does not establish reliability +across accounts, simultaneous typing safety, universal desktop support, quota +recovery, or an incremental advantage over native-only Codex. An idle check +does not make the following send atomic. Review-only mode drafts advice; it is +not permission to send. Agent guidance is not a hard host-enforced security +boundary. Neither this case nor the helper repacks the alpha.3 CLI release. diff --git a/docs/09-reviews/README.md b/docs/09-reviews/README.md index 1c4b90e..25acaf8 100644 --- a/docs/09-reviews/README.md +++ b/docs/09-reviews/README.md @@ -30,6 +30,7 @@ not count as live-product or independent external-verifier evidence. ## Live attempt audits +- [Published pairing helper, browser checks and original-task API handoff](2026-09-08-pairing-helper-acceptance.md) - [Public workflow + chat link: original receiver-owned handoff and final stop passed](2026-09-08-native-deep-link-acceptance.md) - [Why the agent-created native pair was omitted from task lists](2026-09-08-native-task-discovery.md) - [Native desktop public entry: recovered readiness results and invalid-limit repair](2026-09-07-native-public-entry.md) diff --git a/docs/10-planning/project-status.md b/docs/10-planning/project-status.md index 1ed0705..087780c 100644 --- a/docs/10-planning/project-status.md +++ b/docs/10-planning/project-status.md @@ -2,6 +2,15 @@ ## Current product update — 2026-09-08 +**The no-install pairing helper is now public:** [open it](https://fyaic.github.io/threadmesh/), +paste two chat links and choose a topic; copy the separately generated setups. +Chinese/English, browser interaction and clipboard-failure handling were tested. +Users still paste/send both setups themselves. The page neither reads chats nor +connects tasks. Its exact generated prompts also passed a second original-task +case: A chose to send an API change; B updated its own client and tests while +retaining timeout/encoding decisions. Business handoff: about 70 seconds; +setup separately 31/23 seconds. Both stopped. [Screenshot, tests and case evidence](../09-reviews/2026-09-08-pairing-helper-acceptance.md). + **The controlled public-entry gate is complete.** The [public-workflow + chat-link run](../09-reviews/2026-09-08-native-deep-link-acceptance.md) reused the original two Codex validation tasks: both resolved the selected peer, diff --git a/docs/assets/pairing-helper-public.png b/docs/assets/pairing-helper-public.png new file mode 100644 index 0000000..b3bcb81 Binary files /dev/null and b/docs/assets/pairing-helper-public.png differ diff --git a/docs/evidence/README.md b/docs/evidence/README.md index f0bd962..0dae9fb 100644 --- a/docs/evidence/README.md +++ b/docs/evidence/README.md @@ -5,6 +5,7 @@ adoption or proof of incremental value over the host's native capability. | Recent case | Public record | Retained private originals | |---|---|---| +| Browser pairing helper + original Codex API receiver, passed | [Actual helper screenshot, generated setup and 70-second API handoff](../09-reviews/2026-09-08-pairing-helper-acceptance.md) | Generated prompts and selected original setup/business/stop turn items | | Codex public workflow + chat-link pair, passed | [Actual setup, 61-second business handoff, B's own diff and final stop](../09-reviews/2026-09-08-native-deep-link-acceptance.md) | Original selected setup/business/stop App Server turn items and verified artifacts | | Codex desktop prior-context pair | [Actual exchange, B's diff and reduced audit](codex-native-2026-09-07/README.md) | Complete A/B native exports, original tasks and files | | Codex public-entry readiness attempt, not accepted | [Recovered results, rejected inventory limits and unchanged artifacts](../09-reviews/2026-09-07-native-public-entry.md) | Empty desktop reads and recovered official App Server turn records retained separately | @@ -19,7 +20,9 @@ archives are outside the public repository, in owner-only parent directories; they are local retention, not off-device backup. No raw model logs, account data or unrelated task histories were uploaded. -No screenshot or video was captured for these listed recent runs. Earlier +The pairing-helper record includes an actual screenshot of the helper page, +not of the native exchange. No native handoff screenshot or video was captured +for these listed recent runs. Earlier concept images and staged animations are not retroactive proof. The desktop [capture policy](codex-native-2026-09-07/README.md#screenshots-and-recordings) describes consent, cropping, originals and truthful retrospective labels. diff --git a/docs/zh-CN/codex-native-tasks.md b/docs/zh-CN/codex-native-tasks.md index 6ea4426..50096c9 100644 --- a/docs/zh-CN/codex-native-tasks.md +++ b/docs/zh-CN/codex-native-tasks.md @@ -7,6 +7,11 @@ ## 免终端工作流 +不想手工改下面的长提示词,可以直接打开[配对页面](https://fyaic.github.io/threadmesh/): +填两个本地聊天链接,选择话题和建议方式,勾选确认,然后分别复制设置、打开原任务。 +页面不上传或保存输入,只生成文字,不建立连接;你仍需在两个任务中分别粘贴发送, +等待它们确认。[页面与生成提示的验证记录](../09-reviews/2026-09-08-pairing-helper-acceptance.md)。 + 选择两个已有上下文、没有业务副作用的 Codex 测试任务。例如,一个维护品牌信息, 另一个维护网页,且已经约定按钮名称必须保留 **Create my workspace**。 不要选其他业务任务;测试期间不要同时向接收任务输入内容。仍需正常 Codex 额度。