Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
435 commits
Select commit Hold shift + click to select a range
02868a6
test: add unit tests for benchmark runner
Jun 19, 2026
f2ea338
Merge pull request #1074 from jaylfc/exec/tsk-pinj7u
jaylfc Jun 19, 2026
32805fa
Add unit tests for AgentGrantsStore
Jun 19, 2026
07bd43f
tests: add unit tests for AuthRequestsStore
Jun 19, 2026
c59d41d
Merge pull request #1075 from jaylfc/exec/tsk-tmn6vr
jaylfc Jun 19, 2026
2fd7313
Merge pull request #1076 from jaylfc/exec/tsk-ewwu5l
jaylfc Jun 19, 2026
21e262e
tests: add unit tests for ClusterPairingStore
Jun 19, 2026
71b7352
Merge pull request #1077 from jaylfc/exec/tsk-ncrzi2
jaylfc Jun 19, 2026
6d42225
Merge pull request #1078 from jaylfc/exec/tsk-qamghw
jaylfc Jun 19, 2026
160b818
fix(taosctl): shared_folders get filters the list (no single-folder r…
Jun 19, 2026
38c3054
tests: clean up unused imports and dead monkeypatch in test_gaming_de…
Jun 19, 2026
1e24b4d
feat(pwa): universal standalone-PWA shell for opted-in apps
Jun 19, 2026
9a952d5
fix: make shibaclaw adapter tests genuinely exercise retry paths
Jun 19, 2026
a6a1aa0
test: make test_list_pending_ordered_by_announced_at deterministic
Jun 19, 2026
823b17b
Merge pull request #1079 from jaylfc/fix/taosctl-shared-folders-get
jaylfc Jun 19, 2026
496890a
Merge pull request #1080 from jaylfc/exec/tsk-jjjl2t
jaylfc Jun 19, 2026
6ed5b5c
Merge pull request #1081 from jaylfc/feat/pwa-shell
jaylfc Jun 19, 2026
c468ccb
Merge pull request #1083 from jaylfc/exec/tsk-jmduel
jaylfc Jun 19, 2026
4907430
Merge pull request #1082 from jaylfc/exec/tsk-f65bnm
jaylfc Jun 19, 2026
525abd1
Add unit tests for resource_manager
Jun 19, 2026
07c83e5
fix(#107): memoize standalone lazy + add mobile Install button
Jun 19, 2026
26229c2
feat(taosctl): add browsing_history command group
Jun 19, 2026
09eba1b
Remove dead monkeypatch in test_start_returns_entry_with_defaults
Jun 19, 2026
29a62f2
test: make test_list_pending_returns_only_pending_ordered_by_created_…
Jun 19, 2026
ae5d3cf
test(shibaclaw): mock retry backoff so tests do not sleep ~90s
Jun 19, 2026
d690868
Merge pull request #1085 from jaylfc/fix/pwa-lazy-and-retry-sleep
jaylfc Jun 19, 2026
c4f6ed0
Merge pull request #1084 from jaylfc/exec/tsk-43xvdt
jaylfc Jun 19, 2026
19ee935
Merge pull request #1086 from jaylfc/exec/tsk-gvtj7q
jaylfc Jun 19, 2026
43db67d
Merge pull request #1087 from jaylfc/exec/tsk-wxecxs
jaylfc Jun 19, 2026
1066d8f
Merge pull request #1088 from jaylfc/fix/shibaclaw-retry-sleep
jaylfc Jun 19, 2026
843661f
Merge pull request #1089 from jaylfc/exec/tsk-7tdwog
jaylfc Jun 19, 2026
598538b
fix: send explicit --limit even when it equals the default
Jun 19, 2026
325c6a2
Merge pull request #1090 from jaylfc/exec/tsk-jeyncg
jaylfc Jun 19, 2026
fe4d41a
make a brittle mock robust in tests/test_auth_requests_store
Jun 19, 2026
6c91a7b
Merge pull request #1091 from jaylfc/exec/tsk-fbcggo
jaylfc Jun 19, 2026
fe3d92f
docs(status): checkpoint -- taosctl fan-out complete, #107 PWA shell …
Jun 19, 2026
58a12ca
feat(feedback): add in-OS Feedback app with bug/feature submission
jaylfc Jun 19, 2026
d5e3fa4
Add route tests for catalog endpoints
Jun 19, 2026
bc41b9a
Add route tests for guides.py
Jun 19, 2026
4d3c413
fix(#107): serve /app.html so the standalone PWA shell loads
Jun 19, 2026
2878616
Merge pull request #1092 from jaylfc/exec/tsk-egxlgz
jaylfc Jun 19, 2026
ebf5b27
Merge pull request #1093 from jaylfc/feat/feedback-app
jaylfc Jun 19, 2026
7fe20c5
Merge pull request #1094 from jaylfc/exec/tsk-o6rkal
jaylfc Jun 19, 2026
7345f23
Merge pull request #1095 from jaylfc/fix/serve-app-html
jaylfc Jun 19, 2026
4e968d7
Add route tests for user_personas
Jun 19, 2026
5edad21
docs(status): checkpoint -- feedback app + /app.html fix live, route …
jaylfc Jun 19, 2026
495719d
Merge pull request #1096 from jaylfc/exec/tsk-kyr32s
jaylfc Jun 19, 2026
342bda6
fix(#107): Install button opens a dismissable install-helper panel
jaylfc Jun 19, 2026
6055c51
fix(#107): serve /app.html + /chat-pwa with no-cache headers
jaylfc Jun 19, 2026
1fb267f
Merge pull request #1097 from jaylfc/fix/install-helper-v2
jaylfc Jun 19, 2026
d0b615e
Merge pull request #1098 from jaylfc/fix/pwa-html-no-cache
jaylfc Jun 19, 2026
a8728b2
feat(launcher): name the userspace section 'My Apps'
jaylfc Jun 19, 2026
e4b1714
Add route tests for chat_files.py
jaylfc Jun 19, 2026
9a592ab
perf(update): skip npm install when dependencies are unchanged
jaylfc Jun 19, 2026
9f309ae
fix(install-panel): opaque background + working Copy on HTTP origins
jaylfc Jun 19, 2026
51af1c5
Add route tests for admin_prompts
jaylfc Jun 19, 2026
6a5a3e3
Merge pull request #1099 from jaylfc/fix/launcher-my-apps
jaylfc Jun 19, 2026
d549317
Merge pull request #1100 from jaylfc/exec/tsk-kmqulp
jaylfc Jun 19, 2026
6f0d4a0
Merge pull request #1101 from jaylfc/perf/skip-npm-install-when-deps-…
jaylfc Jun 19, 2026
4532e38
fix(install-panel): use isIOS() for the copy-fallback selection (iPadOS)
jaylfc Jun 19, 2026
8437092
Merge pull request #1103 from jaylfc/exec/tsk-q3eawf
jaylfc Jun 19, 2026
b68b52e
add route tests for tinyagentos/routes/knowledge_graph
jaylfc Jun 19, 2026
e57180b
Merge pull request #1102 from jaylfc/fix/install-panel-opaque-and-copy
jaylfc Jun 19, 2026
589db68
Merge pull request #1104 from jaylfc/exec/tsk-ogarxs
jaylfc Jun 19, 2026
8740075
feat(settings): Account section (taOSgo P1, core side)
jaylfc Jun 19, 2026
d6d8fdf
feat(shell): off-network screen offering taOSgo (taOSgo P5)
jaylfc Jun 19, 2026
e48ac8f
fix(settings-account): validate /me payload + guard setState after un…
jaylfc Jun 19, 2026
2badb32
Merge pull request #1105 from jaylfc/feat/settings-account-section
jaylfc Jun 19, 2026
04e15bc
docs(readme): lead with data sovereignty (headline + 'Your data stays…
jaylfc Jun 19, 2026
a30c559
Merge pull request #1106 from jaylfc/docs/data-sovereignty-positioning
jaylfc Jun 19, 2026
bca0774
fix(pwa): iOS Add to Home Screen banner + sturdier copy fallback
jaylfc Jun 19, 2026
8385645
Add route tests for events endpoint
jaylfc Jun 19, 2026
6d7108b
feat(windows): multi-window primitive (openWindow forceNew)
jaylfc Jun 19, 2026
1fcdcc4
Merge pull request #1107 from jaylfc/fix/ios-install-banner-and-copy
jaylfc Jun 19, 2026
4ec26c3
docs(status): taOSgo initiative + website agent + session merges + mu…
jaylfc Jun 19, 2026
7d6bfac
feat(taosgo): host /api/account proxy to taos.my (P1 connector)
jaylfc Jun 19, 2026
83684d8
Merge pull request #1108 from jaylfc/exec/tsk-5cbbhp
jaylfc Jun 19, 2026
d188011
Merge pull request #1109 from jaylfc/feat/multi-window-foundation
jaylfc Jun 19, 2026
ac076ea
Merge pull request #1110 from jaylfc/feat/account-proxy
jaylfc Jun 19, 2026
bc02ad6
Add route tests for jobs endpoint
jaylfc Jun 19, 2026
02923ec
refactor(pwa): extract shared isIOS/isStandalone platform util
jaylfc Jun 19, 2026
04ba9cc
Add route tests for browsing_history
jaylfc Jun 19, 2026
9e0c858
Merge pull request #1111 from jaylfc/exec/tsk-mhepvw
jaylfc Jun 19, 2026
58d7b6e
Merge pull request #1112 from jaylfc/refactor/platform-detect-util
jaylfc Jun 19, 2026
bf1c488
Add route tests for apps.py endpoints
jaylfc Jun 19, 2026
a947e5c
fix(pwa): use 100dvh in standalone shells to remove bottom dead space
jaylfc Jun 19, 2026
dc8fa78
Add route tests for shortcuts endpoints
jaylfc Jun 19, 2026
e993c27
Merge pull request #1113 from jaylfc/exec/tsk-qex73e
jaylfc Jun 19, 2026
d1afd4d
fix(taosgo): relay upstream body verbatim + rescope Set-Cookie (accou…
jaylfc Jun 19, 2026
941b2c4
Merge pull request #1114 from jaylfc/exec/tsk-gzzxf4
jaylfc Jun 19, 2026
5a2a55f
Add route tests for canvas endpoints
jaylfc Jun 19, 2026
25b7d36
Merge pull request #1115 from jaylfc/fix/pwa-standalone-dvh
jaylfc Jun 19, 2026
a7254a8
Merge pull request #1117 from jaylfc/fix/account-proxy-cookie-passthr…
jaylfc Jun 19, 2026
75da62f
docs(status): weekly wind-down handoff -- board filled, taOSgo P1 + P…
jaylfc Jun 19, 2026
a85f511
Add route tests for project_canvas
jaylfc Jun 19, 2026
9fdc801
Merge pull request #1118 from jaylfc/exec/tsk-c75bxv
jaylfc Jun 19, 2026
852274c
Merge pull request #1119 from jaylfc/exec/tsk-s2vglm
jaylfc Jun 19, 2026
ce352de
Add route tests for userspace_apps
jaylfc Jun 19, 2026
2b1cacb
test: add vitest tests for src/lib/slug.ts
jaylfc Jun 19, 2026
28f8735
add desktop/src/lib/slug
jaylfc Jun 19, 2026
87c6f45
test: add vitest coverage for src/lib/csrf.ts
jaylfc Jun 19, 2026
1dc59a6
add desktop/src/lib/csrf
jaylfc Jun 19, 2026
7d46b32
Merge pull request #1120 from jaylfc/exec/tsk-nudlbr
jaylfc Jun 19, 2026
4730e3d
test: add vitest tests for cn utility function
jaylfc Jun 19, 2026
757bd03
add desktop/src/lib/utils
jaylfc Jun 19, 2026
b6af572
Merge pull request #1121 from jaylfc/exec/tsk-mbbuly
jaylfc Jun 19, 2026
c8cd68b
test: add vitest tests for app-event-bus
jaylfc Jun 19, 2026
073196c
test: add Vitest tests for src/lib/platform.ts
jaylfc Jun 19, 2026
e966614
Add route tests for user_memory
jaylfc Jun 19, 2026
1acc529
Merge pull request #1123 from jaylfc/exec/tsk-bj3oku
jaylfc Jun 19, 2026
2ecfe9a
Merge pull request #1124 from jaylfc/exec/tsk-vwdvay
jaylfc Jun 19, 2026
ded6d53
Merge pull request #1125 from jaylfc/exec/tsk-ludts2
jaylfc Jun 19, 2026
9a151e3
test: add Vitest tests for useIsMobile hook
jaylfc Jun 19, 2026
f7dbd38
Merge pull request #1126 from jaylfc/exec/tsk-ekvnwe
jaylfc Jun 19, 2026
c3097af
test: add Vitest test for CodeBlock component
jaylfc Jun 19, 2026
7aaaf63
add a Vitest test next to desktop/src/components/CodeBlock
jaylfc Jun 19, 2026
ae2006b
test: add Vitest tests for NotificationToast
jaylfc Jun 20, 2026
27a11c1
add a Vitest test next to desktop/src/components/NotificationToast
jaylfc Jun 20, 2026
937bae0
Merge pull request #1127 from jaylfc/exec/tsk-riykin
jaylfc Jun 20, 2026
9835c72
Merge pull request #1128 from jaylfc/exec/tsk-q2dn7f
jaylfc Jun 20, 2026
bf44873
Merge pull request #1130 from jaylfc/exec/tsk-jnvqz3
jaylfc Jun 20, 2026
2fe6782
fix(account-proxy): honor X-Forwarded-Proto and relay redirect Location
jaylfc Jun 20, 2026
8fee7bd
chore(git): untrack stray root node_modules and ignore it everywhere
jaylfc Jun 20, 2026
6021bbe
chore: drop accidentally-tracked node_modules
jaylfc Jun 20, 2026
76dbd19
test(shortcuts): isolate no-worker test from global manager state
jaylfc Jun 20, 2026
9949963
feat(desktop): multi-window Projects (dock New Window + per-window pr…
jaylfc Jun 20, 2026
8800cc5
Merge pull request #1133 from jaylfc/fix/account-proxy-forwarded-proto
jaylfc Jun 20, 2026
ecaa396
test(project-canvas): fix DB isolation so tests don't touch the real DB
jaylfc Jun 20, 2026
375113b
Merge pull request #1134 from jaylfc/chore/untrack-root-node-modules
jaylfc Jun 20, 2026
f680f0e
Merge pull request #1122 from jaylfc/exec/tsk-p4hqig
jaylfc Jun 20, 2026
8d55f33
Merge pull request #1116 from jaylfc/exec/tsk-p7xkoo
jaylfc Jun 20, 2026
52f123a
docs(status): weekly-reset session -- account-proxy + node_modules + …
jaylfc Jun 20, 2026
e572627
fix(account-proxy): trust-gate X-Forwarded-Proto + harden header relay
jaylfc Jun 20, 2026
a2f8277
test: add Vitest test for TaosAgentCard
jaylfc Jun 20, 2026
0380d21
add a Vitest test next to desktop/src/components/TaosAgentCard
jaylfc Jun 20, 2026
e217cd5
Add Vitest test for ScreenshotFlash component
jaylfc Jun 20, 2026
84a2ed4
test: add Vitest test for WallpaperTextOverlay
jaylfc Jun 20, 2026
faaa53a
test: add Vitest test for DockIcon component
jaylfc Jun 20, 2026
e9af387
Merge pull request #1139 from jaylfc/fix/canvas-test-db-isolation
jaylfc Jun 20, 2026
e4f1f06
Merge pull request #1140 from jaylfc/fix/account-proxy-forwarded-prot…
jaylfc Jun 20, 2026
3f23df3
Merge pull request #1138 from jaylfc/feat/multi-window-projects
jaylfc Jun 20, 2026
e8f1294
Merge pull request #1141 from jaylfc/exec/tsk-ytmwdv
jaylfc Jun 20, 2026
32eefcb
test: add Vitest test for SafetyFloor component
jaylfc Jun 20, 2026
6031c99
test(dock): verify New Window in context menu for singleton:false apps
jaylfc Jun 20, 2026
077025b
Merge pull request #1142 from jaylfc/exec/tsk-klfgt3
jaylfc Jun 20, 2026
4dd1c15
Add route tests for the themes API
jaylfc Jun 20, 2026
1264786
Merge pull request #1143 from jaylfc/exec/tsk-7bwnmx
jaylfc Jun 20, 2026
79f8391
Merge pull request #1144 from jaylfc/exec/tsk-lcvg2g
jaylfc Jun 20, 2026
e79b82d
Add route tests for feedback API (POST 201, GET list, GET by id, 404,…
jaylfc Jun 20, 2026
48f8920
test: add route tests for PWA manifest endpoint
jaylfc Jun 20, 2026
6ddbea7
Merge pull request #1145 from jaylfc/exec/tsk-7e2l2z
jaylfc Jun 20, 2026
2e69000
Merge pull request #1146 from jaylfc/exec/tsk-6ax5dk
jaylfc Jun 20, 2026
553ea93
Add route tests for knowledge API read endpoints
jaylfc Jun 20, 2026
0c3666a
Merge pull request #1147 from jaylfc/exec/tsk-g24rmt
jaylfc Jun 20, 2026
3a80818
Add test for GET /api/system/restart/status idle state
jaylfc Jun 20, 2026
12e5b23
chore(git): remove stray root node project + ignore it
jaylfc Jun 20, 2026
12b52c3
Merge pull request #1148 from jaylfc/exec/tsk-hvdol5
jaylfc Jun 20, 2026
ddd709d
Merge pull request #1149 from jaylfc/exec/tsk-trcuvu
jaylfc Jun 20, 2026
34aecac
Add route tests for memory-management read endpoints
jaylfc Jun 20, 2026
1002dbb
Add route tests for a2a bus API read endpoints
jaylfc Jun 20, 2026
745435c
Merge pull request #1150 from jaylfc/exec/tsk-ftrom5
jaylfc Jun 20, 2026
8cebf30
Merge pull request #1151 from jaylfc/exec/tsk-iq43ow
jaylfc Jun 20, 2026
eecd657
tests: add route tests for GET /api/memory/model endpoint
jaylfc Jun 20, 2026
93126cc
Merge pull request #1152 from jaylfc/chore/remove-root-node-cruft
jaylfc Jun 20, 2026
6cd5c44
Merge pull request #1153 from jaylfc/exec/tsk-ev44ey
jaylfc Jun 20, 2026
0b1caa8
Add route tests for GET /api/cluster/remotes
jaylfc Jun 20, 2026
443922d
Add route tests for agent auth-requests read endpoints
jaylfc Jun 20, 2026
8c59c65
Merge pull request #1154 from jaylfc/exec/tsk-f2sqkl
jaylfc Jun 20, 2026
346f473
Add route tests for browser sessions read endpoints
jaylfc Jun 20, 2026
d4f17b6
Merge pull request #1155 from jaylfc/exec/tsk-4ltt4g
jaylfc Jun 20, 2026
dfdb761
Merge pull request #1156 from jaylfc/exec/tsk-im776b
jaylfc Jun 20, 2026
c192f0e
Merge pull request #1157 from jaylfc/exec/tsk-2c5prn
jaylfc Jun 20, 2026
209f483
Merge pull request #1158 from jaylfc/exec/tsk-qzlfoi
jaylfc Jun 20, 2026
63ae2bc
Add route tests for GET /api/agents/archived
jaylfc Jun 20, 2026
e9971c5
Add pytest tests for agent_debugger GET endpoints
jaylfc Jun 20, 2026
e2ef9bd
Add route tests for skill_exec GET endpoints
jaylfc Jun 20, 2026
b8045d2
Merge pull request #1159 from jaylfc/exec/tsk-hiw55s
jaylfc Jun 20, 2026
472101d
Add pytest tests for the READ (GET) endpoints of tinyagentos/routes/se
jaylfc Jun 20, 2026
c302f2e
Add vitest test for resolveAgentEmoji
jaylfc Jun 20, 2026
a8c8ef6
Merge pull request #1160 from jaylfc/exec/tsk-lqegrw
jaylfc Jun 20, 2026
63fc31f
Merge pull request #1161 from jaylfc/exec/tsk-xsssup
jaylfc Jun 20, 2026
9a08fef
Merge pull request #1162 from jaylfc/exec/tsk-slbhdq
jaylfc Jun 20, 2026
644c005
Merge pull request #1163 from jaylfc/exec/tsk-mncgtw
jaylfc Jun 20, 2026
d19e999
Add colocated vitest test for src/lib/memory-api.ts
jaylfc Jun 20, 2026
c93712c
Add colocated vitest test for src/lib/projects.ts
jaylfc Jun 20, 2026
03e25d0
Add colocated vitest test for src/lib/models.ts
jaylfc Jun 20, 2026
dfda397
test: add colocated vitest test for framework-api.ts
jaylfc Jun 20, 2026
b983d1f
Merge pull request #1164 from jaylfc/exec/tsk-eg4bme
jaylfc Jun 20, 2026
1f3fe6b
Merge pull request #1165 from jaylfc/exec/tsk-qubye6
jaylfc Jun 20, 2026
f67896a
Merge pull request #1167 from jaylfc/exec/tsk-4kqgow
jaylfc Jun 20, 2026
3f6e36d
Merge pull request #1166 from jaylfc/exec/tsk-2o7apx
jaylfc Jun 20, 2026
ffa8aa3
Add colocated vitest test for chat-messages-api.ts
jaylfc Jun 20, 2026
950c34d
Add colocated vitest test for channel-admin-api.ts
jaylfc Jun 20, 2026
aeefec1
Add colocated vitest test for chat-attachments-api
jaylfc Jun 20, 2026
d5e2017
test: add colocated vitest test for personas-api.ts
jaylfc Jun 20, 2026
446ac13
Add colocated vitest test for src/lib/knowledge.ts
jaylfc Jun 20, 2026
924fb57
Merge pull request #1168 from jaylfc/exec/tsk-lir2sw
jaylfc Jun 20, 2026
4ba3e8c
Merge pull request #1169 from jaylfc/exec/tsk-4cbpa4
jaylfc Jun 20, 2026
5881155
Merge pull request #1170 from jaylfc/exec/tsk-ylagkn
jaylfc Jun 20, 2026
f7f3013
test: add colocated vitest test for taos-agent-api
jaylfc Jun 20, 2026
17df1c2
Add colocated vitest test for userspace-apps.ts
jaylfc Jun 20, 2026
e719e7c
Merge pull request #1171 from jaylfc/exec/tsk-ruxybb
jaylfc Jun 20, 2026
c1ec399
Add colocated vitest test for hw-detect.ts
jaylfc Jun 20, 2026
6a6e1d9
Merge pull request #1172 from jaylfc/exec/tsk-vlopkf
jaylfc Jun 20, 2026
9447708
Merge pull request #1174 from jaylfc/exec/tsk-gtp2q3
jaylfc Jun 20, 2026
aa5480e
Merge pull request #1173 from jaylfc/exec/tsk-azp6px
jaylfc Jun 20, 2026
bb0b267
Merge pull request #1175 from jaylfc/exec/tsk-voitbr
jaylfc Jun 20, 2026
35a1975
test: add colocated vitest test for account-client
jaylfc Jun 20, 2026
d63cf36
Add colocated vitest test for browser-site-permissions-api
jaylfc Jun 20, 2026
5f0ab7a
test: add colocated vitest test for agent-browsers module
jaylfc Jun 20, 2026
2b5c1bb
Add colocated vitest test for src/lib/mail.ts
jaylfc Jun 20, 2026
dddc562
Add colocated vitest test for src/lib/github.ts
jaylfc Jun 20, 2026
836bf89
Merge pull request #1176 from jaylfc/exec/tsk-jrd6k4
jaylfc Jun 20, 2026
ba6b839
Merge pull request #1177 from jaylfc/exec/tsk-gfh45i
jaylfc Jun 20, 2026
0fef54e
Merge pull request #1178 from jaylfc/exec/tsk-dcv456
jaylfc Jun 20, 2026
78a6b04
Add colocated vitest test for src/lib/reddit.ts
jaylfc Jun 20, 2026
6866850
Add colocated vitest test for src/lib/memory.ts
jaylfc Jun 20, 2026
3e06df0
Merge pull request #1180 from jaylfc/exec/tsk-yojfag
jaylfc Jun 20, 2026
60b07b8
Merge pull request #1179 from jaylfc/exec/tsk-wlaeef
jaylfc Jun 20, 2026
48751e2
Add colocated vitest test for src/lib/youtube.ts
jaylfc Jun 20, 2026
f698fb6
Add vitest render test for MigrationBanner component
jaylfc Jun 20, 2026
87447bf
Add vitest render test for LaunchpadIcon component
jaylfc Jun 20, 2026
caf6092
Merge pull request #1182 from jaylfc/exec/tsk-rfmuht
jaylfc Jun 20, 2026
21f4b60
Merge pull request #1181 from jaylfc/exec/tsk-3w6kdr
jaylfc Jun 20, 2026
19c792e
Merge pull request #1183 from jaylfc/exec/tsk-lgfwfd
jaylfc Jun 20, 2026
ebb455e
Add vitest render test for ModelPickerModal component
jaylfc Jun 20, 2026
90e76cf
Add vitest render test for EmojiPickerField component
jaylfc Jun 20, 2026
7c838a1
Merge pull request #1184 from jaylfc/exec/tsk-tz3y2h
jaylfc Jun 20, 2026
3a0552e
Merge pull request #1185 from jaylfc/exec/tsk-pvln4p
jaylfc Jun 20, 2026
4269798
test: add vitest tests for use-list-nav hook
jaylfc Jun 20, 2026
58375bc
Add a vitest test for desktop/src/hooks/use-clock
jaylfc Jun 20, 2026
0383626
Add vitest test for use-device-mode hook
jaylfc Jun 20, 2026
b1b15f4
Merge pull request #1186 from jaylfc/exec/tsk-eoyi5e
jaylfc Jun 20, 2026
926cf0f
Merge pull request #1187 from jaylfc/exec/tsk-xpfm4i
jaylfc Jun 20, 2026
2404caa
Add vitest render test for LoginScreen
jaylfc Jun 20, 2026
5ff2fe3
Merge pull request #1188 from jaylfc/exec/tsk-3nvol5
jaylfc Jun 20, 2026
a893d3e
Merge pull request #1189 from jaylfc/exec/tsk-up5pid
jaylfc Jun 20, 2026
7d8e039
Merge pull request #1190 from jaylfc/exec/tsk-r5ibjm
jaylfc Jun 20, 2026
826c6d0
Merge pull request #1191 from jaylfc/exec/tsk-vvc7ay
jaylfc Jun 20, 2026
68687d1
test(hooks): add vitest tests for use-focus-trap and getFocusableElem…
jaylfc Jun 20, 2026
b645706
test: add vitest suite for use-visual-viewport hook
jaylfc Jun 20, 2026
1a49de1
Add vitest test for use-is-pwa hook
jaylfc Jun 20, 2026
2889dc0
test: add vitest test for use-widget-size hook
jaylfc Jun 20, 2026
2327f4c
Merge pull request #1192 from jaylfc/exec/tsk-g2gsgu
jaylfc Jun 20, 2026
9065c78
Merge pull request #1193 from jaylfc/exec/tsk-67pv7a
jaylfc Jun 20, 2026
89edaca
Merge pull request #1194 from jaylfc/exec/tsk-zdhdky
jaylfc Jun 20, 2026
7e6a471
Merge pull request #1195 from jaylfc/exec/tsk-yi2o3a
jaylfc Jun 20, 2026
6755b87
docs(status): refresh handoff -- test-coverage campaign + gate harden…
jaylfc Jun 20, 2026
2fdaeae
fix(update): use npm ci so the rebuild never dirties package-lock.json
jaylfc Jun 20, 2026
4c8efc5
Merge pull request #1197 from jaylfc/fix/update-npm-ci-lockfile
jaylfc Jun 20, 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
16 changes: 16 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,22 @@ data/browser_cookie_key.hex
# (a tracked copy dirties the tree and blocks the in-app git-pull update).
desktop/tsconfig.tsbuildinfo

# never track installed deps (root-level node_modules can appear when a tool is
# run from the repo root; ignore it everywhere so it is never swept into a commit)
node_modules/
desktop/node_modules

# There is no root node project: the SPA lives in desktop/. A stray root
# package.json invites `npm install` at the repo root, which creates the
# root node_modules that lane worktrees then sweep into commits (see #1134).
# Lanes sometimes add these as a workaround for running vitest from root; the
# gate runs vitest from desktop/, so they are pure cruft. Ignore them, anchored
# to the repo root so desktop/package.json and desktop/vitest.config are kept.
/package.json
/package-lock.json
/vitest.config.ts
/vitest.config.js

# Local-only operational playbook (contains LAN IP + ops detail; agents read it from the working tree)
docs/AGENT_HANDOFF.md
docs/audit/
Expand Down
8 changes: 4 additions & 4 deletions CLA.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@

> Interim version, to be ratified by an IP lawyer. By contributing to taOS you agree to the terms below so the project can stay sustainable: source-available for everyone, with a separate commercial license for commercial use.

Thank you for contributing to **taOS** (the "Project"), maintained by **JAN LABS LTD** (the "Company").
Thank you for contributing to **taOS** (the "Project"), maintained by **jaylfc** (the "Maintainer").

By submitting any contribution (code, documentation, configuration, or other material) to the Project, you agree to the following:

1. **Grant of rights.** You grant the Company a perpetual, worldwide, non-exclusive, royalty-free, irrevocable license to use, reproduce, modify, prepare derivative works of, publicly display, sublicense, and distribute your contribution and such derivative works, **and to relicense your contribution under any license terms the Company chooses** — including source-available and commercial licenses.
1. **Grant of rights.** You grant the Maintainer a perpetual, worldwide, non-exclusive, royalty-free, irrevocable license to use, reproduce, modify, prepare derivative works of, publicly display, sublicense, and distribute your contribution and such derivative works, **and to relicense your contribution under any license terms the Maintainer chooses** — including source-available and commercial licenses.

2. **Original work / right to submit.** Each contribution is your own original creation, or you otherwise have the right to submit it, and submitting it does not violate any third party's rights or any agreement you are bound by.

3. **Retained ownership.** You retain all right, title, and interest in your contributions. This is a license to the Company, **not** an assignment of copyright.
3. **Retained ownership.** You retain all right, title, and interest in your contributions. This is a license to the Maintainer, **not** an assignment of copyright.

4. **No obligation.** The Company is under no obligation to use or include your contribution.
4. **No obligation.** The Maintainer is under no obligation to use or include your contribution.

5. **No warranty.** Your contribution is provided "as is", without warranties of any kind.

Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Welcome — and thanks for your interest in contributing. taOS is a self-hosted

taOS is licensed under the **taOS Sustainable Use License** (source-available, not open source; see [`LICENSE`](LICENSE)) — free to use, modify, and self-host for personal use and for your own organisation's internal business purposes, with a separate commercial license required to sell it, host it as a paid service, or build it into a product you monetise.

To keep this sustainable, **all contributors must agree to the Contributor License Agreement ([`CLA.md`](CLA.md))** before their contributions are merged. The CLA grants JAN LABS LTD the right to include and **relicense** your contributions under the project's licenses; **you keep ownership of your work**. You sign once — on your first pull request, comment **"I have read the CLA Document and I hereby sign the CLA"** and the CLA check turns green; it then covers all your future contributions.
To keep this sustainable, **all contributors must agree to the Contributor License Agreement ([`CLA.md`](CLA.md))** before their contributions are merged. The CLA grants jaylfc the right to include and **relicense** your contributions under the project's licenses; **you keep ownership of your work**. You sign once — on your first pull request, comment **"I have read the CLA Document and I hereby sign the CLA"** and the CLA check turns green; it then covers all your future contributions.

---

Expand Down
15 changes: 7 additions & 8 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
taOS Sustainable Use License, Version 0.1

Copyright (c) 2026 JAN LABS LTD. All rights reserved.
Copyright (c) 2026 jaylfc. All rights reserved.

This license governs use of the accompanying software, "taOS" (the "Software").
By using the Software you agree to these terms. The Software is source-available,
not open source.

1. Grant

Subject to the conditions below, JAN LABS LTD grants you a non-exclusive,
Subject to the conditions below, jaylfc grants you a non-exclusive,
worldwide, royalty-free license to use, copy, and modify the Software, and to
distribute your copies and modifications, free of charge.

Expand All @@ -27,7 +27,7 @@ this license with every copy you distribute.
3. Commercial use requires a separate license

You may not, without a separate commercial license granted in writing by
JAN LABS LTD, use the Software (in whole or in part, modified or not) for a
jaylfc, use the Software (in whole or in part, modified or not) for a
Commercial Purpose.

A "Commercial Purpose" means using the Software in, or to provide, any product or
Expand All @@ -49,17 +49,16 @@ free of charge and is not a Commercial Purpose, provided the Software (and
anything built on it) is not offered, sold, hosted, or otherwise made available
to any third party.

To obtain a commercial license, contact JAN LABS LTD at info@taos.my.
To obtain a commercial license, contact jaylfc at info@taos.my.

4. Trademarks

This license grants no rights to the "taOS" or "JAN LABS" names, logos, or
trademarks.
This license grants no rights to the "taOS" name, logo, or trademarks.

5. Contributions

Unless agreed otherwise in writing, any contribution you submit for inclusion in
the Software is provided under this license, and you grant JAN LABS LTD a
the Software is provided under this license, and you grant jaylfc a
perpetual, irrevocable, worldwide right to use, modify, sublicense, and relicense
that contribution on any terms.

Expand All @@ -71,7 +70,7 @@ FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT.

7. Limitation of liability

TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL JAN LABS LTD BE LIABLE
TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL jaylfc BE LIABLE
FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT, OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR
THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Expand Down
15 changes: 14 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

# taOS

**Your AI, your hardware, your data.** Self-hosted AI where your agents' memory, conversations, and files live on machines you own, fully offline when you want, cloud only when you choose.

> **Beta (2026-06-02).** This is beta software meant for testers running it on their own hardware, so expect rough edges. The install script, backend, API, memory system (taOSmd), and multi-framework group chat all work; the desktop GUI is wired up for everyday use but a few flows (some agent management, worker connections, model routing) are still being smoothed out. Star or watch the repo to follow progress and catch the next release.
>
> **A heads-up on the catalogs:** with 100+ apps, 16 frameworks, and a large model catalog, plenty of install manifests have not been exercised on real hardware yet, so some apps, frameworks, and models will fail to install. If one does, [open an issue](https://github.com/jaylfc/tinyagentos/issues) with the name and the error you saw and I will fix the manifest as soon as I can. These reports are genuinely useful, most manifest fixes ship same-day.
Expand All @@ -30,6 +32,17 @@ A full web desktop environment with 36 bundled apps, 108 catalog apps, 47 MCP pl

**[taOSmd](https://github.com/jaylfc/taosmd) -- Framework-agnostic AI memory system.** 97.0% **end-to-end Judge accuracy** on [LongMemEval-S](https://github.com/xiaowu0162/LongMemEval) -- retrieve → generate → judge-with-LLM-grader, 500 questions across 50+ sessions each. For context, the most-cited open comparators -- MemPalace (96.6%) and agentmemory (95.2%) -- publish **Recall@5** retrieval scores on the same dataset, which measures only whether the correct session lands in the top-5 (no generation, no judge). The metrics aren't apples-to-apples until one of us re-runs end-to-end; ours is the stricter measurement. Per-category on our hybrid-plus-query-expansion config: knowledge-update 100%, multi-session 98.5%, single-session-user 97.1%, single-session-assistant 96.4%, temporal-reasoning 94.0%, single-session-preference 90.0%. Everything runs on a £170 Orange Pi 5 Plus with no cloud dependencies. The stack: temporal knowledge graph with validity windows + contradiction detection, hybrid semantic+keyword vector search with cross-encoder rerank and LLM-assisted query expansion (the "Librarian" layer), zero-loss append-only archive, automatic fact extraction, intent-aware retrieval routing, multi-layer context assembly. Any agent framework can read/write through the HTTP API.

### Your data stays yours

Most AI assistants keep your memory, conversations, and files on their servers. taOS keeps them on yours.

- **Offline memory.** Your AI's long-term memory is a self-hosted knowledge graph on your own box (a £170 Orange Pi is enough), not a row in someone else's cloud database.
- **Self-hosted agents and chat.** Your agents, their conversations, and your channels run on hardware you control.
- **Your compute, your models.** A local model catalog and cluster inference on your own devices; cloud models are opt-in, never required.
- **Auditable and exit-able.** Source-available, with a self-hostable binary mirror and an air-gapped install path. Nothing locks you in.

Sovereignty by default, cloud by choice. Run taOS fully offline, or connect a cloud model or paid remote access (taOSgo) when you decide it is worth it. The default is that your data never leaves your hardware.

---

<p align="center">
Expand Down Expand Up @@ -744,4 +757,4 @@ taOS is better for the people testing it, filing issues, and sending fixes:

taOS Sustainable Use License v0.1 -- source-available, not open source. See [LICENSE](LICENSE).

Free to use, modify, and self-host for personal use and for your own organisation's internal business purposes -- forever. A separate commercial license from JAN LABS LTD is required to sell taOS, host it as a paid service, or build it into a product or service you monetise (contact info@taos.my). Prior releases tagged under AGPL-3.0 remain available under AGPL-3.0.
Free to use, modify, and self-host for personal use and for your own organisation's internal business purposes -- forever. A separate commercial license from jaylfc is required to sell taOS, host it as a paid service, or build it into a product or service you monetise (contact info@taos.my). Prior releases tagged under AGPL-3.0 remain available under AGPL-3.0.
52 changes: 52 additions & 0 deletions desktop/app.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover, user-scalable=no" />
<title>taOS</title>

<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="/static/favicon.ico" />
<link rel="icon" type="image/png" sizes="32x32" href="/static/icon-32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/static/icon-16.png" />

<!-- PWA manifest is injected at runtime by app-standalone-main.tsx -->
<meta name="theme-color" content="#141415" />

<!-- iOS PWA -->
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="apple-mobile-web-app-title" content="taOS" />
<link rel="apple-touch-icon" href="/static/icon-180.png" />

<!-- iOS splash screens (reuse 512 icon on #141415 background; iOS scales it) -->
<link rel="apple-touch-startup-image" href="/static/icon-512.png" />

<meta name="mobile-web-app-capable" content="yes" />

<style>
html, body {
margin: 0;
padding: 0;
overflow: hidden;
height: 100%;
width: 100%;
/* Theme-aware dark canvas so Safari tints its chrome + safe areas dark. */
background: var(--color-shell-bg, #141415);
color-scheme: dark;
-webkit-user-select: none;
user-select: none;
-webkit-tap-highlight-color: transparent;
}
input, textarea, [contenteditable="true"] {
-webkit-user-select: text;
user-select: text;
}
#root { height: 100%; width: 100%; }
</style>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/app-standalone-main.tsx"></script>
</body>
</html>
1 change: 0 additions & 1 deletion desktop/node_modules

This file was deleted.

56 changes: 56 additions & 0 deletions desktop/src/AppStandalone.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import { render, screen, act } from "@testing-library/react";
import { describe, it, expect, vi, beforeEach } from "vitest";
import type { ComponentType } from "react";

// The registry mock is defined per-test via vi.mock hoisting; we override
// getApp inside each test group instead.

const FakeApp = ({ windowId }: { windowId: string }) => (
<div data-testid="fake-app" data-window={windowId}>
app content
</div>
);

// Default registry mock: messages is pwa-enabled, unknown is not present.
vi.mock("./registry/app-registry", () => ({
getApp: vi.fn((id: string) => {
if (id === "messages") {
return {
id: "messages",
name: "Messages",
pwa: true,
component: () => Promise.resolve({ default: FakeApp as ComponentType<{ windowId: string }> }),
};
}
return undefined;
}),
}));

// InstallPromptBanner has side-effects (window.matchMedia, beforeinstallprompt)
// that are not relevant to these tests; stub it out.
vi.mock("./shell/InstallPromptBanner", () => ({
InstallPromptBanner: () => null,
}));

import { AppStandalone } from "./AppStandalone";

async function flush() {
await act(async () => {
await Promise.resolve();
await Promise.resolve();
});
}

describe("AppStandalone", () => {
it("renders the app component for a known pwa-enabled app", async () => {
render(<AppStandalone appId="messages" />);
await flush();
expect(screen.getByTestId("fake-app")).toBeTruthy();
expect(screen.getByTestId("fake-app").getAttribute("data-window")).toBe("standalone-messages");
});

it("renders nothing when the app id is not in the registry", () => {
render(<AppStandalone appId="does-not-exist" />);
expect(screen.queryByTestId("fake-app")).toBeNull();
});
});
49 changes: 49 additions & 0 deletions desktop/src/AppStandalone.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { Suspense, lazy, useMemo } from "react";
import { getApp } from "./registry/app-registry";
import { InstallPromptBanner } from "./shell/InstallPromptBanner";
import type { ComponentType } from "react";

interface Props {
appId: string;
}

export function AppStandalone({ appId }: Props) {
const manifest = getApp(appId);

// Create the lazy component ONCE per appId. Calling lazy() in the render body
// makes a new component type every render, which unmounts and remounts the
// app (losing its state) on any re-render.
const AppComponent = useMemo(
() =>
manifest
? lazy(() => manifest.component() as Promise<{ default: ComponentType<{ windowId: string }> }>)
: null,
[appId],
);

// Guard: caller should verify pwa:true before mounting this component.
if (!manifest || !AppComponent) return null;

return (
<div
className="w-screen flex flex-col overflow-hidden"
style={{
// 100dvh exactly fills the visible standalone area; 100vh (h-screen)
// resolves to the larger viewport in an installed iOS PWA and leaves
// dead space at the bottom.
height: "100dvh",
backgroundColor: "var(--color-shell-bg)",
paddingTop: "env(safe-area-inset-top, 0px)",
}}
>
<InstallPromptBanner />
<Suspense fallback={
<div className="flex items-center justify-center h-full" style={{ color: "rgba(255,255,255,0.4)" }}>
Loading...
</div>
}>
<AppComponent windowId={`standalone-${appId}`} />
</Suspense>
</div>
);
}
11 changes: 9 additions & 2 deletions desktop/src/ChatStandalone.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,15 @@ const MessagesApp = lazy(() => import("./apps/MessagesApp").then((m) => ({ defau
export function ChatStandalone() {
return (
<div
className="h-screen w-screen flex flex-col overflow-hidden"
style={{ backgroundColor: "var(--color-shell-bg)", paddingTop: "env(safe-area-inset-top, 0px)" }}
className="w-screen flex flex-col overflow-hidden"
style={{
// 100dvh exactly fills the visible standalone area; 100vh (h-screen)
// resolves to the larger viewport in an installed iOS PWA and leaves
// dead space at the bottom.
height: "100dvh",
backgroundColor: "var(--color-shell-bg)",
paddingTop: "env(safe-area-inset-top, 0px)",
}}
>
<InstallPromptBanner />
<Suspense fallback={
Expand Down
58 changes: 58 additions & 0 deletions desktop/src/app-standalone-main.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import { AppStandalone } from "./AppStandalone";
import { AppShell } from "./components/AppShell";
import { restoreActiveTheme, installWebkitRepaintGuards } from "./stores/theme-store";
import { getApp } from "./registry/app-registry";
import "./theme/tokens.css";

// Apply the user's persisted theme on boot, same as chat-main.tsx.
void restoreActiveTheme();
// WebKit blanks backdrop-filter surfaces when the tab is backgrounded then
// shown again; re-composite on return (same fix the desktop shell installs).
installWebkitRepaintGuards();

const params = new URLSearchParams(location.search);
const appId = params.get("app") ?? "";
const manifest = appId ? getApp(appId) : undefined;

if (!manifest?.pwa) {
// Unknown or non-PWA app: show a minimal not-installable message.
document.title = "Not installable";
createRoot(document.getElementById("root")!).render(
<StrictMode>
<div
style={{
height: "100%",
width: "100%",
display: "flex",
alignItems: "center",
justifyContent: "center",
color: "rgba(255,255,255,0.5)",
fontSize: "0.9rem",
fontFamily: "system-ui, sans-serif",
background: "#141415",
}}
>
This app is not available as a standalone PWA.
</div>
</StrictMode>,
);
} else {
// Inject the dynamic manifest link so the browser picks up the correct
// name, icons, and start_url for this specific app.
const link = document.createElement("link");
link.rel = "manifest";
link.href = `/manifest?app=${encodeURIComponent(appId)}`;
document.head.appendChild(link);

document.title = manifest.name;

createRoot(document.getElementById("root")!).render(
<StrictMode>
<AppShell>
<AppStandalone appId={appId} />
</AppShell>
</StrictMode>,
);
}
Loading
Loading