Skip to content

fix(openshell): remove stale gateway entry before re-registering on startup - #2606

Merged
benoitf merged 2 commits into
openkaiden:mainfrom
benoitf:fix-openshell-gateway-stale-registration
Jul 30, 2026
Merged

benoitf merged 2 commits into
openkaiden:mainfrom
benoitf:fix-openshell-gateway-stale-registration

Conversation

@benoitf

@benoitf benoitf commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Remove stale kaiden-local CLI entry before re-adding in registerWithCli(), fixing "Gateway already exists" errors on restart

Fixes #2605

Test plan

  • Existing tests pass (49/49)
  • New test: removes stale gateway entry before re-registering — verifies removeGateway is called before addGateway
  • New test: registers successfully even when removeGateway fails — verifies graceful handling when no prior entry exists

🤖 Generated with Claude Code

@benoitf
benoitf requested a review from a team as a code owner July 29, 2026 14:32
@benoitf
benoitf requested review from MarsKubeX and fbricon and removed request for a team July 29, 2026 14:32
@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@benoitf, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 55 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 2c81d4b9-e108-483e-b87f-d494ff76e529

📥 Commits

Reviewing files that changed from the base of the PR and between 4b34692 and 44ccc92.

📒 Files selected for processing (2)
  • packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts
  • packages/main/src/plugin/openshell-cli/openshell-gateway.ts
📝 Walkthrough

Walkthrough

OpenshellGateway now checks existing kaiden-local entries before registration, skips matching endpoints, removes stale entries, and continues after removal failures. Tests cover each registration path and call ordering.

Changes

Gateway re-registration

Layer / File(s) Summary
Conditional gateway registration
packages/main/src/plugin/openshell-cli/openshell-gateway.ts
registerWithCli skips re-registration when the endpoint matches, otherwise removes kaiden-local before adding the gateway and suppresses removal errors.
Registration behavior coverage
packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts
Mocks and startup tests cover matching, stale, absent, and removal-failure cases, including cleanup ordering and registration arguments.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

Suggested reviewers: marskubex, fbricon, gastoner

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly matches the main change: removing stale gateway entries before re-registering on startup.
Description check ✅ Passed The description is directly related to the code changes and the restart re-registration bug.
Linked Issues check ✅ Passed The changes satisfy #2605 by cleaning up stale kaiden-local entries before re-registering the gateway on restart.
Out of Scope Changes check ✅ Passed The added endpoint checks and tests are aligned with the stated fix and do not appear unrelated to the issue.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts`:
- Around line 400-415: The test “removes stale gateway entry before
re-registering” only verifies that both gateway methods were called, not their
sequence. Update the assertions around openshellCli.removeGateway and
openshellCli.addGateway to assert that removeGateway is invoked before
addGateway, while preserving the existing argument checks.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: bfbd4af8-8862-460e-8760-0ceb9a0ca91d

📥 Commits

Reviewing files that changed from the base of the PR and between 85891ca and f8754c5.

📒 Files selected for processing (2)
  • packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts
  • packages/main/src/plugin/openshell-cli/openshell-gateway.ts
📜 Review details
⏰ Context from checks skipped due to timeout. (10)
  • GitHub Check: smoke-e2e-tests (dev) / ubuntu-24.04 (ollama)
  • GitHub Check: typecheck
  • GitHub Check: smoke-e2e-tests (prod) / ubuntu-24.04 (ollama)
  • GitHub Check: linter, formatters
  • GitHub Check: macOS
  • GitHub Check: Linux
  • GitHub Check: unit tests / ubuntu-24.04
  • GitHub Check: unit tests / windows-2022
  • GitHub Check: unit tests / macos-15
  • GitHub Check: Windows
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

Use /@/ path aliases instead of relative paths for imports outside the current directory's module group; use relative imports only for sibling modules within the same directory

Files:

  • packages/main/src/plugin/openshell-cli/openshell-gateway.ts
  • packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts
packages/main/src/**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

packages/main/src/**/*.{ts,tsx}: Use ipcHandle() to expose handlers in the main process with naming convention <registry-name>:<action> (e.g., container-provider-registry:listContainers)
Use apiSender.send() to send events from main process to renderer for real-time updates
Long-running operations should use TaskManager.createTask() with title and action configuration

Files:

  • packages/main/src/plugin/openshell-cli/openshell-gateway.ts
  • packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts
packages/{main,renderer,preload}/src/**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

Container operations must include engineId parameter to identify the container engine

Files:

  • packages/main/src/plugin/openshell-cli/openshell-gateway.ts
  • packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts
**/*.spec.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.spec.{ts,tsx,js,jsx}: Use test() instead of it() for test cases in Vitest unit tests
Use vi.mock(import('...')) for auto-mocking modules in unit tests; avoid manual mock factories when possible
Use vi.resetAllMocks() in beforeEach hooks instead of vi.clearAllMocks() for resetting mocks between tests
When an auto-mocked function or class method needs a real implementation, use vi.mocked(...) with the prototype pattern for class methods: vi.mocked(MyClass.prototype.myMethod).mockImplementation(...)

Files:

  • packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts
🧠 Learnings (3)
📚 Learning: 2026-03-09T08:47:09.657Z
Learnt from: benoitf
Repo: kortex-hub/kortex PR: 1077
File: packages/main/src/plugin/skill/skill-manager.ts:80-109
Timestamp: 2026-03-09T08:47:09.657Z
Learning: In the kortex-hub/kortex repository, IPC handlers (via ipcHandle()) may be registered directly inside feature manager/service classes (e.g., SkillManager in packages/main/src/plugin/skill/skill-manager.ts) rather than exclusively in packages/main/src/plugin/index.ts. Treat this as an accepted design pattern for files under the plugin directory. Reviewers should not require centralization in index.ts; allow IPC registration proximity to the feature that owns the handler. When reviewing code, accept direct ipcHandle() registrations inside feature managers and ensure the pattern is consistently applied across similar feature-manager modules.

Applied to files:

  • packages/main/src/plugin/openshell-cli/openshell-gateway.ts
  • packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts
📚 Learning: 2026-05-12T17:14:02.153Z
Learnt from: MarsKubeX
Repo: openkaiden/kaiden PR: 1850
File: packages/renderer/src/lib/agent-workspaces/AgentWorkspaceList.svelte:66-70
Timestamp: 2026-05-12T17:14:02.153Z
Learning: When reviewing code that uses `AgentWorkspaceSummaryUI.runtime`, treat it as a required, non-null `string` per the `openkaiden/kdn-api` 0.12.0 schema. Therefore, code like `a.runtime.localeCompare(b.runtime)` is safe and should not trigger warnings about possible `undefined`/`null` values or suggestions to use nullish coalescing/optional chaining for `runtime` (unless the current local types still mark `runtime` as optional, indicating a schema/version mismatch).

Applied to files:

  • packages/main/src/plugin/openshell-cli/openshell-gateway.ts
  • packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts
📚 Learning: 2026-06-29T13:16:53.102Z
Learnt from: benoitf
Repo: openkaiden/kaiden PR: 2296
File: extensions/container/packages/extension/src/helper/socket-finder/_socket-finder-module.ts:28-29
Timestamp: 2026-06-29T13:16:53.102Z
Learning: When reviewing imports in openkaiden/kaiden TypeScript/JavaScript files, prefer the configured `/@/` path alias instead of relative imports that would require traversing out of the current directory/module group (i.e., paths containing `..` that cross boundaries). 

Do not require alias conversion for descendant-path relative imports within the socket-finder module directory—for example, in `extensions/container/packages/extension/src/helper/socket-finder/**`, imports like `./podman/podman-version-detector` and `./podman/podman-windows-finder` are acceptable and should not be flagged.

Applied to files:

  • packages/main/src/plugin/openshell-cli/openshell-gateway.ts
  • packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts
🔇 Additional comments (3)
packages/main/src/plugin/openshell-cli/openshell-gateway.ts (1)

357-359: LGTM!

packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts (2)

74-74: LGTM!

Also applies to: 96-96


417-432: LGTM!

Comment thread packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts Outdated
@codecov

codecov Bot commented Jul 29, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@fbricon fbricon left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

No more errors about existing gateways

Comment on lines 357 to 359
await this.openshellCli.removeGateway('kaiden-local').catch(() => {});
await this.openshellCli.addGateway({ endpoint, local: true, name: 'kaiden-local' });
console.log(`[openshell-gateway] registered with CLI as kaiden-local at ${endpoint}`);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Is it not better to, instead of removing and adding, check if the gateway is there? Something like:

    const gateways = await this.openshellCli.listGateways();
    const existing = gateways.find(gw => gw.name === 'kaiden-local');
    if (existing) {
      if (!existing.active) {
        await this.openshellCli.selectGateway('kaiden-local');
      }
      console.log(`[openshell-gateway] kaiden-local already registered, selected at ${existing.endpoint}`);
      return;
    }
    await this.openshellCli.addGateway({ endpoint, local: true, name: 'kaiden-local' });
    console.log(`[openshell-gateway] registered with CLI as kaiden-local at ${endpoint}`);

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

it's like the endpoint might be changed

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I dropped all my env, will see if can reproduce again my issue and try your suggestion

@benoitf benoitf Jul 30, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Adopted this approach : registerWithCli now calls listGateways() first:

  • If kaiden-local already exists with the same endpoint, skip re-registration entirely
  • If it exists with a different endpoint, remove then re-add (handles endpoint changes across restarts)
  • If it doesn't exist, just add directly (no unnecessary remove)

Also added an invocationCallOrder assertion per CodeRabbit's suggestion to verify remove-before-add ordering.

@bmahabirbu bmahabirbu left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Overall I think its good on my side but I came across an edge case where openshell gateway remove isn't always reliable. (mac/linux)

I removed the openshell default gateway and started kaiden. It correctly tried to start the kaiden-local gateway but encounter a conflict error because the default gateway still somehow hanged onto the process on that port and kaiden-local uses the same port 17670.

Maybe we need a follow up so we can scan the port activity and fully kill the gateway at the process level

11:28:49 AM [main] [openshell-gateway] registered with CLI as kaiden-local at http://127.0.0.1:17670

11:28:49 AM [main] openshell failed: /Users/bmahabir/kaiden/extensions/openshell/assets/darwin-arm64/openshell provider list -o json — Command execution failed with exit code 1 (stderr: Error:   × code: 'Operation is not implemented or not supported', message: "grpc-
  │ status header missing, mapped from HTTP status code 404")
11:28:49 AM [main] openshell failed: /Users/bmahabir/kaiden/extensions/openshell/assets/darwin-arm64/openshell sandbox list -g kaiden-local -o json — Command execution failed with exit code 1 (stderr: Error:   × code: 'Operation is not implemented or not supported', message: "grpc-

Edit*

on further inspection the default gateway is created with mtls while local-kaiden uses plaintext. The mismatch from the hanged process caused the grpc error because openshell thinks local-kaiden has mtls

@benoitf

benoitf commented Jul 30, 2026

Copy link
Copy Markdown
Contributor Author

@fbricon if you can check again as I implemented the proposal of @MarsKubeX

on my end it's working as well

@benoitf
benoitf requested a review from MarsKubeX July 30, 2026 09:51
benoitf and others added 2 commits July 30, 2026 11:53
…tartup

When Kaiden restarts, the openshell gateway from the previous session is
no longer running but its `kaiden-local` CLI entry persists. The init
flow correctly detects the gateway is unreachable and auto-starts a new
one, but `registerWithCli()` fails with "Gateway 'kaiden-local' already
exists". Fix by removing the stale entry before re-adding.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Florent Benoit <fbenoit@redhat.com>
Instead of always removing and re-adding, list gateways first and skip
re-registration when kaiden-local already exists with the same endpoint.
Only remove and re-add when the endpoint has changed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Florent Benoit <fbenoit@redhat.com>
@benoitf
benoitf force-pushed the fix-openshell-gateway-stale-registration branch from 4b34692 to 44ccc92 Compare July 30, 2026 09:53

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/main/src/plugin/openshell-cli/openshell-gateway.ts`:
- Around line 357-365: The gateway setup flow must still call addGateway when
listGateways fails. Separate listGateways error handling from the registration
path in the surrounding gateway setup method, treating discovery failure as no
existing gateway while preserving removal and early-return behavior for
successful lookups; add a regression test that rejects listGateways and verifies
registration proceeds.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: cdd61722-0888-49fd-b40d-bbd569975cef

📥 Commits

Reviewing files that changed from the base of the PR and between f8754c5 and 4b34692.

📒 Files selected for processing (2)
  • packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts
  • packages/main/src/plugin/openshell-cli/openshell-gateway.ts
📜 Review details
⏰ Context from checks skipped due to timeout. (10)
  • GitHub Check: unit tests / windows-2022
  • GitHub Check: smoke-e2e-tests (prod) / ubuntu-24.04 (ollama)
  • GitHub Check: Windows
  • GitHub Check: unit tests / macos-15
  • GitHub Check: smoke-e2e-tests (dev) / ubuntu-24.04 (ollama)
  • GitHub Check: typecheck
  • GitHub Check: Linux
  • GitHub Check: unit tests / ubuntu-24.04
  • GitHub Check: macOS
  • GitHub Check: linter, formatters
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

Use /@/ path aliases instead of relative paths for imports outside the current directory's module group; use relative imports only for sibling modules within the same directory

Files:

  • packages/main/src/plugin/openshell-cli/openshell-gateway.ts
  • packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts
packages/main/src/**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

packages/main/src/**/*.{ts,tsx}: Use ipcHandle() to expose handlers in the main process with naming convention <registry-name>:<action> (e.g., container-provider-registry:listContainers)
Use apiSender.send() to send events from main process to renderer for real-time updates
Long-running operations should use TaskManager.createTask() with title and action configuration

Files:

  • packages/main/src/plugin/openshell-cli/openshell-gateway.ts
  • packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts
packages/{main,renderer,preload}/src/**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

Container operations must include engineId parameter to identify the container engine

Files:

  • packages/main/src/plugin/openshell-cli/openshell-gateway.ts
  • packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts
**/*.spec.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.spec.{ts,tsx,js,jsx}: Use test() instead of it() for test cases in Vitest unit tests
Use vi.mock(import('...')) for auto-mocking modules in unit tests; avoid manual mock factories when possible
Use vi.resetAllMocks() in beforeEach hooks instead of vi.clearAllMocks() for resetting mocks between tests
When an auto-mocked function or class method needs a real implementation, use vi.mocked(...) with the prototype pattern for class methods: vi.mocked(MyClass.prototype.myMethod).mockImplementation(...)

Files:

  • packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts
🧠 Learnings (3)
📚 Learning: 2026-03-09T08:47:09.657Z
Learnt from: benoitf
Repo: kortex-hub/kortex PR: 1077
File: packages/main/src/plugin/skill/skill-manager.ts:80-109
Timestamp: 2026-03-09T08:47:09.657Z
Learning: In the kortex-hub/kortex repository, IPC handlers (via ipcHandle()) may be registered directly inside feature manager/service classes (e.g., SkillManager in packages/main/src/plugin/skill/skill-manager.ts) rather than exclusively in packages/main/src/plugin/index.ts. Treat this as an accepted design pattern for files under the plugin directory. Reviewers should not require centralization in index.ts; allow IPC registration proximity to the feature that owns the handler. When reviewing code, accept direct ipcHandle() registrations inside feature managers and ensure the pattern is consistently applied across similar feature-manager modules.

Applied to files:

  • packages/main/src/plugin/openshell-cli/openshell-gateway.ts
  • packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts
📚 Learning: 2026-05-12T17:14:02.153Z
Learnt from: MarsKubeX
Repo: openkaiden/kaiden PR: 1850
File: packages/renderer/src/lib/agent-workspaces/AgentWorkspaceList.svelte:66-70
Timestamp: 2026-05-12T17:14:02.153Z
Learning: When reviewing code that uses `AgentWorkspaceSummaryUI.runtime`, treat it as a required, non-null `string` per the `openkaiden/kdn-api` 0.12.0 schema. Therefore, code like `a.runtime.localeCompare(b.runtime)` is safe and should not trigger warnings about possible `undefined`/`null` values or suggestions to use nullish coalescing/optional chaining for `runtime` (unless the current local types still mark `runtime` as optional, indicating a schema/version mismatch).

Applied to files:

  • packages/main/src/plugin/openshell-cli/openshell-gateway.ts
  • packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts
📚 Learning: 2026-06-29T13:16:53.102Z
Learnt from: benoitf
Repo: openkaiden/kaiden PR: 2296
File: extensions/container/packages/extension/src/helper/socket-finder/_socket-finder-module.ts:28-29
Timestamp: 2026-06-29T13:16:53.102Z
Learning: When reviewing imports in openkaiden/kaiden TypeScript/JavaScript files, prefer the configured `/@/` path alias instead of relative imports that would require traversing out of the current directory/module group (i.e., paths containing `..` that cross boundaries). 

Do not require alias conversion for descendant-path relative imports within the socket-finder module directory—for example, in `extensions/container/packages/extension/src/helper/socket-finder/**`, imports like `./podman/podman-version-detector` and `./podman/podman-windows-finder` are acceptable and should not be flagged.

Applied to files:

  • packages/main/src/plugin/openshell-cli/openshell-gateway.ts
  • packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts
🔇 Additional comments (1)
packages/main/src/plugin/openshell-cli/openshell-gateway.spec.ts (1)

74-74: LGTM!

Also applies to: 97-97, 401-415, 417-439, 441-457, 459-477

Comment thread packages/main/src/plugin/openshell-cli/openshell-gateway.ts

@MarsKubeX MarsKubeX left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM codewise. Just check the codeRabbit comment, seems valid to me.

@fbricon

fbricon commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

FIx works for me. I am not convinced by coderabbit's explanation though. If openshell fails to list gateways, chances are you won't be able to add a new one

@benoitf
benoitf merged commit e68de56 into openkaiden:main Jul 30, 2026
45 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.

openshell gateway fails to re-register on restart: 'kaiden-local' already exists

4 participants