Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2221 commits
Select commit Hold shift + click to select a range
5715e83
fix(daemon): legacy rework/integration dispatch never runs for a pair…
Oct 7, 2026
c6e4e67
fix(daemon): short-lived tools are spawned through the exec helper, n…
Oct 7, 2026
2e50469
test(daemon): the repo git status/numstat reads are asserted through …
Oct 7, 2026
e65c63a
merge: integrate audited streaming flicker fix
Oct 7, 2026
411d58c
feat(web): the remote desktop can be installed as an app, and a block…
Oct 7, 2026
2429116
fix(store): the session database no longer stores the identity prompt…
Oct 7, 2026
b588c85
test(terminal): the resync fidelity verdict is one atomic pane observ…
Oct 7, 2026
43e42e8
fix(node): Linux self-upgrade preflight checks the staged worker wher…
Oct 7, 2026
ad59b43
fix(ci): the streaming-markdown refresh interval is exported from its…
Oct 7, 2026
485594e
test(file-browser): the table view test pins its clock to local noon …
Oct 7, 2026
62f3208
feat(node): a controlled node falls back to the server's other public…
Oct 7, 2026
268a174
fix(identity): an identity chosen at session.start is saved to the id…
Oct 7, 2026
9250f8b
fix(node): an ack for another server ID authenticates nothing and dro…
Oct 7, 2026
241e099
fix(aidesk): an installed newer aiDesk app replaces the running older…
Oct 7, 2026
3c4a155
feat(remote-desktop): a data message that says which codec and encode…
Oct 7, 2026
64d5f0f
feat(macos-remote-desktop): the worker says what is encoding, to the …
Oct 7, 2026
0cd50fb
feat(web): the status bar shows the real encoder, e.g. "VP9 (software…
Oct 7, 2026
eab498b
fix(macos-remote-desktop): the worker reads the runtime directory thr…
Oct 7, 2026
6954ce0
fix(remote-desktop): a re-opened control channel is told the encoder …
Oct 7, 2026
a55f005
fix(server): the cron API requires a real credential; the daemon send…
Oct 7, 2026
1b75025
test(e2e): the memory MCP cron path presents the daemon server token
Oct 7, 2026
97d3391
fix(daemon): only a 401 from the cron API means the daemon credential…
Oct 7, 2026
ac975f5
fix(share): a shared-session participant reaches only the controlled …
Oct 7, 2026
4829453
fix(ci): macOS/Node 24 unit-test flakes -- retry drains share one con…
Oct 7, 2026
ebae70e
ci: every job ends itself; the browser install that hung the perf gua…
Oct 7, 2026
ff99f17
fix(web): a merged assistant block / tool run keeps its row key when …
Sep 30, 2026
4f43c35
test(perf): flicker probe compares frame to frame and separates head-…
Sep 30, 2026
8e92b3a
test(perf): flicker probe keeps separate previous-frame state for the…
Sep 30, 2026
75117cc
ci: re-run the push pipeline for 8e92b3afb (its run was cancelled whi…
Oct 8, 2026
f205e02
test(supervision-console): wait for the replay frames instead of 25/4…
Oct 8, 2026
2820c97
chore(deps): claude-agent-sdk 0.3.293 (the haiku alias resolves to Ha…
Oct 8, 2026
0461145
feat(sidebar): server icons show a short two-line label that is uniqu…
Oct 8, 2026
5defbe2
test(e2e): the haiku alias reports Haiku 5.5's 1M context window (the…
Oct 8, 2026
54044d3
fix(node): the upgrade staging scavenger scans names only so a crowde…
Oct 8, 2026
91fc5f8
feat(memory-guard): the heap diagnostic names the code that allocated…
Oct 8, 2026
a430018
fix(identity-store): concurrent list/get shared one read of the 33 MB…
Oct 8, 2026
e049ae4
fix(remote-desktop): the worker releases input the viewer no longer h…
Oct 8, 2026
e5189c4
fix(remote-desktop): the viewer declares the keys and buttons it hold…
Oct 8, 2026
3a18b33
test(remote-desktop): no timer-count assertion that depends on other …
Oct 8, 2026
f329618
fix(remote-desktop): SessionCore::ReconcileHeldInput/HoldsInput are p…
Oct 8, 2026
5ac5c53
feat(daemon): the legacy supervision periodic passes are off by defau…
Oct 8, 2026
0585c6f
fix(web): composer attachment previews load under the server's CSP (b…
Oct 8, 2026
50cfb71
fix(node): old macOS remote-desktop worker releases are removed (334 …
Oct 8, 2026
0684741
perf(local-panel): opening the panel window no longer re-verifies the…
Oct 8, 2026
961f3b9
perf(local-panel): the Windows panel host shows a themed skeleton at …
Oct 8, 2026
09b95c0
fix(local-panel): the node and the launch script reduce a file's writ…
Oct 8, 2026
8062da3
feat(macos): the daemon's launch agent runs node itself so Full Disk …
Oct 8, 2026
e774993
test(gc-poller): the contract reads the macOS plist template where it…
Oct 8, 2026
8c30a14
test(identity): the session.start save test no longer races the launc…
Oct 8, 2026
f03b7bd
test(spec): source-reading specs read through one helper that answers…
Oct 8, 2026
057efd2
test(macos): the upgrade launch-chain test runs the helper with the n…
Oct 8, 2026
a33f290
fix(pairs): pair_create runs in the daemon and a pair can no longer n…
Oct 9, 2026
0b3663d
fix(web): reconcile terminal task-pair rows
Oct 9, 2026
045c074
fix(macos-app): the aiDesk app no longer blocks its main thread (Appl…
Oct 9, 2026
2349932
feat(task-pairs): pair heartbeat renders as a heartbeat card; Brain N…
Oct 8, 2026
aede2d8
fix(test,setup): native tests name the host arch the way clang does; …
Oct 9, 2026
7d30f36
fix(share): participant terminal input binds the participant context;…
Oct 9, 2026
9dc598a
fix(share): an idle edge ends one process-session turn, not the whole…
Oct 9, 2026
378d1e9
fix(share): count every turn that can still run (in flight, queued, u…
Oct 9, 2026
bb65df6
feat(web): the composer attachment preview is sized from the viewport…
Oct 9, 2026
a7e554b
fix(pairs): supervision mode off no longer blocks manual pairs - only…
Oct 9, 2026
b228a65
feat(pairs): pair_create workspace=auto|worktree|dir|none, "a worktre…
Oct 9, 2026
773b7d6
fix(identity): the flat session-identities route relayed to any serve…
Oct 9, 2026
357bff6
fix(auth): only login tokens are account sessions (a participant's ma…
Oct 9, 2026
afab90c
fix(cron): a daemon's cron.command_result / p2p_linked only writes ex…
Oct 9, 2026
144e07b
fix(bindings): a daemon can only bind its owner's own chat bots
Oct 9, 2026
67d2681
fix(shared-context): a daemon can only update projections/records of …
Oct 9, 2026
d7315dc
fix(auth): a daemon server-token is refused on admin and credential-m…
Oct 9, 2026
bfa4159
feat(mcp): tools that act with the owner's authority are refused on a…
Oct 9, 2026
9ba0cfa
fix(send): a participant-started turn's agent-to-agent messages carry…
Oct 9, 2026
b20f6c5
fix(send): typed or agent-written content cannot carry the daemon's o…
Oct 9, 2026
7bab915
fix(hook): the loopback hook server refuses requests that carry a bro…
Oct 9, 2026
3ddcf88
fix(send): a runtime-shaped stand-in without the turn accessors reads…
Oct 9, 2026
a511921
fix(web): a phone sub-session's pair panel remembers its own open/clo…
Oct 9, 2026
357de3a
fix(web): a phone sub-session's pair panel is closed every time it is…
Oct 9, 2026
21a94d4
feat(machines): operate is not execute - one rule table, execute gran…
Oct 9, 2026
5d73ea8
test(machines): role x action matrix on the real resolvers and routes…
Oct 9, 2026
430f1f5
test(machines): existing integration fixtures follow operate != execu…
Oct 9, 2026
61411a3
feat(mcp): execute-class machine tools (exec_remote, file send/fetch,…
Oct 9, 2026
e696478
fix(machines): device management is owner-only (F-02); a participant …
Oct 9, 2026
479981a
feat(hooks): per-launch session credential for the loopback hook serv…
Oct 9, 2026
0eb0815
test(machines): desk-binding and host-link are owner-only (rows for e…
Oct 9, 2026
d3ac91d
fix(machines): kill-switch missing-serverId error uses the file's own…
Oct 9, 2026
2d8741f
test(machines): sharing fixtures follow owner-only device management …
Oct 9, 2026
88c34c3
fix(remote-desktop): Control is execute-class - operate access alone …
Oct 9, 2026
6332abd
fix(auth): a disabled user keeps no access on any path - API keys, lo…
Oct 9, 2026
d979cea
test(security): prove combined account and execute admission on popul…
Oct 9, 2026
bb25dbf
fix(mcp): adapt incompatible typed refusals at the shared SDK result …
Oct 9, 2026
ed329e6
test(db): retain full-filename migration identity with shared prefixes
Oct 9, 2026
a46af8d
test(mcp): decode typed refusals across real DB integration consumers
Oct 9, 2026
62f7cdd
fix(shares): commit role expiry and execute grants atomically
Oct 9, 2026
5849ef7
fix(security): a participant-started turn gets no open-pair titles, m…
Oct 9, 2026
934ebf1
fix(security): attachment downloads are never rendered as a document …
Oct 9, 2026
7f5e152
fix(security): the chat attachment chip no longer renders a downloade…
Oct 9, 2026
580ab99
fix(security): a share's browser projection of pairs carries no title…
Oct 9, 2026
35db69c
fix(web): previewAttachment loads the download helper lazily so api.t…
Oct 9, 2026
a2b56f7
fix(security): sniff upload types and verify safe composer previews
Oct 9, 2026
e42cb05
test(security): preserve authorized pair relay access
Oct 9, 2026
3ae4bb1
fix(security): redact raw pair event attrs in participant views
Oct 9, 2026
597deea
fix(security): omit private pair notices from shared event projections
Oct 9, 2026
080cc1c
fix(security): allowlist shared pair event operational metadata
Oct 9, 2026
aa0e835
fix(security): fail closed on unknown participant origin hook replies
Oct 9, 2026
43eb2dd
Restrict daemon server tokens to explicit shared REST routes
Oct 9, 2026
3067dcc
Preserve mounted server base paths in daemon route clients
Oct 9, 2026
884f66d
Separate account fixtures from daemon route admission tests
Oct 9, 2026
e1ff0ff
Make daemon source guard distinguish calls from imported route prefixes
Oct 9, 2026
b1deb24
Apply daemon admission before CORS short-circuit responses
Oct 9, 2026
2dfe466
fix(auth): preserve account credentials with incidental daemon routin…
Oct 10, 2026
2192d11
fix(tests): keep daemon collection independent of server installs
Oct 10, 2026
15e5f9b
test: isolate dependency graph analysis from suite worker state
Oct 10, 2026
5b5fe9b
fix: limit participant-turn refusal to exec_remote
Oct 10, 2026
af86e0e
fix: require live actor shares on controlled node entry points
Oct 10, 2026
db0ef02
fix: preserve ES2020 policy compatibility and FULL desktop access
Oct 10, 2026
8f56a03
fix: fence unknown node authority and actor-scoped upload stages
Oct 10, 2026
e25335c
fix: revoke controlled node metadata subscriptions on lost actor access
Oct 10, 2026
c2a11a6
feat(node): add pinned headless glibc217 ABI profile and systemd219 l…
Oct 10, 2026
36fcfd0
fix(node): embed watchdog transport in compiled daemon distribution
Oct 10, 2026
fbc8490
test: include compat artifact job in required release gate
Oct 10, 2026
65e0f8d
fix: simplify task titles and pair session identities
Oct 10, 2026
cf7af3c
fix: keep cached labels as fallback and honor cleared session names
Oct 10, 2026
bfd5ec3
fix: retain label fallback for normalized old-peer rows
Oct 10, 2026
adf2d9b
fix: cover protocol task IDs in legacy pair labels
Oct 10, 2026
aae4a75
fix(test): yield worker IPC between synchronous daemon fixtures
Oct 10, 2026
dd65e3a
test(task-pairs): drain scheduler fixture work before replacing globals
Oct 10, 2026
8ddb93c
test(transport): wait for actual replay completion before assertions
Oct 10, 2026
e43481b
fix: preserve Linux desktop installer success and readiness failures
Oct 10, 2026
56a26d3
fix: restore actor-scoped shared group device visibility and read access
Oct 10, 2026
55d1c7e
fix: fence machine group revocation across server pods
Oct 10, 2026
1f84a9a
fix: fence pending desktop admission and lease snapshots
Oct 10, 2026
8369ad6
fix: load group notification driver only at LISTEN startup
Oct 10, 2026
70c99b5
fix: route supplied SSH targets directly in generated contracts
Oct 10, 2026
bac7875
test: guard each stable desktop authorization phase
Oct 10, 2026
7ce954b
merge: CI, desktop installer and shared-group authorization fixes
Oct 10, 2026
37bcb8a
feat: add agy-sdk (Antigravity CLI) transport agent with grouped quot…
Oct 10, 2026
241fc64
fix(agy-sdk): add MCP integration, dynamic model discovery, quota par…
Oct 10, 2026
7a89a70
fix(ci): relax jsonl-watcher worker test timeouts and ignore missing …
Oct 10, 2026
58cbe9b
test(agy-sdk): assert getMemoryMcpStatus using connected provider ins…
Oct 10, 2026
d55a431
fix: support git branch visibility in shared sessions and prioritize …
Oct 10, 2026
326e1fd
fix(agy-sdk): resolve agy from user install paths, enrich spawn PATH,…
Oct 10, 2026
ef9d978
fix(agy-sdk): fix text truncation, quota precision, idle detection an…
Oct 10, 2026
d93afff
fix: preserve native append admission and confirm Stop fallback
Oct 10, 2026
d89c3e9
fix: admit mixed command appends independently and preserve partial f…
Oct 10, 2026
1d572f0
fix: resolve queue policy shared import for all consumers
Oct 10, 2026
2674077
fix(transport): preserve unconfirmed Stop barrier across priority can…
Oct 10, 2026
dccf925
test(transport): distinguish connected append fixtures from provider …
Oct 10, 2026
c64a9e6
fix(agy): parse exact quota fractions via agy json output mode
Oct 11, 2026
7b9aa9f
feat(agy): dynamic quota refresh cadence (10m interactive, 15m defaul…
Oct 11, 2026
95cedf2
fix(agy): implement cancelAndWait for terminal child exit confirmatio…
Oct 11, 2026
f7eaec1
fix(supervision): guarantee at-least-once readiness polling and isola…
Oct 11, 2026
673bc70
fix(transport): clarify stop-and-dispatch queue notice and deduplicat…
Oct 11, 2026
91be5b4
fix(dispatch): restore in-flight append for participant turns and pri…
Oct 11, 2026
b0aea32
fix(share): equalize server share file permissions, expose 3-level id…
Oct 11, 2026
5bd6a9a
fix(mcp): restore version property to memory-mcp-bootstrap-catalog.json
Oct 11, 2026
36476a5
feat(grok): wire grok sdk provider with native in-flight append and m…
Oct 11, 2026
0a02aa7
fix(grok): handle connection drops cleanly, suppress teardown errors,…
Oct 11, 2026
8f65428
fix(daemon): remove synchronous disk I/O from grok-sdk model switch a…
Oct 11, 2026
7f0e85e
fix(ui): restore task participant models and derive readable task tit…
Oct 11, 2026
ad61805
feat(remote-desktop): gate linux worker on shared libraries and displ…
Oct 11, 2026
b610069
feat(ui): add desktop one-click side-by-side pair window toggle
Oct 11, 2026
b4d40be
fix(daemon): require heading marker or colon for goal extraction and …
Oct 11, 2026
d4ee39c
feat(daemon): support emergency steering in send_message with auto-st…
Oct 11, 2026
a9b75bc
fix(daemon): clear pending queue on emergency stop and isolate front-…
Oct 11, 2026
a1e7dd0
chore(mcp): update bootstrap catalog snapshot for send_message emerge…
Oct 11, 2026
ad6338d
feat(identity): add pair/session identity append support, automatic o…
Oct 11, 2026
63b5341
fix(delegation): deduplicate task assignment dispatches in delegation…
Oct 11, 2026
e9bd030
fix(agy): sync running pulse state to subsession bar and expose provi…
Oct 11, 2026
13aba1c
feat(presets): support openai-compatible api presets and codex integr…
Oct 11, 2026
1f71ccc
test(supervision): align non-preset backend assertions with codex-sdk…
Oct 11, 2026
58df025
feat(presets): support dynamic codex model switching and preset synch…
Oct 12, 2026
826f267
feat(identity): add pair identity UI tab with active task resolution …
Oct 12, 2026
ee26c0e
test(identity): update component tests to expect pair identity tab
Oct 12, 2026
c04d7b8
fix(clone): distinguish git remote capability error and prevent dialo…
Oct 12, 2026
a3a96fa
fix(clone): resolve server and web typecheck errors for session group…
Oct 12, 2026
42b830f
feat(dispatch): auto-stop append-unsupported targets on append send a…
Oct 12, 2026
424abcf
fix(dispatch): guard dynamic imports during session stop and align ap…
Oct 12, 2026
2848048
fix(store): throttle maintenance ticks, optimize backfill scans and p…
Oct 12, 2026
ba6cb77
fix(store): prevent premature completion in noise purge and namespace…
Oct 12, 2026
67520c6
feat(store): migrate session identities to sqlite with wal and auto-p…
Oct 12, 2026
1e384d4
fix(node): support active linux desktop user session in computer-use
Oct 13, 2026
9ce9b32
feat(agent): add muse code sdk transport provider and adapter
Oct 13, 2026
c14661a
feat(agent): support in-flight turn steering append for muse code sdk
Oct 13, 2026
c587612
fix(ci): align test matrix for muse-code-sdk and drop import.meta.url…
Oct 13, 2026
13242cb
test(node): canonicalize tempDir in computer-use symlink candidate te…
Oct 13, 2026
34929c6
feat(agent): support subagent lifecycle syncing for antigravity and m…
Oct 13, 2026
864a63a
fix(muse): wire wander model catalog, model switching, and normalization
Oct 13, 2026
5704cdf
fix(muse): reuse official muse login and restore muse model suite
Oct 13, 2026
3f797f8
fix(ci): retry stapler staple and validate against apple cdn propagat…
Oct 13, 2026
028c546
fix(daemon): remove invalid wander model and sanitize muse config
Oct 13, 2026
461153a
fix(grok-sdk): add Grok CLI binary discovery across user and system c…
Oct 13, 2026
50c6bfe
fix(muse-sdk): supply provider and model args to muse serve and track…
Oct 13, 2026
0fbc1d2
fix(session): prevent cross-vendor providerResumeId leakage on agent …
Oct 13, 2026
ad4b23f
fix(muse): auto-seed model catalog to prevent fatal visible models crash
Oct 13, 2026
799cc94
feat(grok): connect grok-sdk usage quota and billing cycle
Oct 13, 2026
37a006b
fix(muse): align muse model ids to wonder full, fix catalog reasoning…
Oct 13, 2026
44f6564
fix(muse): sanitize auth.json to remove masking LLM api key and prote…
Oct 13, 2026
f285796
fix(muse): stop stuck "working" state, fix stream order, add stall wa…
Oct 13, 2026
132802b
feat(grok): launch Grok with --permission-mode bypassPermissions by d…
Oct 13, 2026
b81d820
Revert "fix(muse): sanitize auth.json to remove masking LLM api key a…
Oct 13, 2026
26fe6ae
fix(agy): sync Antigravity context window and live step usage
Oct 13, 2026
81a25ab
fix(muse): sync context window occupancy from session state
Oct 13, 2026
fa58c1f
fix(web): adapt model dropdown width without line breaks and prevent …
Oct 13, 2026
b20f4d9
fix(shell): deliver shell and script commands verbatim without file r…
Oct 13, 2026
981a9df
test(daemon): add shell verbatim send tests
Oct 13, 2026
f1db34d
test(shell): verify actual verbatim delivery and chat dispatch
Oct 13, 2026
3348162
fix(muse): integrate Muse quota tracking and extend turn admission ti…
Oct 14, 2026
f0b9c70
fix(web): restore AGY_SDK_PROVIDER_ID in useTransportModels initial l…
Oct 14, 2026
19c0fc8
fix(agy): default to Flash High and preserve model picker catalogs
Oct 14, 2026
df191f3
fix(agy): replace fallback model options with refreshed cached catalogs
Oct 14, 2026
0f567b9
feat(identity): raise project and session limits to 500k characters
Oct 14, 2026
67de69e
fix(agy-sdk): reconcile stale quota errors with current turn completion
Oct 14, 2026
20e9eed
fix(muse-sdk): preserve notification pump and return on turn admission
Oct 14, 2026
cf4668e
fix(server): allow offline deletion with atomic dependent cleanup and…
Oct 15, 2026
babaacf
fix(ci): avoid redundant unretried macOS ticket validation
Oct 15, 2026
bf21d42
fix(agy-sdk): retire quota-poisoned CLI processes without replaying t…
Oct 15, 2026
5d365ac
Revert "fix(agy-sdk): retire quota-poisoned CLI processes without rep…
Oct 15, 2026
c6fb2ba
fix(agy-sdk): recover completed native turns lost behind historical q…
Oct 15, 2026
e6da130
fix(share): synchronize participant thinking levels without exposing …
Oct 15, 2026
94f1057
fix(ci): align release guards with validated notarization gate
Oct 15, 2026
07aaec9
fix(pairs): show titles to verified task-authorized participants
Oct 15, 2026
1ca29a7
fix(pairs): preserve title grants across concurrent metadata updates
Oct 15, 2026
637fe8c
fix(pairs): retain authoritative title grants in lifecycle snapshots
Oct 15, 2026
fc95a58
fix(mcp): refresh bootstrap catalog for title viewer grants
Oct 15, 2026
e99939a
fix(pairs): give shared participants owner-equivalent Pair access
Oct 15, 2026
fbafa30
docs(pairs): remove obsolete participant title-grant guidance
Oct 15, 2026
68d6dc3
feat(pairs): persist pause and dependency waits without model polling
Oct 15, 2026
87f0a72
fix(pairs): invalidate recovery handoffs across pause epochs
Oct 15, 2026
1d662c6
fix(pairs): release failed resume admissions and fit MCP catalog budget
Oct 15, 2026
715fcae
feat(mcp): read current-session texts and summaries across providers
Oct 16, 2026
1cbac70
fix(mcp): read session summaries from their persisted namespace
Oct 16, 2026
d15c9ad
fix(handoff): keep at least thirty recent text messages
Oct 16, 2026
9f7f618
fix(macos): keep background app launches out of the Dock
Oct 16, 2026
ed0d714
fix(sdk): propagate runtime-bound MCP identity across session providers
Oct 16, 2026
179a0b5
test(runtime): assert enriched SDK session identity at initialization
Oct 16, 2026
ede40d3
fix(muse): migrate anonymous host MCP registration to session scope
Oct 16, 2026
56dcaa3
feat(history): read texts and tools within the same main session tree
Oct 16, 2026
3fe5e3a
fix(web): bound collapsed tool previews without losing full output
Oct 17, 2026
2aad934
test(agy): verify child identity independently of startup order
Oct 17, 2026
2483774
fix: make picker searches case-insensitive
Oct 17, 2026
76f3879
fix: prevent chat file preview rerender loop
Oct 17, 2026
60e9b5f
test: stress unstable preview translation identity
Oct 17, 2026
6feeee4
test: stress unstable preview translation identity
Oct 17, 2026
4186789
fix: prevent chat file preview reentry
Oct 17, 2026
0b8a89d
fix(web): fit mobile server menu to viewport
Oct 17, 2026
9c171c2
merge: record integrated chat preview fix
Oct 17, 2026
f6496ff
fix(web): recover failed chat file previews
Oct 17, 2026
c233e12
fix: keep preview errors out of congested core lane
Oct 17, 2026
578236d
fix: expose image copy and save actions
Oct 18, 2026
41776da
fix: reconnect core lane after socket errors
Oct 18, 2026
c79fa4b
test(web): prove hidden preview alias dedup
Oct 19, 2026
2def66f
fix(web): canonicalize hidden chat preview paths
Oct 19, 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
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,4 @@ tmp
*.sqlite
*.sqlite-shm
*.sqlite-wal
**/._*
5 changes: 5 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,8 @@ JWT_SIGNING_KEY=change_me_64_hex_chars

# Generate secrets with:
# openssl rand -hex 32

# Optional: other public https origins of this deployment for controlled-node fallback, comma separated
# (e.g. a proxy domain). Nodes send their credential to every listed origin they connect to: each must reach this same server,
# with WebSocket upgrades and ?serverId= routing intact.
# IMCODES_PUBLIC_URLS=https://proxy.example.com
20 changes: 20 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,23 @@ bin/* text eol=lf
*.bat text eol=crlf
*.vbs text eol=crlf
*.ps1 text eol=crlf

# ── Native sources and their spec fixtures: LF everywhere ──
#
# Why: the specs under test/spec read these files and the Windows CI runner's checkout (`core.autocrlf=true`, Git for Windows'
# default) turned every LF into CRLF, so a multi-line marker such as `'UserDataFolder();\n Log("window_shown"'` was "not found"
# (job `aiDesk panel window host (Windows build)`, run 37785752309). The specs now read sources through test/helpers/read-source.ts,
# which is the real fix; this keeps the C++/header/CMake sources themselves identical on every machine (MSVC, clang and cmake all
# accept LF). No file of these kinds is stored with CRLF in the index, so nothing is renormalised.
native/**/*.cc text eol=lf
native/**/*.cpp text eol=lf
native/**/*.h text eol=lf
native/**/*.hpp text eol=lf
native/**/*.mm text eol=lf
native/**/*.m text eol=lf
native/**/*.in text eol=lf
native/**/*.cmake text eol=lf
native/**/CMakeLists.txt text eol=lf
native/**/*.manifest text eol=lf
test/spec/*.cc text eol=lf
test/spec/*.mm text eol=lf
51 changes: 51 additions & 0 deletions .github/actions/build-aidesk-ui/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Build, sign and describe the aiDesk panel window host
description: >
Builds the Windows panel window host (aidesk-local-ui.exe, a WebView2 window: native/aidesk-panel-host-windows/build.ps1), signs it
with the release certificate, THEN describes it by a manifest the controlled node verifies before it ever launches it (see
scripts/aidesk-ui-artifact.mjs and src/node/aidesk-local-ui-artifact.ts). Output: dist-node-exe/aidesk-local-ui/win32-x64/. NOT wired
into the release workflows yet -- shipping it to installed nodes is the distribution round (see
test/spec/aidesk-local-ui-release-wiring.test.ts). Build time only: nothing is downloaded when the product runs.
inputs:
version:
description: The controlled-node build version recorded in the manifest.
required: true
windows-signing-cert-thumbprint:
description: Thumbprint of the imported Windows release-signing certificate (Windows only).
required: false
default: ''
windows-signing-cert-sha256:
description: sha256 of the release-signing certificate; recorded as the manifest's signer (Windows only).
required: false
default: ''
runs:
using: composite
steps:
- name: Build, sign and describe the panel window host (Windows)
if: runner.os == 'Windows'
shell: powershell
env:
AIDESK_VERSION: ${{ inputs.version }}
AIDESK_THUMBPRINT: ${{ inputs.windows-signing-cert-thumbprint }}
AIDESK_SIGNER_SHA256: ${{ inputs.windows-signing-cert-sha256 }}
run: |
$ErrorActionPreference = 'Stop'
if ([string]::IsNullOrWhiteSpace($env:AIDESK_THUMBPRINT) -or [string]::IsNullOrWhiteSpace($env:AIDESK_SIGNER_SHA256)) {
throw 'The Windows release-signing certificate must be imported before the panel window host is signed.'
}
$art = 'dist-node-exe\aidesk-local-ui\win32-x64'
& .\native\aidesk-panel-host-windows\build.ps1 -ArtifactRoot $art
if ($LASTEXITCODE -ne 0) { throw 'building the panel window host failed' }
$exe = Join-Path $art 'aidesk-local-ui.exe'
if (-not (Test-Path $exe)) { throw "The panel window host was not built at $exe." }
if (-not (Test-Path (Join-Path $art 'THIRD-PARTY-NOTICES.txt'))) { throw 'The panel window host third-party notices are missing.' }
& .\scripts\windows-sign-release-artifact.ps1 -Mode Sign -ArtifactPath $exe `
-CodeSigningCertificateThumbprint $env:AIDESK_THUMBPRINT -ExpectedSignerSha256 $env:AIDESK_SIGNER_SHA256 -TimestampUrl 'http://timestamp.digicert.com'
if ($LASTEXITCODE -ne 0) { throw 'signing the panel window host failed' }
& .\scripts\windows-sign-release-artifact.ps1 -Mode Verify -ArtifactPath $exe -ExpectedSignerSha256 $env:AIDESK_SIGNER_SHA256
if ($LASTEXITCODE -ne 0) { throw 'the panel window host does not verify against the release signer' }
# The manifest records the executable AS SIGNED.
node scripts/aidesk-ui-artifact.mjs write $art win32 x64 $env:AIDESK_VERSION $env:AIDESK_SIGNER_SHA256
if ($LASTEXITCODE -ne 0) { throw 'writing the panel window host manifest failed' }
node scripts/aidesk-ui-artifact.mjs verify $art win32 x64 $env:AIDESK_VERSION
if ($LASTEXITCODE -ne 0) { throw 'verifying the panel window host manifest failed' }
"aiDesk panel window host (win32-x64): $((Get-Item $exe).Length) bytes" | Out-File -FilePath $env:GITHUB_STEP_SUMMARY -Encoding utf8 -Append
25 changes: 25 additions & 0 deletions .github/actions/build-controlled-node-compat/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Build headless Linux compatibility executable
description: Pinned community ABI runtime, same-runtime SEA, immutable manifest verification (no GUI or official-mirror fallback)
inputs:
version:
description: Exact product version
required: true
outputs:
artifact:
description: Canonical compatibility artifact filename
value: ${{ steps.profile.outputs.artifact }}
runs:
using: composite
steps:
- name: Resolve canonical compatibility filename
id: profile
shell: bash
run: node -e "require('node:fs').appendFileSync(process.env.GITHUB_OUTPUT,'artifact='+require('./shared/controlled-node-abi-profiles.json').GLIBC217.fileName+'\\n')"
- name: Guard thin-node dependency boundary
shell: bash
run: npm run check:node-exe-deps
- name: Build and verify pinned headless compatibility executable
shell: bash
env:
IMCODES_BUILD_VERSION: ${{ inputs.version }}
run: node scripts/build-node-compat-exe.mjs
Loading
Loading