Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
7cb63d4
feat(knowledge): restore historical revisions as new current versions
KirenHu Oct 10, 2026
a497541
feat(projects): add incremental, evidence-driven historical project r…
KirenHu Oct 10, 2026
c2ffbe2
test(projects): schedule project recheck and verify automatic twin gr…
KirenHu Oct 10, 2026
24d6ae5
feat(browser): add explicit site-scoped manual recording session cont…
KirenHu Oct 10, 2026
7622e70
feat(browser): persist manual capture and collect only the specified …
KirenHu Oct 10, 2026
3409bda
feat(browser): expose manual recording and full per-session event tim…
KirenHu Oct 10, 2026
e0e1faf
feat(browser): extend Chrome MV3 capture to explicit manual site reco…
KirenHu Oct 10, 2026
578c313
feat(ui): show manual-site recording controls and visible operation h…
KirenHu Oct 10, 2026
faeebae
feat(ui): browse saved browser sessions, full event timeline and summ…
KirenHu Oct 10, 2026
39cccc0
test(browser): verify manually authorized session navigation, redacti…
KirenHu Oct 10, 2026
5aefdb8
fix(tests): retain task-mode navigation grouping and fix historical r…
KirenHu Oct 10, 2026
a06664e
test(browser): exercise real MV3 manual site capture across navigatio…
KirenHu Oct 10, 2026
ab2b60f
chore(release): prepare 1.2.1 unsigned test builds and document the n…
KirenHu Oct 10, 2026
0080d3c
fix(browser): distinguish continuing manual-site navigation from task…
KirenHu Oct 10, 2026
9608fe6
test(ui): verify manual recording is started, stopped and inspected f…
KirenHu Oct 10, 2026
9b05f96
fix(knowledge): discard stale AI update proposals when restoring a hi…
KirenHu Oct 10, 2026
61dac3d
test(knowledge): use correct dashboard session-token fixture for roll…
KirenHu Oct 10, 2026
6adafa1
test(ui): match current saved twin authorization label in sharing acc…
KirenHu Oct 10, 2026
9a0f3fb
feat(browser): maintain one evolving grounded site operation manual f…
KirenHu Oct 10, 2026
060521e
feat(browser): publish finalized manual sessions into one continuousl…
KirenHu Oct 10, 2026
ef8cf59
feat(ui): show quiet local-time last-updated tip beside knowledge cha…
KirenHu Oct 10, 2026
6d060a8
test(browser): verify one evolving site manual, repetition dedup, own…
KirenHu Oct 10, 2026
eaee2c9
feat(ui): link each manual browser record to its evolving site operat…
KirenHu Oct 10, 2026
a04f553
docs(browser): distinguish opted-in site manuals from independent wor…
KirenHu Oct 10, 2026
631a3d9
fix(browser): keep newest same-second observation when merging repeat…
KirenHu Oct 10, 2026
af596d1
test(ui): verify manual operation guide is accessible and revised kno…
KirenHu Oct 10, 2026
9d98e34
test(ui): refresh knowledge route before checking new-version update log
KirenHu Oct 10, 2026
41886e8
feat(worktwin): incremental evidence and bidirectional project repair…
KirenHu Oct 10, 2026
30e88da
fix(worktwin): capture embedded dialogs and keep user views stable (1…
KirenHu Oct 10, 2026
5d8b8fd
fix(browser): stop ended sessions once before restarting capture
KirenHu Oct 10, 2026
9e6e16b
feat: implement article-first WorkTwin workbench and continuous site …
Oct 12, 2026
7be93cf
fix: align article grants, project routing and browser capture setup
Oct 12, 2026
22e95dc
fix: search linked article documents without resetting follow-up context
Oct 12, 2026
a8c735d
test: include article source retrieval in packaged MCP smoke checks
Oct 12, 2026
07a2d4f
WorkTwin 1.5.0: separate captured materials from periodic article mai…
Oct 12, 2026
2fc8f48
WorkTwin 1.5.1: maintain current project documents and retire fragmen…
Oct 12, 2026
2de86e4
WorkTwin 1.5.2: adapt directory-first curation and reviewed article p…
Oct 13, 2026
a599e79
WorkTwin 1.5.3: explain file collection issues and allow one-time lar…
Oct 13, 2026
5c34a71
Add research-object folders and existing-article maintenance for 1.5.4
Oct 13, 2026
612524b
Support MiMo Flash reasoning through OpenRouter
Oct 13, 2026
b7a2370
Run extraction and library editing concurrently in WorkTwin 1.5.5
Oct 13, 2026
484b0e7
Clarify source AI permissions and simplify library navigation in 1.5.6
Oct 13, 2026
c451202
Add Antigravity artifact source and document assistant capture research
Oct 13, 2026
dbbd2da
Add deterministic document screening and incremental extraction
Oct 13, 2026
b5a5788
Deliver incremental knowledge processing and scoped assistant intake …
Oct 13, 2026
33541e8
Preserve long task context and validate native MCP clients across pla…
Oct 13, 2026
28ee4fa
Record measured model comparison and local installation evidence
Oct 13, 2026
0db0985
Align MCP configuration form with the existing dialog layout
Oct 13, 2026
04ba011
Fix cross-platform MCP validation and retry interrupted Apple ticket …
Oct 13, 2026
b793ef2
Share Apple ticket network retry with distribution verification
Oct 13, 2026
5039e4f
Record notarized local delivery and cross-platform verification
Oct 13, 2026
f042cfe
docs: explain WorkTwin through user value and a clear getting-started…
Oct 14, 2026
38f6150
docs: describe who WorkTwin is for with practical use cases
Oct 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 33 additions & 13 deletions .github/workflows/worktwin-build.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: WorkTwin 1.2.0 acceptance and signed release
name: WorkTwin 1.5.9 acceptance and signed release

on:
workflow_dispatch:
Expand All @@ -8,6 +8,10 @@ on:
type: choice
default: all
options: [all, arm64, x86_64]
signed_validation:
description: 'Sign and notarize test artifacts only; never publish a release'
type: boolean
default: false
signed_release:
description: 'Explicitly sign, notarize and publish a formal release (main and both architectures only)'
type: boolean
Expand All @@ -19,8 +23,8 @@ on:
paths: ['worktwin-collector/**', '.github/workflows/worktwin-build.yml']

concurrency:
group: worktwin-${{ github.event_name == 'workflow_dispatch' && inputs.signed_release && 'signed-release' || (github.event.pull_request.number || github.ref) }}
cancel-in-progress: ${{ !(github.event_name == 'workflow_dispatch' && inputs.signed_release) }}
group: worktwin-${{ github.event_name == 'workflow_dispatch' && (inputs.signed_release || inputs.signed_validation) && 'signed-release' || (github.event.pull_request.number || github.ref) }}
cancel-in-progress: ${{ !(github.event_name == 'workflow_dispatch' && (inputs.signed_release || inputs.signed_validation)) }}
permissions:
contents: read
defaults:
Expand Down Expand Up @@ -48,6 +52,10 @@ jobs:
- run: python -m playwright install --with-deps chromium
- name: Browser acceptance of collection, editing and authorization
run: PYTHONPATH=. python scripts/ui_acceptance.py
- name: Browser acceptance of explicit refresh and assistant source detection
run: PYTHONPATH=. python scripts/ui_refresh_acceptance.py
- name: Browser acceptance of article workbench, continuous chat and website controls
run: PYTHONPATH=. python scripts/ui_interaction_acceptance.py
- name: Browser acceptance of knowledge updates
run: PYTHONPATH=. python scripts/ui_proposals_acceptance.py
- name: Browser acceptance of remote sharing and owner offline use
Expand All @@ -60,6 +68,8 @@ jobs:
run: PYTHONPATH=. python scripts/ui_layout_acceptance.py
- name: Browser acceptance of twin MCP and separate log authorization
run: PYTHONPATH=. python scripts/ui_mcp_acceptance.py
- name: Assistant history range and reference UI
run: PYTHONPATH=. python scripts/ui_assistant_processing_acceptance.py
- name: Chromium MV3 acceptance of signed task capture and navigation stop
run: PYTHONPATH=. python scripts/ui_browser_extension_acceptance.py
- uses: actions/upload-artifact@v4
Expand All @@ -72,8 +82,8 @@ jobs:
run: |
python -m build
mkdir -p release
git -C .. archive HEAD:worktwin-collector --format=zip -o "$PWD/release/WorkTwin-Collector-1.2.0-source.zip"
python -c 'from zipfile import ZipFile; z=ZipFile("release/WorkTwin-Collector-1.2.0-source.zip"); assert all(p in z.namelist() for p in ("README.md", "pyproject.toml", "worktwin/api.py", "third_party/rowboat/LICENSE")), "Incomplete source archive"'
git -C .. archive HEAD:worktwin-collector --format=zip -o "$PWD/release/WorkTwin-Collector-1.5.9-source.zip"
python -c 'from zipfile import ZipFile; z=ZipFile("release/WorkTwin-Collector-1.5.9-source.zip"); assert all(p in z.namelist() for p in ("README.md", "pyproject.toml", "worktwin/api.py", "third_party/rowboat/LICENSE")), "Incomplete source archive"'
cp dist/*.whl dist/*.tar.gz release/
- uses: actions/upload-artifact@v4
with:
Expand All @@ -89,7 +99,7 @@ jobs:
runs-on: ${{ matrix.runner }}
timeout-minutes: 300
env:
WORKTWIN_REQUIRE_NOTARIZATION: ${{ github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main' && inputs.signed_release && inputs.macos_architecture == 'all' && '1' || '0' }}
WORKTWIN_REQUIRE_NOTARIZATION: ${{ github.event_name == 'workflow_dispatch' && (inputs.signed_validation || (github.ref == 'refs/heads/main' && inputs.signed_release && inputs.macos_architecture == 'all')) && '1' || '0' }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
Expand All @@ -111,6 +121,10 @@ jobs:
run: zsh desktop/build-macos.sh
- name: Mount verified DMG and Gatekeeper-test the installed app
run: zsh desktop/verify-macos-dmg.sh
- name: Verify packaged stdio MCP bridge
run: |
.build-venv/bin/python -m pip install pytest httpx
WORKTWIN_BRIDGE_EXECUTABLE="$PWD/dist/WorkTwin.app/Contents/MacOS/WorkTwin" .build-venv/bin/python -m pytest tests/test_mcp_clients.py
- uses: actions/upload-artifact@v4
with:
name: WorkTwin-${{ matrix.runner }}-${{ env.WORKTWIN_REQUIRE_NOTARIZATION == '1' && 'notarized' || 'unsigned' }}
Expand Down Expand Up @@ -143,10 +157,16 @@ jobs:
run: ./desktop/build-windows.ps1
- name: Verify the packaged application starts
run: python scripts/smoke_desktop.py dist/WorkTwin/WorkTwin.exe
- name: Verify packaged stdio MCP bridge
shell: pwsh
run: |
& .\.build-venv\Scripts\python.exe -m pip install pytest httpx
$env:WORKTWIN_BRIDGE_EXECUTABLE = (Resolve-Path 'dist/WorkTwin/WorkTwin.exe').Path
& .\.build-venv\Scripts\python.exe -m pytest tests/test_mcp_clients.py
- shell: pwsh
run: |
New-Item -ItemType Directory -Force release
Compress-Archive -Path dist/WorkTwin -DestinationPath release/WorkTwin-Collector-1.2.0-Windows-x64.zip
Compress-Archive -Path dist/WorkTwin -DestinationPath release/WorkTwin-Collector-1.5.9-Windows-x64.zip
- uses: actions/upload-artifact@v4
with:
name: WorkTwin-Windows-unsigned
Expand All @@ -164,22 +184,22 @@ jobs:
with:
path: release-assets
merge-multiple: true
- name: Create checksums and publish the trusted 1.2.0 release
- name: Create checksums and publish the trusted 1.5.9 release
working-directory: .
env:
GH_TOKEN: ${{ github.token }}
run: |
cd release-assets
test -f WorkTwin-Collector-1.2.0-macOS-arm64.dmg
test -f WorkTwin-Collector-1.2.0-macOS-x86_64.dmg
test -f WorkTwin-Collector-1.5.9-macOS-arm64.dmg
test -f WorkTwin-Collector-1.5.9-macOS-x86_64.dmg
if find . -name '*-unsigned.dmg' | grep -q .; then
echo 'Refusing to publish unsigned DMGs' >&2
exit 1
fi
sha256sum *.zip *.dmg *.whl *.tar.gz > SHA256SUMS.txt
cd ..
if gh release view worktwin-v1.2.0 >/dev/null 2>&1; then
echo 'The existing v1.2.0 release is immutable; a new release needs a new version'
if gh release view worktwin-v1.5.9 >/dev/null 2>&1; then
echo 'The existing v1.5.9 release is immutable; a new release needs a new version'
exit 0
fi
gh release create worktwin-v1.2.0 --target "$GITHUB_SHA" --title "WorkTwin Collector 1.2.0 (autonomous knowledge, task capture and trusted macOS delivery)" --notes-file worktwin-collector/RELEASE_NOTES.md release-assets/*
gh release create worktwin-v1.5.9 --target "$GITHUB_SHA" --title "WorkTwin Collector 1.5.9 (autonomous knowledge, task capture and trusted macOS delivery)" --notes-file worktwin-collector/RELEASE_NOTES.md release-assets/*
32 changes: 28 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,30 @@
# AI-coding
该库内的项目均由vibe coding生成
# WorkTwin

## 项目
**让每天的工作,成为可以持续复用的知识。**

- [WorkTwin Collector](worktwin-collector/README.md):后台采集本地工作资料、维护连贯知识库的桌面工具。支持文件夹与 Codex/Claude Code 的公开会话;已实现分身授权的本地只读 MCP;完整日志项目归属仍待完善。产品范围以 [一期边界](worktwin-collector/docs/PHASE1.md) 为准。
WorkTwin 是一个 AI 驱动的个人知识数字分身工具。它从你授权的文件、AI 编程会话和浏览器操作中积累工作经验,持续整理成可阅读、可更新、可追溯的知识文章,再按你的授权提供给其他人或 AI 使用。

例如,一项需求经历了讨论、修改和最终确认。WorkTwin 的目标是把这些分散记录维护成一篇讲清「现在怎么做、为什么这样做、依据是什么」的文章,让下次接手的人或 AI 能接着工作。

## 什么样的人适合 WorkTwin

如果你经常围绕同一个项目持续工作,资料和讨论不断变化,又需要向同事或 AI 反复解释背景,WorkTwin 值得尝试。它尤其适合经常使用 AI 编程助手的开发者、维护需求与决策的产品经理,以及希望复用研究和交付经验的研究者、顾问与独立工作者。

共同点是:**工作中已经积累了不少记录,希望它们能持续变成有用的知识,却不想再专门维护一套笔记。** 当前更适合愿意配置模型服务、核对 AI 整理结果的早期使用者。[查看具体场景](worktwin-collector/README.md#什么样的人适合-worktwin)。

## 你可以用它做什么

- **积累经验**:在原有工具中继续工作,让已授权的新资料持续进入知识整理流程。
- **找回当前结论**:阅读按项目和研究对象组织的文章,查看来源、修改内容与历史版本。
- **复用自己的知识**:为不同用途创建数字分身,让它们在指定范围内回答问题。
- **让 AI 接着工作**:通过 MCP(AI 工具读取外部资料的连接方式),把分身获准访问的知识接入其他 AI 客户端。

**[了解功能与开始使用 →](worktwin-collector/README.md)** · [入门指南](worktwin-collector/docs/GETTING_STARTED.md) · [已发布版本](https://github.com/KirenHu/AI-coding/releases) · [文档导航](worktwin-collector/docs/README.md)

## 当前进度

本分支源码版本为 **1.5.9 测试版**,已实现持续文章维护、知识分组、来源追溯和数字分身 MCP 接入。GitHub Releases 中的安装包可能早于本分支,下载时请核对版本;源码版本与正式发布状态分别说明在[项目介绍](worktwin-collector/README.md#当前状态)。

## 关于这个仓库

仓库名为 `AI-coding`,用于实践 AI 辅助软件开发;目前主要项目是 [WorkTwin](worktwin-collector/)。产品实现、安装和开发文档都在该目录中。
Loading
Loading