Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
331 commits
Select commit Hold shift + click to select a range
20d0137
fix(team): keep dashboard on workspace overview
TalexDreamSoul Apr 9, 2026
ee36e80
feat(meeting): add guest share backend
TalexDreamSoul Apr 9, 2026
df463fc
feat(meeting): add web meeting client
TalexDreamSoul Apr 9, 2026
ba11955
test(meeting): cover guest share integration
TalexDreamSoul Apr 9, 2026
a35427d
feat(logo): extract reusable icon logo component
TalexDreamSoul Apr 9, 2026
a8ba848
feat(app): sync favicon with active color mode
TalexDreamSoul Apr 9, 2026
9ec01d7
refactor(login): extract reusable login modules
TalexDreamSoul Apr 9, 2026
8f42b55
refactor(login): center the login card layout
TalexDreamSoul Apr 9, 2026
772f91a
refactor(types): align workspace view models
TalexDreamSoul Apr 9, 2026
09b1303
feat(editor): enhance collab rich text workflows
TalexDreamSoul Apr 9, 2026
fccce0a
refactor(workspace): polish sidebar interaction states
TalexDreamSoul Apr 9, 2026
cd20d3e
feat(meeting): sync screen share participant updates
TalexDreamSoul Apr 10, 2026
da1f66c
feat(workspace): wire metak command palette
TalexDreamSoul Apr 10, 2026
050ffac
fix(ci): resolve lint and catalog blockers
TalexDreamSoul Apr 10, 2026
f92d3c0
feat(resource): refine library search and embedded upload titles
TalexDreamSoul Apr 10, 2026
78257c3
refactor(workspace): improve resource tree expansion
TalexDreamSoul Apr 10, 2026
3c4be46
feat(meeting): expand screen sharing experience
TalexDreamSoul Apr 10, 2026
b860daf
fix(ci): sync pnpm lockfile for catalog deps
TalexDreamSoul Apr 10, 2026
1b11164
refactor: unify page system and split workspace panels
TalexDreamSoul Apr 10, 2026
558b646
Merge branch 'codex/page-system-refactor' into dev
TalexDreamSoul Apr 10, 2026
0ae6690
feat(workspace): add document assist and comment workflows
TalexDreamSoul Apr 10, 2026
805a9db
refactor(workspace): move account and ai controls into rails
TalexDreamSoul Apr 11, 2026
1919f6d
feat(auth): add oauth oidc integration support
TalexDreamSoul Apr 11, 2026
4f61c44
fix(admin-operations): aggregate preview queue metrics
TalexDreamSoul Apr 11, 2026
f3b4eb8
test(admin-operations): guard preview queue aggregation
TalexDreamSoul Apr 11, 2026
bcb9554
feat(release): add draft review workflow
TalexDreamSoul Apr 11, 2026
b07fd59
feat(admin): add release workspace pages
TalexDreamSoul Apr 11, 2026
8de6deb
feat(sync): refresh bitable mappings and tests
TalexDreamSoul Apr 11, 2026
73bddc1
fix(settings): retune user settings typography and density
TalexDreamSoul Apr 11, 2026
b657fae
test(ui): guard login shell and user-settings baseline
TalexDreamSoul Apr 11, 2026
3277fee
feat(workspace): support metak pinyin search
TalexDreamSoul Apr 11, 2026
879a700
style(workspace): refine metak panel density
TalexDreamSoul Apr 11, 2026
d9e5bd1
feat(workspace): add final review workbench mode
TalexDreamSoul Apr 11, 2026
2047bbd
fix(login): restore glass auth layout
TalexDreamSoul Apr 11, 2026
f196d15
feat(resource-tree): persist project resource tree and subtree lifecycle
TalexDreamSoul Apr 11, 2026
baf8ae0
fix(workspace-sidebar): compact tree layout and stabilize interactions
TalexDreamSoul Apr 11, 2026
ed450e8
fix(workspace-shell): repair invite flow and panel regressions
TalexDreamSoul Apr 11, 2026
15f04fb
fix(workspace-sidebar): make tree rows fill full width
TalexDreamSoul Apr 11, 2026
ddaf008
fix(workspace): restore display preference sliders
TalexDreamSoul Apr 11, 2026
eeb96cc
feat(workspace): add markdown comment filters
TalexDreamSoul Apr 11, 2026
3d2cad4
fix(runtime): stabilize auth probe and realtime listener
TalexDreamSoul Apr 11, 2026
9021652
fix(resources): align inserts and single-client queries
TalexDreamSoul Apr 11, 2026
fa1d2c1
feat(workspace): refresh project workspace surfaces
TalexDreamSoul Apr 11, 2026
4cccb96
fix(workspace): sync sidebar density variables
TalexDreamSoul Apr 11, 2026
65f1f30
feat(scene): add structured scene preview tooling
TalexDreamSoul Apr 11, 2026
53025e2
feat(platform): add auth session probe and meeting providers
TalexDreamSoul Apr 11, 2026
f69a37c
test(server): add project resource sql order coverage
TalexDreamSoul Apr 11, 2026
58a0af1
fix(resource-preview): bypass conversion for image uploads
TalexDreamSoul Apr 11, 2026
d9af325
feat(scene): add vueflow scene document foundation
TalexDreamSoul Apr 11, 2026
faff34a
feat(design): add vueflow design workspace panel
TalexDreamSoul Apr 11, 2026
63294e4
feat(diagram): add graph-aware editor canvas
TalexDreamSoul Apr 11, 2026
69fc31c
fix(workspace-upload): dock drawer as true left aside
TalexDreamSoul Apr 12, 2026
5b5028d
feat(sentry): add staging smoke validation
TalexDreamSoul Apr 12, 2026
968497b
fix(ci): unblock dev image publish on smoke success
TalexDreamSoul Apr 12, 2026
c404359
fix(feishu-sync): support policy sync item validation
TalexDreamSoul Apr 12, 2026
2729186
fix(admin): remove legacy resource sync fields
TalexDreamSoul Apr 13, 2026
39a2245
fix(sync): sanitize legacy resource metadata
TalexDreamSoul Apr 13, 2026
db024ec
test(sync): cover legacy resource metadata cleanup
TalexDreamSoul Apr 13, 2026
9bc1af5
feat(design): restore workspace design shell integration
TalexDreamSoul Apr 14, 2026
e7e958c
feat(design): restore canvas runtime and project wiring
TalexDreamSoul Apr 14, 2026
7f5b57a
test(design): restore design workspace coverage
TalexDreamSoul Apr 14, 2026
ce31200
refactor(core): split domain types and bootstrap api handlers
TalexDreamSoul Apr 14, 2026
280211b
feat(auth): refresh login bindings and notification center
TalexDreamSoul Apr 14, 2026
968411f
feat(meeting): add provider testing and web client runtime
TalexDreamSoul Apr 14, 2026
5352776
feat(workspace): streamline shell loading and tab interactions
TalexDreamSoul Apr 14, 2026
30f11ef
feat(feishu): add persona preset sync backend
TalexDreamSoul Apr 14, 2026
58ef506
feat(feishu-admin): refine persona sync mapping config
TalexDreamSoul Apr 14, 2026
5843a55
test(feishu): cover persona preset sync flows
TalexDreamSoul Apr 14, 2026
9ca9833
feat(workspace): migrate design canvas to resource tabs
TalexDreamSoul Apr 14, 2026
5a292be
feat(workspace): add batch editing for workspace resources
TalexDreamSoul Apr 14, 2026
9d74d8d
feat(workspace): embed mode switch into ai composer
TalexDreamSoul Apr 14, 2026
e5dd135
feat(workspace): persist chat session tabs and shell state
TalexDreamSoul Apr 15, 2026
d65009a
feat(design): refine scene document and device frames
TalexDreamSoul Apr 15, 2026
6fed02e
chore(pwa): raise precache asset size limit
TalexDreamSoul Apr 15, 2026
d336afe
test(ci): align source assertions with current layout
TalexDreamSoul Apr 15, 2026
9a2a71c
fix(deploy): silence chat session backfill validation
TalexDreamSoul Apr 15, 2026
1e7d012
feat(workspace): split left rail upload and notification panels
TalexDreamSoul Apr 15, 2026
727d359
feat(ai): scope workspace orchestration by mode
TalexDreamSoul Apr 15, 2026
7b5a539
feat(design): support deep selection for projected frames
TalexDreamSoul Apr 15, 2026
cc3da62
fix(db): guard team-first hard cutover and restore path
TalexDreamSoul Apr 15, 2026
15ced86
feat(ai): expose runtime readiness for auth flows
TalexDreamSoul Apr 15, 2026
876358d
feat(canvas): add admin canvas library and project import flows
TalexDreamSoul Apr 15, 2026
9503d7d
feat(workspace): expand design library and ai workspace flows
TalexDreamSoul Apr 15, 2026
d58eb44
fix(canvas): preserve template device mappings on import
TalexDreamSoul Apr 15, 2026
a1a4a8f
fix(db): ignore team-first bridge objects during restore
TalexDreamSoul Apr 15, 2026
828206d
fix(workspace): block context menu while shell overlay is active
TalexDreamSoul Apr 15, 2026
d3da45e
refactor(design): simplify device mockup frame semantics
TalexDreamSoul Apr 15, 2026
d1f3c03
feat(ai): unify model pool and workspace scenes
TalexDreamSoul Apr 15, 2026
f38f69d
feat(feishu): add bitable auto sync and persona sync
TalexDreamSoul Apr 15, 2026
5445f9c
fix(feishu): scope nested drawer select popups
TalexDreamSoul Apr 15, 2026
517acde
feat(ai): add contextual workspace assistant modes
TalexDreamSoul Apr 15, 2026
6575959
feat(design): add mockup catalog and screen editing
TalexDreamSoul Apr 15, 2026
aac415d
chore(workspace): refresh workbench entry copy
TalexDreamSoul Apr 15, 2026
bfabd73
feat(mockup): add admin model management
TalexDreamSoul Apr 15, 2026
0f2192c
fix(ai): refine document assist composer states
TalexDreamSoul Apr 15, 2026
a7f77d5
fix(ai): submit document assist extra instructions
TalexDreamSoul Apr 15, 2026
73d24b1
fix(ai): polish document assist composer layout
TalexDreamSoul Apr 15, 2026
73f4991
test(ai): cover document assist composer states
TalexDreamSoul Apr 15, 2026
1811c4a
test(workspace): refresh ai and workbench assertions
TalexDreamSoul Apr 15, 2026
2609b85
feat(mockup): support preview asset bindings
TalexDreamSoul Apr 15, 2026
bde4662
fix(feishu-sync): 修复编辑器草稿与来源下拉交互
TalexDreamSoul Apr 15, 2026
bb416f4
fix(admin-ai): normalize ai prompts table column config
TalexDreamSoul Apr 15, 2026
a735ffa
feat(mockup-admin): support preview assets and flexible variant slots
TalexDreamSoul Apr 15, 2026
7bb5b40
feat(workspace-ai): add AgentDoc draft flow and inline completion
TalexDreamSoul Apr 15, 2026
bccab4d
feat(feishu-sync): add synced data explorer and better sync hints
TalexDreamSoul Apr 15, 2026
06edca4
fix(workspace-ai): relax qwen inline completion partial mode
TalexDreamSoul Apr 15, 2026
6f5b1f4
fix(feishu-sync): replace stray normalizeText in bitable resolver
TalexDreamSoul Apr 15, 2026
3d4c190
fix(release): reuse pending drafts safely for feishu sync
TalexDreamSoul Apr 15, 2026
d44f13a
feat(defense): land workbench cockpit and realtime sidecar
TalexDreamSoul Apr 17, 2026
f966fe9
docs(defense): record workbench delivery status
TalexDreamSoul Apr 17, 2026
49b157f
feat(knowledge): add project knowledge indexing foundation
TalexDreamSoul Apr 17, 2026
af5055d
feat(workspace): surface knowledge status and citations
TalexDreamSoul Apr 17, 2026
8093e3c
feat(knowledge): add multimodal projections and observability
TalexDreamSoul Apr 17, 2026
151ec02
test(knowledge): add regression coverage and rollout docs
TalexDreamSoul Apr 17, 2026
9ed85c0
fix(meeting): stabilize livekit runtime session
TalexDreamSoul Apr 17, 2026
9894b6b
docs(meeting): capture admin rollout status
TalexDreamSoul Apr 17, 2026
1566719
feat(design): advance canvaskit host editing basics
TalexDreamSoul Apr 17, 2026
0b64aae
docs(test): record design host progress and cover grouping flows
TalexDreamSoul Apr 17, 2026
40d0544
feat(workflow): migrate flow tab to drawio
TalexDreamSoul Apr 18, 2026
c61705e
feat(agentproto): add workflow draft orchestration
TalexDreamSoul Apr 18, 2026
00c0f69
docs(workflow): record rollout progress
TalexDreamSoul Apr 18, 2026
17363b3
feat(design): refine workspace canvas and display interactions
TalexDreamSoul Apr 18, 2026
a4825a2
feat(defense): add meeting memory and project defense persistence
TalexDreamSoul Apr 18, 2026
10e39f7
feat(ai): improve workspace chat and inline completion runtime
TalexDreamSoul Apr 18, 2026
2543bdd
chore(dev): add runtime env and worktree helpers
TalexDreamSoul Apr 18, 2026
b7ddc2a
fix(design): align workspace types and flow regression coverage
TalexDreamSoul Apr 18, 2026
036bb86
feat(workspace): collapse ai citation references
TalexDreamSoul Apr 18, 2026
019db58
feat(workspace): refine sidebar system messages
TalexDreamSoul Apr 18, 2026
fc64bbe
feat(workspace): animate fresh chat messages
TalexDreamSoul Apr 18, 2026
057ec86
feat(workspace): rebuild settings as sidebar navbar
TalexDreamSoul Apr 18, 2026
f8f2fd7
feat(workspace): persist shell layout and diagnostics
TalexDreamSoul Apr 18, 2026
c3fa04f
feat(workspace): add loopy context and ai tooling
TalexDreamSoul Apr 18, 2026
275746c
feat(workspace): add outline quick actions
TalexDreamSoul Apr 18, 2026
b894baa
feat(editor): add inline search and outline hashes
TalexDreamSoul Apr 18, 2026
d939675
refactor(workspace): unify linked resource tree rows
TalexDreamSoul Apr 18, 2026
ca4048a
test(workspace): align sidebar tree row assertions
TalexDreamSoul Apr 18, 2026
5809b8b
fix(workspace): relax right sidebar session tabs
TalexDreamSoul Apr 18, 2026
6a9a488
fix(workspace): trim outline section header
TalexDreamSoul Apr 18, 2026
a81bee3
chore(repo): ignore local workspace artifacts
TalexDreamSoul Apr 18, 2026
3a77d81
feat(mockup): revamp mockup model and variant management
TalexDreamSoul Apr 19, 2026
549f070
feat(admin-ai): support multi-provider scene routing
TalexDreamSoul Apr 19, 2026
e103ae5
feat(knowledge): add multimodal project knowledge indexing
TalexDreamSoul Apr 19, 2026
23a641a
feat(knowledge): add loopy data analytics explorer
TalexDreamSoul Apr 20, 2026
65e4fe7
feat(workspace): relax contextual agent draft flow
TalexDreamSoul Apr 20, 2026
3477fe4
test(workspace): cover contextual assistant draft gating
TalexDreamSoul Apr 20, 2026
f7574c2
fix(workspace): stabilize final review workbench flow
TalexDreamSoul Apr 20, 2026
1ba4b20
docs(workspace): record final review flow boundaries
TalexDreamSoul Apr 20, 2026
a9f9fac
fix(feishu): close sync issues after successful reruns
TalexDreamSoul Apr 20, 2026
0eff6fa
fix(feishu): expose synced draft data and issue actions
TalexDreamSoul Apr 20, 2026
5da971e
fix(feishu): label synced release drafts
TalexDreamSoul Apr 20, 2026
fcf8c6c
test(feishu): cover sync issue closure and draft data
TalexDreamSoul Apr 20, 2026
58f6c38
chore(deps): align pnpm catalog dependencies
TalexDreamSoul Apr 20, 2026
4f88199
fix(types): restore typecheck baseline
TalexDreamSoul Apr 20, 2026
c57fb2a
refactor(workspace): extract project page helpers
TalexDreamSoul Apr 20, 2026
fc1fb8f
chore(lint): restore lint baseline
TalexDreamSoul Apr 20, 2026
286769b
feat(feishu): enhance bitable sync diagnostics
TalexDreamSoul Apr 20, 2026
8ffbb2a
feat(workspace): add device arrangement builder
TalexDreamSoul Apr 20, 2026
5cc77b2
fix(ci): sync pnpm lockfile catalogs
TalexDreamSoul Apr 20, 2026
25e6b15
feat(feishu): add sync run diagnostic samples
TalexDreamSoul Apr 20, 2026
9e110ca
fix(feishu): guard sync writeback status field
TalexDreamSoul Apr 20, 2026
e49926c
feat(admin): optimize bailian provider model config
TalexDreamSoul Apr 20, 2026
493120e
fix(admin): normalize bailian provider root url
TalexDreamSoul Apr 20, 2026
1c27606
fix(feishu): restore synced data navigation
TalexDreamSoul Apr 20, 2026
1abe5cd
fix(feishu): isolate writeback config drafts
TalexDreamSoul Apr 20, 2026
1be258d
fix(admin): route embedding scene to embedding models
TalexDreamSoul Apr 20, 2026
dd84f38
feat(admin): split embedding scene routing
TalexDreamSoul Apr 20, 2026
8d84d26
feat(feishu): add single-row sync simulation
TalexDreamSoul Apr 20, 2026
fbc42d0
fix(feishu): render synced data child routes
TalexDreamSoul Apr 21, 2026
21b11bb
feat(admin): split scene model pool and fallback order
TalexDreamSoul Apr 21, 2026
cafa598
feat(admin): require naming before creating mockup variants
TalexDreamSoul Apr 21, 2026
824bbd1
chore(repo): track workspace placeholder file
TalexDreamSoul Apr 21, 2026
1d7fb0d
feat(feishu): clarify synced data metrics and sample paging
TalexDreamSoul Apr 21, 2026
a79f128
fix(admin): reset mockup upload controls after upload
TalexDreamSoul Apr 21, 2026
567e4f6
feat: refine loopy data workspace and semantic space
TalexDreamSoul Apr 21, 2026
37666c0
fix(brand): switch logo animation to svg tracing
TalexDreamSoul Apr 21, 2026
6f28248
fix(brand): refine logo animation and shell loading
TalexDreamSoul Apr 21, 2026
1c0d567
feat: refine loopy data hero placeholder
TalexDreamSoul Apr 21, 2026
28a31f3
feat(feishu): add sync cleanup and dedupe guard
TalexDreamSoul Apr 21, 2026
81f86db
feat: add workspace export and canvas ai flows
TalexDreamSoul Apr 21, 2026
53408de
feat: add project export job tracking
TalexDreamSoul Apr 21, 2026
41b898c
fix: align design workspace contracts
TalexDreamSoul Apr 21, 2026
66e9690
fix: stabilize workspace knowledge contracts
TalexDreamSoul Apr 21, 2026
bcd847f
fix: align workspace stream and design contracts
TalexDreamSoul Apr 21, 2026
5ca905e
fix: defer workspace sync during resize
TalexDreamSoul Apr 21, 2026
3ab39be
feat(ai): persist sessions and govern embeddings
TalexDreamSoul Apr 21, 2026
045260c
feat(workspace): land data center overview contracts
TalexDreamSoul Apr 21, 2026
3467f10
fix: clean dev import warnings
TalexDreamSoul Apr 21, 2026
aafc5ac
feat(workspace): compact loopy data workbench
TalexDreamSoul Apr 21, 2026
1d69075
style(workspace): simplify defense and final review workbenches
TalexDreamSoul Apr 21, 2026
1ac1ede
feat(feishu): improve import flow guidance
TalexDreamSoul Apr 21, 2026
9a50f80
refactor: remove implicit ai defaults
TalexDreamSoul Apr 21, 2026
3d79dce
feat(intelligence): add workflow v1
TalexDreamSoul Apr 21, 2026
9c8a5e5
feat(feishu): polish import flow guidance
TalexDreamSoul Apr 22, 2026
4dcab97
feat(feishu): improve import run guidance
TalexDreamSoul Apr 22, 2026
6fab4a7
fix feishu latest run summary
TalexDreamSoul Apr 22, 2026
8ce2af8
feat(dashboard): compact sidebar layout and typography
TalexDreamSoul Apr 22, 2026
f9e9900
fix(feishu): stabilize bitable sync console flows
TalexDreamSoul Apr 22, 2026
73a51d6
refactor(workspace): share workbench visual tokens
TalexDreamSoul Apr 22, 2026
71d638e
feat(dashboard): polish loopy home chat ui
TalexDreamSoul Apr 22, 2026
5d712eb
feat(workspace): add canvas collab and meeting runtime flow
TalexDreamSoul Apr 22, 2026
3cd29cb
chore(tmp): add video frame captures
TalexDreamSoul Apr 22, 2026
d958027
fix(feishu): restore synced data ownership by sync source
TalexDreamSoul Apr 22, 2026
64a7c05
feat(workspace): add page review and team checkout
TalexDreamSoul Apr 23, 2026
a2e7cad
fix(feishu): refresh sync logs and expose duplicate metrics
TalexDreamSoul Apr 23, 2026
da5c8bf
feat(contests): refresh contest library page
TalexDreamSoul Apr 23, 2026
2558fea
feat(device-arrangement): add standalone workspace editor
TalexDreamSoul Apr 23, 2026
c469e7c
docs(competition-tech-pack): add technical pack
TalexDreamSoul Apr 23, 2026
a147991
style(contests): tighten library page layout
TalexDreamSoul Apr 23, 2026
b330a2a
fix(workspace): migrate legacy device arrangement on open
TalexDreamSoul Apr 23, 2026
c873f78
feat(admin): tighten admin console shell
TalexDreamSoul Apr 23, 2026
e8cb599
feat(admin): support route tab context actions
TalexDreamSoul Apr 23, 2026
1b615ec
docs(competition-tech-pack): refresh model-generated figure set
TalexDreamSoul Apr 23, 2026
fe9b0d8
docs(competition-tech-pack): add advanced ai architecture pack
TalexDreamSoul Apr 23, 2026
cfe8dd1
docs(competition-tech-pack): add presentation and application materials
TalexDreamSoul Apr 23, 2026
f52edff
feat(release): tighten contest release governance
TalexDreamSoul Apr 23, 2026
211a6a6
feat(admin): align contest workspace with release workflow
TalexDreamSoul Apr 23, 2026
2d9a2fe
fix(workspace): stabilize device arrangement open flow
TalexDreamSoul Apr 23, 2026
6756325
fix(auth): tune login card glass layer
TalexDreamSoul Apr 25, 2026
45b01e2
fix(admin): streamline release review workflow
TalexDreamSoul Apr 25, 2026
d2083dd
fix(admin): move review logs into detail drawer
TalexDreamSoul Apr 25, 2026
255b9fa
test(admin): cover review log drawer workflow
TalexDreamSoul Apr 25, 2026
e2e6c89
feat(feishu): sync track season metadata
TalexDreamSoul Apr 26, 2026
31c58ab
fix(release): derive contest publish metadata from tracks
TalexDreamSoul Apr 26, 2026
0b65e1d
fix loopy ai review fallback transparency
TalexDreamSoul Apr 26, 2026
dbde023
fix(ai): tighten review fallback and workflow types
TalexDreamSoul Apr 26, 2026
5784123
fix(review): filter hallucinated page findings
TalexDreamSoul Apr 26, 2026
a2c22de
fix(review): align retry error responses
TalexDreamSoul Apr 26, 2026
273dc06
fix(workflow): require dangerous action confirmations
TalexDreamSoul Apr 26, 2026
c39f78b
fix(workflow): enforce delete confirmations
TalexDreamSoul Apr 26, 2026
68c6f7d
fix(admin): correct release queue statistics
TalexDreamSoul Apr 26, 2026
b8df66d
fix(admin): route contest release actions by version
TalexDreamSoul Apr 26, 2026
f7fba8f
fix(billing): validate mock checkout cycle
TalexDreamSoul Apr 26, 2026
5667fe5
feat(billing): complete business team checkout flow
TalexDreamSoul Apr 26, 2026
6ed6845
feat(admin): add release queue review insights
TalexDreamSoul Apr 26, 2026
e616e4f
feat(admin): add contest metadata review drawer
TalexDreamSoul Apr 26, 2026
086298b
fix(ci): tolerate Jenkins crumb redirects
TalexDreamSoul Apr 26, 2026
481a5b5
fix(feishu): stabilize bitable sync pruning
TalexDreamSoul Apr 26, 2026
092a2dc
feat(ai): add knowledge retrieval planner
TalexDreamSoul Apr 26, 2026
887d21f
feat(workspace): surface knowledge retrieval paths
TalexDreamSoul Apr 26, 2026
84ce502
test(ai): cover knowledge retrieval planning
TalexDreamSoul Apr 26, 2026
1ff0163
feat(ai): add typed provider channel routing
TalexDreamSoul Apr 26, 2026
b572f4f
feat(admin): filter ai scenes by provider capability
TalexDreamSoul Apr 26, 2026
37dd1c7
fix(feishu): preserve sibling snapshots in release drafts
TalexDreamSoul Apr 26, 2026
7a14f35
test(feishu): cover release draft aggregation
TalexDreamSoul Apr 26, 2026
9f6ddf5
fix(ai): remove default vision model routing
TalexDreamSoul Apr 26, 2026
e6118c0
fix(ai): respect empty scene provider bindings
TalexDreamSoul Apr 26, 2026
41046be
fix(ai): expose provider capability routing
TalexDreamSoul Apr 26, 2026
27602db
fix(ai): filter scene provider choices
TalexDreamSoul Apr 26, 2026
09d8d8c
fix(ai): align provider model fetch route
TalexDreamSoul Apr 26, 2026
4196a7f
fix(admin): align feishu contest field contract
TalexDreamSoul Apr 27, 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
  •  
  •  
  •  
Empty file added .Destination}}{{end}}'
Empty file.
47 changes: 47 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
WINLOOP_PG_URL=postgresql://winloop:password@127.0.0.1:5432/winloop
WINLOOP_REDIS_URL=redis://:password@127.0.0.1:6379/0

# ===== 开发态地址契约(pnpm dev / pnpm dev:pwa 必填)=====
WINLOOP_DEV_HOST=127.0.0.1
WINLOOP_DEV_PORT=3510

WINLOOP_STORAGE_PROVIDER=local
WINLOOP_STORAGE_LOCAL_ROOT=./tmp/document-storage
WINLOOP_STORAGE_ENDPOINT=
Expand All @@ -27,5 +31,48 @@ WINLOOP_ONLYOFFICE_ENDPOINT=
WINLOOP_ONLYOFFICE_JWT_SECRET=
# 应用外网基地址(推荐,必须为可访问应用的绝对地址,不带 /api;例如 https://app.example.com)
WINLOOP_PUBLIC_BASE_URL=
# draw.io embed 宿主(留空默认 https://embed.diagrams.net;若使用内网或自托管 draw.io,请填写可访问的绝对地址)
WINLOOP_PUBLIC_DRAWIO_EMBED_BASE_URL=
# tldraw 4.x 生产 license key(仅生产 HTTPS 非 localhost 部署必配)
WINLOOP_TLDRAW_LICENSE_KEY=
# 项目资源临时访问地址有效期(秒)
WINLOOP_PROJECT_RESOURCE_ACCESS_URL_TTL_SECONDS=600

# ===== 答辩 Realtime(当前验收主链路:Qwen + audio_video)=====
WINLOOP_DEFENSE_REALTIME_QWEN_BASE_WS_URL=wss://dashscope.aliyuncs.com/api-ws/v1/inference
WINLOOP_DEFENSE_REALTIME_QWEN_API_KEY=
WINLOOP_DEFENSE_REALTIME_QWEN_WORKSPACE_ID=
WINLOOP_DEFENSE_REALTIME_QWEN_APP_ID=
WINLOOP_DEFENSE_REALTIME_QWEN_VOICE=
WINLOOP_DEFENSE_REALTIME_QWEN_FRAME_INTERVAL_MS=1000

# Coze 当前保留为备选链路,本轮默认不作为主验收路径
WINLOOP_DEFENSE_REALTIME_COZE_BASE_URL=https://api.coze.cn
WINLOOP_DEFENSE_REALTIME_COZE_BOT_ID=
WINLOOP_DEFENSE_REALTIME_COZE_CONNECTOR_ID=
WINLOOP_DEFENSE_REALTIME_COZE_VOICE_ID=
WINLOOP_DEFENSE_REALTIME_COZE_AUTH_MODE=pat
WINLOOP_DEFENSE_REALTIME_COZE_PAT_OR_OAUTH_SECRET=

# ===== 本地 ASR dev bridge(可选;推荐先接 Groq 免费试用)=====
MEETING_ASR_DEV_TRANSCRIBE_URL=https://api.groq.com/openai/v1/audio/transcriptions
MEETING_ASR_DEV_TRANSCRIBE_MODEL=whisper-large-v3-turbo
MEETING_ASR_DEV_TRANSCRIBE_MODEL_FALLBACKS=whisper-large-v3
MEETING_ASR_DEV_TRANSCRIBE_LANGUAGE=zh
MEETING_ASR_DEV_TRANSCRIBE_API_KEY=
MEETING_ASR_DEV_CALLBACK_URL=http://127.0.0.1:3510/api/internal/meetings/asr-events
MEETING_ASR_DEV_CALLBACK_SECRET=
MEETING_ASR_DEV_MIN_CHUNK_MS=4000

# ===== Sentry(可选;未配置时应用仍可运行,只是不启用上报)=====
WINLOOP_SENTRY_DSN=
# 仅支持 staging / production;本地开发可留空
WINLOOP_SENTRY_ENVIRONMENT=
WINLOOP_SENTRY_TRACES_SAMPLE_RATE=0.1
# 可选;默认复用 WINLOOP_BUILD_VERSION
WINLOOP_SENTRY_RELEASE=

# ===== Sentry 构建期参数(仅 CI/CD 构建并上传 source map 时需要)=====
SENTRY_AUTH_TOKEN=
WINLOOP_SENTRY_ORG=
WINLOOP_SENTRY_PROJECT=
57 changes: 52 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,8 @@ jobs:
- name: Project Visibility Guard
run: pnpm run test:project-visibility

build_and_smoke:
test_unit:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v5
Expand All @@ -79,8 +78,56 @@ jobs:
- name: Install
run: pnpm install --frozen-lockfile

- name: Build
run: pnpm run build
- name: Unit Tests
run: pnpm run test:unit

smoke:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v5
with:
node-version: lts/*
package-manager-cache: false

- name: Enable Corepack (pnpm)
run: |
corepack enable
corepack prepare pnpm@10.29.2 --activate
pnpm --version

- name: Install
run: pnpm install --frozen-lockfile

- name: Smoke
run: pnpm run ci:smoke
run: pnpm run test:smoke

e2e_smoke:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v5
with:
node-version: lts/*
package-manager-cache: false

- name: Enable Corepack (pnpm)
run: |
corepack enable
corepack prepare pnpm@10.29.2 --activate
pnpm --version

- name: Install
run: pnpm install --frozen-lockfile

- name: E2E Smoke
env:
WINLOOP_PG_URL: ${{ secrets.WINLOOP_PG_URL }}
run: |
if [ -z "$WINLOOP_PG_URL" ]; then
echo "WINLOOP_PG_URL 未配置,跳过 E2E smoke。"
exit 0
fi
pnpm run test:e2e
189 changes: 189 additions & 0 deletions .github/workflows/github-feishu-notify.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
name: GitHub Feishu Notify

on:
issues:
types:
- opened
- reopened
pull_request_target:
types:
- opened
- reopened
- ready_for_review

permissions:
contents: read

jobs:
notify-feishu:
name: Notify Feishu
runs-on: ubuntu-latest
steps:
- name: Check webhook configuration
id: config
env:
FEISHU_WEBHOOK_URL: ${{ secrets.FEISHU_GITHUB_WEBHOOK_URL }}
run: |
set -euo pipefail

if [ -n "${FEISHU_WEBHOOK_URL}" ]; then
echo "enabled=true" >> "${GITHUB_OUTPUT}"
else
echo "enabled=false" >> "${GITHUB_OUTPUT}"
echo "Skip Feishu notification because FEISHU_GITHUB_WEBHOOK_URL is not configured."
fi

- name: Send Feishu notification
if: steps.config.outputs.enabled == 'true'
env:
FEISHU_WEBHOOK_URL: ${{ secrets.FEISHU_GITHUB_WEBHOOK_URL }}
FEISHU_WEBHOOK_SECRET: ${{ secrets.FEISHU_GITHUB_WEBHOOK_SECRET }}
GITHUB_EVENT_NAME: ${{ github.event_name }}
GITHUB_EVENT_ACTION: ${{ github.event.action }}
GITHUB_REPOSITORY: ${{ github.repository }}
GITHUB_ACTOR: ${{ github.actor }}
GITHUB_SERVER_URL: ${{ github.server_url }}
GITHUB_RUN_ID: ${{ github.run_id }}
GITHUB_EVENT_PATH: ${{ github.event_path }}
run: |
set -euo pipefail

python3 <<'PY'
import base64
import hashlib
import hmac
import json
import os
import time
import urllib.request

def to_text(value) -> str:
return str(value or "").strip()

def shorten(value: str, limit: int = 180) -> str:
text = to_text(value)
if len(text) <= limit:
return text
return f"{text[: max(0, limit - 3)]}..."

def read_event_payload() -> dict:
path = to_text(os.environ.get("GITHUB_EVENT_PATH"))
with open(path, "r", encoding="utf-8") as handle:
return json.load(handle)

def build_issue_message(payload: dict) -> str:
issue = payload.get("issue") or {}
action = to_text(os.environ.get("GITHUB_EVENT_ACTION"))
number = issue.get("number") or payload.get("number") or "-"
title = to_text(issue.get("title")) or "-"
url = to_text(issue.get("html_url"))
labels = ", ".join(
to_text(item.get("name"))
for item in (issue.get("labels") or [])
if to_text(item.get("name"))
) or "-"
body_preview = shorten(issue.get("body") or "", 220) or "-"
actor = to_text(os.environ.get("GITHUB_ACTOR")) or "-"
repository = to_text(os.environ.get("GITHUB_REPOSITORY")) or "-"
action_label = "新建" if action == "opened" else "重新打开"
run_url = f"{to_text(os.environ.get('GITHUB_SERVER_URL'))}/{repository}/actions/runs/{to_text(os.environ.get('GITHUB_RUN_ID'))}"
return "\n".join([
"GitHub Issue 通知",
f"动作:{action_label}",
f"仓库:{repository}",
f"Issue:#{number} {title}",
f"发起人:{actor}",
f"标签:{labels}",
f"摘要:{body_preview}",
f"链接:{url}",
f"Workflow:{run_url}",
])

def build_pr_message(payload: dict) -> str:
pr = payload.get("pull_request") or {}
action = to_text(os.environ.get("GITHUB_EVENT_ACTION"))
number = pr.get("number") or payload.get("number") or "-"
title = to_text(pr.get("title")) or "-"
url = to_text(pr.get("html_url"))
actor = to_text(os.environ.get("GITHUB_ACTOR")) or "-"
repository = to_text(os.environ.get("GITHUB_REPOSITORY")) or "-"
base_ref = to_text(((pr.get("base") or {}).get("ref"))) or "-"
head_ref = to_text(((pr.get("head") or {}).get("ref"))) or "-"
is_draft = bool(pr.get("draft"))
labels = ", ".join(
to_text(item.get("name"))
for item in (pr.get("labels") or [])
if to_text(item.get("name"))
) or "-"
body_preview = shorten(pr.get("body") or "", 220) or "-"
action_label_map = {
"opened": "新建",
"reopened": "重新打开",
"ready_for_review": "转为可评审",
}
action_label = action_label_map.get(action, action or "触发")
draft_label = "是" if is_draft else "否"
run_url = f"{to_text(os.environ.get('GITHUB_SERVER_URL'))}/{repository}/actions/runs/{to_text(os.environ.get('GITHUB_RUN_ID'))}"
return "\n".join([
"GitHub PR 通知",
f"动作:{action_label}",
f"仓库:{repository}",
f"PR:#{number} {title}",
f"发起人:{actor}",
f"分支:{head_ref} -> {base_ref}",
f"Draft:{draft_label}",
f"标签:{labels}",
f"摘要:{body_preview}",
f"链接:{url}",
f"Workflow:{run_url}",
])

def build_message() -> str:
payload = read_event_payload()
event_name = to_text(os.environ.get("GITHUB_EVENT_NAME"))
if event_name == "issues":
return build_issue_message(payload)
if event_name == "pull_request_target":
return build_pr_message(payload)
raise SystemExit(f"Unsupported event: {event_name}")

def build_signature(secret: str) -> tuple[str, str]:
timestamp = str(int(time.time()))
string_to_sign = f"{timestamp}\n{secret}"
signature = base64.b64encode(
hmac.new(string_to_sign.encode("utf-8"), digestmod=hashlib.sha256).digest()
).decode("utf-8")
return timestamp, signature

webhook_url = to_text(os.environ.get("FEISHU_WEBHOOK_URL"))
webhook_secret = to_text(os.environ.get("FEISHU_WEBHOOK_SECRET"))
if not webhook_url:
raise SystemExit("Missing FEISHU_GITHUB_WEBHOOK_URL")

payload = {
"msg_type": "text",
"content": {
"text": build_message(),
},
}
if webhook_secret:
timestamp, sign = build_signature(webhook_secret)
payload["timestamp"] = timestamp
payload["sign"] = sign

request = urllib.request.Request(
webhook_url,
data=json.dumps(payload, ensure_ascii=False).encode("utf-8"),
headers={"Content-Type": "application/json; charset=utf-8"},
method="POST",
)
with urllib.request.urlopen(request, timeout=15) as response:
body = response.read().decode("utf-8", errors="replace")

result = json.loads(body) if body else {}
code = result.get("code", 0)
if code not in (0, "0", None):
raise SystemExit(f"Feishu webhook returned code={code}, msg={result.get('msg', '')}")

print("Feishu notification sent successfully.")
PY
Loading
Loading