Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
162 commits
Select commit Hold shift + click to select a range
3399cc1
ci(docker): rename dev-container image to dev-box
leeroybrun Feb 20, 2026
194c18f
docs(docker): add Tailscale sidecar and publish Docker Hub READMEs
leeroybrun Feb 20, 2026
d96f404
ci(docker): publish images to GHCR
leeroybrun Feb 20, 2026
28a1956
fix(stack): auto-install deps for repo-local commands
leeroybrun Feb 20, 2026
8984037
fix(stack): honor repo-local auto-install flag
leeroybrun Feb 20, 2026
5cc02dd
refactor(stack): shift preflightOnly check to main
leeroybrun Feb 20, 2026
9d7a87e
feat(stack): add provisioning & smoke tests
leeroybrun Feb 20, 2026
66ca124
docs(server): add GitHub and OIDC auth guides
leeroybrun Feb 20, 2026
b69ecd1
fix(pipeline): handle gh API errors in promote
leeroybrun Feb 20, 2026
07540a1
chore(ghops): add ghops script, tests, templates
leeroybrun Feb 20, 2026
6d4d1a0
feat(stack): add logs, env & mobile:install commands
leeroybrun Feb 20, 2026
40e8e0e
feat(cli): add binary self-update via GitHub releases
leeroybrun Feb 20, 2026
736b9d2
chore(ui): bump react-native-webrtc config plugin
leeroybrun Feb 20, 2026
3675d9f
fix: ignore pinned ports outside range
leeroybrun Feb 20, 2026
39103a7
fix(roadmap): validate sync workflow and add resync dispatch
leeroybrun Feb 20, 2026
7fa5a7a
feat(scripts): add release-assets-e2e smoke
leeroybrun Feb 20, 2026
d7ce3b1
feat(pipeline): add and improve release pipeline scripts
leeroybrun Feb 20, 2026
bf10042
test(e2e): expand encryption mode coverage
leeroybrun Feb 20, 2026
b2ead94
docs(agents): document plaintext storage modes
leeroybrun Feb 20, 2026
d059731
fix(ui): auto-seed same-origin server profile for self-hosted web dep…
dhananjaysathe Feb 19, 2026
c074cfe
fix(ui): seed same-origin server profile via helper
leeroybrun Feb 19, 2026
a02dda5
fix(daemon): capture user PATH in systemd unit file on Linux
dhananjaysathe Feb 19, 2026
77f4147
fix: address review feedback
dhananjaysathe Feb 19, 2026
c06142d
fix(ui): prevent markdown table from expanding and clipping content o…
bernard-yip Feb 20, 2026
7d543d8
Merge branch 'dev' of https://github.com/happier-dev/happier into dev
leeroybrun Feb 20, 2026
8083339
ci(workflows): use pipeline/run.mjs
leeroybrun Feb 20, 2026
57efca0
refactor(docker): rename devcontainer to dev-box
leeroybrun Feb 20, 2026
3ab3244
feat(protocol): add plaintext storage contracts
leeroybrun Feb 20, 2026
7c40d8e
feat(server): expose encryption policy and gate key-challenge auth
leeroybrun Feb 20, 2026
8c0578c
docs(docker): clarify prebuilt images, tags, and dev box
leeroybrun Feb 20, 2026
ffa74a6
feat: add GitHub Copilot CLI agent support
dhananjaysathe Feb 19, 2026
1dc28e4
fix: address review feedback on copilot agent
dhananjaysathe Feb 19, 2026
46b42f9
fix(copilot): streaming debounce, model ID fallback, and permission args
dhananjaysathe Feb 20, 2026
1fcbb7f
fix(acp): debounce model-output delta streaming
leeroybrun Feb 20, 2026
92738d8
fix(copilot): add win32 install and allow env overrides
leeroybrun Feb 20, 2026
b3a56b5
test(copilot): cover ACP backend options
leeroybrun Feb 20, 2026
59ed570
fix(execution-runs): normalize permission mode
leeroybrun Feb 20, 2026
74ab195
fix(copilot): improve win32 and zh-Hant copy
leeroybrun Feb 20, 2026
8f90ed9
feat(cli): sync bundled workspace package.json
leeroybrun Feb 20, 2026
47b170b
feat(installers): improve self-host installer UX
leeroybrun Feb 20, 2026
3c7e5cb
feat(server): support plaintext session storage
leeroybrun Feb 20, 2026
c5a8ca6
feat(server): support plaintext session sharing
leeroybrun Feb 20, 2026
9837b49
feat(server): expose session encryptionMode in listings
leeroybrun Feb 20, 2026
23206ad
fix(ui): bypass crypto in plaintext sessions
leeroybrun Feb 20, 2026
72619b2
feat(ui): support plaintext content envelopes
leeroybrun Feb 20, 2026
fc7cebc
test(server): update public share mocks for encryptionMode
leeroybrun Feb 20, 2026
5cb45a7
feat(cli): support plaintext session payloads
leeroybrun Feb 20, 2026
92d70c0
fix(server): make mysql encryptionModeUpdatedAt vitess-safe
leeroybrun Feb 20, 2026
eaee7b3
docs(agents): document plaintext session storage
leeroybrun Feb 20, 2026
3479364
docs(server): document plaintext storage configuration
leeroybrun Feb 20, 2026
831cae5
fix(auth): keep key-challenge login compatible with legacy servers
leeroybrun Feb 20, 2026
758919c
chore(gitignore): ignore tmp and playwright outputs
leeroybrun Feb 20, 2026
33bfac4
feat(stack): expand repo-local scripts
leeroybrun Feb 20, 2026
5445480
test(ui-e2e): add Playwright web suite
leeroybrun Feb 21, 2026
8199ff9
feat(server): add API rate limit policy
leeroybrun Feb 21, 2026
a11017d
feat(protocol): add installables catalog
leeroybrun Feb 21, 2026
0cfb585
feat(protocol): extend sent-from values
leeroybrun Feb 21, 2026
e70dece
refactor(protocol): refine bug report fallback format
leeroybrun Feb 21, 2026
8711472
fix(protocol): allow share updates without encryptedDataKey
leeroybrun Feb 21, 2026
d601b5b
chore(protocol): run build before tests
leeroybrun Feb 21, 2026
605b320
feat(pipeline): add checks and release orchestration
leeroybrun Feb 21, 2026
f7bb577
test(protocol): cover bug report fallback and sharing updates
leeroybrun Feb 21, 2026
32c7f7a
feat(protocol): extend session control and metadata
leeroybrun Feb 21, 2026
17ce388
fix(protocol): default auth login methods to empty
leeroybrun Feb 21, 2026
9ba5a9f
feat(cli): expand session control and plaintext support
leeroybrun Feb 21, 2026
3372b9e
feat(cli): refine codex backend and runtime
leeroybrun Feb 21, 2026
e19752d
fix(server): treat *.localhost as loopback
leeroybrun Feb 21, 2026
edf7fb6
fix(server): skip username prompt for linked OAuth identity
leeroybrun Feb 21, 2026
408094b
test(server): cover oauth external rate limits
leeroybrun Feb 21, 2026
24a87eb
fix(server): improve packaged Prisma client support
leeroybrun Feb 21, 2026
05cbd5a
docs(server): add rate limiting and proxy env examples
leeroybrun Feb 21, 2026
682ca0d
fix(server): lazy-load minio for local files backend
leeroybrun Feb 21, 2026
ca5f6a9
feat(server): extend session APIs and presence
leeroybrun Feb 21, 2026
29b4351
feat(ui): update auth, sessions, and installables
leeroybrun Feb 21, 2026
2e57895
test(release): cover pipeline checks and release helpers
leeroybrun Feb 21, 2026
bd09bce
test(tests): expand testkit and fixtures
leeroybrun Feb 21, 2026
578daa8
docs: update deployment, auth, and testing guides
leeroybrun Feb 21, 2026
9d2dea1
docs(website): update install and self-host scripts
leeroybrun Feb 21, 2026
63db17b
refactor(ui): avoid react-native StyleSheet in uiFontScale
leeroybrun Feb 21, 2026
f35e30c
chore(ui-dev): update Tools2 sample code
leeroybrun Feb 21, 2026
a479c91
test(ui): extend reactNativeStub host exports
leeroybrun Feb 21, 2026
2767360
test(ui): expand vitest unistyles theme mock
leeroybrun Feb 21, 2026
f3c8b66
test(ui-tools): stabilize tool renderer mocks
leeroybrun Feb 21, 2026
f5d1451
test(ui-tools): stabilize ToolView mocks
leeroybrun Feb 21, 2026
9455187
test(ui-nav): stabilize navigation shell mocks
leeroybrun Feb 21, 2026
3ba1115
test(ui-scm): stabilize source control tests
leeroybrun Feb 21, 2026
ec2b41a
test(ui-agentInput): stabilize AgentInput suites
leeroybrun Feb 21, 2026
7e2a6cb
test(ui-modal): rely on shared unistyles mock
leeroybrun Feb 21, 2026
4277b84
test(ui): relax assertions for Text wrapper
leeroybrun Feb 21, 2026
767ec9f
test(ui-app): stabilize screen test mocks
leeroybrun Feb 21, 2026
76eadcd
test(ui): stabilize account/friends/machines tests
leeroybrun Feb 21, 2026
0c7e903
test(ui-profiles): stabilize profile/secrets tests
leeroybrun Feb 21, 2026
4968d05
test(ui-sessions): stabilize session component tests
leeroybrun Feb 21, 2026
a731934
test(ui-settings): stabilize connected services settings tests
leeroybrun Feb 21, 2026
16e1464
test(ui-primitives): stabilize UI primitive tests
leeroybrun Feb 21, 2026
7000764
test(ui-voice): stabilize voice UI tests
leeroybrun Feb 21, 2026
cf697f3
test(ui-hooks): stabilize hook mocks
leeroybrun Feb 21, 2026
4554280
test(ui-settings): stabilize sub-agent guidance modal test
leeroybrun Feb 21, 2026
f056316
chore: resolve merge conflicts
leeroybrun Feb 21, 2026
7b0c520
fix(executionRuns): map permissionMode via helper
leeroybrun Feb 21, 2026
09244ec
test(release): update preview dry-run tests
leeroybrun Feb 21, 2026
b258a91
refactor(stack): resolve repo from workspace main
leeroybrun Feb 21, 2026
55d1f32
ci(workflows): centralize secrets and refine CI logic
leeroybrun Feb 21, 2026
4ebd3cd
feat(installers): add check/restart/uninstall actions
leeroybrun Feb 21, 2026
9cfaf82
fix(scripts): validate submit --path exists
leeroybrun Feb 21, 2026
ee1938b
build(docker): add release-runtime package
leeroybrun Feb 21, 2026
21a0a3c
ci(workflows): auto-deploy deploy branches and reduce CI noise
leeroybrun Feb 21, 2026
23170a2
fix(pipeline): allow --summary-file for promote-deploy-branch
leeroybrun Feb 21, 2026
12cd56e
fix(ci): allow release bot to trigger deploy workflows
leeroybrun Feb 21, 2026
ec4e0fc
fix(ci): allow deploy workflow when caller event is push
leeroybrun Feb 21, 2026
fc69830
fix(ui): prevent Mermaid WebView HTML injection
leeroybrun Feb 21, 2026
ec975e4
fix(cli): ensure Claude flags are parsed before positional prompts
leeroybrun Feb 21, 2026
f8ae360
fix(stack): fix systemd system service paths
leeroybrun Feb 21, 2026
803c931
fix(cli): prevent nested Claude Code env leaks in spawns
leeroybrun Feb 21, 2026
ce21ce9
refactor(cli): generalize nested session env stripping
leeroybrun Feb 21, 2026
4e2fbbb
feat(installers): add --reinstall option
leeroybrun Feb 21, 2026
0660594
ci(workflows): ignore deploy/** branches for tests
leeroybrun Feb 21, 2026
d477db2
feat(pipeline): add help, colors, and expo checks
leeroybrun Feb 21, 2026
d03882e
docs(proxmox): add installer fork and channel
leeroybrun Feb 21, 2026
efe608a
ci(workflows): set GH_TOKEN for deploy webhook steps
leeroybrun Feb 21, 2026
71a7218
docs(cli): add pipeline run command help specs
leeroybrun Feb 21, 2026
64a9f00
docs(proxmox): remove caddyfile code fence
leeroybrun Feb 21, 2026
ef54dac
docs(proxmox): clarify tailscale manual enrollment
leeroybrun Feb 21, 2026
167277c
feat(pipeline): add --summary-file option
leeroybrun Feb 21, 2026
438c6b3
fix(ui): translate remaining Russian strings and fix ChatFooter overflow
cpz Feb 21, 2026
a8672a8
Update apps/ui/sources/text/translations/ru.ts
leeroybrun Feb 21, 2026
5038796
ci(tests): remove branches-ignore rule
leeroybrun Feb 21, 2026
b3832ee
ci(workflows): add ui_e2e flag to tests workflows
leeroybrun Feb 21, 2026
931450d
feat(checks): add UI e2e to CI plan
leeroybrun Feb 21, 2026
c1476da
feat(tests): add UI e2e helpers and encryption tests
leeroybrun Feb 21, 2026
806fd89
fix(ui): harden daemon-unavailable alerts
leeroybrun Feb 21, 2026
39bc084
refactor(ui): extract mounted shouldContinue hook
leeroybrun Feb 21, 2026
329ee10
Fix quotation marks in Russian translations
leeroybrun Feb 21, 2026
bfc0f71
fix(translations): Russian translation issues in UI text
leeroybrun Feb 21, 2026
dda53c2
feat(auth): add keyless auth methods and mTLS login
leeroybrun Feb 21, 2026
9a98fb3
feat(ui): support keyless OAuth and mTLS login
leeroybrun Feb 21, 2026
f8f20c7
test(e2e): cover keyless OAuth and mTLS auth
leeroybrun Feb 21, 2026
e02f6d3
fix(ui): prevent local permission banner from being clipped
happier-bot Feb 21, 2026
b65ab3c
fix(ui): make diagnostics preview modal height explicit
happier-bot Feb 21, 2026
0c39cd6
fix(ui): align AgentInput action items on native
happier-bot Feb 21, 2026
627b3b7
fix(cli): resolve codex command on Windows and harden logger serializ…
cpz Feb 21, 2026
8882b27
fix(cli): add windowsHide to remaining exec/spawn calls
cpz Feb 21, 2026
c34f197
feat(installers): add --version action
leeroybrun Feb 22, 2026
ece1da4
Merge branch 'dev' of https://github.com/happier-dev/happier into dev
leeroybrun Feb 22, 2026
6221159
feat(website): add --version option to installers
leeroybrun Feb 22, 2026
f95279c
fix(protocol): add scm discard schemas
leeroybrun Feb 22, 2026
3b4e470
fix(cli): bundle release-runtime in prepack
leeroybrun Feb 22, 2026
e21f242
fix(cli): handle bundled bun subprocess entrypoint fallback
leeroybrun Feb 22, 2026
3468531
ui: add vertical padding to local-control notice
happier-bot Feb 22, 2026
a71afb5
fix(ui): batch machine-activity ephemeral updates to prevent session …
cpz Feb 22, 2026
36d6024
fix(ui): address CodeRabbit review feedback
cpz Feb 22, 2026
23e20d8
Merge branch 'dev' of https://github.com/happier-dev/happier into lee…
leeroybrun Feb 23, 2026
76162a4
fix(oauth): pass through iss parameter in OIDC callback for RFC 9207 …
TerrifiedBug Feb 24, 2026
78e5b2a
fix(server): remove invalid PrismaJson import from @prisma/client
Feb 23, 2026
eaf769b
feat(ui): smart foreground push notification handling
cpz Feb 22, 2026
216575e
fix(ui): remove unnecessary `as any` cast in notification handler
cpz Feb 22, 2026
af9e515
fix(ui): simplify notification handler per review
cpz Feb 22, 2026
b2563d5
fix(ui): guard against undefined notification data
cpz Feb 22, 2026
0c08376
fix(cli): suppress push notifications for auto-approved permission modes
cpz Feb 22, 2026
e7a17e0
refactor(cli): use PermissionMode type instead of string in push supp…
cpz Feb 22, 2026
a945c2a
fix(ui): improve popover portal and scroll edge fades
Feb 26, 2026
14e7e3f
fix(ui): anchor settings popover to gear
leeroybrun Feb 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
145 changes: 145 additions & 0 deletions .github/ISSUE_TEMPLATE/bug.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
name: Bug report
description: Report a user-facing bug or regression.
labels:
- "type: bug"
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to report this.

**Privacy note:** Please don’t paste secrets, tokens, or private logs.
If you can reproduce in a minimal way, that’s ideal. If you can’t, still file the issue.

- type: textarea
id: summary
attributes:
label: Summary
description: What’s broken, and what’s the user impact?
placeholder: One or two sentences.
validations:
required: true

- type: textarea
id: current_behavior
attributes:
label: What happened (current behavior)
description: What did you observe?
placeholder: Describe what happened.
validations:
required: false

- type: textarea
id: expected_behavior
attributes:
label: Expected behavior
description: Optional.
placeholder: What should happen?
validations:
required: false

- type: textarea
id: reproduction_steps
attributes:
label: Reproduction steps
description: Optional. If you can reproduce, list steps here.
placeholder: |
1. …
2. …
3. …
validations:
required: false

- type: dropdown
id: severity
attributes:
label: Severity
description: Optional. Best guess is fine.
options:
- blocker
- high
- medium
- low
- unsure
validations:
required: false

- type: dropdown
id: frequency
attributes:
label: Frequency
description: Optional. Best guess is fine.
options:
- always
- often
- sometimes
- once
- unsure
validations:
required: false

- type: input
id: version
attributes:
label: Happier version
description: App/CLI version (if known).
placeholder: e.g. 0.12.3 or "main @ <commit sha>"
validations:
required: false

- type: input
id: platform
attributes:
label: Platform
description: OS/device details.
placeholder: e.g. macOS 15.2, Windows 11, iOS 18, Ubuntu 24.04
validations:
required: false

- type: input
id: server_version
attributes:
label: Server version
description: Optional. If relevant, the server version you’re connected to.
placeholder: e.g. 0.12.3
validations:
required: false

- type: dropdown
id: deployment_type
attributes:
label: Deployment type
description: Optional. If you know it.
options:
- cloud
- self-hosted
- enterprise
- unsure
validations:
required: false

- type: textarea
id: what_changed
attributes:
label: What changed recently?
description: Optional. Updates, config changes, new hardware, etc.
placeholder: e.g. Updated from 0.12.2 → 0.12.3, changed model settings, switched networks.
validations:
required: false

- type: input
id: diagnostic_id
attributes:
label: Diagnostics ID
description: Optional. If you submitted an in-app bug report, paste the diagnostic id line here (include the `diagnostic_id:` prefix).
placeholder: "diagnostic_id: 00000000-0000-0000-0000-000000000000"
validations:
required: false

- type: textarea
id: extra
attributes:
label: Additional context
description: Screenshots, links to related issues/PRs, anything else.
validations:
required: false
9 changes: 9 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
blank_issues_enabled: true
contact_links:
- name: Happier docs
url: https://happier.dev
about: Product docs and guides.
- name: Security issue
url: https://github.com/happier-dev/happier/security/policy
about: Please report security vulnerabilities privately.

71 changes: 71 additions & 0 deletions .github/ISSUE_TEMPLATE/feature.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
name: Feature request
description: Propose a user-facing feature or improvement.
labels:
- "type: feature"
body:
- type: markdown
attributes:
value: |
Thanks for proposing an improvement.

**Privacy note:** Please don’t paste secrets, tokens, or private logs.

- type: textarea
id: problem
attributes:
label: Problem statement
description: What user problem are we solving? Who is impacted?
placeholder: |
As a …, I want …, so that …
validations:
required: true

- type: textarea
id: proposal
attributes:
label: Proposed solution
description: Optional. If you have an idea, describe what we should build/change.
validations:
required: false

- type: textarea
id: acceptance
attributes:
label: Acceptance criteria
description: Optional. How do we know we’re done? A short checklist is ideal.
placeholder: |
- [ ] …
- [ ] …
validations:
required: false

- type: textarea
id: non_goals
attributes:
label: Non-goals (optional)
description: What is explicitly out of scope?
placeholder: |
- …
validations:
required: false

- type: dropdown
id: priority
attributes:
label: Priority (optional)
description: Best guess is fine; maintainers may adjust.
options:
- P0
- P1
- P2
- P3
validations:
required: false

- type: textarea
id: notes
attributes:
label: Additional context (optional)
description: Links, mockups, references, related issues.
validations:
required: false
30 changes: 30 additions & 0 deletions .github/ISSUE_TEMPLATE/task.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Task / Chore
description: Internal cleanup, refactor, infra, or small scoped work.
labels:
- "type: task"
body:
- type: textarea
id: summary
attributes:
label: Summary
placeholder: What are we doing?
validations:
required: true

- type: textarea
id: scope
attributes:
label: Scope / checklist
placeholder: |
- [ ] …
- [ ] …
validations:
required: false

- type: textarea
id: context
attributes:
label: Context (optional)
description: Links to code, issues, or background.
validations:
required: false
23 changes: 21 additions & 2 deletions .github/actions/release-actor-guard/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ inputs:
description: GitHub App private key used to check team membership (optional; when omitted, guard falls back to repo-admin check)
required: false
default: ""
trusted_actors:
description: "Comma-separated list of explicitly trusted actors (e.g. a release bot) that can bypass team membership checks"
required: false
default: ""

runs:
using: composite
Expand Down Expand Up @@ -65,12 +69,25 @@ runs:
ACTOR: ${{ steps.params.outputs.actor }}
ORG: ${{ steps.params.outputs.org }}
TEAM_SLUG: ${{ steps.params.outputs.team_slug }}
INPUT_TRUSTED_ACTORS: ${{ inputs.trusted_actors }}
APP_TOKEN: ${{ steps.app_token.outputs.token }}
REPO: ${{ github.repository }}
REPO_TOKEN: ${{ github.token }}
run: |
set -euo pipefail

trusted_csv="${INPUT_TRUSTED_ACTORS:-}"
if [ -n "${trusted_csv}" ]; then
IFS=',' read -r -a trusted <<< "${trusted_csv}"
for raw in "${trusted[@]}"; do
actor="$(echo "${raw}" | xargs)"
if [ -n "${actor}" ] && [ "${actor}" = "${ACTOR}" ]; then
echo "Actor '${ACTOR}' is explicitly trusted; allowing release workflow."
exit 0
fi
done
fi

fallback_repo_admin() {
if [ -z "${REPO_TOKEN:-}" ]; then
echo "Missing repo token for release actor guard fallback." >&2
Expand All @@ -81,7 +98,8 @@ runs:
exit 1
fi

endpoint="https://api.github.com/repos/${REPO}/collaborators/${ACTOR}/permission"
actor_enc="$(jq -nr --arg v "${ACTOR}" '$v|@uri')"
endpoint="https://api.github.com/repos/${REPO}/collaborators/${actor_enc}/permission"
resp_file="$(mktemp)"
status="$(curl -sS \
--connect-timeout 10 \
Expand Down Expand Up @@ -116,7 +134,8 @@ runs:
exit 0
fi

endpoint="https://api.github.com/orgs/${ORG}/teams/${TEAM_SLUG}/memberships/${ACTOR}"
actor_enc="$(jq -nr --arg v "${ACTOR}" '$v|@uri')"
endpoint="https://api.github.com/orgs/${ORG}/teams/${TEAM_SLUG}/memberships/${actor_enc}"
resp_file="$(mktemp)"
status="$(curl -sS \
--connect-timeout 10 \
Expand Down
Loading
Loading