Skip to content

feat: thread parentAgent through session, task, and chat hooks - #1

Merged
ArmirKS merged 4785 commits into
devfrom
feat/parentAgent-on-latest
Jun 11, 2026
Merged

ArmirKS merged 4785 commits into
devfrom
feat/parentAgent-on-latest

Conversation

@ArmirKS

@ArmirKS ArmirKS commented Jun 11, 2026

Copy link
Copy Markdown
Owner

Adds parentAgent context propagation across sessions, tasks, and chat hooks.

Changes

  • Include parent agent context in hook inputs (plugin)
  • Thread parentAgent through session, task, and chat hooks (opencode)
  • Persist parentAgent on user messages and fix plugin test

nexxeln and others added 30 commits June 4, 2026 19:47
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
…o#30761)

Co-authored-by: Shoubhit Dash <shoubhit2005@gmail.com>
Co-authored-by: LukeParkerDev <10430890+Hona@users.noreply.github.com>
opencode-agent Bot and others added 24 commits June 10, 2026 00:51
Re-applies the parent-agent threading from forked commits eb815ac and
e64832d against the current upstream/dev shape:

- SessionV1.User gains optional parentAgent field
- TaskTool.runTask passes parentAgent: ctx.agent into ops.prompt so
  spawned subagent sessions know their parent
- LLMRequestPrep.prepare forwards input.user.parentAgent into the
  chat.params and chat.headers plugin trigger inputs (matches the
  widened hook input types already on this branch)
- Adds parent-agent plugin test
- Add parentAgent: Schema.optional(Schema.String) to SessionPrompt.PromptInput
  and ShellInput so callers (TaskTool.runTask, ops.prompt, shell) can pass it.
- Persist input.parentAgent on the SessionV1.User built by createUserMessage
  and shellImpl, so llm/request.ts and plugin hooks read the real value
  instead of undefined.
- Rewrite parent-agent.test.ts against current shapes: use
  Schema.decodeUnknownSync (effect/Schema has no .zod) and SessionV1.User
  (MessageV2.User no longer exported).
@github-actions

Copy link
Copy Markdown

Thanks for your contribution!

This PR doesn't have a linked issue. All PRs must reference an existing issue.

Please:

  1. Open an issue describing the bug/feature (if one doesn't exist)
  2. Add Fixes #<number> or Closes #<number> to this PR description

See CONTRIBUTING.md for details.

@coderabbitai

coderabbitai Bot commented Jun 11, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 296 files, which is 146 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 00c16f30-260e-4b13-aea8-493a42a27e6f

📥 Commits

Reviewing files that changed from the base of the PR and between 72c09e1 and 5d52246.

⛔ Files ignored due to path filters (4)
  • bun.lock is excluded by !**/*.lock
  • flake.lock is excluded by !**/*.lock
  • packages/app/public/assets/Inter.ttf is excluded by !**/*.ttf
  • packages/app/public/assets/JetBrainsMonoNerdFontMono-Regular.woff2 is excluded by !**/*.woff2
📒 Files selected for processing (296)
  • .dockerignore
  • .gitattributes
  • .github/CODEOWNERS
  • .github/ISSUE_TEMPLATE/bug-report.yml
  • .github/ISSUE_TEMPLATE/feature-request.yml
  • .github/ISSUE_TEMPLATE/question.yml
  • .github/TEAM_MEMBERS
  • .github/VOUCHED.td
  • .github/actions/setup-bun/action.yml
  • .github/actions/setup-git-committer/action.yml
  • .github/pull_request_template.md
  • .github/workflows/beta.yml
  • .github/workflows/close-issues.yml
  • .github/workflows/close-prs.yml
  • .github/workflows/close-stale-prs.yml
  • .github/workflows/compliance-close.yml
  • .github/workflows/containers.yml
  • .github/workflows/daily-issues-recap.yml
  • .github/workflows/daily-pr-recap.yml
  • .github/workflows/deploy.yml
  • .github/workflows/docs-locale-sync.yml
  • .github/workflows/docs-update.yml
  • .github/workflows/duplicate-issues.yml
  • .github/workflows/generate.yml
  • .github/workflows/nix-desktop.yml.disabled
  • .github/workflows/nix-eval.yml
  • .github/workflows/nix-hashes.yml
  • .github/workflows/notify-discord.yml
  • .github/workflows/opencode.yml
  • .github/workflows/pr-management.yml
  • .github/workflows/pr-standards.yml
  • .github/workflows/publish-github-action.yml
  • .github/workflows/publish-vscode.yml
  • .github/workflows/publish.yml
  • .github/workflows/release-github-action.yml
  • .github/workflows/review.yml
  • .github/workflows/sign-cli.yml
  • .github/workflows/stale-issues.yml
  • .github/workflows/stats.yml
  • .github/workflows/storybook.yml
  • .github/workflows/sync-zed-extension.yml
  • .github/workflows/test.yml
  • .github/workflows/triage.yml
  • .github/workflows/typecheck.yml
  • .github/workflows/vouch-check-issue.yml
  • .github/workflows/vouch-check-pr.yml
  • .github/workflows/vouch-manage-by-issue.yml
  • .gitignore
  • .gitleaksignore
  • .opencode/.gitignore
  • .opencode/agent/docs.md
  • .opencode/agent/translator.md
  • .opencode/agent/triage.md
  • .opencode/command/changelog.md
  • .opencode/command/commit.md
  • .opencode/command/translate.md
  • .opencode/glossary/README.md
  • .opencode/glossary/ar.md
  • .opencode/glossary/br.md
  • .opencode/glossary/bs.md
  • .opencode/glossary/da.md
  • .opencode/glossary/de.md
  • .opencode/glossary/es.md
  • .opencode/glossary/fr.md
  • .opencode/glossary/ja.md
  • .opencode/glossary/ko.md
  • .opencode/glossary/no.md
  • .opencode/glossary/pl.md
  • .opencode/glossary/ru.md
  • .opencode/glossary/th.md
  • .opencode/glossary/tr.md
  • .opencode/glossary/zh-cn.md
  • .opencode/glossary/zh-tw.md
  • .opencode/opencode.jsonc
  • .opencode/plugins/smoke-theme.json
  • .opencode/plugins/tui-smoke.tsx
  • .opencode/skill/bun-file-io/SKILL.md
  • .opencode/skills/effect/SKILL.md
  • .opencode/themes/.gitignore
  • .opencode/themes/mytheme.json
  • .opencode/tool/github-pr-search.ts
  • .opencode/tool/github-pr-search.txt
  • .opencode/tool/github-triage.ts
  • .opencode/tool/github-triage.txt
  • .opencode/tui.json
  • .oxlintrc.json
  • .zed/settings.json
  • AGENTS.md
  • CONTEXT.md
  • CONTRIBUTING.md
  • README.ar.md
  • README.bn.md
  • README.br.md
  • README.bs.md
  • README.da.md
  • README.de.md
  • README.es.md
  • README.fr.md
  • README.gr.md
  • README.it.md
  • README.ja.md
  • README.ko.md
  • README.md
  • README.no.md
  • README.pl.md
  • README.ru.md
  • README.th.md
  • README.tr.md
  • README.uk.md
  • README.vi.md
  • README.zh.md
  • README.zht.md
  • SECURITY.md
  • bunfig.toml
  • flake.nix
  • github/action.yml
  • github/index.ts
  • github/sst-env.d.ts
  • infra/app.ts
  • infra/console.ts
  • infra/enterprise.ts
  • infra/lake.ts
  • infra/monitoring.ts
  • infra/secret.ts
  • infra/stage.ts
  • infra/stats.ts
  • nix/desktop.nix
  • nix/hashes.json
  • nix/node_modules.nix
  • nix/opencode.nix
  • package.json
  • packages/app/README.md
  • packages/app/create-effect-simplification-spec.md
  • packages/app/e2e/AGENTS.md
  • packages/app/e2e/actions.ts
  • packages/app/e2e/app/home.spec.ts
  • packages/app/e2e/app/navigation.spec.ts
  • packages/app/e2e/app/palette.spec.ts
  • packages/app/e2e/app/server-default.spec.ts
  • packages/app/e2e/app/session.spec.ts
  • packages/app/e2e/app/titlebar-history.spec.ts
  • packages/app/e2e/files/file-open.spec.ts
  • packages/app/e2e/files/file-tree.spec.ts
  • packages/app/e2e/files/file-viewer.spec.ts
  • packages/app/e2e/fixtures.ts
  • packages/app/e2e/models/model-picker.spec.ts
  • packages/app/e2e/models/models-visibility.spec.ts
  • packages/app/e2e/projects/project-edit.spec.ts
  • packages/app/e2e/projects/projects-close.spec.ts
  • packages/app/e2e/projects/projects-switch.spec.ts
  • packages/app/e2e/projects/workspace-new-session.spec.ts
  • packages/app/e2e/projects/workspaces.spec.ts
  • packages/app/e2e/prompt/context.spec.ts
  • packages/app/e2e/prompt/prompt-async.spec.ts
  • packages/app/e2e/prompt/prompt-mention.spec.ts
  • packages/app/e2e/prompt/prompt-slash-open.spec.ts
  • packages/app/e2e/prompt/prompt.spec.ts
  • packages/app/e2e/regression/prompt-thinking-level.spec.ts
  • packages/app/e2e/regression/session-list-path-loading.spec.ts
  • packages/app/e2e/regression/session-timeline-collapse-state.spec.ts
  • packages/app/e2e/regression/session-timeline-context-resize.spec.ts
  • packages/app/e2e/selectors.ts
  • packages/app/e2e/session/session-undo-redo.spec.ts
  • packages/app/e2e/session/session.spec.ts
  • packages/app/e2e/settings/settings-keybinds.spec.ts
  • packages/app/e2e/settings/settings-models.spec.ts
  • packages/app/e2e/settings/settings-providers.spec.ts
  • packages/app/e2e/settings/settings.spec.ts
  • packages/app/e2e/sidebar/sidebar-popover-actions.spec.ts
  • packages/app/e2e/sidebar/sidebar-session-links.spec.ts
  • packages/app/e2e/sidebar/sidebar.spec.ts
  • packages/app/e2e/smoke/session-timeline.fixture.ts
  • packages/app/e2e/smoke/session-timeline.spec.ts
  • packages/app/e2e/status/status-popover.spec.ts
  • packages/app/e2e/terminal/terminal-init.spec.ts
  • packages/app/e2e/terminal/terminal.spec.ts
  • packages/app/e2e/thinking-level.spec.ts
  • packages/app/e2e/tsconfig.json
  • packages/app/e2e/utils.ts
  • packages/app/e2e/utils/errors.ts
  • packages/app/e2e/utils/mock-server.ts
  • packages/app/e2e/utils/waits.ts
  • packages/app/index.html
  • packages/app/package.json
  • packages/app/playwright.config.ts
  • packages/app/public/oc-theme-preload.js
  • packages/app/script/e2e-local.ts
  • packages/app/src/addons/serialize.test.ts
  • packages/app/src/addons/serialize.ts
  • packages/app/src/app.tsx
  • packages/app/src/components/debug-bar.tsx
  • packages/app/src/components/dialog-connect-provider.tsx
  • packages/app/src/components/dialog-custom-provider-form.ts
  • packages/app/src/components/dialog-custom-provider.test.ts
  • packages/app/src/components/dialog-custom-provider.tsx
  • packages/app/src/components/dialog-edit-project.tsx
  • packages/app/src/components/dialog-fork.tsx
  • packages/app/src/components/dialog-manage-models.tsx
  • packages/app/src/components/dialog-release-notes.tsx
  • packages/app/src/components/dialog-select-directory.tsx
  • packages/app/src/components/dialog-select-file.tsx
  • packages/app/src/components/dialog-select-mcp.tsx
  • packages/app/src/components/dialog-select-model-unpaid.tsx
  • packages/app/src/components/dialog-select-model.tsx
  • packages/app/src/components/dialog-select-provider.tsx
  • packages/app/src/components/dialog-select-server.tsx
  • packages/app/src/components/dialog-settings.tsx
  • packages/app/src/components/dialog-usage-exceeded.tsx
  • packages/app/src/components/directory-picker-policy.ts
  • packages/app/src/components/directory-picker.test.ts
  • packages/app/src/components/directory-picker.tsx
  • packages/app/src/components/file-tree.test.ts
  • packages/app/src/components/file-tree.tsx
  • packages/app/src/components/help-button.tsx
  • packages/app/src/components/prompt-input.tsx
  • packages/app/src/components/prompt-input/attachments.test.ts
  • packages/app/src/components/prompt-input/attachments.ts
  • packages/app/src/components/prompt-input/build-request-parts.test.ts
  • packages/app/src/components/prompt-input/build-request-parts.ts
  • packages/app/src/components/prompt-input/context-items.tsx
  • packages/app/src/components/prompt-input/editor-dom.test.ts
  • packages/app/src/components/prompt-input/editor-dom.ts
  • packages/app/src/components/prompt-input/files.ts
  • packages/app/src/components/prompt-input/history.test.ts
  • packages/app/src/components/prompt-input/history.ts
  • packages/app/src/components/prompt-input/image-attachments.tsx
  • packages/app/src/components/prompt-input/paste.ts
  • packages/app/src/components/prompt-input/placeholder.test.ts
  • packages/app/src/components/prompt-input/placeholder.ts
  • packages/app/src/components/prompt-input/server-attachment.test.ts
  • packages/app/src/components/prompt-input/server-attachment.ts
  • packages/app/src/components/prompt-input/slash-popover.tsx
  • packages/app/src/components/prompt-input/submit.test.ts
  • packages/app/src/components/prompt-input/submit.ts
  • packages/app/src/components/question-dock.tsx
  • packages/app/src/components/server/server-row-menu.tsx
  • packages/app/src/components/server/server-row.tsx
  • packages/app/src/components/session-context-usage.tsx
  • packages/app/src/components/session/index.ts
  • packages/app/src/components/session/session-context-tab.tsx
  • packages/app/src/components/session/session-header.tsx
  • packages/app/src/components/session/session-new-design-view.tsx
  • packages/app/src/components/session/session-new-view.tsx
  • packages/app/src/components/session/session-sortable-tab.tsx
  • packages/app/src/components/session/session-sortable-terminal-tab.tsx
  • packages/app/src/components/settings-agents.tsx
  • packages/app/src/components/settings-commands.tsx
  • packages/app/src/components/settings-general.tsx
  • packages/app/src/components/settings-keybinds.tsx
  • packages/app/src/components/settings-list.tsx
  • packages/app/src/components/settings-mcp.tsx
  • packages/app/src/components/settings-models.tsx
  • packages/app/src/components/settings-permissions.tsx
  • packages/app/src/components/settings-providers.tsx
  • packages/app/src/components/settings-server-picker.tsx
  • packages/app/src/components/settings-servers.tsx
  • packages/app/src/components/settings-v2/dialog-server-v2.tsx
  • packages/app/src/components/settings-v2/dialog-settings-v2.tsx
  • packages/app/src/components/settings-v2/general.tsx
  • packages/app/src/components/settings-v2/index.tsx
  • packages/app/src/components/settings-v2/models.tsx
  • packages/app/src/components/settings-v2/parts/list.tsx
  • packages/app/src/components/settings-v2/parts/row.tsx
  • packages/app/src/components/settings-v2/providers.tsx
  • packages/app/src/components/settings-v2/servers.tsx
  • packages/app/src/components/settings-v2/settings-v2.css
  • packages/app/src/components/status-popover-body.tsx
  • packages/app/src/components/status-popover.tsx
  • packages/app/src/components/terminal.tsx
  • packages/app/src/components/titlebar-session-events.test.ts
  • packages/app/src/components/titlebar-session-events.ts
  • packages/app/src/components/titlebar.tsx
  • packages/app/src/components/updater-action.test.ts
  • packages/app/src/components/updater-action.ts
  • packages/app/src/components/windows-app-menu.tsx
  • packages/app/src/constants/file-picker.ts
  • packages/app/src/context/command-keybind.test.ts
  • packages/app/src/context/command.tsx
  • packages/app/src/context/comments.test.ts
  • packages/app/src/context/comments.tsx
  • packages/app/src/context/directory-sync.ts
  • packages/app/src/context/file.tsx
  • packages/app/src/context/file/path.test.ts
  • packages/app/src/context/file/path.ts
  • packages/app/src/context/file/view-cache.ts
  • packages/app/src/context/global-sdk.tsx
  • packages/app/src/context/global-sync.test.ts
  • packages/app/src/context/global-sync.tsx
  • packages/app/src/context/global-sync/bootstrap.test.ts
  • packages/app/src/context/global-sync/bootstrap.ts
  • packages/app/src/context/global-sync/child-store.test.ts
  • packages/app/src/context/global-sync/child-store.ts
  • packages/app/src/context/global-sync/event-reducer.test.ts
  • packages/app/src/context/global-sync/event-reducer.ts
  • packages/app/src/context/global-sync/mcp.test.ts
  • packages/app/src/context/global-sync/mcp.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/parentAgent-on-latest

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request migrates the desktop application from Tauri to Electron, updates Nix and package configurations, introduces locale-specific translation glossaries, and integrates an AWS-based data lake for ingestion and monitoring. It also refactors several SolidJS components in the web application to improve dialogs, layout, and state management, alongside reorganizing Playwright E2E tests. The review feedback highlights critical SolidJS and Solid-Query issues, including using createMutation instead of useMutation to prevent runtime import errors, ensuring proper reactive dependency tracking in createResource by passing the active server as a source, adding optional chaining to avoid potential TypeErrors on uninitialized store data, and fixing a state persistence bug in the provider auto-selection logic.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.


setForm("saving", true)
const saveMutation = useMutation(() => ({
mutationFn: async (result: NonNullable<ReturnType<typeof validate>>) => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

Use createMutation instead of useMutation to match the correct export from @tanstack/solid-query.

  const saveMutation = createMutation(() => ({

import { useDialog } from "@opencode-ai/ui/context/dialog"
import { Dialog } from "@opencode-ai/ui/dialog"
import { TextField } from "@opencode-ai/ui/text-field"
import { useMutation } from "@tanstack/solid-query"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

In @tanstack/solid-query (v5), the standard and exported hook is createMutation, not useMutation. Using useMutation will result in a runtime import error.

Suggested change
import { useMutation } from "@tanstack/solid-query"
import { createMutation } from "@tanstack/solid-query"

return
}
const saveMutation = useMutation(() => ({
mutationFn: async () => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

Use createMutation instead of useMutation to match the correct export from @tanstack/solid-query.

  const saveMutation = createMutation(() => ({

Comment on lines +84 to +85
? input.t("provider.custom.error.required")
: seenModels.has(id)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This is validating the model ID, but it uses the translation key for the provider ID (provider.custom.error.providerID.required). It should use a generic required key or a model-specific one to avoid displaying an incorrect error message to the user.

    const idError = !id
      ? input.t("provider.custom.error.required")

return res.data?.[props.provider] ?? fallback()
},
)
const loading = createMemo(() => auth.loading && !serverSync.data.provider_auth[props.provider])

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Use optional chaining here to prevent a potential TypeError if provider_auth is undefined.

Suggested change
const loading = createMemo(() => auth.loading && !serverSync.data.provider_auth[props.provider])
const loading = createMemo(() => auth.loading && !serverSync.data.provider_auth?.[props.provider])

},
)
const loading = createMemo(() => auth.loading && !serverSync.data.provider_auth[props.provider])
const methods = createMemo(() => auth.latest ?? serverSync.data.provider_auth[props.provider] ?? fallback())

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Use optional chaining here to prevent a potential TypeError if provider_auth is undefined.

Suggested change
const methods = createMemo(() => auth.latest ?? serverSync.data.provider_auth[props.provider] ?? fallback())
const methods = createMemo(() => auth.latest ?? serverSync.data.provider_auth?.[props.provider] ?? fallback())

Comment on lines +323 to 331
let auto = false
createEffect(() => {
if (auto) return
if (loading()) return
if (methods().length === 1) {
selectMethod(0)
auto = true
void selectMethod(0)
}
})

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Since auto is a local boolean variable, it will persist across runs of the effect for the lifetime of the component. However, if props.provider changes while the component is kept mounted, auto will remain true, preventing the auto-selection from running for the new provider. We should track the selected provider in auto instead of a simple boolean to support dynamic provider changes.

Suggested change
let auto = false
createEffect(() => {
if (auto) return
if (loading()) return
if (methods().length === 1) {
selectMethod(0)
auto = true
void selectMethod(0)
}
})
let auto = ""
createEffect(() => {
if (auto === props.provider) return
if (loading()) return
if (methods().length === 1) {
auto = props.provider
void selectMethod(0)
}
})

let at = 0
const dirs = [project.worktree, ...(project.sandboxes ?? [])]
for (const directory of dirs) {
const sessions = sync.child(directory, { bootstrap: false })[0].session

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Use optional chaining and a fallback array here to prevent a potential TypeError if the child store is not yet initialized or doesn't have the session property.

Suggested change
const sessions = sync.child(directory, { bootstrap: false })[0].session
const sessions = sync.child(directory, { bootstrap: false })[0]?.session ?? []

Comment thread packages/app/src/app.tsx
Comment on lines +272 to +289
const [startupHealthCheck, healthCheckActions] = createResource(() =>
props.disableHealthCheck
? true
: Effect.gen(function* () {
if (!server.current) return true
const { http, type } = server.current

while (true) {
const res = yield* Effect.promise(() => checkServerHealth(http))
if (res.healthy) return true
if (checkMode() === "background" || type === "http") return false
}
}).pipe(
Effect.timeoutOrElse({ duration: "10 seconds", orElse: () => Effect.succeed(false) }),
Effect.ensuring(Effect.sync(() => setCheckMode("background"))),
Effect.runPromise,
),
)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

In SolidJS, createResource only tracks reactive dependencies accessed in its first argument (the source function). Since server.current is accessed inside the fetcher function itself, changes to the active server will not automatically trigger a new health check. We should pass the active server as the source to make the resource fully reactive.

  const [startupHealthCheck, healthCheckActions] = createResource(
    () => ({ server: server.current, disable: props.disableHealthCheck }),
    ({ server, disable }) =>
      disable
        ? true
        : Effect.gen(function* () {
            if (!server) return true
            const { http, type } = server

            while (true) {
              const res = yield* Effect.promise(() => checkServerHealth(http))
              if (res.healthy) return true
              if (checkMode() === "background" || type === "http") return false
            }
          }).pipe(
            Effect.timeoutOrElse({ duration: "10 seconds", orElse: () => Effect.succeed(false) }),
            Effect.ensuring(Effect.sync(() => setCheckMode("background"))),
            Effect.runPromise,
          ),
  )

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
@ArmirKS
ArmirKS merged commit 137ca41 into dev Jun 11, 2026
2 of 9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.