v0.1.0
What's Changed
- chore(LUKE-53): bootstrap the Electron desktop app and development harness by @dastratakos in #1
- feat: add React landing page by @dastratakos in #2
- feat(LUKE-45): add shared session core by @dastratakos in #3
- chore: migrate workspace from npm to pnpm by @dastratakos in #4
- feat(LUKE-46): integrate existing Claude Code sessions by @dastratakos in #5
- docs: add git workflow guidance by @dastratakos in #7
- feat(LUKE-47): integrate existing Codex sessions by @dastratakos in #6
- docs: keep PR descriptions current when pushing follow-up commits by @dastratakos in #9
- fix: keep the notch capsule inside the compact window by @dastratakos in #10
- fix: re-assert the panel instead of expanding on relaunch by @dastratakos in #11
- feat(LUKE-48): build Luke's attention intelligence by @dastratakos in #8
- fix: let the session list scroll instead of cutting off the footer by @dastratakos in #13
- fix(run): replace the running instance instead of refreshing it by @dastratakos in #14
- feat(LUKE-55): observe Conductor cloud sessions via a settings-managed API key by @dastratakos in #15
- feat(LUKE-57): store API keys for multiple cloud providers by @dastratakos in #16
- feat: show Conductor's brand mark on Conductor sessions by @dastratakos in #17
- feat(evidence): compare visual evidence against main and gate on it by @dastratakos in #20
- revert: back out the visual evidence gate (#20) by @dastratakos in #22
- feat(LUKE-56): revamp the notch panel into a capsule, a peek, and a panel by @dastratakos in #18
- feat(brand): graduate the L-face identity out of the logo lab by @dastratakos in #24
- feat(LUKE-58): observe Cursor cloud agent sessions by @dastratakos in #19
- fix(notch): flare the shape into the top edge the way the housing does by @dastratakos in #26
- fix(settings): drop the "Not connected" label the Connect button already gives by @dastratakos in #28
- fix(settings): offer the editor, not Connect, for a key from the environment by @dastratakos in #36
- docs: add CLAUDE.md symlink to AGENTS.md by @dastratakos in #38
- feat(brand): give Luke a face in the menu bar and the notch by @dastratakos in #35
- feat(providers): surface what each agent session is actually doing by @dastratakos in #27
- docs: prepare Luke's open-source MVP documentation by @charleslpan in #32
- feat(sessions): badge a session's mark when its work runs in the cloud by @dastratakos in #34
- chore(desktop): prepare v0.1.0 macOS packaging by @charleslpan in #30
- chore(release): add signed macOS release pipeline by @charleslpan in #40
- feat(LUKE-59): observe Devin cloud sessions by @dastratakos in #25
- feat(sessions): filter and sort the panel list from an options button by @dastratakos in #37
- feat(settings): stand the panel down to a key slot while a key is entered by @dastratakos in #41
- feat(LUKE-65): observe Cursor sessions running on this machine by @dastratakos in #33
- feat(LUKE-62): observe Google Jules sessions by @devin-ai-integration[bot] in #39
- fix(sessions): stop the options sheet hiding the list it narrows by @dastratakos in #43
- feat(web): add Luke landing page by @charleslpan in #31
- feat(sessions): open a session where its provider keeps it by @dastratakos in #45
- feat(settings): ask before deleting a stored API key by @dastratakos in #47
- feat(face): bounce when a session starts asking rather than while it waits by @dastratakos in #46
- fix(LUKE-64): ask the Keychain only for a key the user has by @dastratakos in #49
- chore(desktop): answer to Luke in the Keychain and in Application Support by @dastratakos in #50
- feat(release): add local macOS DMG pipeline by @charleslpan in #48
- fix(panel): draw the hand over the peek and collapse from the whole strip by @dastratakos in #52
- feat(desktop): package the Luke brand icon into the macOS app by @charleslpan in #54
- fix(panel): unfold as many provider marks as the panel's wing holds by @dastratakos in #55
- fix(web): clean up the landing page by @charleslpan in #53
- feat(LUKE-61): integrate GitHub Copilot coding agent tasks by @dastratakos in #57
- feat(face): let Luke be still, and spend his moments one at a time by @dastratakos in #51
- feat(release): add branded DMG installer layout by @charleslpan in #58
- feat(sessions): carry state in the row's words rather than a chip by @dastratakos in #56
- feat(LUKE-60): integrate local OpenCode sessions by @dastratakos in #60
- ci: report required checks on merge groups by @charleslpan in #61
- feat(LUKE-49): add Realtime voice conversation by @dastratakos in #12
- feat(voice): tighten Luke's spoken instructions toward brevity by @dastratakos in #63
- feat(panel): let session rows glide to their new order by @dastratakos in #62
- feat(settings): add a menu bar visibility setting by @dastratakos in #64
- feat(settings): let the spoken voice be chosen in Preferences by @dastratakos in #66
- feat(web): rebuild the landing hero on the product's current UI by @dastratakos in #65
- feat(sessions): send messages and run advertised controls on cloud sessions by @dastratakos in #59
- feat(voice): open sessions from a spoken ask by @dastratakos in #67
- feat(panel): glide the provider marks to their new order by @dastratakos in #69
- feat(voice): caption Luke's speech on screen as it streams by @dastratakos in #68
- fix(sessions): date Claude Code sessions by their own records, not mtime by @dastratakos in #71
- fix(panel): read the wing's marks in the sort the list is in by @dastratakos in #72
- feat(settings): add a switch to show Luke in the Dock by @dastratakos in #73
- feat(voice): let the user choose how fast Luke talks by @dastratakos in #75
- feat(voice): teach Luke his own guide and take spoken settings asks by @dastratakos in #74
- fix(voice): answer the talk key on the press, not the handshake by @dastratakos in #77
- feat(voice): let the talk shortcut be changed, with reset to default by @dastratakos in #76
- feat(ask): type to Luke, from the panel and from any app by @dastratakos in #78
- feat(voice): read and act on Linear issues in the spoken conversation by @dastratakos in #70
- feat(face): reward a hover on Luke with a one-shot trick by @dastratakos in #81
- feat(voice): quiet Music and Spotify while talking by @dastratakos in #79
- feat(brand): give the Dock Luke's own icon in light and dark by @dastratakos in #82
- feat(panel): left-align the provider marks in the peek and the panel by @dastratakos in #84
- fix(brand): put Luke's face back on the Dock tile after every show by @dastratakos in #88
- feat(settings): make the ask key an editable shortcut by @dastratakos in #86
- feat(settings): stand Luke on every display and let the bubble be chosen by @dastratakos in #83
- feat(panel): hold the panel still while Show Desktop sweeps windows aside by @dastratakos in #85
- feat(settings): draw Linear apart in an Integrations section by @dastratakos in #90
- feat(feedback): send feedback or a prompt to the founders from the panel by @dastratakos in #87
- feat(voice): add a spoken tool to create a new workspace by @dastratakos in #80
- feat(voice): spawn agents by voice — new workspaces with tasks, and agents in existing workspaces by @dastratakos in #89
- feat(shortcuts): draw a chord as the separate keys it is by @dastratakos in #92
- fix(motion): answer the motion audit against DESIGN.md by @dastratakos in #95
- feat(voice): caption Luke and ask for volume while the Mac is muted by @dastratakos in #94
- feat(feedback): offer a refused spoken ask to the founders as a prompt by @dastratakos in #93
- feat(voice): switch the panel between its tabs on an ask by @dastratakos in #99
- feat(voice): stop a reply on demand with an editable global stop key by @dastratakos in #101
- feat(voice): announce sessions in Luke's own voice, no conversation needed by @dastratakos in #97
- feat(voice): make a changed voice or pace heard on the live call by @dastratakos in #103
- feat(voice): teach the guide every setting's default so a spoken ask can restore it by @dastratakos in #107
- feat(conductor): read the transcripts view for recaps and agent kinds by @dastratakos in #102
- feat(voice): default provider and model choices for conversational workspace creation by @dastratakos in #104
- docs(git): prefer rebase onto main over merge commits by @dastratakos in #108
- feat(settings): open the tab into pages, and even out its rows by @dastratakos in #105
- feat(panel): send Luke to the control he was asked to change by @dastratakos in #106
- refactor(settings): apply every row's store reply through one helper by @charleslpan in #110
- refactor(desktop): collapse preload's IPC echo into two helpers by @charleslpan in #111
- feat(sessions): show each Conductor chat as its own row, grouped by workspace by @dastratakos in #100
- refactor(settings): collapse cloned preference setters onto #setField by @charleslpan in #112
- refactor(settings): give each switch and select its own write and refusal by @charleslpan in #115
- fix(sessions): notice when a session's spawnable agents change by @charleslpan in #113
- refactor(adapters): share JSON readers, status decay, and observation bounds by @charleslpan in #117
- refactor(desktop): collapse cloned settings IPC handlers onto one write path by @charleslpan in #114
- refactor: generate shared motion, marks, and labels for web and desktop by @charleslpan in #118
- refactor(desktop): extract App state clusters into hooks by @charleslpan in #120
- feat(voice): connect an OpenAI key in Settings by @charleslpan in #91
- refactor(adapters): unify act-result status and restore honest capability probes by @charleslpan in #124
- refactor: keep mirrored constants in sync by construction by @charleslpan in #122
- refactor(desktop): share HTTP test fakes across adapter tests by @charleslpan in #127
- docs(desktop): put drifted comments back on the code they describe by @charleslpan in #123
- refactor(desktop): group settings props into control objects by @charleslpan in #125
- fix: stop swallowing programming errors as network faults by @charleslpan in #126
- refactor(sessions): split display urgency from status and name recaps by @charleslpan in #128
- refactor(desktop): extract the four main-process seams that own real state by @charleslpan in #130
- refactor(voice): split realtime.ts and own the inbound wire by @charleslpan in #121
- refactor(voice): derive tool families, count, and dispatch from one table by @charleslpan in #129
- fix(panel): use painted menu bar depth by @charleslpan in #132
- refactor: small independent cleanups by @charleslpan in #131
- fix(panel): keep Luke above the captions a muted Mac draws by @dastratakos in #116
- fix(sessions): never hide a conversation for being old by @dastratakos in #137
- fix(voice): let a paired model-and-effort ask land both halves by @dastratakos in #136
- fix(voice): let a spoken pace ask use the multiple its row shows by @dastratakos in #139
- fix(panel): sign two settings changed at once one at a time by @dastratakos in #135
- feat(providers): archive a workspace where its provider documents it by @dastratakos in #140
- feat(settings): move the OpenAI key onto the Voice page it turns on by @dastratakos in #141
- fix(panel): draw the provider rule under Conductor's model and effort rows by @dastratakos in #143
- fix(guide): put drifted facts back on the app they describe by @dastratakos in #145
- feat: remember a default workspace project per provider by @dastratakos in #142
- chore: stop logging hotkey and media-duck status to the console by @dastratakos in #150
- feat(sessions): observe every conversation, show the ones that still matter by @dastratakos in #144
- feat(voice): keep Luke quiet when a tool call succeeds by @dastratakos in #148
- fix(voice): hold one context item per kind and retire idle calls by @dastratakos in #146
- fix(motion): mount Luke's meter behind the capsule's growing edge by @dastratakos in #151
- feat(voice): keep spoken references free of hashes and machine ids by @dastratakos in #155
- fix(voice): announce only status edges whose events are fresh by @dastratakos in #156
- feat(settings): simplify the Voice page and retire the announce switch by @dastratakos in #157
- fix(settings): simplify the OpenAI key subtext by @dastratakos in #158
- chore(voice): log only the model id when voice is enabled by @dastratakos in #159
- fix(settings): move cloud-agent key trust note under the header by @dastratakos in #160
- feat(voice): let a standing ask decide when a session speaks by @dastratakos in #149
- feat(conductor): report workspace lifecycle status on session rows by @dastratakos in #154
- docs: correct capability and privacy claims to match trust constraints by @charleslpan in #147
- fix(web): replace the placeholder favicon with the Luke app icon by @dastratakos in #163
- feat(web): add a hosted privacy policy page by @charleslpan in #162
- fix(conductor): drop archived workspaces from the session roster by @dastratakos in #164
- feat(voice): report call failures on the caption strip instead of Settings by @dastratakos in #165
- feat(notices): say what a waiting session needs, not only that it waits by @dastratakos in #153
- feat(claude-code): observe local sessions through hooks and read their transcripts on ask by @dastratakos in #119
- feat(sessions): shorten the archive control label to "Archive" by @dastratakos in #168
- feat(sessions): search the list by what its rows say by @dastratakos in #166
- chore(web): add Drizzle database foundation by @charleslpan in #167
- docs: streamline README for open source launch by @charleslpan in #171
- feat(providers): widen hook observation to Codex and on-ask transcript reads to every local provider by @dastratakos in #169
- fix(sessions): scale the count badge down before it crosses the shape's edge by @dastratakos in #172
- fix(voice): let announcements through — retry refused calls, stop the evaluator's 429 storm by @dastratakos in #170
- feat(desktop): announce session news as a pressable notice popup by @dastratakos in #173
- fix(attention): consume stale developments silently instead of reviewing history as news by @dastratakos in #174
- feat: require Google or GitHub sign-in by @charleslpan in #161
- fix(voice): anchor a bare "that chat" to the session under discussion by @dastratakos in #175
- fix(desktop): keep the caption clear of settings pages by @dastratakos in #177
- fix(web): restore production sign-in routing by @charleslpan in #179
- feat(workspaces): open a created workspace on screen once observed by @dastratakos in #176
- fix(conductor): drop archived chats from the session roster by @dastratakos in #178
New Contributors
- @charleslpan made their first contribution in #32
- @devin-ai-integration[bot] made their first contribution in #39
Full Changelog: https://github.com/ReviewStage/luke/commits/v0.1.0