Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 21 additions & 2 deletions .github/workflows/backend-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Backend Release

on:
push:
branches: [master, develop]
branches: [develop]
paths:
- 'apps/backend/**'
- 'packages/shared/**'
Expand All @@ -17,6 +17,21 @@ on:
required: false
type: boolean
default: false
run_release:
description: 'Run release job'
required: false
type: boolean
default: false
workflow_call:
inputs:
skip_tests:
required: false
type: boolean
default: false
run_release:
required: false
type: boolean
default: false

jobs:
test:
Expand Down Expand Up @@ -56,8 +71,11 @@ jobs:
release:
name: Release & Publish
needs: test
if: ${{ github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && (always() && (needs.test.result == 'success' || inputs.skip_tests)) }}
if: ${{ inputs.run_release && github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && (always() && (needs.test.result == 'success' || inputs.skip_tests)) }}
runs-on: ubuntu-latest
concurrency:
group: backend-release-${{ github.ref_name }}
cancel-in-progress: false
permissions:
contents: write
issues: write
Expand All @@ -68,6 +86,7 @@ jobs:
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: master
token: ${{ secrets.GITHUB_TOKEN }}

- name: Setup pnpm
Expand Down
34 changes: 27 additions & 7 deletions .github/workflows/extension-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Extension Release

on:
push:
branches: [master, develop]
branches: [develop]
paths:
- 'apps/extension/**'
- 'packages/shared/**'
Expand All @@ -17,17 +17,29 @@ on:
required: false
type: boolean
default: false

permissions:
contents: write
issues: write
pull-requests: write
run_release:
description: 'Run release job'
required: false
type: boolean
default: false
workflow_call:
inputs:
skip_tests:
required: false
type: boolean
default: false
run_release:
required: false
type: boolean
default: false

jobs:
test:
name: Test & Build
runs-on: ubuntu-latest
if: ${{ !inputs.skip_tests }}
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@v4
Expand Down Expand Up @@ -65,13 +77,21 @@ jobs:
release:
name: Release
needs: test
if: ${{ github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && (always() && (needs.test.result == 'success' || inputs.skip_tests)) }}
if: ${{ inputs.run_release && github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && (always() && (needs.test.result == 'success' || inputs.skip_tests)) }}
runs-on: ubuntu-latest
concurrency:
group: extension-release-${{ github.ref_name }}
cancel-in-progress: false
permissions:
contents: write
issues: write
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: master
token: ${{ secrets.GITHUB_TOKEN }}

- name: Setup pnpm
Expand Down
112 changes: 112 additions & 0 deletions .github/workflows/release-orchestrator.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
name: Release Orchestrator

on:
push:
branches: [master]
paths:
- 'apps/backend/**'
- 'apps/extension/**'
- 'packages/shared/**'
workflow_dispatch:
inputs:
release_backend:
description: 'Run backend release'
required: false
type: boolean
default: false
release_extension:
description: 'Run extension release'
required: false
type: boolean
default: false
skip_tests:
description: 'Skip tests (for emergency releases)'
required: false
type: boolean
default: false

concurrency:
group: release-orchestrator-${{ github.ref_name }}
cancel-in-progress: false

permissions:
contents: read

jobs:
detect_changes:
name: Detect release scope
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
outputs:
backend: ${{ steps.decide.outputs.backend }}
extension: ${{ steps.decide.outputs.extension }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Detect changed paths
id: filter
if: ${{ github.event_name == 'push' }}
uses: dorny/paths-filter@v3
with:
filters: |
backend:
- 'apps/backend/**'
extension:
- 'apps/extension/**'
shared:
- 'packages/shared/**'

- name: Decide release targets
id: decide
env:
EVENT_NAME: ${{ github.event_name }}
MANUAL_BACKEND: ${{ inputs.release_backend }}
MANUAL_EXTENSION: ${{ inputs.release_extension }}
FILTER_BACKEND: ${{ steps.filter.outputs.backend }}
FILTER_EXTENSION: ${{ steps.filter.outputs.extension }}
FILTER_SHARED: ${{ steps.filter.outputs.shared }}
run: |
if [ "$EVENT_NAME" = "workflow_dispatch" ]; then
echo "backend=${MANUAL_BACKEND:-false}" >> "$GITHUB_OUTPUT"
echo "extension=${MANUAL_EXTENSION:-false}" >> "$GITHUB_OUTPUT"
exit 0
fi

if [ "$FILTER_BACKEND" = "true" ] || [ "$FILTER_SHARED" = "true" ]; then
echo "backend=true" >> "$GITHUB_OUTPUT"
else
echo "backend=false" >> "$GITHUB_OUTPUT"
fi

if [ "$FILTER_EXTENSION" = "true" ] || [ "$FILTER_SHARED" = "true" ]; then
echo "extension=true" >> "$GITHUB_OUTPUT"
else
echo "extension=false" >> "$GITHUB_OUTPUT"
fi

backend_release:
name: Backend release
needs: detect_changes
if: ${{ needs.detect_changes.outputs.backend == 'true' }}
uses: ./.github/workflows/backend-release.yml
with:
skip_tests: ${{ github.event_name == 'workflow_dispatch' && inputs.skip_tests || false }}
run_release: true
secrets: inherit

extension_release:
name: Extension release
needs:
- detect_changes
- backend_release
if: ${{ always() && needs.detect_changes.outputs.extension == 'true' && (needs.backend_release.result == 'success' || needs.backend_release.result == 'skipped') }}
uses: ./.github/workflows/extension-release.yml
with:
skip_tests: ${{ github.event_name == 'workflow_dispatch' && inputs.skip_tests || false }}
run_release: true
secrets: inherit
15 changes: 12 additions & 3 deletions apps/website/src/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ const geistMono = Geist_Mono({
});

const DEFAULT_BASE_URL = 'https://devmentorai.edwardiaz.dev';
const SITE_TITLE = 'DevMentorAI — AI Mentor for Your Entire Browser';
const SITE_TITLE = 'DevMentorAI — Your Browser Companion for GitHub Copilot';
const SITE_DESCRIPTION =
'Context-aware AI assistance powered by GitHub Copilot. DevOps mentoring, writing help, and debugging — directly in your browser.';
'Bring GitHub Copilot-style help into your browser workflow with a context-aware assistant for web pages, cloud dashboards, debugging, and writing.';

async function getRequestBaseUrl() {
const requestHeaders = await headers();
Expand Down Expand Up @@ -47,6 +47,15 @@ export async function generateMetadata(): Promise<Metadata> {
},
description: SITE_DESCRIPTION,
metadataBase: new URL(baseUrl),
keywords: [
'GitHub Copilot browser extension',
'browser companion for GitHub Copilot',
'Copilot in your browser',
'AI browser assistant',
'browser extension for developers',
'DevOps browser assistant',
'context-aware browser AI',
],
openGraph: {
title: SITE_TITLE,
description: SITE_DESCRIPTION,
Expand All @@ -59,7 +68,7 @@ export async function generateMetadata(): Promise<Metadata> {
url: socialImageUrl,
width: 1200,
height: 630,
alt: 'DevMentorAI — Context-Aware AI Browser Mentor',
alt: 'DevMentorAI — Browser companion for GitHub Copilot workflows',
},
],
},
Expand Down
8 changes: 4 additions & 4 deletions apps/website/src/app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ import type { Metadata } from 'next';
import Link from 'next/link';

export const metadata: Metadata = {
title: 'DevMentorAI — AI Mentor for Your Entire Browser',
title: 'DevMentorAI — Copilot in Your Browser for Real Web Work',
description:
'Watch the DevMentorAI demo and learn how to install, connect, and use context-aware AI assistance in your browser with GitHub Copilot.',
'See how DevMentorAI brings GitHub Copilot-style help into your browser for cloud dashboards, documentation, debugging, and real web workflows.',
};

export default function Home() {
Expand Down Expand Up @@ -45,10 +45,10 @@ export default function Home() {
badge={<PulseBadge>Powered by GitHub Copilot</PulseBadge>}
title={
<>
The AI Mentor for your <span className="text-primary">entire browser</span>
Copilot for your <span className="text-primary">browser workflow</span>
</>
}
subtitle="Context-aware assistance powered by GitHub Copilot. Understand any web page, error, or cloud dashboard instantly."
subtitle="Bring GitHub Copilot-style help into the pages you already use. Understand web apps, cloud dashboards, docs, and errors without leaving your browser."
actions={
<>
<Link
Expand Down
36 changes: 36 additions & 0 deletions apps/website/src/lib/changelog-data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,24 @@ export interface ChangelogEntry {

export const CHANGELOG_DATA: Record<ChangelogTrack, ChangelogEntry[]> = {
extension: [
{
track: 'extension',
version: '1.6.0',
tag: 'ext-v1.6.0',
releasedAt: '2026-04-13',
headline: 'You can now fine-tune Copilot responses from the browser',
summary:
'This release makes the extension feel much more flexible and polished by adding easier model controls, optional reasoning depth, and a long list of stability improvements.',
highlights: [
'A new model switch flow makes it easier to change how the assistant responds without leaving the browser workflow.',
'Supported models can now use reasoning effort controls, so you can choose between faster answers and deeper thinking.',
'The extension became more reliable overall thanks to fixes across hooks, components, utilities, and entry points.',
],
fixes: [
'Accessibility, build-output, and type-safety fixes made everyday use feel more stable and predictable.',
],
releaseUrl: 'https://github.com/BOTOOM/devmentorai/releases/tag/ext-v1.6.0',
},
{
track: 'extension',
version: '1.5.0',
Expand Down Expand Up @@ -90,6 +108,24 @@ export const CHANGELOG_DATA: Record<ChangelogTrack, ChangelogEntry[]> = {
},
],
backend: [
{
track: 'backend',
version: '1.6.0',
tag: 'backend-v1.6.0',
releasedAt: '2026-04-13',
headline: 'Smarter sessions and better backend reliability',
summary:
'This backend release helps the browser assistant stay more dependable while adding better support for model changes and reasoning-aware Copilot sessions.',
highlights: [
'Session handling was improved so model switches and reasoning settings behave more smoothly behind the scenes.',
'Compatibility work keeps the backend aligned with newer GitHub Copilot protocol and runtime expectations.',
'CLI and service updates make the local engine that powers the browser experience more stable day to day.',
],
fixes: [
'Node and SDK compatibility improvements reduced setup friction and made local startup more dependable.',
],
releaseUrl: 'https://github.com/BOTOOM/devmentorai/releases/tag/backend-v1.6.0',
},
{
track: 'backend',
version: '1.5.0',
Expand Down
8 changes: 4 additions & 4 deletions apps/website/src/og-templates/opengraph-image.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export const size = {
};

export const contentType = 'image/png';
export const alt = 'DevMentorAI — Context-Aware AI Browser Mentor';
export const alt = 'DevMentorAI — Browser companion for GitHub Copilot workflows';

export default function OpenGraphImage() {
return new ImageResponse(
Expand Down Expand Up @@ -51,10 +51,10 @@ export default function OpenGraphImage() {

<div style={{ display: 'flex', flexDirection: 'column', gap: '16px', maxWidth: '950px' }}>
<div style={{ fontSize: '64px', fontWeight: 800, lineHeight: 1.05 }}>
Context-Aware AI Browser Mentor
Copilot for your browser workflow
</div>
<div style={{ fontSize: '34px', color: '#c4b5fd', fontWeight: 600 }}>
Powered by GitHub Copilot CLI and Copilot SDK
A browser companion built for GitHub Copilot-powered work
</div>
</div>

Expand All @@ -66,7 +66,7 @@ export default function OpenGraphImage() {
color: '#cbd5e1',
}}
>
<span>Understand pages, logs, and cloud dashboards instantly</span>
<span>Understand pages, docs, errors, and cloud dashboards faster</span>
<span>devmentorai.edwardiaz.dev</span>
</div>
</div>,
Expand Down
Loading