Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
283 commits
Select commit Hold shift + click to select a range
5b24c27
chore: remove plugin adapter infrastructure coupling
ZongYue99 Aug 28, 2026
b664a38
test: verify plugin host end to end
ZongYue99 Aug 28, 2026
aeebebc
Merge pull request #316 from ZongYue99/zy_plugin
ZongYue99 Aug 28, 2026
aba7c43
fix: simplify plugin runtime guards and enforce immutable releases
ZongYue99 Aug 31, 2026
73de36b
feat: add plugin renderers and generic interaction cards
ZongYue99 Aug 31, 2026
9f28b34
feat: complete generic plugin interactions
ZongYue99 Aug 31, 2026
3c78adc
feat: register plugin commands and surfaces dynamically
ZongYue99 Aug 31, 2026
1485b64
chore: remove literature review prototype coupling
ZongYue99 Aug 31, 2026
3feee7d
feat: add plugin renderers and generic interaction cards
ZongYue99 Aug 31, 2026
78b041e
feat: extend MPP plugin host integration
endxxxx Sep 1, 2026
7713e0b
feat: complete plugin host vertical slice
endxxxx Sep 1, 2026
831bd3d
feat: add plugin model inference host service
endxxxx Sep 1, 2026
e5a9970
feat: guard stale plugin interactions
endxxxx Sep 1, 2026
51074b1
feat(plugin-ui): render per-file import eligibility
endxxxx Sep 3, 2026
1ec99bc
feat(plugin-network): allow academic provider hosts
endxxxx Sep 3, 2026
8612542
feat(memory): expose embedding inference API
endxxxx Sep 3, 2026
5a0991d
feat(plugins): broker embedding inference host service
endxxxx Sep 3, 2026
1795625
Merge remote-tracking branch 'upstream/main' into survey_master
endxxxx Sep 3, 2026
9be86c7
fix(plugin-model): harden host inference retries
endxxxx Sep 7, 2026
365fd8d
fix(plugin-ui): route custom review interactions
endxxxx Sep 7, 2026
686b8c5
test(review-plugin): add host and live-flow coverage
endxxxx Sep 7, 2026
3291882
test(review-plugin): cover agent and card E2E
endxxxx Sep 7, 2026
6be265d
test(review-plugin): add live Agent E2E mode
endxxxx Sep 7, 2026
8f95cda
fix(agent-tools): cap MCP tool names for model providers
endxxxx Sep 8, 2026
ad06893
feat(plugin-runtime): resolve trusted TeX Live dependency
endxxxx Sep 8, 2026
404f295
fix(plugin-model): back off transient inference retries
endxxxx Sep 8, 2026
5c52967
test(review-plugin): enforce real delivery quality gates
endxxxx Sep 8, 2026
6e9c995
feat(plugin-runtime): propagate capability cancellation
endxxxx Sep 8, 2026
521fade
test(review-plugin): cover recovery preflight and cancellation
endxxxx Sep 8, 2026
59ec0d1
Merge remote-tracking branch 'upstream/main' into survey_master
endxxxx Sep 8, 2026
4d9804a
fix(plugin-runtime): launch node plugins under Electron
endxxxx Sep 8, 2026
112a106
fix(dev): preserve configured agent model
endxxxx Sep 8, 2026
54a89c7
feat(plugin-ui): allow optional file input to be skipped
endxxxx Sep 8, 2026
8b3b212
fix(plugin-ui): retire completed capability cards
endxxxx Sep 8, 2026
33df8ca
feat(plugin-ui): preview hosted artifacts in app
endxxxx Sep 8, 2026
7f37cee
fix(plugins): scope reasoning limits and resolve unique tool aliases
endxxxx Sep 9, 2026
4460928
fix(plugins): keep interactive calls alive while awaiting user input
endxxxx Sep 9, 2026
96843eb
feat(commands): route plugin slash commands through their Agent skill
endxxxx Sep 9, 2026
c528a18
fix(sidebar): reveal selected tasks inside collapsed groups
endxxxx Sep 9, 2026
89919e7
fix(chat): stop highlighting tool errors after successful retries
endxxxx Sep 9, 2026
b3bec8c
feat(plugin-ui): bridge inline uploads and conversation feedback with…
endxxxx Sep 9, 2026
0752b1b
feat(inference): support request-scoped non-thinking Qwen generation
endxxxx Sep 9, 2026
cac7bf2
fix(inference): adapt non-thinking requests across models
endxxxx Sep 11, 2026
7bf20c6
fix(plugin-ui): compact artifacts and stabilize uploads
endxxxx Sep 11, 2026
e90c8ec
feat: bundle literature review plugin
endxxxx Sep 11, 2026
d86d12b
feat: add native agent question cards
endxxxx Sep 11, 2026
4641fd7
Merge remote-tracking branch 'upstream/main' into survey_master
endxxxx Sep 11, 2026
6050790
Merge pull request #407 from endxxxx/survey_master
syzsunshine219 Sep 14, 2026
d6cdc8d
feat: add live task plans and route card feedback
endxxxx Sep 14, 2026
e2f8820
chore: refresh bundled literature review plugin
endxxxx Sep 14, 2026
ef9ba3a
chore: bundle literature review plugin 0.5.19
endxxxx Sep 14, 2026
5e642c0
feat(plugin): gate plugins on account entitlements
hijzy Sep 14, 2026
286396a
merge: sync release/v1.1.5 into survey_master
endxxxx Sep 14, 2026
d056a25
Merge remote-tracking branch 'upstream/survey_master' into survey_master
endxxxx Sep 14, 2026
31c3580
Merge pull request #422 from endxxxx/survey_master
endxxxx Sep 14, 2026
d97918d
chore: bundle literature review plugin 0.5.20
endxxxx Sep 14, 2026
906b599
feat(plugin): add recording, pinned cards, and closed-source distribu…
hijzy Sep 15, 2026
7a1c234
fix(dev): 首次启动时容忍 config.yaml 尚未生成
hijzy Sep 15, 2026
dc8fa17
feat(plugin): 实时转写面板、常驻入口与首页场景卡
hijzy Sep 15, 2026
ccdfcd3
fix(plugin-ui): 常驻按钮改为常显,撤掉表格预览
hijzy Sep 15, 2026
36ee420
merge: 把 survey_master 上的 v1.1.5 并进法律插件这条线
hijzy Sep 15, 2026
05659d3
fix(plugin-host): 按聊天的预算给插件推理留余量
hijzy Sep 15, 2026
a29ae23
fix(plugin-ui): 修掉卡片的近黑边框,并对齐设计稿入口
hijzy Sep 15, 2026
98b393c
fix(plugin-host): 给推理模型留出预算,并把三种失败各自命名
hijzy Sep 15, 2026
a42c235
feat(desktop): add native workspace file preview
endxxxx Sep 15, 2026
c843f5e
fix(plugin-ui): 问卡支持一次问完一轮,别再把问题整份丢掉
hijzy Sep 15, 2026
1b191a7
Merge remote-tracking branch 'upstream/survey_master' into survey_master
endxxxx Sep 15, 2026
a1c9e31
fix(ci): hoist pdfjs optional dependencies in lockfile
endxxxx Sep 15, 2026
292d873
fix(ci): regenerate lockfile with npm 10
endxxxx Sep 16, 2026
e19bff1
Merge pull request #437 from endxxxx/survey_master
endxxxx Sep 16, 2026
a57037e
build: configure bundled plugin source
endxxxx Sep 16, 2026
def63b9
fix(desktop): split window drag regions
endxxxx Sep 16, 2026
6064163
Merge branch 'MemTensor:survey_master' into survey_master
endxxxx Sep 16, 2026
f32d556
Merge pull request #444 from endxxxx/survey_master
endxxxx Sep 16, 2026
bf667a4
fix(dev): 没有插件发布产物时也能从源码启动
hijzy Sep 16, 2026
c63136b
chore: allow bundled plugin academic providers
endxxxx Sep 16, 2026
662c37c
fix(desktop): append repeated file selections
endxxxx Sep 16, 2026
8e44e76
fix(plugin): honor conversation model selection
endxxxx Sep 16, 2026
6c4ab9e
Merge pull request #450 from endxxxx/survey_master
endxxxx Sep 16, 2026
b221a42
build: bundle literature review plugin 0.5.21
endxxxx Sep 16, 2026
c1aec05
feat(desktop): 插件可在标题栏常驻按钮,预览面板不再盖住聊天
hijzy Sep 16, 2026
2cbfe44
chore: bundle literature review plugin 0.5.25
endxxxx Sep 16, 2026
5cdaffa
Merge pull request #452 from endxxxx/survey_master
endxxxx Sep 16, 2026
64ff34f
fix: support plugin-free desktop distributions
endxxxx Sep 16, 2026
218b3e5
merge: sync upstream survey_master
endxxxx Sep 16, 2026
75e4e92
Merge pull request #454 from endxxxx/survey_master
endxxxx Sep 16, 2026
27ba991
fix(desktop): 常驻卡片可再次点击关闭,录音条移入右侧预览面板
hijzy Sep 16, 2026
c4ca68f
fix(desktop): 关掉卡片后常驻按钮立刻恢复可再点
hijzy Sep 16, 2026
466205c
fix(desktop): 问题卡片按设计重做,修掉近黑描边与塌陷的序号徽标
hijzy Sep 16, 2026
8e98aaf
fix(desktop): 拆分插件卡片的准备文件/交付物展示,终态后清理无交付物卡片
hijzy Sep 17, 2026
1d81860
feat(desktop): add native workspace artifact previews
endxxxx Sep 18, 2026
0291b38
feat(asr): 实时字幕改走 fun-asr-realtime 流式代理,不再依赖分段 HTTP
hijzy Sep 18, 2026
2225cb5
fix(asr): 流式代理转发地址补上 /api 前缀,对齐现有云端调用约定
hijzy Sep 18, 2026
fe660f9
fix(asr): 录音实时转写失败时不再静默吞掉错误
hijzy Sep 18, 2026
f70b5ee
fix(desktop): refresh the preview file tree and drop the redundant PD…
endxxxx Sep 18, 2026
ffede4b
merge: sync upstream/survey_master into local survey_master
endxxxx Sep 18, 2026
e44b22b
Merge pull request #481 from endxxxx/survey_master
endxxxx Sep 18, 2026
f018f65
fix(desktop): 渲染崩溃不再白屏,网关首连失败会自动重连,问卡必填/可选明示
hijzy Sep 19, 2026
a99e89e
fix: refine recording and plugin interaction UX
hijzy Sep 21, 2026
99e0041
fix: limit automatic task plan creation
endxxxx Sep 21, 2026
24e46ce
Merge pull request #513 from endxxxx/survey_master
endxxxx Sep 21, 2026
e14a274
fix(desktop): keep stopped recordings visible while transcription is …
hijzy Sep 22, 2026
a83a05d
fix(desktop): use SVG icons for chat file attachments
hijzy Sep 22, 2026
f74be7e
merge: bring origin/main into survey_master
endxxxx Oct 9, 2026
718e9ff
fix(desktop): separate the environment and file-list buttons
endxxxx Oct 10, 2026
20e53e2
merge: bring upstream/main into survey_master
endxxxx Oct 10, 2026
27dcf16
feat(plugins): plugin marketplace permission gating + official-model …
Sep 15, 2026
a58e746
fix(telegram): stop invalid bot tokens from crashing the agent gateway
Sep 17, 2026
b055de9
feat(tools): retain visited tab panels with per-tab search/filter and…
Oct 9, 2026
a6418a5
fix(test): match the Computer Use preflight call with optional MCP ar…
endxxxx Oct 10, 2026
cc0893b
Merge pull request #604 from endxxxx/survey_master
endxxxx Oct 10, 2026
4798331
fix(mac): skip off-target packages when staging the Memory runtime
endxxxx Oct 10, 2026
c34bd38
Merge pull request #605 from endxxxx/survey_master
endxxxx Oct 10, 2026
efae1f0
fix: finalize legal plugin flows and persist interview recordings
hijzy Oct 12, 2026
37ed848
merge: sync upstream survey_master and retain legal plugin fixes
hijzy Oct 12, 2026
92ba1a4
fix(desktop): preserve DOCX layouts and restore packaged PDF previews
endxxxx Oct 12, 2026
0c6afa9
Merge pull request #617 from endxxxx/survey_master
endxxxx Oct 12, 2026
b8b22c4
Merge pull request #615 from hijzy/survey_master
hijzy Oct 12, 2026
25cee92
feat(plugins): unify eligibility lifecycle and pin catalog versions
endxxxx Oct 13, 2026
4f29263
fix: align legal PoC cards and recording workflows
hijzy Oct 13, 2026
f71dcfe
Merge pull request #625 from hijzy/survey_master
hijzy Oct 13, 2026
492961b
fix(plugins): resolve origin-relative artifact URLs
endxxxx Oct 13, 2026
3aa0eaa
fix(plugins): refresh agent tools after install and eligibility changes
endxxxx Oct 13, 2026
bb19c28
fix(inference): identify request output budgets in truncation errors
endxxxx Oct 13, 2026
6be693d
fix(desktop): preserve Excel preview layout and styles
endxxxx Oct 14, 2026
89d8011
merge: integrate release/v1.2.3 preview fixes into survey_master
endxxxx Oct 14, 2026
69db334
test(desktop): cover merged Office previews and overview lists
endxxxx Oct 14, 2026
e0ad5aa
fix(desktop): restore and improve file card icons
endxxxx Oct 14, 2026
4861870
feat(desktop): add PPTX presentation previews
endxxxx Oct 14, 2026
ec74d01
fix(desktop): keep file list visible after closing last tab
endxxxx Oct 15, 2026
3c43fac
merge: sync upstream survey_master legal and recording updates
endxxxx Oct 15, 2026
e579f72
fix: harden legal diagnosis cards and recording handoff
hijzy Oct 15, 2026
aff3667
fix(desktop): correct homepage layout and duplicate slash menu
endxxxx Oct 15, 2026
ec32a8c
fix(ci): restore missing emnapi lockfile entries
endxxxx Oct 15, 2026
b2fe618
Merge pull request #648 from endxxxx/survey_master
endxxxx Oct 15, 2026
c59d887
fix: publish plugin outputs and refine recording UI
hijzy Oct 16, 2026
812d173
merge: sync upstream survey_master and retain legal workflow fixes
hijzy Oct 16, 2026
501f039
Merge pull request #650 from hijzy/survey_master
hijzy Oct 16, 2026
79044d7
fix: align panel and recording controls
hijzy Oct 16, 2026
ad88234
Merge pull request #652 from hijzy/survey_master
hijzy Oct 16, 2026
22645fb
fix: keep plugin card wheel interactions isolated
hijzy Oct 19, 2026
b061e14
Merge pull request #664 from hijzy/survey_master
hijzy Oct 19, 2026
558452c
fix: polish thread and recording controls
hijzy Oct 20, 2026
96aeb0a
Merge pull request #678 from hijzy/survey_master
hijzy Oct 20, 2026
3b4315b
Merge remote-tracking branch 'upstream/v1.2.5' into codex/pr-673-resolve
Oct 20, 2026
0a709ca
chore: remove merge-introduced trailing whitespace
Oct 20, 2026
519e0eb
Merge branch 'main' into plugin-marketplace
endxxxx Oct 20, 2026
d6f5ab4
fix: align survey master checks after merge
Oct 20, 2026
6225793
Merge pull request #673 from MemTensor/survey_master
syzsunshine219 Oct 20, 2026
9786af8
feat(questions): persist scope answers and route composer replies
endxxxx Oct 21, 2026
d5f78c1
feat(review-ui): align PRD cards and consolidate preparation summaries
endxxxx Oct 21, 2026
d3da805
fix(plugins): expose per-call host service request budgets
endxxxx Oct 21, 2026
5f7d162
fix(agent): continue unfinished plans after premature guard handoffs
endxxxx Oct 21, 2026
4a06001
fix(dev): rebuild and verify agent-local SQLite native dependency
endxxxx Oct 21, 2026
5369deb
build(plugins): pin literature review 0.5.39 and exclude duplicate ar…
endxxxx Oct 21, 2026
da06f37
merge: integrate plugin-marketplace into survey_master
endxxxx Oct 21, 2026
33a2923
feat: load private plugin skills without persisting instructions
endxxxx Oct 21, 2026
f32d09e
fix: remove bundled plugin release locks from desktop builds
endxxxx Oct 21, 2026
7f68da2
test: cover entitled literature plugin activation on Windows
endxxxx Oct 21, 2026
9cf57d6
Merge pull request #696 from endxxxx/survey_master
endxxxx Oct 21, 2026
876a322
Merge pull request #697 from MemTensor/survey_master
endxxxx Oct 21, 2026
404c0f8
feat(office): add standalone document plugin and managed rendering ru…
endxxxx Oct 22, 2026
04dfca6
fix(desktop): keep tools tabs outside native window drag region
endxxxx Oct 22, 2026
1debf34
fix(windows): restore trusted profile path for AppContainer launch
endxxxx Oct 22, 2026
baa6e2d
fix(windows): initialize explicit AppContainer child environment
endxxxx Oct 22, 2026
9091214
fix(plugins): handle closed response pipes without uncaught errors
endxxxx Oct 22, 2026
6b6ca70
fix(windows): load canonical plugin entrypoints inside AppContainer
endxxxx Oct 22, 2026
a077d61
fix(office): support sandboxed renderer IPC on macOS and Windows
endxxxx Oct 22, 2026
dbda118
fix(office): retain Windows bootstrap environment for code workers
endxxxx Oct 22, 2026
fe54caf
fix(office): keep macOS conversion independent of GUI spell services
endxxxx Oct 22, 2026
02afdb0
fix(ci): pin renderer downloads and make native sandbox checks portable
endxxxx Oct 22, 2026
31f7031
fix(windows): render through LibreOfficeKit inside AppContainer
endxxxx Oct 22, 2026
64001c0
chore(office): release sandbox compatibility fixes as 0.2.1
endxxxx Oct 22, 2026
3c76758
fix(windows): report LibreOfficeKit initialization exceptions
endxxxx Oct 22, 2026
c99cc3b
fix(windows): isolate renderer graphics on a private desktop
endxxxx Oct 22, 2026
51a5390
fix: stabilize entitled plugin lifecycle
hijzy Oct 22, 2026
a3b46d1
fix(windows): initialize portable renderer profiles and validate boot…
endxxxx Oct 22, 2026
d4483a3
test(office): verify Windows rendering inside AppContainer before pac…
endxxxx Oct 22, 2026
4c845d9
test(office): use the Host sandbox profile namespace in smoke checks
endxxxx Oct 22, 2026
6b95891
test(office): give isolated renderer smoke a fresh writable profile
endxxxx Oct 22, 2026
aed47b6
fix(windows): select software rendering before loading LibreOffice
endxxxx Oct 22, 2026
88c7ca6
fix(windows): keep bootstrap directories private and diagnose native …
endxxxx Oct 22, 2026
ed60ef8
fix(windows): initialize synchronous LibreOfficeKit conversion on the…
endxxxx Oct 22, 2026
ebde133
fix(windows): synchronize renderer settings with LibreOffice shared C…
endxxxx Oct 22, 2026
82ff43f
fix(windows): retain complete Kit startup with synchronized private c…
endxxxx Oct 22, 2026
b153c31
Merge pull request #708 from hijzy/main
hijzy Oct 22, 2026
0c97653
fix(office): use asynchronous file-backed transport for Windows rende…
endxxxx Oct 22, 2026
009623c
merge: integrate v1.2.5 plugin lifecycle fixes without losing Office …
endxxxx Oct 22, 2026
fbf2cb2
test(windows): surface headless renderer error dialogs in remote diag…
endxxxx Oct 22, 2026
675b6a8
test(windows): inspect renderer dialogs on their owning startup threads
endxxxx Oct 22, 2026
59d855c
test(office): validate cold renderer profiles before installing the H…
endxxxx Oct 22, 2026
7c95644
test(windows): match portable runtime grants in isolated renderer smoke
endxxxx Oct 22, 2026
b6187b2
fix(office): keep Windows renderer profiles and document paths short
endxxxx Oct 22, 2026
23d0118
test(office): compare canonical Windows delivery paths across DOS ali…
endxxxx Oct 22, 2026
c01cb4c
fix(plugins): preserve checkpoint progress and isolate model cancella…
endxxxx Oct 22, 2026
16ca165
test(plugins): add installed-runtime writing and chat regression drivers
endxxxx Oct 22, 2026
10e745a
test(office): isolate Windows PPTX renderer comparisons
endxxxx Oct 22, 2026
b8d9555
fix(ci): resolve diagnostic directory in step context
endxxxx Oct 22, 2026
49e28dd
test(office): probe Windows Kit wait chains and event-thread loading
endxxxx Oct 23, 2026
7883376
fix(office): load Windows documents on the Kit event thread
endxxxx Oct 23, 2026
225c7f8
test(office): add minimal Windows DOCX and XLSX regressions
endxxxx Oct 23, 2026
51ad96a
test(office): verify denied imports with existing cross-platform fixt…
endxxxx Oct 23, 2026
523632e
ci: remove temporary Windows Office regression workflow
endxxxx Oct 23, 2026
48f4f53
test(writing): verify installed runtime resumes an existing review task
endxxxx Oct 23, 2026
9bbcf0d
Revert "test(writing): verify installed runtime resumes an existing r…
endxxxx Oct 23, 2026
cda6424
Resolve main to v1.2.5 synchronization conflicts
Oct 23, 2026
92e3e5b
test(byok): await completed credential catalog publication
Oct 23, 2026
321c34b
fix(plugins): unify marketplace summaries with localized details
endxxxx Oct 23, 2026
5eb3d6b
fix: restore Full baseline for v1.2.5 sync
Oct 23, 2026
ee0047b
Merge pull request #727 from MemTensor/codex/sync-main-v125-pr719-202…
syzsunshine219 Oct 23, 2026
5b396c6
fix: isolate scan I/O timing and declare Node script imports
Oct 23, 2026
c03a073
Merge pull request #733 from MemTensor/codex/v125-full-baseline-follo…
syzsunshine219 Oct 23, 2026
f7001b1
fix(office): preserve calculation state for unchanged workbook copies
endxxxx Oct 24, 2026
6e09226
fix(office): invalidate stale formula caches before LibreOffice recal…
endxxxx Oct 24, 2026
53e2f2e
fix(plugins): expose marketplace updates and show installed version
endxxxx Oct 24, 2026
dcaea97
fix(plugins): separate installed and latest version labels
endxxxx Oct 24, 2026
6e96d4a
style(plugins): divide installed and latest versions with a vertical bar
endxxxx Oct 24, 2026
2a16fc8
feat: port non-plugin conversation and recording flow onto v1.2.5
Oct 26, 2026
e9de299
fix(marketplace): clarify literature review model and token requirements
endxxxx Oct 26, 2026
7a144a5
feat: preserve online plugin cards and expose recording controls in s…
Oct 26, 2026
cca5993
Merge non-plugin conversation flow into v1.2.5
dolnna Oct 26, 2026
db6512a
merge: sync v1.2.5 into Office branch and preserve both test entries
endxxxx Oct 26, 2026
2e77fa5
ci: retrigger Open Code Review for Office PR
endxxxx Oct 27, 2026
252544b
Merge pull request #710 from endxxxx/codex/fix-literature-writing-v1.2.5
endxxxx Oct 27, 2026
57013dc
merge: sync v1.2.5 and preserve localized marketplace descriptions
endxxxx Oct 27, 2026
10e8910
Merge pull request #731 from endxxxx/codex/fix-plugin-marketplace-des…
endxxxx Oct 27, 2026
0937baa
Merge v1.2.5 and address literature review guidance feedback
endxxxx Oct 27, 2026
1cf7eb6
Merge pull request #736 from endxxxx/codex/fix-plugin-marketplace-upd…
endxxxx Oct 27, 2026
939284f
Merge latest v1.2.5 after marketplace description and update changes
endxxxx Oct 27, 2026
cb705e5
Merge pull request #751 from endxxxx/codex/literature-review-model-gu…
endxxxx Oct 27, 2026
388717f
fix(office): preserve files from every delivery in plugin list
endxxxx Oct 27, 2026
209220a
Merge pull request #702 from endxxxx/feat/office-plugin-v1.2.5
endxxxx Oct 27, 2026
f293f88
feat: merge verified 1.2.4 conversation flow into v1.2.5
Oct 27, 2026
2d39852
fix: preserve Office results without duplicate cards and align narrow…
Oct 27, 2026
6b340e7
Merge pull request #757 from dolnna/codex/v125-verified-migration
hijzy Oct 27, 2026
cf213b3
fix: align diagnostic recording and file delivery UI
Oct 27, 2026
2e986ac
Merge pull request #761 from dolnna/codex/v125-verified-migration
hijzy Oct 27, 2026
bdcd860
feat(agent): expose whole-task activity for plugin updates
endxxxx Oct 27, 2026
9aaad0e
feat(plugins): require manual updates after Agent tasks finish
endxxxx Oct 27, 2026
ad4698b
feat(desktop): show manual plugin update badges and progress
endxxxx Oct 27, 2026
48db473
test(agent): remove duplicate cloud-skill metadata expectation
endxxxx Oct 27, 2026
26c687a
Merge pull request #763 from endxxxx/codex/manual-plugin-updates-v1.2.5
endxxxx Oct 27, 2026
6f08241
fix(plugins): hide revoked private plugins and remove plugin docs
endxxxx Oct 27, 2026
30540df
Merge pull request #764 from endxxxx/codex/hide-revoked-plugins-v1.2.5
endxxxx Oct 27, 2026
d26db37
fix(desktop): restore thinking feedback and align legal shortcuts
Oct 27, 2026
503fb98
Merge pull request #765 from dolnna/codex/v125-verified-migration
dolnna Oct 28, 2026
be6ca22
fix(desktop): refine pinned legal shortcut shape
Oct 28, 2026
01eb8e5
fix(desktop): restore home starters and smooth task loading
Oct 28, 2026
239581a
fix(desktop): pause task plans after interrupted turns
Oct 28, 2026
43b163e
fix(desktop): compact pinned legal shortcuts
Oct 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
9 changes: 9 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,12 @@ MEMMY_GA4_MEASUREMENT_ID=
# Legal agreement page base URLs
MEMMY_LEGAL_CN_BASE_URL=https://memmy.cn
MEMMY_LEGAL_INTL_BASE_URL=https://memmy.bot

# Exact hosts available to sandboxed command plugins. Keep this aligned with
# the first-party literature-review plugin's declared academic providers.
MEMMY_COMMAND_PLUGIN_NETWORK_ALLOWLIST=export.arxiv.org,arxiv.org,eutils.ncbi.nlm.nih.gov,pmc.ncbi.nlm.nih.gov,api.openalex.org,api.crossref.org

# Trusted MPP registry. Defaults to the Cloud service, which serves
# entitlement-gated releases; set this only to point at another registry.
# HTTPS is required except for a loopback development registry.
MEMMY_PLUGIN_REGISTRY_URL=
97 changes: 97 additions & 0 deletions .github/workflows/office-plugin.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
name: Office plugin

on:
pull_request:
paths:
- ".github/workflows/office-plugin.yml"
- "plugins/office/**"
- "App/memmy-agent/src/skills/docx/**"
- "App/memmy-agent/src/skills/pdf/**"
- "App/memmy-agent/src/skills/pptx/**"
- "App/memmy-agent/src/skills/xlsx/**"
- "App/backend/src/adapters/outbound/plugin-runtime/**"
- "App/backend/src/adapters/inbound/local-api/routes/plugin-mcp.ts"
- "App/backend/src/tests/office-plugin-e2e.test.ts"
- "scripts/test-office-plugin-e2e.mjs"
- "App/shell/desktop/electron-builder*.yml"
workflow_dispatch:

permissions:
contents: read

jobs:
integration:
strategy:
fail-fast: false
matrix:
os: [macos-26, windows-2025]
runs-on: ${{ matrix.os }}
timeout-minutes: 40
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: actions/setup-node@v4
with:
node-version: 24
- name: Provision release-build inputs on macOS
if: runner.os == 'macOS'
run: |
node plugins/office/scripts/provision-macos.mjs
brew install poppler
- name: Provision release-build inputs on Windows
if: runner.os == 'Windows'
shell: pwsh
run: |
choco install libreoffice-fresh --version=26.2.6 -y --no-progress
if ($LASTEXITCODE -ne 0) { throw 'LibreOffice installation failed' }
$archive = Join-Path $env:RUNNER_TEMP 'poppler.zip'
Invoke-WebRequest 'https://github.com/oschwartz10612/poppler-windows/releases/download/v26.09.0-0/Release-26.09.0-0.zip' -OutFile $archive
if ((Get-FileHash $archive -Algorithm SHA256).Hash.ToLowerInvariant() -ne '7a6f256a0ddf7536182246a5733331bf4677cbcc34f4663774947ad34556c8d0') {
# The exact upstream digest is pinned; never continue with an unchecked download.
throw 'Poppler archive integrity check failed'
}
$unpacked = Join-Path $env:RUNNER_TEMP 'poppler'
Expand-Archive $archive $unpacked
$root = Get-ChildItem $unpacked -Directory | Where-Object { Test-Path (Join-Path $_.FullName 'Library/bin/pdfinfo.exe') } | Select-Object -First 1
if (!$root) { throw 'Poppler portable layout not found' }
"OFFICE_BUILD_POPPLER=$($root.FullName)" >> $env:GITHUB_ENV
- name: Install plugin build dependencies
run: npm ci --prefix plugins/office
- name: Prepare and smoke-test portable renderer
run: node plugins/office/scripts/prepare-runtime.mjs "$RUNNER_TEMP/office-runtime-tree"
- name: Install build dependencies
run: |
npm ci
npm install --prefix App/memmy-agent --ignore-scripts --no-audit --no-fund
npm run build -w @memmy/local-api-contracts
npm run build -w @memmy/knowledge
npm run build -w @memmy/agent-source-core
npm run build -w @memmy/migrations
- name: Build portable runtime archive
run: |
TARGET=$(node -p 'process.platform + "-" + process.arch')
node plugins/office/scripts/package-runtime.mjs --root "$RUNNER_TEMP/office-runtime-tree" --destination plugins/office/release --target "$TARGET" --version "ci-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}" --tools "$RUNNER_TEMP/office-runtime-tree/runtime-tools.json" --set-default
- name: Verify runtime and permission boundaries
run: |
npm --prefix plugins/office run build
npm exec -- tsc -p App/backend/tsconfig.json --noEmit
if [ "$RUNNER_OS" = macOS ]; then npm --prefix plugins/office test; fi
- name: Cold install and run four-format end-to-end validation
env:
OFFICE_E2E_MANAGED_RUNTIME: "1"
MEMMY_PLUGIN_SANDBOX_TRACE: "1"
OFFICE_E2E_QA_DIR: ${{ runner.temp }}/office-qa
OFFICE_E2E_REPORT: ${{ runner.temp }}/office-e2e.json
run: npm run test:office-plugin:e2e
- uses: actions/upload-artifact@v4
if: always()
with:
name: office-package-and-validation-${{ matrix.os }}
path: |
plugins/office/release/
${{ runner.temp }}/office-qa/
${{ runner.temp }}/office-e2e.json
63 changes: 62 additions & 1 deletion .github/workflows/windows-computer-history-validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ on:
paths:
- ".github/workflows/windows-computer-history-validation.yml"
- "App/native-computer-history/**"
- "App/native-computer-use/**"
- "App/memmy-agent/src/tools/computer-history/**"
- "App/memmy-agent/tests/tools/computer-history/**"
- "App/memmy-agent/scripts/copy-build-assets.mjs"
Expand All @@ -24,12 +25,15 @@ jobs:
validate:
runs-on: windows-2025
timeout-minutes: 30
env:
EXPECTED_SOURCE_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
defaults:
run:
shell: pwsh
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
persist-credentials: false
- uses: actions/setup-node@v4
with:
Expand All @@ -39,7 +43,9 @@ jobs:
- uses: actions/setup-go@v5
with:
go-version: "1.22.12"
cache-dependency-path: App/native-computer-history/apps/OpenComputerHistoryWindows/go.mod
cache-dependency-path: |
App/native-computer-history/apps/OpenComputerHistoryWindows/go.mod
App/native-computer-use/apps/OpenComputerUseWindows/go.mod
- name: Require Windows 11
run: |
$ErrorActionPreference = 'Stop'
Expand All @@ -51,6 +57,7 @@ jobs:
- name: Install standalone agent dependencies
run: npm ci --prefix App/memmy-agent
- name: Validate native protocol and lifecycle without desktop access
id: native_history_tests
run: |
$ErrorActionPreference = 'Stop'
Push-Location App/native-computer-history/apps/OpenComputerHistoryWindows
Expand All @@ -62,6 +69,15 @@ jobs:
go vet -unsafeptr=false ./...
if ($LASTEXITCODE -ne 0) { throw 'Native recorder vet failed' }
} finally { Pop-Location }
- name: Validate native Computer Use Go module
id: native_computer_use_tests
run: |
$ErrorActionPreference = 'Stop'
Push-Location App/native-computer-use/apps/OpenComputerUseWindows
try {
go test ./...
if ($LASTEXITCODE -ne 0) { throw 'Native Computer Use tests failed' }
} finally { Pop-Location }
- name: Build agent and native History recorder from source
run: npm --prefix App/memmy-agent run build
- name: Validate packaged app icons with Windows PowerShell 5.1
Expand Down Expand Up @@ -155,10 +171,55 @@ jobs:
node node_modules/vitest/vitest.mjs run
App/shell/desktop/tests/packaged-runtime-boundary.test.ts
-t "requires the native Windows 11 History recorder"
- name: Emit exact-source Windows provider receipt
id: windows_provider_receipt
if: ${{ success() && steps.native_history_tests.outcome == 'success' && steps.native_computer_use_tests.outcome == 'success' && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }}
run: |
$ErrorActionPreference = 'Stop'
if ($env:RUNNER_OS -ne 'Windows') { throw 'Windows provider receipt requires a Windows runner' }
$head = (git rev-parse HEAD).Trim()
if ($LASTEXITCODE -ne 0 -or $head -ne $env:EXPECTED_SOURCE_SHA) {
throw "Executed checkout $head does not match expected source $env:EXPECTED_SOURCE_SHA"
}
git diff --quiet
if ($LASTEXITCODE -ne 0) { throw 'Tracked source changed during validation' }
git diff --cached --quiet
if ($LASTEXITCODE -ne 0) { throw 'Index changed during validation' }
$receipt = [ordered]@{
schemaVersion = 1
provider = 'windows'
status = 'passed'
headSha = $head
repository = $env:GITHUB_REPOSITORY
workflowRef = $env:GITHUB_WORKFLOW_REF
workflowSha = $env:GITHUB_WORKFLOW_SHA
runId = $env:GITHUB_RUN_ID
runAttempt = [int]$env:GITHUB_RUN_ATTEMPT
runnerOS = $env:RUNNER_OS
runnerArch = $env:RUNNER_ARCH
windowsBuild = [Environment]::OSVersion.Version.Build
generatedAt = [DateTime]::UtcNow.ToString('o')
nativeModules = @(
'App/native-computer-history/apps/OpenComputerHistoryWindows'
'App/native-computer-use/apps/OpenComputerUseWindows'
)
liveCaptureValidated = $false
signedInstallerValidated = $false
}
$receipt | ConvertTo-Json -Depth 4 | Set-Content -LiteralPath windows-provider-receipt.json -Encoding utf8NoBOM
- name: Upload exact-source Windows provider receipt
if: ${{ success() && steps.windows_provider_receipt.outcome == 'success' }}
uses: actions/upload-artifact@v4
with:
name: windows-provider-receipt-${{ env.EXPECTED_SOURCE_SHA }}-${{ github.run_attempt }}
path: windows-provider-receipt.json
if-no-files-found: error
retention-days: 14
- name: Record validation scope
if: ${{ always() }}
run: |
@'
Validates source-built Windows History recorder identity, PE architecture, exact embedded worker source, pure recorder state/lifecycle self-tests, UTF-8 app catalog output, runtime asset copy, and packaging rules. This does not start live recording or prove real UI Automation/hook behavior.
Both native Windows Go modules are tested. The provider receipt is limited to the checks in this job; it does not prove live capture or signed-installer acceptance.
A signed NSIS installer and a representative real-app capture matrix still require installation testing on a Windows 11 machine.
'@ | Add-Content -Path $env:GITHUB_STEP_SUMMARY
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ memmy-memory-*.tgz
.DS_Store
App/memmy-agent/package-lock.json
sessions/
artifacts/literature-review-*.json
.*
!.github/
!.github/workflows/
Expand All @@ -28,4 +29,8 @@ sessions/
!App/memmy-agent/src/tools/computer-history/win/.gitkeep
App/backend/src/adapters/outbound/skill-writer/workspace-bridge/memmy-workspace-bridge.mjs
Memory/src/agent-source/integration/workspace-bridge/memmy-workspace-bridge.mjs

# Office rendering executables and libraries are provisioned during packaging.
App/memmy-agent/extra-dependencies/office-rendering/*/bin/
App/memmy-agent/extra-dependencies/office-rendering/*/native/
/Mac软件打包/
89 changes: 85 additions & 4 deletions App/backend/local-api-contracts/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/** Memmy local API contract. */
import { z } from "zod";
import { ModelThinkingConfigSchema } from "./model-thinking-levels.js";
import { PluginCapabilityEventPayloadSchema } from "./plugin.js";
import { normalizeOutputLanguage } from "./output-language.js";

export { normalizeOutputLanguage } from "./output-language.js";
Expand All @@ -15,6 +16,7 @@ export * from "./memory-l3-world-model.js";
export * from "./endpoints.js";
export * from "./cloud-service.js";
export * from "./desktop-runtime-manifest.js";
export * from "./plugin.js";
export * from "./computer-use-surface.js";
export * from "./browser-profile-control.js";
export * from "./embedded-browser-control.js";
Expand Down Expand Up @@ -1180,23 +1182,84 @@ export const ModelConfigViewSchema = z.object({
export type ModelConfigView = z.infer<typeof ModelConfigViewSchema>;

/** Schema for asr transcription input. */
/**
* Largest audio payload a single transcription may carry, in decoded bytes.
*
* The upstream file-transcription API caps one inline audio item at 20 MiB of
* base64, which leaves roughly this much actual audio. An hours-long interview
* therefore has to be recorded at a bitrate that fits, because splitting it
* restarts speaker numbering and destroys the diarization.
*/
export const ASR_MAX_AUDIO_BYTES = 15 * 1024 * 1024;

/** Base64 inflates by 4/3; the route needs headroom for that plus the JSON envelope. */
export const ASR_MAX_REQUEST_BYTES = Math.ceil(ASR_MAX_AUDIO_BYTES * 4 / 3) + 64 * 1024;

export const AsrTranscriptionInputSchema = z.object({
audioBase64: z.string().min(1),
audioBase64: z.string().min(1).max(Math.ceil(ASR_MAX_AUDIO_BYTES * 4 / 3)),
mimeType: z.string().min(1),
durationMs: z.number().int().nonnegative().optional()
durationMs: z.number().int().nonnegative().optional(),
/** Requests speaker separation. Honoured only by upstream models that support it. */
diarization: z.boolean().optional()
});
export type AsrTranscriptionInput = z.infer<typeof AsrTranscriptionInputSchema>;

/**
* One diarized utterance.
*
* `speakerId` is scoped to a single transcription: the same index in two
* transcriptions does not denote the same person.
*/
export const AsrTranscriptSegmentSchema = z.object({
text: z.string(),
speakerId: z.number().int().nonnegative().optional(),
startMs: z.number().int().nonnegative().optional(),
endMs: z.number().int().nonnegative().optional()
});
export type AsrTranscriptSegment = z.infer<typeof AsrTranscriptSegmentSchema>;

/** Schema for asr transcription response. */
export const AsrTranscriptionResponseSchema = z.object({
text: z.string(),
modelId: z.string().trim().min(1),
provider: CatalogProviderIdSchema,
source: z.enum(["account", "byok"]),
transcribedAt: z.string().datetime()
transcribedAt: z.string().datetime(),
/** Present only when diarization was requested and the upstream model returned it. */
segments: z.array(AsrTranscriptSegmentSchema).optional()
});
export type AsrTranscriptionResponse = z.infer<typeof AsrTranscriptionResponseSchema>;

/**
* Events on the live ASR stream (`/api/asr/stream`).
*
* The renderer pushes raw 16 kHz mono PCM as binary frames and receives these
* JSON text frames back. `partial` is a provisional reading of the sentence
* being spoken; a later frame with the same `sentenceId` replaces it, and
* `sentence` is the final text for that id. Speaker attribution is never
* present here: the realtime model does not separate speakers, so labels come
* only from the diarized pass over the finished recording.
*/
export const AsrStreamEventSchema = z.discriminatedUnion("type", [
z.object({
type: z.enum(["partial", "sentence"]),
sentenceId: z.number().int().nonnegative(),
text: z.string(),
beginMs: z.number().int().nonnegative(),
endMs: z.number().int().nonnegative().optional()
}),
z.object({ type: z.literal("finished") }),
z.object({ type: z.literal("error"), message: z.string() })
]);
export type AsrStreamEvent = z.infer<typeof AsrStreamEventSchema>;

/** Control frames the renderer sends on the live ASR stream. */
export const AsrStreamControlSchema = z.discriminatedUnion("type", [
z.object({ type: z.literal("start"), sampleRate: z.number().int().positive().optional() }),
z.object({ type: z.literal("finish") })
]);
export type AsrStreamControl = z.infer<typeof AsrStreamControlSchema>;

export const AccountChannelSchema = z.enum(["email", "phone"]);
export type AccountChannel = z.infer<typeof AccountChannelSchema>;

Expand Down Expand Up @@ -1674,11 +1737,29 @@ export const ScanCompletedSseEventSchema = z.object({
})
});

export const PluginCapabilitySseEventSchema = z.object({
id: z.string(),
type: z.literal("plugin.capability_event"),
timestamp: z.string().datetime(),
payload: PluginCapabilityEventPayloadSchema
});

export const PluginCapabilitySnapshotSseEventSchema = z.object({
id: z.string(),
type: z.literal("plugin.capability_snapshot"),
timestamp: z.string().datetime(),
payload: z.object({
calls: z.array(PluginCapabilityEventPayloadSchema.pick({ pluginId: true, capabilityId: true, callId: true, conversationId: true }))
})
});

export const SseEventSchema = z.discriminatedUnion("type", [
ConnectedSseEventSchema,
HeartbeatSseEventSchema,
ScanProgressSseEventSchema,
ScanCompletedSseEventSchema
ScanCompletedSseEventSchema,
PluginCapabilitySseEventSchema,
PluginCapabilitySnapshotSseEventSchema
]);
export type SseEvent = z.infer<typeof SseEventSchema>;

Expand Down
Loading
Loading