Compare commits

...

8 Commits

Author SHA1 Message Date
b6337b33ba Merge pull request 'fix: #6 - Доработай' (#7) from ai/issue-6 into main
All checks were successful
Bun CI/CD / test (push) Successful in 11s
Bun CI/CD / deploy-staging (push) Has been skipped
Bun CI/CD / deploy-prod (push) Successful in 1s
Reviewed-on: #7
2026-01-03 19:13:00 +00:00
AI Agent
3ddd5ded1e fix: resolve #6 - Доработай
All checks were successful
Bun CI/CD / test (pull_request) Successful in 10s
Bun CI/CD / deploy-staging (pull_request) Has been skipped
Bun CI/CD / deploy-prod (pull_request) Has been skipped
2026-01-03 19:00:13 +00:00
51a80ccb6f fix
All checks were successful
Bun CI/CD / test (push) Successful in 9s
Bun CI/CD / deploy-staging (push) Has been skipped
Bun CI/CD / deploy-prod (push) Successful in 1s
2026-01-03 21:15:45 +03:00
ef0a082d18 message
All checks were successful
Bun CI/CD / test (push) Successful in 9s
Bun CI/CD / deploy-staging (push) Has been skipped
Bun CI/CD / deploy-prod (push) Successful in 1s
2026-01-03 21:12:18 +03:00
e343d27001 chore: another shot
All checks were successful
Bun CI/CD / test (push) Successful in 8s
Bun CI/CD / deploy-staging (push) Has been skipped
Bun CI/CD / deploy-prod (push) Successful in 1s
2026-01-03 21:07:07 +03:00
4912f9a9b1 chore: deepsek ftw
All checks were successful
Bun CI/CD / test (push) Successful in 9s
Bun CI/CD / deploy-staging (push) Has been skipped
Bun CI/CD / deploy-prod (push) Successful in 1s
2026-01-03 21:05:54 +03:00
d47522543d chore: fix solver
All checks were successful
Bun CI/CD / test (push) Successful in 8s
Bun CI/CD / deploy-staging (push) Has been skipped
Bun CI/CD / deploy-prod (push) Successful in 1s
2026-01-03 21:03:27 +03:00
dff87b6c7a chore: update solver
All checks were successful
Bun CI/CD / test (push) Successful in 18s
Bun CI/CD / deploy-staging (push) Has been skipped
Bun CI/CD / deploy-prod (push) Successful in 0s
2026-01-03 20:58:20 +03:00
5 changed files with 6311 additions and 76 deletions

View File

@@ -2,19 +2,106 @@
name: AI Issue Solver
on:
# Ручной запуск
workflow_dispatch:
inputs:
issue_number:
description: 'Issue number to solve'
required: true
type: number
# Автоматический запуск по метке
issues:
types: [labeled]
jobs:
solve:
if: github.event.label.name == 'ai-solve'
# Запускать при ручном триггере ИЛИ при добавлении метки ai-solve
if: |
(gitea.event_name == 'workflow_dispatch') ||
(gitea.event_name == 'issues' && contains(gitea.event.labels.*.name, 'ai-solve'))
runs-on: opencode
steps:
- name: Debug environment
run: |
echo "=== Debug Info ==="
echo "Gitea context:"
echo "event_name: ${{ gitea.event_name }}"
echo "repository: ${{ gitea.repository }}"
echo "repository_owner: ${{ gitea.repository_owner }}"
echo "event.issue: ${{ toJSON(gitea.event.issue) }}"
echo "event.inputs: ${{ toJSON(gitea.event.inputs) }}"
echo "event.labels: ${{ toJSON(gitea.event.labels) }}"
echo "=== End Debug ==="
- name: Setup issue data
id: setup
run: |
echo "Determining issue number based on event type..."
if [[ "${{ gitea.event_name }}" == "workflow_dispatch" ]]; then
# Ручной запуск - берем из inputs
ISSUE_NUMBER="${{ gitea.event.inputs.issue_number }}"
echo "Manual run - Issue number: $ISSUE_NUMBER"
elif [[ "${{ gitea.event_name }}" == "issues" ]]; then
# Автоматический запуск - берем из события issue
ISSUE_NUMBER="${{ gitea.event.issue.number }}"
echo "Auto run - Issue number: $ISSUE_NUMBER"
else
echo "Unknown event type: ${{ gitea.event_name }}"
exit 1
fi
echo "issue_number=$ISSUE_NUMBER" >> $GITHUB_OUTPUT
echo "event_type=${{ gitea.event_name }}" >> $GITHUB_OUTPUT
- name: Checkout repository
uses: actions/checkout@v4
with:
token: ${{ secrets.GGITEA_TOKEN }}
- name: Solve Issue
env:
GITEA_URL: ${{ secrets.GITEA_URL }}
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
REPO_OWNER: ${{ github.repository_owner }}
REPO_NAME: ${{ github.event.repository.name }}
ISSUE_NUMBER: ${{ github.event.issue.number }}
run: solve-issue
GGITEA_URL: ${{ secrets.GGITEA_URL }}
GGITEA_TOKEN: ${{ secrets.GGITEA_TOKEN }}
REPO_OWNER: ${{ gitea.repository_owner }}
REPO_NAME: ${{ gitea.repository }}
ISSUE_NUMBER: ${{ steps.setup.outputs.issue_number }}
EVENT_TYPE: ${{ steps.setup.outputs.event_type }}
run: |
echo "=== Starting AI Issue Solver ==="
echo "Event type: $EVENT_TYPE"
echo "Repository: $REPO_OWNER/$REPO_NAME"
echo "Issue number: $ISSUE_NUMBER"
# Проверяем наличие команды solve-issue
if ! command -v solve-issue >/dev/null 2>&1; then
echo "❌ ERROR: solve-issue command not found in PATH!"
echo "Current PATH: $PATH"
echo "Trying to find solve-issue..."
find / -name "solve-issue" -type f 2>/dev/null | head -5
exit 1
fi
echo "✅ solve-issue found at: $(which solve-issue)"
echo "📋 Command info:"
solve-issue --help || echo "No help available"
echo "🚀 Executing solve-issue..."
# Запускаем с таймаутом на случай зависания
timeout 600 solve-issue
EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]; then
echo "✅ solve-issue completed successfully"
elif [ $EXIT_CODE -eq 124 ]; then
echo "⏰ solve-issue timed out after 10 minutes"
exit 1
else
echo "❌ solve-issue failed with exit code: $EXIT_CODE"
exit $EXIT_CODE
fi
echo "=== AI Issue Solver finished ==="

View File

@@ -1,8 +1,8 @@
@import "tailwindcss";
:root {
--background: #ffffff;
--foreground: #171717;
--background: #0a0a0a;
--foreground: #ededed;
}
@theme inline {
@@ -12,15 +12,17 @@
--font-mono: var(--font-geist-mono);
}
@media (prefers-color-scheme: dark) {
:root {
--background: #0a0a0a;
--foreground: #ededed;
}
}
body {
background: var(--background);
color: var(--foreground);
font-family: Arial, Helvetica, sans-serif;
font-family: var(--font-geist-sans), Arial, Helvetica, sans-serif;
}
@keyframes float {
0%, 100% { transform: translateY(0px); }
50% { transform: translateY(-10px); }
}
.animate-float {
animation: float 3s ease-in-out infinite;
}

View File

@@ -13,8 +13,8 @@ const geistMono = Geist_Mono({
});
export const metadata: Metadata = {
title: "Create Next App",
description: "Generated by create next app",
title: "AI News Hub - Превращаем новости в рабочие мануалы",
description: "Подписка на AI-новости и аналитику для разработчиков. Конвертируем любую новость в протестированный мануал для вас и вашего код-ассистента.",
};
export default function RootLayout({

View File

@@ -1,63 +1,96 @@
import Image from "next/image";
export default function Home() {
return (
<div className="flex min-h-screen items-center justify-center bg-zinc-50 font-sans dark:bg-black">
<main className="flex min-h-screen w-full max-w-3xl flex-col items-center justify-between py-32 px-16 bg-white dark:bg-black sm:items-start">
<Image
className="dark:invert"
src="/next.svg"
alt="Next.js logo"
width={100}
height={20}
priority
/>
<div className="flex flex-col items-center gap-6 text-center sm:items-start sm:text-left">
<h1 className="max-w-xs text-3xl font-semibold leading-10 tracking-tight text-black dark:text-zinc-50">
To get started, edit the page.tsx file.
</h1>
<p className="max-w-md text-lg leading-8 text-zinc-600 dark:text-zinc-400">
Looking for a starting point or more instructions? Head over to{" "}
<a
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
className="font-medium text-zinc-950 dark:text-zinc-50"
>
Templates
</a>{" "}
or the{" "}
<a
href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
className="font-medium text-zinc-950 dark:text-zinc-50"
>
Learning
</a>{" "}
center.
</p>
<div className="min-h-screen bg-gradient-to-br from-slate-900 via-purple-900 to-slate-900">
<nav className="border-b border-white/10 backdrop-blur-sm">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="flex justify-between items-center py-4">
<div className="flex items-center space-x-2">
<div className="w-8 h-8 bg-gradient-to-r from-blue-500 to-purple-600 rounded-lg"></div>
<span className="text-white font-bold text-xl">AI News Hub</span>
</div>
<button className="bg-white text-slate-900 px-6 py-2 rounded-full font-semibold hover:bg-gray-100 transition-colors">
Получить доступ
</button>
</div>
</div>
<div className="flex flex-col gap-4 text-base font-medium sm:flex-row">
<a
className="flex h-12 w-full items-center justify-center gap-2 rounded-full bg-foreground px-5 text-background transition-colors hover:bg-[#383838] dark:hover:bg-[#ccc] md:w-[158px]"
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
<Image
className="dark:invert"
src="/vercel.svg"
alt="Vercel logomark"
width={16}
height={16}
/>
Deploy Now
</a>
<a
className="flex h-12 w-full items-center justify-center rounded-full border border-solid border-black/[.08] px-5 transition-colors hover:border-transparent hover:bg-black/[.04] dark:border-white/[.145] dark:hover:bg-[#1a1a1a] md:w-[158px]"
href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
Documentation
</a>
</nav>
<main className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-20">
<div className="text-center mb-20">
<div className="inline-flex items-center px-4 py-2 bg-purple-500/20 rounded-full text-purple-300 text-sm font-medium mb-6">
🚀 Для разработчиков, которые хотят быть на шаг впереди
</div>
<h1 className="text-5xl md:text-7xl font-bold text-white mb-6 leading-tight">
Превращаем{' '}
<span className="bg-gradient-to-r from-blue-400 to-purple-600 bg-clip-text text-transparent">
новости
</span>{' '}
в рабочие мануалы
</h1>
<p className="text-xl text-gray-300 mb-8 max-w-3xl mx-auto leading-relaxed">
Получайте AI-новости и аналитику, которые сразу можно протестировать.
Не просто читайте погружайтесь в код вместе с вашим AI-ассистентом!
</p>
<div className="flex flex-col sm:flex-row gap-4 justify-center">
<button className="bg-gradient-to-r from-blue-500 to-purple-600 text-white px-8 py-4 rounded-full font-semibold text-lg hover:shadow-2xl hover:shadow-purple-500/25 transition-all">
🎯 Начать бесплатно
</button>
<button className="border border-white/20 text-white px-8 py-4 rounded-full font-semibold text-lg hover:bg-white/10 transition-colors">
📖 Узнать больше
</button>
</div>
</div>
<div className="grid md:grid-cols-3 gap-8 mb-20">
<div className="bg-white/5 backdrop-blur-sm border border-white/10 rounded-2xl p-8 hover:bg-white/10 transition-colors">
<div className="w-12 h-12 bg-blue-500/20 rounded-lg flex items-center justify-center mb-4">
🔄
</div>
<h3 className="text-xl font-semibold text-white mb-3">Конвертация в реальном времени</h3>
<p className="text-gray-400">
Любая новость мгновенно превращается в рабочий мануал с готовым кодом
</p>
</div>
<div className="bg-white/5 backdrop-blur-sm border border-white/10 rounded-2xl p-8 hover:bg-white/10 transition-colors">
<div className="w-12 h-12 bg-purple-500/20 rounded-lg flex items-center justify-center mb-4">
🤖
</div>
<h3 className="text-xl font-semibold text-white mb-3">Тестирование AI-ассистентом</h3>
<p className="text-gray-400">
Ваш код-помощник может сразу протестировать и применить полученные знания
</p>
</div>
<div className="bg-white/5 backdrop-blur-sm border border-white/10 rounded-2xl p-8 hover:bg-white/10 transition-colors">
<div className="w-12 h-12 bg-green-500/20 rounded-lg flex items-center justify-center mb-4">
</div>
<h3 className="text-xl font-semibold text-white mb-3">Утренний ритм</h3>
<p className="text-gray-400">
Зашли с утра не просто почитали, а сразу пощупали новый код!
</p>
</div>
</div>
<div className="text-center bg-gradient-to-r from-blue-500/20 to-purple-500/20 rounded-3xl p-12 border border-white/10">
<h2 className="text-3xl font-bold text-white mb-4">
Готовы изменить подход к новостям?
</h2>
<p className="text-gray-300 mb-8 max-w-2xl mx-auto">
Присоединяйтесь к разработчикам, которые не просто следят за AI-трендами,
а сразу их внедряют
</p>
<div className="flex items-center justify-center space-x-4">
<div className="text-3xl font-bold text-white">999</div>
<div className="text-gray-400">/месяц</div>
</div>
<button className="mt-6 bg-white text-slate-900 px-8 py-3 rounded-full font-semibold hover:bg-gray-100 transition-colors">
Получить 7 дней бесплатно
</button>
</div>
</main>
</div>

6113
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff