Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
aa81ca6
Document autonomous-first knowledge management principles
KirenHu Oct 10, 2026
cc56aeb
Activate grounded session-local knowledge without project-by-project …
KirenHu Oct 10, 2026
7f08648
Support automatic evidence-backed successor conclusions
KirenHu Oct 10, 2026
09b1965
Track AI-authored revisions separately from owner confirmations
KirenHu Oct 10, 2026
29301cd
Apply safe successor conclusions during automatic knowledge processing
KirenHu Oct 10, 2026
910bf27
Test autonomous private note activation independent of project confir…
KirenHu Oct 10, 2026
649e3df
Test autonomous successor updates and authorization boundaries
KirenHu Oct 10, 2026
7fabff3
Report live automatic private knowledge mode separately from evaluati…
KirenHu Oct 10, 2026
e015b9d
Present automatic knowledge upkeep without mandatory project confirma…
KirenHu Oct 10, 2026
b82c8bc
Repair safe single-source 1.1.7 quarantine automatically
KirenHu Oct 10, 2026
5d5fac9
Verify legacy confirmed notes recover into safe session scope
KirenHu Oct 10, 2026
0d94973
Compare stale same-document knowledge instead of creating duplicate n…
KirenHu Oct 10, 2026
ec738a5
Treat fresh revisions of the same document as ordered replacement evi…
KirenHu Oct 10, 2026
e20be10
Automatically replace outdated note on single-file revision without t…
KirenHu Oct 10, 2026
c4d0c7b
Regression test auto-replacing a revised local document
KirenHu Oct 10, 2026
ea1b01a
Prepare distinct 1.1.8 release identity without overwriting 1.1.7
KirenHu Oct 10, 2026
3cc15e8
Prepare distinct 1.1.8 release identity without overwriting 1.1.7
KirenHu Oct 10, 2026
e176c38
Prepare distinct 1.1.8 release identity without overwriting 1.1.7
KirenHu Oct 10, 2026
180986a
Prepare distinct 1.1.8 release identity without overwriting 1.1.7
KirenHu Oct 10, 2026
d5b353e
Prepare distinct 1.1.8 release identity without overwriting 1.1.7
KirenHu Oct 10, 2026
b098e96
Prepare distinct 1.1.8 release identity without overwriting 1.1.7
KirenHu Oct 10, 2026
b1023e4
Update setup guide for private automatic knowledge upkeep
KirenHu Oct 10, 2026
f0a2182
Supersede approval-first phase-one policy with AI-autonomy-first priv…
KirenHu Oct 10, 2026
f3959b6
Add 1.1.8 autonomy-first release notes and remaining limitations
KirenHu Oct 10, 2026
5cf7db6
Prioritize cross-source autonomy, low-touch twin permissions and brow…
KirenHu Oct 10, 2026
35c6d29
Align regression assertions with private AI auto-activation
KirenHu Oct 10, 2026
c269a3c
Align regression assertions with private AI auto-activation
KirenHu Oct 10, 2026
c2675c4
Align regression assertions with private AI auto-activation
KirenHu Oct 10, 2026
7e867f3
Align regression assertions with private AI auto-activation
KirenHu Oct 10, 2026
1e7261e
Add dynamic twin grant policy and project membership persistence
KirenHu Oct 10, 2026
32c6d38
Centralize dynamic scoped authorizations across twin access channels
KirenHu Oct 10, 2026
73e5ff4
Expose policy-based twin grants and enforce dynamic knowledge in loca…
KirenHu Oct 10, 2026
daa269c
Avoid policy options route shadowing and simplify preview
KirenHu Oct 10, 2026
9f88dd4
Resolve scoped twin grants consistently in MCP and published snapshots
KirenHu Oct 10, 2026
22c06d9
Resolve scoped twin grants consistently in MCP and published snapshots
KirenHu Oct 10, 2026
d6eaf46
Add configurable SystemOne Jev adapter with main-model fallback for p…
KirenHu Oct 10, 2026
3f412ea
Store enterprise judgment model settings and API keys server-side
KirenHu Oct 10, 2026
7596564
Expose enterprise-only Jev decision gateway and admin settings withou…
KirenHu Oct 10, 2026
807568e
Follow active enterprise connection for decision routing
KirenHu Oct 10, 2026
5d32f1c
Extract project-name evidence for each work unit without trusting fol…
KirenHu Oct 10, 2026
e906779
Persist work units independently from whole-document project identity
KirenHu Oct 10, 2026
82ccde8
Add grounded work-unit project inference with optional Jev scoring
KirenHu Oct 10, 2026
4cf8840
Store extracted knowledge under its work-unit project rather than its…
KirenHu Oct 10, 2026
ae77d10
Permit cross-source consolidation through confirmed work-unit project…
KirenHu Oct 10, 2026
0ca6f2b
Run project identity resolution per extracted work unit before cross-…
KirenHu Oct 10, 2026
d3ebcae
Support injected test models and avoid repository anchor identity col…
KirenHu Oct 10, 2026
c170744
Support injected test models and avoid repository anchor identity col…
KirenHu Oct 10, 2026
aa9fa32
Enable autonomous activation and updates for work-unit scoped project…
KirenHu Oct 10, 2026
d1fc06c
Enable autonomous activation and updates for work-unit scoped project…
KirenHu Oct 10, 2026
6e476d6
Expose optional personal or centrally managed enterprise decision mod…
KirenHu Oct 10, 2026
65408bb
Atomically persist named twin, pins and inheritance grants in a singl…
KirenHu Oct 10, 2026
be51cec
Test project work-unit linking, automatic twin inheritance and revoca…
KirenHu Oct 10, 2026
5260ff8
Give each digital twin one-time project and source inheritance controls
KirenHu Oct 10, 2026
d203959
Expose Jev or lightweight judgment model settings to personal users a…
KirenHu Oct 10, 2026
56f1fbe
Keep project evidence scoped per work unit and preserve negative grants
KirenHu Oct 10, 2026
3488116
Keep project evidence scoped per work unit and preserve negative grants
KirenHu Oct 10, 2026
68ddc4f
Keep project evidence scoped per work unit and preserve negative grants
KirenHu Oct 10, 2026
9be4f39
Judge project identity against authorized work evidence and cross-nam…
KirenHu Oct 10, 2026
931ecad
Verify SystemOne wire protocol, specialized routing and graceful fall…
KirenHu Oct 10, 2026
9915ff7
Document autonomous project inference, Jev adapters and twin grant sa…
KirenHu Oct 10, 2026
a50ef8b
Update 1.1.9 development documentation for scoped twins and optional Jev
KirenHu Oct 10, 2026
04f6555
Update 1.1.9 development documentation for scoped twins and optional Jev
KirenHu Oct 10, 2026
94ea7d6
Give standalone 1.1.9 release an independent identity
KirenHu Oct 10, 2026
ebb7b24
Give standalone 1.1.9 release an independent identity
KirenHu Oct 10, 2026
2f1ddf5
Give standalone 1.1.9 release an independent identity
KirenHu Oct 10, 2026
3be6c6b
Give standalone 1.1.9 release an independent identity
KirenHu Oct 10, 2026
10068ed
Give standalone 1.1.9 release an independent identity
KirenHu Oct 10, 2026
4c0434c
Describe 1.1.9 automatic project and scoped digital twin release limi…
KirenHu Oct 10, 2026
ab78218
Let owner exclude individual notes from otherwise inherited projects
KirenHu Oct 10, 2026
579e151
Require explicit work-unit-local project evidence before autonomous l…
KirenHu Oct 10, 2026
e98b6dd
Update UI acceptance count text for individual twin knowledge grants
KirenHu Oct 10, 2026
020041b
Contain mixed-project raw logs and keep revoked sources out of identi…
KirenHu Oct 10, 2026
77d727a
Cover mixed-project full-log denial despite partial knowledge authori…
KirenHu Oct 10, 2026
74665cc
Align runtime and dashboard versions with 1.1.9 package and prevent r…
KirenHu Oct 10, 2026
a833ea5
integrate(worktwin): bring browser task capture and macOS notarizatio…
KirenHu Oct 10, 2026
d8fd670
integrate(worktwin): connect browser capture services and dashboard t…
KirenHu Oct 10, 2026
37ec741
integrate(worktwin): adapt Developer ID notarization and Gatekeeper v…
KirenHu Oct 10, 2026
2158e9e
integrate(worktwin): add unified CI, notarization gates and complete …
KirenHu Oct 10, 2026
33544a0
fix(worktwin): prevent cross-work-unit project memo leaks and unsafe …
KirenHu Oct 10, 2026
8b4c21c
fix(release): keep Apple notarization opt-in, separate from normal CI…
KirenHu Oct 10, 2026
dd204fc
fix(macos): retry observed Intel hdiutil resource-busy failure once
KirenHu Oct 10, 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
87 changes: 71 additions & 16 deletions .github/workflows/worktwin-build.yml
Original file line number Diff line number Diff line change
@@ -1,16 +1,26 @@
name: WorkTwin 1.1.7 acceptance and release
name: WorkTwin 1.2.0 acceptance and signed release

on:
workflow_dispatch:
inputs:
macos_architecture:
description: macOS architecture to validate (main releases always build both)
type: choice
default: all
options: [all, arm64, x86_64]
signed_release:
description: 'Explicitly sign, notarize and publish a formal release (main and both architectures only)'
type: boolean
default: false
pull_request:
paths: ['worktwin-collector/**', '.github/workflows/worktwin-build.yml']
push:
branches: [main]
paths: ['worktwin-collector/**', '.github/workflows/worktwin-build.yml']

concurrency:
group: worktwin-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
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) }}
permissions:
contents: read
defaults:
Expand All @@ -30,6 +40,11 @@ jobs:
- run: PYTHONPATH=. python scripts/acceptance_benchmark.py
- run: PYTHONPATH=. python scripts/http_acceptance.py
- run: node --check worktwin/static/app.js
- name: Validate browser extension JavaScript
run: |
node --check worktwin/browser_extension/service-worker.js
node --check worktwin/browser_extension/content.js
node --check worktwin/browser_extension/popup.js
- run: python -m playwright install --with-deps chromium
- name: Browser acceptance of collection, editing and authorization
run: PYTHONPATH=. python scripts/ui_acceptance.py
Expand All @@ -45,6 +60,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: Chromium MV3 acceptance of signed task capture and navigation stop
run: PYTHONPATH=. python scripts/ui_browser_extension_acceptance.py
- uses: actions/upload-artifact@v4
if: always()
with:
Expand All @@ -55,8 +72,8 @@ jobs:
run: |
python -m build
mkdir -p release
git -C .. archive HEAD:worktwin-collector --format=zip -o "$PWD/release/WorkTwin-Collector-1.1.7-source.zip"
python -c 'from zipfile import ZipFile; z=ZipFile("release/WorkTwin-Collector-1.1.7-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.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"'
cp dist/*.whl dist/*.tar.gz release/
- uses: actions/upload-artifact@v4
with:
Expand All @@ -66,22 +83,54 @@ jobs:
macos:
needs: python-test
strategy:
fail-fast: false
matrix:
runner: [macos-14, macos-15-intel]
runner: ${{ fromJSON((github.event_name == 'workflow_dispatch' && inputs.macos_architecture == 'arm64' && '["macos-15"]') || (github.event_name == 'workflow_dispatch' && inputs.macos_architecture == 'x86_64' && '["macos-15-intel"]') || '["macos-15","macos-15-intel"]') }}
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' }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: zsh desktop/build-macos.sh
- name: Mount the release DMG and verify its code seal, installed layout, and native startup
- name: Prepare temporary Developer ID signing keychain
if: env.WORKTWIN_REQUIRE_NOTARIZATION == '1'
env:
MACOS_CERTIFICATE_P12: ${{ secrets.MACOS_CERTIFICATE_P12 }}
MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
APPLE_NOTARY_KEY_P8: ${{ secrets.APPLE_NOTARY_KEY_P8 }}
APPLE_NOTARY_KEY_ID: ${{ secrets.APPLE_NOTARY_KEY_ID }}
APPLE_NOTARY_ISSUER_ID: ${{ secrets.APPLE_NOTARY_ISSUER_ID }}
run: python desktop/prepare-macos-signing.py
- name: Build, sign and notarize App and DMG
env:
APPLE_NOTARY_KEY_ID: ${{ secrets.APPLE_NOTARY_KEY_ID }}
APPLE_NOTARY_ISSUER_ID: ${{ secrets.APPLE_NOTARY_ISSUER_ID }}
run: zsh desktop/build-macos.sh
- name: Mount verified DMG and Gatekeeper-test the installed app
run: zsh desktop/verify-macos-dmg.sh
- uses: actions/upload-artifact@v4
with:
name: WorkTwin-${{ matrix.runner }}-unsigned
name: WorkTwin-${{ matrix.runner }}-${{ env.WORKTWIN_REQUIRE_NOTARIZATION == '1' && 'notarized' || 'unsigned' }}
path: worktwin-collector/release/*.dmg
if-no-files-found: error
- name: Preserve signed artifacts for resuming an incomplete Apple review
if: failure() && env.WORKTWIN_REQUIRE_NOTARIZATION == '1'
uses: actions/upload-artifact@v4
with:
name: WorkTwin-${{ matrix.runner }}-pending-notarization
path: |
worktwin-collector/dist/WorkTwin-notary.zip
worktwin-collector/dist/*.notary.json
worktwin-collector/release/*.dmg
worktwin-collector/release/*.notary.json
retention-days: 7
if-no-files-found: ignore
- name: Delete temporary developer signing credentials
if: always() && env.WORKTWIN_REQUIRE_NOTARIZATION == '1'
run: python desktop/cleanup-macos-signing.py
windows:
needs: python-test
runs-on: windows-2022
Expand All @@ -97,15 +146,15 @@ jobs:
- shell: pwsh
run: |
New-Item -ItemType Directory -Force release
Compress-Archive -Path dist/WorkTwin -DestinationPath release/WorkTwin-Collector-1.1.7-Windows-x64.zip
Compress-Archive -Path dist/WorkTwin -DestinationPath release/WorkTwin-Collector-1.2.0-Windows-x64.zip
- uses: actions/upload-artifact@v4
with:
name: WorkTwin-Windows-unsigned
path: worktwin-collector/release/*.zip
if-no-files-found: error
release:
needs: [python-test, macos, windows]
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
if: github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main' && inputs.signed_release && inputs.macos_architecture == 'all'
runs-on: ubuntu-latest
permissions:
contents: write
Expand All @@ -115,16 +164,22 @@ jobs:
with:
path: release-assets
merge-multiple: true
- name: Create checksums and publish the verified 1.1 release
- name: Create checksums and publish the trusted 1.2.0 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
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.1.7 >/dev/null 2>&1; then
gh release upload worktwin-v1.1.7 release-assets/* --clobber
else
gh release create worktwin-v1.1.7 --target "$GITHUB_SHA" --title "WorkTwin Collector 1.1.7 (verified project identity)" --notes-file worktwin-collector/RELEASE_NOTES.md release-assets/*
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'
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/*
6 changes: 6 additions & 0 deletions worktwin-collector/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,9 @@ enterprise.env
credential.key
credentials.json
credentials.tmp

# Release credentials must never be committed.
*.p12
*.pfx
*.p8
*.keychain-db
34 changes: 24 additions & 10 deletions worktwin-collector/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# WorkTwin Collector 1.1.7
# WorkTwin Collector 1.2.0(自动知识维护、项目识别、任务采集集成预览)

在后台采集本人授权的本地工作资料,持续维护连贯的个人知识库,目标是通过 MCP 供其他 AI 使用。产品边界与未完成能力见 [一期边界](docs/PHASE1.md):当前支持文件夹与 Codex/Claude Code 的公开双向会话;已补充编程工具的执行状态线索,原始工具结果和跨会话项目归属仍待完善;提供绑定数字分身授权的本地只读 MCP,完整日志单独授权。个人自行配置模型,企业使用统一分配的模型与 Token。
在后台采集本人授权的本地工作资料,持续维护连贯的个人知识库,目标是通过 MCP 供其他 AI 使用。产品边界与未完成能力见 [一期边界](docs/PHASE1.md):当前支持文件夹与 Codex/Claude Code 的公开双向会话;已补充编程工具的执行状态线索,原始工具结果仍待完善;工作单元级跨来源项目归属已进入 1.1.9 开发与验收;提供绑定数字分身授权的本地只读 MCP,完整日志单独授权。个人自行配置模型,企业使用统一分配的模型与 Token。

[已发布安装包与源码](https://github.com/KirenHu/AI-coding/releases) · [MCP 接入](docs/MCP.md) · [部署](docs/DEPLOY.md) · [验收](docs/ACCEPTANCE.md) · [竞品与源码审计](docs/COMPETITOR_AUDIT.md)

Expand All @@ -9,10 +9,10 @@
| 入口 | 用户操作 | 后台能力 |
|---|---|---|
| 信息采集 | 选择目录;分别授权采集、AI 整理、分身分享 | 文件监听、定时扫描、增量解析、任务队列 |
| 我的知识库 | 阅读 Markdown、搜索、编辑、确认更新、查看来源和历史、浏览双向链接、导出 Wiki | 当前模型提炼与同主题更新提案、空闲期知识养护 |
| 我的数字分身 | 创建分身、勾选知识、试问、启用分享、建立到期链接、撤销访问 | 只使用授权且有效的知识回答;企业服务器支持本人电脑离线后的查询 |
| 我的知识库 | 阅读 Markdown、搜索、纠正自动更新、查看证据和历史、浏览双向链接、导出 Wiki | 授权来源的自动提炼、补充和明确结论替代,保留来源与历史 |
| 我的数字分身 | 创建分身、按项目或来源授权一次(或逐条选择)、试问和分享 | 在授权范围内自动继承后续有效知识;本地 MCP 和远程发布遵循同一权限计算器 |

个人版支持 OpenAI Chat Completions 兼容服务;企业员工无需供应商 Key。新目录默认没有 AI 或分享授权。后台养护建议与冲突更新均由本人确认后生效,不自动覆盖正文。
个人版主模型支持 OpenAI Chat Completions;另可选 Jev SystemOne 或轻量 Chat Completions 判断模型。企业员工无需供应商 Key,专用判断模型由企业管理员统一配置。新目录默认没有 AI 或分享授权。新知识和有可靠顺序证据的更新会自动维护本地知识库;无法安全归属的资料保持会话隔离。跨来源冲突和人工编辑仍有更严格的覆盖保护。

## 安装与开始使用

Expand All @@ -37,11 +37,11 @@ python -m worktwin serve --open
个人版本地整理和问答不依赖企业服务。远程分享是可选功能,需要另行连接持续运行的分享服务;接收者问答使用服务端模型。

1. 在「信息采集」授权文件夹,或 Codex `~/.codex/sessions` / Claude Code `~/.claude/projects`;需要模型整理的来源单独打开 AI 权限。
2. 在「我的知识库」核对提炼结果、原文证据和更新建议。打开来源资料可确认其业务项目,选择「创建独立项目」或明确关联到已有已确认项目;同名文件夹和同名项目默认不会合并。用 `[[K123|标题]]` 链接已有知识;改名后链接仍按 ID 定位。可以查看版本与导出 Markdown Wiki。
3. 创建数字分身并逐条勾选已确认、来源有效且允许 AI 使用的知识;试问结果附带知识引用,不足时拒答。
4. 需要分享时,对涉及来源打开「允许分身分享」,确认知识后在分身中启用分享,再创建带有效期的访问链接。
2. 在「我的知识库」查看 AI 自动生效的知识、原文证据和版本。通常无需逐条确认;如果确需跨来源合并且系统尚不能确定关联,可在来源资料窗口的可选项里关联项目;同名项目默认不会仅凭名称合并。用 `[[K123|标题]]` 链接已有知识;改名后链接仍按 ID 定位。可以查看版本与导出 Markdown Wiki。
3. 创建数字分身,按项目或来源授权一次(也可以继续逐条指定知识)。之后新增、更新且有效的知识自动继承,撤销来源权限后自动失效。试问结果附带引用,不足时拒答。
4. 需要分享时,对涉及来源打开「允许分身分享」,确保分身的知识授权范围符合预期后启用分享,再创建带有效期的访问链接。

访问链接是持有者凭据:接收者名称仅是本人管理标签,不验证对方身份。链接可转发,最长 90 天,可单独撤销。服务端共享快照只包含已确认的知识标题/正文,不上传原始文件或完整会话;偏好条目不参与发布。同一知识在多个分身之间复用,读取范围仍分别授权。
访问链接是持有者凭据:接收者名称仅是本人管理标签,不验证对方身份。链接可转发,最长 90 天,可单独撤销。服务端共享快照只包含分身被明确授权且当前有效的知识标题/正文,不上传原始文件或完整会话;偏好条目不参与发布。同一知识在多个分身之间复用,读取范围仍分别授权。

本地编辑、归档、撤销来源和权限会触发同步,后台每 5 秒检查变化。企业服务断开时显示「尚未同步」,远程仍使用上次快照;恢复连接才会撤掉旧内容。紧急撤销应直接在企业服务器完成。退出客户端只停止本地采集,不停止已经发布的分身。

Expand All @@ -68,8 +68,22 @@ python -m build

自动验收使用合成资料和确定性测试模型,覆盖真实 HTTP、SQLite、浏览器与打包应用启动。真实付费模型效果、员工历史资料准确率、企业 SSO、系统长期休眠唤醒、签名和公证仍需要组织环境验证,1.1 不宣称已经完成这些验收。

[macOS 安装和 Gatekeeper 排查](docs/MACOS_INSTALL.md) · [架构](docs/ARCHITECTURE.md) · [一期边界](docs/PHASE1.md) · [后续工作](docs/ROADMAP.md) · [评测](docs/EVALUATION.md) · [开源组件](docs/OSS.md)
[判断模型与动态知识授权](docs/DECISION_MODEL.md) · [macOS 安装和 Gatekeeper 排查](docs/MACOS_INSTALL.md) · [架构](docs/ARCHITECTURE.md) · [一期边界](docs/PHASE1.md) · [后续工作](docs/ROADMAP.md) · [评测](docs/EVALUATION.md) · [开源组件](docs/OSS.md)

## 许可证

原创代码 MIT;`worktwin/rowboat_markdown.py` 的小范围 Python 移植遵循 Apache-2.0,原始许可与改动说明在 `third_party/rowboat/`,随分发包附带。其他竞品功能参考与实际代码复用分别记录于审计文档。


## 任务触发式浏览器采集(独立能力)

用户在「信息采集」中手动开启后,可安装并配对 Chrome/Edge MV3 扩展。只有已授权流程平台签发任务信号时,才观察该任务打开的首个目标文档,记录结构化 DOM 操作并生成精简、可追溯的自然语言摘要。导航即停止当前文档观察;统一状态接口标记任务完成时停止剩余会话。**不读取流程平台的任务上下文、不生成知识库条目、不加入数字分身**。具体接入协议见 [浏览器采集](docs/BROWSER_CAPTURE.md)。流程平台尚未提供实际域名,部署参数留空,真实联调未完成。

## 版本集成验收

当前集成分支汇总自动生效的知识、跨会话项目匹配、可选轻量判断模型、数字分身按授权策略继承后续知识及任务触发浏览器操作摘要。主干正式发布还需要完整 CI、实际资料项目误合并评估、签名/公证和 Finder 首次启动验收;PR 的 unsigned 安装包不是正式签名包。


### 正式发布与日常 CI 解耦

PR / main push 只执行功能验收和未公证包的构建,不自动触发 Apple 公证或 GitHub 正式 Release。完成 Apple 证书与实际验收后,需在 `main` 手动运行 `WorkTwin 1.2.0 acceptance and signed release`,选择 `macos_architecture=all` 并勾选 `signed_release`,才会执行双架构 Developer ID 签名、公证、Gatekeeper 校验和正式发布;任何未公证 DMG 不允许出现在正式发布资产中。
Loading
Loading