Skip to content

Release v0.16.0 - Web previews with direct page feedback, repository cloning, chat search and more#443

Merged
shantur merged 40 commits into
mainfrom
dev
May 14, 2026
Merged

Release v0.16.0 - Web previews with direct page feedback, repository cloning, chat search and more#443
shantur merged 40 commits into
mainfrom
dev

Conversation

@shantur
Copy link
Copy Markdown
Collaborator

@shantur shantur commented May 14, 2026

Thanks for contributions

Highlights

  • Web previews create a much tighter fix loop: Open a live preview from a session, highlight the exact part of the page that needs work, and tell the model what to change right from the webpage. CodeNomad sends that page and element context back into chat so the LLM can act on specific visual feedback instead of vague descriptions.
  • Bringing repositories into CodeNomad is much easier: You can now clone a Git repository directly from the workspace picker, making it faster to start work on a fresh project without leaving the app.
  • Searching inside long conversations is finally practical: Session history search can now find matches across messages, tool output, and related content, helping you jump straight to the part of a conversation you need.
  • Sessions are easier to manage at a glance: Parent sessions now show aggregated token and cost totals across subagents, the message timeline can be hidden when you want more room, and tabs can be reordered.
  • Mobile views and narrow screens feel much better: Prompt controls, message actions, timeline behavior, and other session UI pieces adapt more cleanly when space gets tight.

What’s Improved

  • Smoother workspace startup: The home screen, empty states, and startup flow are clearer, and returning between active projects and the home view feels more natural.
  • More useful browsing and previewing: Markdown now supports math rendering, web previews are integrated into the session flow, and unrestricted browsing respects the selected workspace root more reliably.
  • Cleaner model and agent selection: Models are grouped by provider, and primary agent selection now follows OpenCode’s visibility rules more closely.
  • Better prompt and attachment handling: File attachment picking is more consistent with drag-and-drop behavior, and prompt controls are laid out more clearly in compact layouts.
  • More self-contained packaging: Desktop builds do a better job bundling the runtime, shipping the CodeNomad OpenCode plugin, and producing more consistent release artifacts.

Fixes

  • Permission flows are more reliable: Stale permission events are ignored after a reply, permission metadata is preserved more safely, and attachment context survives more consistently.
  • Idle/session indicators behave more predictably: Idle badges now stay visible until they are actually seen, and session status behavior is easier to understand across parent and child sessions.
  • Desktop and packaged builds are more dependable: Bundled resources refresh more reliably, packaged session storage is isolated correctly, remote window titles are preserved, and Windows resource preparation avoids a brittle shell path.
  • Compact layouts are less frustrating: Message actions, tool-call controls, timeline spacing, and prompt controls behave better in narrow center panes and smaller screens.
  • Release/update navigation is clearer: Update links stay visible more reliably, making it easier to see and open release information when an update is available.

Contributors

Merged Pull Requests

@shantur

  • PR #397 “Add clone repository workspace flow”
  • PR #399 “feat(ui): allow tab reordering”
  • PR #400 “feat(ui): add chat history search”
  • PR #430 “Add session web preview mode”
  • PR #432 “fix(ui): align prompt attachment picker with drop behavior”
  • PR #433 “Package CodeNomad OpenCode plugin”
  • PR #434 “Refactor workspace startup and empty session states”
  • PR #437 “Improve prompt layout for narrow session panes”
  • PR #438 “Improve messages layouts on narrow screens”

@pascalandr

  • PR #394 “fix(tauri): refresh bundled resources on rebuild”
  • PR #405 “fix(tauri): prefer bundled server entry in release”
  • PR #410 “fix(ui): keep update release link visible”
  • PR #411 “fix(ui): return to active projects from home”
  • PR #423 “fix(ui): follow up idle badge behavior”
  • PR #424 “fix(ui): drain yolo permissions outside shell render”
  • PR #425 “fix(ui): ignore stale permission events after reply”
  • PR #426 “fix(ui): reconcile permission tool attachments”
  • PR #428 “feat(ui): make message timeline hideable”
  • PR #436 “fix(electron): avoid shell for resource prep”

@OfflinePing

  • PR #415 “feat(ui): show aggregated total tokens and cost for parent sessions including subagents”

@jollyxenon

  • PR #381 “Fix(ui): Support Markdown Math Rendering”
  • PR #409 “fix(ui): align primary agent selection with OpenCode”

shantur and others added 30 commits May 3, 2026 20:23
Keep idle status visible only briefly after active work finishes so the session list and headers emphasize meaningful state changes instead of permanent idle noise.
## Summary
- Re-run the Tauri build script when bundled desktop resources change.
- Clear stale `target/<profile>/resources` output before Tauri recopies
resources.
- Keeps raw Tauri release builds from launching stale server/UI
resources after `bundle:server`.

## Verification
- `npm run bundle:server --workspace @codenomad/tauri-app && cargo build
--release --manifest-path "packages/tauri-app/src-tauri/Cargo.toml"`
- Verified `target/release/resources/server/package.json` and
`server/public/ui-version.json` report `0.15.0`.
- Verified `target/release/resources/node/win32-x64/node.exe` is
present.
- Performed incremental add/update/delete checks under
`src-tauri/resources` and confirmed `target/release/resources` resyncs
without manual clean.
Add `KaTeX` extension for math formula rendering

It solves the issue #379 .

Now the interface acts like this when processing formulas:

`$\mathbb{R}$`:
<img width="1016" height="83" alt="image"
src="https://github.com/user-attachments/assets/7a7534c0-3128-4a98-a01f-336db42e0f26"
/>

`$$ \mathbb{R} $$`:
<img width="1016" height="89" alt="image"
src="https://github.com/user-attachments/assets/9da7d2e4-06cc-41e8-b598-eab8b3be7677"
/>

```markdown
$$
\mathbb{R}
$$
```
:
<img width="1016" height="88" alt="image"
src="https://github.com/user-attachments/assets/a1be91e3-7ff1-4cf9-8982-c2657348317d"
/>


Closes #379

---------

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
## Summary
- Implements the requested three-state session tab behavior without
introducing a new blue indicator.
- Uses the existing yellow/working indicator while a session is actively
running, the existing green/idle indicator when work finished in a
non-viewed session, and no indicator once that completed session has
been viewed.
- Keeps the green completed-but-unseen indicator visible for 2.5 seconds
after the session becomes active, preserving the previous transient
feedback instead of clearing it instantly.

Fixes #376

## Verification
- `npm run typecheck --workspace @codenomad/ui`
- `npm run build --workspace @codenomad/ui`
When --unrestricted-root is enabled, filesystem browsing now starts from the configured workspace root instead of defaulting to the user's home directory. This makes CLI_WORKSPACE_ROOT and --workspace-root define the initial location while preserving unrestricted navigation to absolute paths outside that root.

The implementation updates unrestricted path resolution so empty and dot paths resolve to the configured root, and aligns unrestricted metadata so rootPath consistently represents that configured root. The Windows drives pseudo-root now reports the same rootPath as other unrestricted listings, keeping the metadata contract uniform across platforms.

Add FileSystemBrowser tests covering unrestricted default browsing, dot-path handling, outside-root navigation, default folder creation, and Windows drive pseudo-root metadata via a platform override. Also make the existing workspace search cache refresh test use deterministic timestamps so the full server test suite remains reliable.
Document the repository expectation that future commits include more than a terse subject. The new guidance asks agents to explain the user-visible behavior change, implementation approach, relevant edge cases or platform considerations, and validation coverage.

This makes the detailed commit style used for recent server work explicit for future changes, helping reviews understand why a change exists and how regressions were prevented without needing to reconstruct intent from the diff alone.
Add session-scoped chat history search that opens from Cmd/Ctrl+F or the
session header search button. The search scans normalized message
records rather than rendered DOM so virtualized/offscreen history can be
found, while hidden synthetic content and preference-hidden thinking
remain excluded from normal results.

Render matches in the message stream and timeline with yellow
highlights, jump between matches, expand matching thinking blocks, and
scroll the active inline match into view for long messages. Search waits
for at least three characters and debounces indexing so long sessions
show an explicit searching state instead of a false empty result.

Validation: npm run typecheck --workspace @codenomad/ui; npm run build
--workspace @codenomad/ui.
Replace incidental backend model ordering with deterministic UI ordering so long model lists are easier to scan. The picker now sorts providers by provider id, sorts models by display name within each provider, and inserts compact provider headers that show provider names with ids for disambiguation.

Filtering is applied before headers are rendered so visible matches keep their provider context. Header rows are disabled picker options to avoid Kobalte section key collisions while preserving the existing model row layout and favorite controls.

Validation: npm run typecheck --workspace @codenomad/ui
## Why
When running the Tauri release executable from `target/release`, the app
should start the server bundle that was packaged next to the executable:

`target/release/resources/server/dist/bin.js`

Before this change, `resolve_prod_entry()` checked the workspace build
first:

`packages/server/dist/bin.js`

That can make a release run depend on the local checkout instead of the
packaged resources. It also makes rebuild/runtime checks misleading,
because the exe may appear to work while using files outside the release
bundle.

## What Changed
- Check bundled release resource paths first when resolving the
production server entry.
- Keep the workspace `packages/server/dist/bin.js` path as a fallback.

## Validation
- Verified the change is limited to production entry resolution in
`cli_manager.rs`.
- This was discovered while launching the rebuilt Tauri release
executable and checking that the spawned Node process used
`target/release/resources/server/dist`.
## Summary
- Adds a server endpoint to clone a Git repository into a selected local
destination.
- Adds a folder selection action/dialog for repository URL, destination
folder, and optional destination cleanup.
- Opens the cloned folder as the workspace after clone succeeds.

Fixes #253

## Validation
- npm run typecheck --workspace @codenomad/ui
- npm run typecheck --workspace @neuralnomads/codenomad
- npm run build --workspace @codenomad/ui
## Summary
- Keep a stable release link visible in the home screen version pill
whenever update metadata is available.
- Leave the existing one-time update toast behavior unchanged while
giving users a permanent place to reopen the release page.
- Reuse the existing release i18n strings instead of adding new UI copy.

Fixes #267

## Verification
- `npm run typecheck --workspace @codenomad/ui`
- `npm run build --workspace @codenomad/ui`

<img width="660" height="507" alt="image"
src="https://github.com/user-attachments/assets/7058cf18-0c01-45da-994a-20fe1497980c"
/>
Remove the launcher tagline from the home screen and normalize the Open Sidecar action spacing so the action stack uses consistent vertical rhythm.

This keeps the recent workspace area higher on the page without changing launcher behavior or the existing folder, clone, sidecar, and remote actions.
…ncluding subagents (#415)

## Summary

- Adds three new chips (Total In, Total Out, Total Cost) to the
`ContextUsagePanel` that aggregate usage across the parent session and
all child sessions (subagents and forks)
- Child session messages are proactively loaded to ensure historical
data appears without manually navigating to each child
- Chips respect the existing `showUsageMetrics` preference toggle and
are hidden when the session has no children
- Reactive computation is scoped to the current instance to avoid
unnecessary re-runs

## Changes

| File | Change |
|------|--------|
| `packages/ui/src/components/session/context-usage-panel.tsx` | Adds
`threadTotals` memo, proactive `loadMessages` effect, and three total
chips |
| `packages/ui/src/lib/i18n/messages/*/settings.ts` (7 locales) | Adds
`totalInput`, `totalOutput`, `totalCost` i18n keys |

## Screenshots
When viewing a parent session with subagents, the panel shows:
```
[Input] [Output] [Cost] | [Total In] [Total Out] [Total Cost]
```

## Notes
- This PR was primarily AI-generated and has gone through several
iterative review and refinement steps
- Built and type-checked against `upstream/dev`
- Needs review and approval from the CodeNomad team

Closes #401

---------

Co-authored-by: Pascal André <pascalandr@gmail.com>
Use the dedicated session children endpoint when refreshing the session list so parent rows and aggregate usage are based on the complete child set rather than the recent /session window.

Move thread usage totals into session state and refresh them whenever session info changes, including SSE-driven message updates. Parent message loading now also hydrates child messages from the store while preserving existing loaded-message guards.

Validation: npm run typecheck --workspace @codenomad/ui
## Summary

This PR keeps only the UI-side fix for primary agent selection in
CodeNomad.

It aligns the primary agent selector with OpenCode's behavior by:
- filtering primary-session agents through a shared selectable-primary
rule
- avoiding re-inserting an invalid current agent back into the primary
selector
- using the same primary-agent rule when choosing the default agent for
a newly created session

## Why

The earlier investigation showed that the config-loading problem was
actually rooted in OMO's handling of `OPENCODE_CONFIG_DIR`, not in
CodeNomad itself.

However, there was still an independent UI issue in CodeNomad:
- the primary selector could keep showing an agent that should no longer
be selectable
- new sessions could derive their default agent from a looser filter
than the one used by the selector

This PR keeps only that UI-side fix.

## Changes

- `packages/ui/src/components/agent-selector.tsx`
- use a shared `isSelectablePrimaryAgent` helper for primary-session
filtering
- stop force-inserting the current invalid agent back into the primary
selector list

- `packages/ui/src/stores/session-api.ts`
- use the same `isSelectablePrimaryAgent` helper when selecting the
default agent for a new session

- `packages/ui/src/types/session.ts`
  - add `isSelectablePrimaryAgent(agent)` helper

## Scope

This PR intentionally does **not** include any config merge / config
copy workaround related to `OPENCODE_CONFIG_DIR`.

That part was removed so this PR stays narrowly focused on the
primary-agent selection behavior only.

## Validation

- verified changed files are clean in editor diagnostics
- confirmed this is a minimal UI-only diff

---------

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
## Summary
- Split out from #422 as the YOLO-only permission fix.
- Moves YOLO auto-accept draining out of `InstanceShell` render effects
and into the permission queue flow.
- Keeps behavior unchanged: YOLO remains per-session and replies with
`once` only.
- Keeps in-flight cleanup for auto-accept attempts so duplicate sends
are guarded outside UI render timing.

## Why
In YOLO mode, the app could still appear to wait on a permission or
block the UI, even though auto-accept was enabled and the permission was
already queued.

The auto-accept drain was tied to an `InstanceShell` render effect, so
the reply path depended on a specific UI shell rendering. Draining from
permission sync/enqueue and from the YOLO toggle makes auto-accept run
from the permission queue itself instead of UI render timing.

## Validation
- `git diff --check`
- `npm run typecheck --workspace @codenomad/ui`
## Summary
- Split out from #422 as the stale-permission-events fix.
- Clears permission UI state immediately after a successful local
permission reply instead of waiting for `permission.replied` SSE.
- Tracks replied permission IDs until a newer pending-permission sync
observes that the server no longer reports them pending.
- Marks SSE `permission.replied` events into the same replied-ID path so
delayed pending events/sync results cannot resurrect prompts that were
just answered.

## Why
A permission prompt could remain on screen after clicking Allow/Deny, or
clicking Allow could look like it did not take effect and require
another click. Reloading could fix the UI, which pointed to stale local
permission state rather than the server still waiting.

The UI receives permission state from local replies, SSE events, and
pending-permission sync. If an older pending event or sync result is
processed after a confirmed reply, the UI can re-add a permission that
was already answered. Replied IDs stay suppressed until a sync started
after the local reply proves the server has dropped that permission from
the pending list.

## Validation
- `git diff --check`
- `node --test packages/ui/src/stores/permission-replies.test.ts`
- `npm run typecheck --workspace @codenomad/ui`
## Summary
- Add a behavior setting to show or hide the message timeline sidebar.
- Remove the timeline layout gutter when the sidebar is disabled.
- Add setting labels for all supported locales.

## Why
user wants a more minimal workspace and a little more horizontal room
without losing the default timeline experience for everyone else.

## Validation
- npm run typecheck --workspace @codenomad/ui
- git diff --check
- npm run build:tauri, then launched the raw release exe

Fixes #418
## Summary
- Split out from #422 as the permission/tool-call reconciliation fix.
- Reconciles pending permissions whenever live tool parts update,
matching the existing question re-link path.
- Keeps one message-v2 attachment per server permission ID and
recalculates the active permission from queue order.
- Conservatively merges duplicate or out-of-order permission updates so
known session/message/tool routing metadata is not lost.
- Fixes #290

## Why

The observed failure shape is that permission prompts can appear
missing, frozen, or attached in unexpected places when permission events
and tool-call parts are observed in different orders. In those cases,
the server-side permission may exist, but the UI can temporarily attach
it globally, attach it to the wrong tool location, or fail to move it
when the matching tool part arrives later.

This PR focuses on the UI-side attachment/order problem: one UI
attachment per server permission ID, re-linking permissions when tool
parts arrive, and preserving known routing metadata across
duplicate/out-of-order updates. It does not attempt semantic
deduplication across different permission IDs that happen to ask for the
same logical approval.

## Validation
- `git diff --check`
- `npm exec --no -- tsx --test packages/ui/src/types/permission.test.ts
packages/ui/src/stores/message-v2/instance-store.test.ts`
- `node --test packages/ui/src/stores/permission-replies.test.ts`
- `npm run typecheck --workspace @codenomad/ui`
## Summary
- Lock Electron remote BrowserWindow titles to the generated
saved-server title.
- Lock Tauri remote webview document titles through the remote
initialization script so native window titles remain distinguishable.
- Preserve the existing title format that includes the saved server name
and host.

Closes #427

## Validation
- npm run typecheck --workspace @neuralnomads/codenomad-electron-app
- cargo check (packages/tauri-app/src-tauri)
## Summary
- Follow-up to #395 after the idle badge persistence behavior regressed
around `keepUnseenSubagentIdleStatus`.
- Restores `keepUnseenSubagentIdleStatus` handling across session,
active-session, and instance-tab badge helpers.
- Starts a 5s fade when a viewed idle session/thread is seen, then
clears each exact idle transition after the animation even if focus
moves away.
- Keeps unseen subagent idle badges visible when the preference is
enabled, and keeps aggregate instance badges solid when any other
visible idle contributor is still unseen.

## Validation
- `git diff --check`
- `npm run typecheck --workspace @codenomad/ui`
- `npm run build --workspace @codenomad/ui`
- Gatekeeper re-review: no blocking findings remain for the prior
preference/race findings.

## Notes
- `node --test packages/ui/src/stores/session-status.test.ts` was
attempted, but the repo's extensionless TypeScript imports are not
directly resolvable by Node's test runner.
## Summary
- Return to an existing open project when users choose that from the
already-open folder dialog.
- When users click a recent folder that is already open, ask whether to
switch to the open project or intentionally open another instance.
- Surface a prominent Return to Active Project action so leaving the
home screen no longer depends on the subtle top-right close affordance.
- Keep multi-instance workflows available without requiring users to
remember a separate row-level button.

Fixes #281

## Why
Users can accidentally open the same workspace several times from the
add-project screen. The app now detects that ambiguity when the
already-open folder is clicked and asks what should happen, instead of
making the user remember a special alternate button ahead of time.

The dialog keeps the copy short: the title states that the project is
already open, and the buttons carry the actual choices.

## Verification
- `git diff --check`
- `npm run typecheck --workspace @codenomad/ui`
- `npm run build --workspace @codenomad/ui`
- `npm run build:tauri`
## Summary
- Add ephemeral per-session web preview mode for opening arbitrary
HTTP(S) URLs inside the session workspace without persisting preview
state across reloads.
- Reuse the SideCar iframe shell by extracting a shared BrowserFrame
with navigation, refresh, path entry, viewport presets, and no-injection
element comment targeting.
- Add authenticated preview proxy routes for HTTP and WebSocket traffic,
sharing lower-level proxy forwarding with SideCars to avoid duplicating
proxy code.
- Localize all new preview and viewport strings across English, Spanish,
French, Hebrew, Japanese, Russian, and Simplified Chinese.

## User-facing behavior
- Users can open a web preview from the session toolbar and toggle back
and forth between chat and preview mode.
- Preview mode replaces only the message stream/timeline area; the
prompt input and attachments stay available below the preview.
- Comment mode lets users select elements in the same-origin proxied
iframe and append structured page/element references to the prompt
draft.
- The generated prompt quotes the page/element reference while leaving
the user's actual comment as normal prompt text.
- Viewport selection supports responsive, desktop, tablet
portrait/landscape, and mobile portrait/landscape canvases, with fixed
sizes isolated inside the iframe scroll container.

## Implementation notes
- Preview sessions are in-memory and keyed by short-lived tokens exposed
through `/previews/:token`.
- Preview proxy responses strip frame-blocking headers and rewrite
same-origin redirect locations back under the preview route.
- SideCarView now composes the shared BrowserFrame, preserving existing
SideCar behavior while gaining shared viewport controls.
- Parent-side iframe DOM access powers hover highlighting and element
metadata extraction, avoiding HTML/script injection for the first
implementation.

## Validation
- `npm run typecheck --workspace @codenomad/ui`
- `npm run typecheck --workspace @neuralnomads/codenomad`

## Notes
- Existing unrelated local changes to `package.json` and
`package-lock.json` were intentionally left out of this PR.
- The initial proxy does not yet rewrite all HTML/CSS asset references;
pages with root-relative assets may need follow-up URL rewriting.
shantur and others added 9 commits May 11, 2026 10:55
## Summary
- Reuses the directory browser for web file attachment selection and
removes the separate filesystem browser dialog.
- Reads web-selected files through the filesystem browser API so
selection respects unrestricted and configured workspace roots.
- Keeps Electron/Tauri picker selection on the FileList ingestion path
so picked files behave like dropped files with byte-backed attachments.

## Validation
- npm run typecheck --workspace @codenomad/ui
- npm run typecheck --workspace @neuralnomads/codenomad
- npm run typecheck --workspace @neuralnomads/codenomad-electron-app
- cargo check
- git diff --check

## Notes
- Follow-up to #417; this branch currently includes the commits from
that PR plus the attachment picker parity fix.

---------

Co-authored-by: Pascal André <pascalandr@gmail.com>
## Summary
- Replace the old instance welcome screen with a focused workspace
launching state.
- Move no-session empty content into `MessageSection` as a variant of
the existing empty message-list view.
- Keep the normal bottom prompt available before a session exists and
create the first session from that prompt using draft agent/model
selections.

## Validation
- `npm run typecheck --workspace @codenomad/ui`

## Notes
- Existing local changes in `packages/opencode-config/package.json` and
`packages/opencode-config/package-lock.json` were left uncommitted and
are not part of this PR.
## Summary
- Rename the OpenCode config template into a versioned npm-packable
CodeNomad plugin package.
- Build and package the plugin through the server bundle, with
Electron/Tauri carrying it via existing server resources.
- Replace OPENCODE_CONFIG_DIR injection with JSONC-aware
OPENCODE_CONFIG_CONTENT merging that appends the CodeNomad plugin while
preserving user config.

## Validation
- npm run build --workspace @codenomad/codenomad-opencode-plugin
- npm run prepare-plugin --workspace @neuralnomads/codenomad
- npm run typecheck --workspace @neuralnomads/codenomad
- npm run typecheck --workspace @neuralnomads/codenomad-electron-app
- node --import tsx --test \"src/opencode-plugin.test.ts\"
\"src/workspaces/__tests__/spawn.test.ts\"

## Notes
- Production plugin loading uses an explicit npm file alias for the
packaged tarball.
- Dev loading still references the TypeScript plugin entry directly.

---------

Co-authored-by: Pascal André <pascalandr@gmail.com>
Remove the prominent Return to Active Project button from the folder selection actions area so the home screen no longer shows a redundant project-return call to action.

Drop the active project label plumbing and localized return subtitle strings because the overlay still has the existing close affordance for dismissing the home screen.

Validation: attempted pnpm --filter @codenomad/ui typecheck, but tsc was not available in the current environment.
## Summary
- Add measured `narrow` / `medium` / `wide` width steps to the session
center column so chat UI can respond to pane width rather than viewport
width.
- Rework prompt composer controls: clear/expand move into the text
field, narrow panes place auxiliary controls below the textarea, and
stop/send align bottom-right.
- Reduce branded empty-state logo/title size in narrow session panes and
remove the prompt `@ files/agents` overlay hint.

## Validation
- `npm run typecheck --workspace @codenomad/ui`
Move the compact timeline width rule from viewport media queries to the session-center narrow width step. This keeps the timeline compact when the chat pane is narrow due to side panels, even on wide desktop viewports.

Validation: npm run typecheck --workspace @codenomad/ui
## Summary
- Tighten thinking block action spacing so it matches adjacent action
groups.
- Collapse secondary message, thinking, and tool-call actions into a
Kobalte overflow menu only at the session-center narrow width stop.
- Keep single-action cases inline, preserve primary/status controls,
mirror delete hover overlays from menu items, and square the overflow
menu styling.

## Validation
- npm run typecheck --workspace @codenomad/ui
@shantur shantur requested a review from a team May 14, 2026 09:48
@github-actions
Copy link
Copy Markdown

PR builds are available as GitHub Actions artifacts:

https://github.com/NeuralNomadsAI/CodeNomad/actions/runs/25853454972

Artifacts expire in 7 days.
Artifacts: (none found on this run)

@shantur shantur merged commit 3f93309 into main May 14, 2026
10 of 11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants