Skip to content

feat(menubar): add macOS menu bar app with HTTPS and settings window (v2.4.1) - #282

Open
leecoder wants to merge 9 commits into
jwadow:mainfrom
leecoder:feat/menubar-app
Open

leecoder wants to merge 9 commits into
jwadow:mainfrom
leecoder:feat/menubar-app

Conversation

@leecoder

Copy link
Copy Markdown

Summary

Adds a native macOS menu bar app so Kiro Gateway can run as a background service without a terminal window.

What's new

  • menubar.py — native menu bar app via rumps
    • 👻 Ghost template icon (bright = Running, dim = Stopped)
    • GatewayServerThread for non-blocking server start/stop
    • One-click Start / Stop / Restart
    • Copy URL, Open Logs menu items
    • Launch at Login via LaunchAgent
  • kiro/settings_window.py — NSWindow-based settings panel
    • Editable fields for all .env keys
    • PROXY_API_KEY masked by default; eye toggle button (SF Symbol eye/eye.slash, falls back to bundled PNG) to reveal
  • kiro/env_file.py — .env read/write preserving comments and key ordering
  • kiro/resources/ — menu bar icons (@1x/@2x), eye/eye-slash icons (SF Symbol export), AppIcon.icns
  • setup_menubar.py — py2app build config → dist/Kiro Gateway.app
  • main.py, kiro/config.py — TLS CLI args (--ssl-certfile / --ssl-keyfile) and resolve_tls_config() for HTTPS
  • Tests — test_menubar.py, test_env_file.py (incl. reveal toggle), test_cors.py — all 58 passing

Install

Download KiroGateway.dmg from the v2.4.1 release, open, drag to Applications.

Run from source

pip install rumps
python menubar.py

Build .app

pip install py2app
python setup_menubar.py py2app

Checklist

  • Tests pass (pytest -v — 58 passed)
  • English-only code, type hints, Google-style docstrings
  • New files follow existing project patterns
  • No breaking changes to existing API endpoints

…d app icon

- menubar.py: native macOS menu bar app via rumps
  - Ghost emoji template icons (bright=running, dim=stopped)
  - GatewayServerThread for non-blocking server control
  - Settings window (NSWindow) for editing .env keys
  - Launch at Login via LaunchAgent
  - Copy URL, Open Logs, Restart menu items
- kiro/settings_window.py: NSWindow-based settings panel
  - Per-key text fields with save/cancel
  - PROXY_API_KEY masked by default with eye toggle button
  - SF Symbol eye/eye.slash icons, falls back to bundled PNG
- kiro/env_file.py: .env read/write preserving comments and ordering
- kiro/resources/: menu bar icons (ghost @1x/@2x, ghost-dim @1x/@2x)
  eye/eye-slash icons exported from SF Symbol, AppIcon.icns
- setup_menubar.py: py2app build config for dist/Kiro Gateway.app
- main.py, kiro/config.py: TLS CLI args (--ssl-certfile/--ssl-keyfile)
  and resolve_tls_config() for HTTPS support
- tests: test_menubar.py, test_env_file.py (incl. reveal toggle), test_cors.py
@cla-bot

cla-bot Bot commented Sep 17, 2026

Copy link
Copy Markdown

Thanks for the PR! 🎉

Before merge, we need a one-time CLA confirmation.
It confirms that you have the right to contribute this code and allow the project to use it.

Full CLA text:
https://github.com/jwadow/kiro-gateway/blob/main/CLA.md

Please reply once with:

I have read the CLA and I accept its terms

You need to write once, all further messages from me can be ignored.

@leecoder

Copy link
Copy Markdown
Author

I have read the CLA and I accept its terms

…nal TLS fields

- Advanced section collapses/expands via '▶ Advanced' toggle button
- 'Enable HTTPS (TLS)' checkbox inside Advanced section
  - SSL_CERTFILE / SSL_KEYFILE fields disabled (greyed out) when unchecked
  - Enabled when checked
  - On save with HTTPS off, TLS keys are cleared in .env
- HTTPS checkbox pre-checked when certfile/keyfile already set in .env
- 10 new tests in TestAdvancedSection covering toggle, checkbox, field enable/disable, save behaviour
@cla-bot

cla-bot Bot commented Sep 17, 2026

Copy link
Copy Markdown

Thanks for the PR! 🎉

Before merge, we need a one-time CLA confirmation.
It confirms that you have the right to contribute this code and allow the project to use it.

Full CLA text:
https://github.com/jwadow/kiro-gateway/blob/main/CLA.md

Please reply once with:

I have read the CLA and I accept its terms

You need to write once, all further messages from me can be ignored.

…IRO_* keys in Advanced

- Replaced NSStackView with fixed-coord NSView+NSScrollView layout
- Advanced toggle button left-aligned (was center due to NSStackView default)
- Window resizes when Advanced section expands/collapses
- KIRO_CREDS_FILE, KIRO_CLI_DB_FILE, KIRO_API_REGION, VPN_PROXY_URL, DEBUG_MODE
  all moved inside Advanced section
- SSL_CERTFILE/SSL_KEYFILE remain under Enable HTTPS checkbox inside Advanced
- Row height 28px prevents text clipping
- Tests updated to match new _place_row API and _advanced_views list
@cla-bot

cla-bot Bot commented Sep 17, 2026

Copy link
Copy Markdown

Thanks for the PR! 🎉

Before merge, we need a one-time CLA confirmation.
It confirms that you have the right to contribute this code and allow the project to use it.

Full CLA text:
https://github.com/jwadow/kiro-gateway/blob/main/CLA.md

Please reply once with:

I have read the CLA and I accept its terms

You need to write once, all further messages from me can be ignored.

- Replace setFrame_ delta calculation with setContentSize_
- Add NSMakeSize import from Foundation
- Window height correctly grows/shrinks when Advanced section expands/collapses
@cla-bot

cla-bot Bot commented Sep 17, 2026

Copy link
Copy Markdown

Thanks for the PR! 🎉

Before merge, we need a one-time CLA confirmation.
It confirms that you have the right to contribute this code and allow the project to use it.

Full CLA text:
https://github.com/jwadow/kiro-gateway/blob/main/CLA.md

Please reply once with:

I have read the CLA and I accept its terms

You need to write once, all further messages from me can be ignored.

- Set setWraps_(False) and setScrollable_(True) on all NSTextField cells
- Applies to both plain fields and the plain-text reveal pair in secret fields
- Long paths (SSL cert/key) now scroll horizontally instead of wrapping
@cla-bot

cla-bot Bot commented Sep 17, 2026

Copy link
Copy Markdown

Thanks for the PR! 🎉

Before merge, we need a one-time CLA confirmation.
It confirms that you have the right to contribute this code and allow the project to use it.

Full CLA text:
https://github.com/jwadow/kiro-gateway/blob/main/CLA.md

Please reply once with:

I have read the CLA and I accept its terms

You need to write once, all further messages from me can be ignored.

- setDrawsBackground_(False) + setBackgroundColor_(windowBackgroundColor)
- Eliminates the white/gray color mismatch between scroll area and window
@cla-bot

cla-bot Bot commented Sep 17, 2026

Copy link
Copy Markdown

Thanks for the PR! 🎉

Before merge, we need a one-time CLA confirmation.
It confirms that you have the right to contribute this code and allow the project to use it.

Full CLA text:
https://github.com/jwadow/kiro-gateway/blob/main/CLA.md

Please reply once with:

I have read the CLA and I accept its terms

You need to write once, all further messages from me can be ignored.

@cla-bot

cla-bot Bot commented Sep 17, 2026

Copy link
Copy Markdown

Thanks for the PR! 🎉

Before merge, we need a one-time CLA confirmation.
It confirms that you have the right to contribute this code and allow the project to use it.

Full CLA text:
https://github.com/jwadow/kiro-gateway/blob/main/CLA.md

Please reply once with:

I have read the CLA and I accept its terms

You need to write once, all further messages from me can be ignored.

@cla-bot

cla-bot Bot commented Sep 17, 2026

Copy link
Copy Markdown

Thanks for the PR! 🎉

Before merge, we need a one-time CLA confirmation.
It confirms that you have the right to contribute this code and allow the project to use it.

Full CLA text:
https://github.com/jwadow/kiro-gateway/blob/main/CLA.md

Please reply once with:

I have read the CLA and I accept its terms

You need to write once, all further messages from me can be ignored.

@cla-bot

cla-bot Bot commented Sep 17, 2026

Copy link
Copy Markdown

Thanks for the PR! 🎉

Before merge, we need a one-time CLA confirmation.
It confirms that you have the right to contribute this code and allow the project to use it.

Full CLA text:
https://github.com/jwadow/kiro-gateway/blob/main/CLA.md

Please reply once with:

I have read the CLA and I accept its terms

You need to write once, all further messages from me can be ignored.

@ankitcharolia

Copy link
Copy Markdown

@leecoder could you give a try to this gateway: https://github.com/ankitcharolia/kiro-gateway

It works quite well with All AI harness and actively being developed. The most important thing is that it is ACP compliant

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.

2 participants